Jump to content

SOMObject: Difference between revisions

From EDM2
Prokushev (talk | contribs)
m SOMObject moved to OS2 API:SOMObject
Prokushev (talk | contribs)
Some links added
Line 9: Line 9:
   //### Typedefs
   //### Typedefs


   typedef sequence <SOMObject> SOMObjectSequence;
   typedef sequence <[[OS2 API:SOMObject|SOMObject]]> SOMObjectSequence;
   // a sequence of SOM Objects
   // a sequence of SOM Objects


Line 16: Line 16:


   struct somObjectOffset {
   struct somObjectOffset {
     SOMObject obj;
     [[OS2 API:SOMObject|SOMObject]] obj;
     long    offset;
     long    offset;
   };
   };
Line 26: Line 26:
   //###  Initialization / Termination
   //###  Initialization / Termination


   void somDefaultInit(in som3InitCtrl *ctrl);
   void [[OS2 API:somDefaultInit|somDefaultInit]](in som3InitCtrl *ctrl);
   // A default initializer for a SOM object. Passing a null ctrl
   // A default initializer for a SOM object. Passing a null ctrl
   // indicates to the receiver that its class is the class of the
   // indicates to the receiver that its class is the class of the
Line 32: Line 32:
   // an appropriate control structure.
   // an appropriate control structure.


   void somDestruct(in octet doFree, in som3DestructCtrl *ctrl);
   void [[OS2 API:somDestruct|somDestruct]](in octet doFree, in som3DestructCtrl *ctrl);
   // The default destructor for a SOM object. A nonzero <doFree>
   // The default destructor for a SOM object. A nonzero <doFree>
   // indicates that the object storage should be freed by the
   // indicates that the object storage should be freed by the
Line 38: Line 38:
   // As with somDefaultInit, a null ctrl can be passed.
   // As with somDefaultInit, a null ctrl can be passed.


   void somDefaultCopyInit(in som3InitCtrl *ctrl, in SOMObject fromObj);
   void [[OS2 API:somDefaultCopyInit|somDefaultCopyInit]](in som3InitCtrl *ctrl, in [[OS2 API:SOMObject|SOMObject]] fromObj);
   // A default copy constructor. Use this to make copies of objects for
   // A default copy constructor. Use this to make copies of objects for
   // calling methods with "by-value" argument semantics.
   // calling methods with "by-value" argument semantics.


   SOMObject somDefaultAssign(in som3AssignCtrl *ctrl, in SOMObject fromObj);
   [[OS2 API:SOMObject|SOMObject]] [[OS2 API:somDefaultAssign|somDefaultAssign]](in som3AssignCtrl *ctrl, in [[OS2 API:SOMObject|SOMObject]] fromObj);
   // A default assignment operator. Use this to "assign" the state of one
   // A default assignment operator. Use this to "assign" the state of one
   // object to another.
   // object to another.
Line 48: Line 48:
   //### etc.
   //### etc.


   void somDefaultConstCopyInit(in som3InitCtrl *ctrl, in SOMObject fromObj);
   void [[OS2 API:somDefaultConstCopyInit|somDefaultConstCopyInit]](in som3InitCtrl *ctrl, in [[OS2 API:SOMObject|SOMObject]] fromObj);
   // A default copy constructor that uses a const fromObj.
   // A default copy constructor that uses a const fromObj.


   void somDefaultVCopyInit(in som3InitCtrl *ctrl, in SOMObject fromObj);
   void [[OS2 API:somDefaultVCopyInit|somDefaultVCopyInit]](in som3InitCtrl *ctrl, in [[OS2 API:SOMObject|SOMObject]] fromObj);
   // A default copy constructor that uses a volatile fromObj.
   // A default copy constructor that uses a volatile fromObj.


   void somDefaultConstVCopyInit(in som3InitCtrl *ctrl, in SOMObject fromObj);
   void [[OS2 API:somDefaultConstVCopyInit|somDefaultConstVCopyInit]](in som3InitCtrl *ctrl, in [[OS2 API:SOMObject|SOMObject]] fromObj);
   // A default copy constructor that uses a const volatile fromObj.
   // A default copy constructor that uses a const volatile fromObj.


   SOMObject somDefaultConstAssign(in som3AssignCtrl *ctrl,
   [[OS2 API:SOMObject|SOMObject [[OS2 API:somDefaultConstAssign|somDefaultConstAssign]](in som3AssignCtrl *ctrl,
                                   in SOMObject fromObj);
                                   in [[OS2 API:SOMObject|SOMObject]] fromObj);
   // A default assignment operator that uses a const fromObj.
   // A default assignment operator that uses a const fromObj.


   SOMObject somDefaultVAssign(in som3AssignCtrl *ctrl, in SOMObject fromObj);
   [[OS2 API:SOMObject|SOMObject]] [[OS2 API:somDefaultVAssign|somDefaultVAssign]](in som3AssignCtrl *ctrl, in [[OS2 API:SOMObject|SOMObject]] fromObj);
   // A default assignment operator that uses a volatile fromObj.
   // A default assignment operator that uses a volatile fromObj.


   SOMObject somDefaultConstVAssign(in som3AssignCtrl *ctrl,
   [[OS2 API:SOMObject|SOMObject]] [[OS2 API:somDefaultConstVAssign|somDefaultConstVAssign]](in som3AssignCtrl *ctrl,
                                   in SOMObject fromObj);
                                   in [[OS2 API:SOMObject|SOMObject]] fromObj);
   // A default assignment operator that uses a const volatile fromObj.
   // A default assignment operator that uses a const volatile fromObj.


   void somInit();
   void [[OS2 API:somInit|somInit]]();
   // Obsolete but still supported. Override somDefaultInit instead of somInit.
   // Obsolete but still supported. Override somDefaultInit instead of somInit.


   void somFree();
   void [[OS2 API:somFree|somFree]]();
   // Use as directed by framework implementations.
   // Use as directed by framework implementations.


   void somUninit();
   void [[OS2 API:somUninit|somUninit]]();
   // Obsolete but still supported. Override somDestruct instead of somUninit.
   // Obsolete but still supported. Override somDestruct instead of somUninit.


   //### Access
   //### Access


   SOMClass somGetClass();
   [[OS2 API:SOMClass|SOMClass]] [[OS2 API:somGetClass|somGetClass]]();
   // Return the receiver's class.
   // Return the receiver's class.


   string somGetClassName();
   string [[OS2 API:somGetClassName();
   // Return the name of the receiver's class.
   // Return the name of the receiver's class.


   long somGetSize();
   long [[OS2 API:somGetSize();
   // Return the size of the receiver.
   // Return the size of the receiver.


   //### Testing Group
   //### Testing Group


   boolean somIsA(in SOMClass aClassObj);
   boolean [[OS2 API:somIsA(in [[OS2 API:SOMClass aClassObj);
   // Returns 1 (true) if the receiver responds to methods
   // Returns 1 (true) if the receiver responds to methods
   // introduced by <aClassObj>, and 0 (false) otherwise.
   // introduced by <aClassObj>, and 0 (false) otherwise.


   boolean somIsInstanceOf(in SOMClass aClassObj);
   boolean [[OS2 API:somIsInstanceOf(in [[OS2 API:SOMClass aClassObj);
   // Returns 1 (true) if the receiver is an instance of
   // Returns 1 (true) if the receiver is an instance of
   // <aClassObj> and 0 (false) otherwise.
   // <aClassObj> and 0 (false) otherwise.


   boolean somRespondsTo(in somId mId);
   boolean [[OS2 API:somRespondsTo(in somId mId);
   // Returns 1 (true) if the indicated method can be invoked
   // Returns 1 (true) if the indicated method can be invoked
   // on the receiver and 0 (false) otherwise.
   // on the receiver and 0 (false) otherwise.
Line 104: Line 104:
   //### Dynamic
   //### Dynamic


   boolean somDispatch(out somToken retValue,
   boolean [[OS2 API:somDispatch(out somToken retValue,
                   in somId methodId,
                   in somId methodId,
                   in va_list ap);
                   in va_list ap);
Line 113: Line 113:
   // on which the method is to be invoked as the first argument.
   // on which the method is to be invoked as the first argument.


   boolean somClassDispatch(in SOMClass clsObj,
   boolean [[OS2 API:somClassDispatch(in SOMClass clsObj,
                         out somToken retValue,
                         out somToken retValue,
                         in somId methodId,
                         in somId methodId,
Line 121: Line 121:




   boolean somCastObj(in SOMClass cls);
   boolean [[OS2 API:somCastObj(in [[OS2 API:SOMClass cls);
   // cast the receiving object to cls (which must be an ancestor of the
   // cast the receiving object to cls (which must be an ancestor of the
   // objects true class. Returns true on success.
   // objects true class. Returns true on success.


   boolean somResetObj();
   boolean [[OS2 API:somResetObj();
   // reset an object to its true class. Returns true always.
   // reset an object to its true class. Returns true always.




   void somDispatchV(in somId methodId,
   void [[OS2 API:somDispatchV(in somId methodId,
                     in somId descriptor,
                     in somId descriptor,
                     in va_list ap);
                     in va_list ap);
   // Obsolete. Use somDispatch instead.
   // Obsolete. Use somDispatch instead.


   long somDispatchL(in somId methodId,
   long [[OS2 API:somDispatchL(in somId methodId,
                     in somId descriptor,
                     in somId descriptor,
                     in va_list ap);
                     in va_list ap);
   // Obsolete. Use somDispatch instead.
   // Obsolete. Use somDispatch instead.


   void* somDispatchA(in somId methodId,
   void* [[OS2 API:somDispatchA(in somId methodId,
                     in somId descriptor,
                     in somId descriptor,
                     in va_list ap);
                     in va_list ap);
   // Obsolete. Use somDispatch instead.
   // Obsolete. Use somDispatch instead.


   double somDispatchD(in somId methodId,
   double [[OS2 API:somDispatchD(in somId methodId,
                       in somId descriptor,
                       in somId descriptor,
                       in va_list ap);
                       in va_list ap);
Line 151: Line 151:
   //### Development Support
   //### Development Support


   SOMObject somPrintSelf();
   [[OS2 API:SOMObject [[OS2 API:somPrintSelf();
   // Uses <SOMOutCharRoutine> to write a brief string with identifying
   // Uses <SOMOutCharRoutine> to write a brief string with identifying
   // information about this object.  The default implementation just gives
   // information about this object.  The default implementation just gives
Line 157: Line 157:
   // <self> is returned.
   // <self> is returned.


   void somDumpSelf(in long level);
   void [[OS2 API:somDumpSelf(in long level);
   // Uses <SOMOutCharRoutine> to write a detailed description of this object
   // Uses <SOMOutCharRoutine> to write a detailed description of this object
   // and its current state.
   // and its current state.
Line 173: Line 173:
   // overriden it generally must be completely replaced.
   // overriden it generally must be completely replaced.


   void somDumpSelfInt(in long level);
   void [[OS2 API:somDumpSelfInt(in long level);
   // Uses <SOMOutCharRoutine> to write in the current state of this object.
   // Uses <SOMOutCharRoutine> to write in the current state of this object.
   // Generally this method will need to be overridden.  When overriding
   // Generally this method will need to be overridden.  When overriding

Revision as of 05:02, 18 May 2006

interface SOMObject
// This is the SOM root class, all SOM classes must be descended from
// <SOMObject>. <SOMObject> has no instance data so there is no
// per-instance cost to to being descended from it.

{

  //### Typedefs

  typedef sequence <[[OS2 API:SOMObject|SOMObject]]> SOMObjectSequence;
  // a sequence of SOM Objects

  typedef sequence <octet> BooleanSequence;
  // a sequence of booleans.

  struct somObjectOffset {
     [[OS2 API:SOMObject|SOMObject]] obj;
     long     offset;
  };
  // a structure to describe an object-related offset
  typedef sequence <somObjectOffset> somObjectOffsets;
  // a sequence of object-related offsets


  //###  Initialization / Termination

  void [[OS2 API:somDefaultInit|somDefaultInit]](in som3InitCtrl *ctrl);
  // A default initializer for a SOM object. Passing a null ctrl
  // indicates to the receiver that its class is the class of the
  // object being initialized, whereby the initializer will determine
  // an appropriate control structure.

  void [[OS2 API:somDestruct|somDestruct]](in octet doFree, in som3DestructCtrl *ctrl);
  // The default destructor for a SOM object. A nonzero <doFree>
  // indicates that the object storage should be freed by the
  // object's class (via somDeallocate) after uninitialization.
  // As with somDefaultInit, a null ctrl can be passed.

  void [[OS2 API:somDefaultCopyInit|somDefaultCopyInit]](in som3InitCtrl *ctrl, in [[OS2 API:SOMObject|SOMObject]] fromObj);
  // A default copy constructor. Use this to make copies of objects for
  // calling methods with "by-value" argument semantics.

  [[OS2 API:SOMObject|SOMObject]] [[OS2 API:somDefaultAssign|somDefaultAssign]](in som3AssignCtrl *ctrl, in [[OS2 API:SOMObject|SOMObject]] fromObj);
  // A default assignment operator. Use this to "assign" the state of one
  // object to another.

  //### etc.

  void [[OS2 API:somDefaultConstCopyInit|somDefaultConstCopyInit]](in som3InitCtrl *ctrl, in [[OS2 API:SOMObject|SOMObject]] fromObj);
  // A default copy constructor that uses a const fromObj.

  void [[OS2 API:somDefaultVCopyInit|somDefaultVCopyInit]](in som3InitCtrl *ctrl, in [[OS2 API:SOMObject|SOMObject]] fromObj);
  // A default copy constructor that uses a volatile fromObj.

  void [[OS2 API:somDefaultConstVCopyInit|somDefaultConstVCopyInit]](in som3InitCtrl *ctrl, in [[OS2 API:SOMObject|SOMObject]] fromObj);
  // A default copy constructor that uses a const volatile fromObj.

  [[OS2 API:SOMObject|SOMObject [[OS2 API:somDefaultConstAssign|somDefaultConstAssign]](in som3AssignCtrl *ctrl,
                                  in [[OS2 API:SOMObject|SOMObject]] fromObj);
  // A default assignment operator that uses a const fromObj.

  [[OS2 API:SOMObject|SOMObject]] [[OS2 API:somDefaultVAssign|somDefaultVAssign]](in som3AssignCtrl *ctrl, in [[OS2 API:SOMObject|SOMObject]] fromObj);
  // A default assignment operator that uses a volatile fromObj.

  [[OS2 API:SOMObject|SOMObject]] [[OS2 API:somDefaultConstVAssign|somDefaultConstVAssign]](in som3AssignCtrl *ctrl,
                                   in [[OS2 API:SOMObject|SOMObject]] fromObj);
  // A default assignment operator that uses a const volatile fromObj.

  void [[OS2 API:somInit|somInit]]();
  // Obsolete but still supported. Override somDefaultInit instead of somInit.

  void [[OS2 API:somFree|somFree]]();
  // Use as directed by framework implementations.

  void [[OS2 API:somUninit|somUninit]]();
  // Obsolete but still supported. Override somDestruct instead of somUninit.

  //### Access

  [[OS2 API:SOMClass|SOMClass]] [[OS2 API:somGetClass|somGetClass]]();
  // Return the receiver's class.

  string [[OS2 API:somGetClassName();
  // Return the name of the receiver's class.

  long [[OS2 API:somGetSize();
  // Return the size of the receiver.

  //### Testing Group

  boolean [[OS2 API:somIsA(in [[OS2 API:SOMClass aClassObj);
  // Returns 1 (true) if the receiver responds to methods
  // introduced by <aClassObj>, and 0 (false) otherwise.

  boolean [[OS2 API:somIsInstanceOf(in [[OS2 API:SOMClass aClassObj);
  // Returns 1 (true) if the receiver is an instance of
  // <aClassObj> and 0 (false) otherwise.

  boolean [[OS2 API:somRespondsTo(in somId mId);
  // Returns 1 (true) if the indicated method can be invoked
  // on the receiver and 0 (false) otherwise.

  //### Dynamic

  boolean [[OS2 API:somDispatch(out somToken retValue,
                   in somId methodId,
                   in va_list ap);
  // This method provides a generic, class-specific dispatch mechanism.
  // It accepts as input <retValue> a pointer to the memory area to be
  // loaded with the result of dispatching the method indicated by
  // <methodId> using the arguments in <ap>. <ap> contains the object
  // on which the method is to be invoked as the first argument.

  boolean [[OS2 API:somClassDispatch(in SOMClass clsObj,
                        out somToken retValue,
                        in somId methodId,
                        in va_list ap);
  // Like somDispatch, but method resolution for static methods is done
  // according to the clsObj instance method table.


  boolean [[OS2 API:somCastObj(in [[OS2 API:SOMClass cls);
  // cast the receiving object to cls (which must be an ancestor of the
  // objects true class. Returns true on success.

  boolean [[OS2 API:somResetObj();
  // reset an object to its true class. Returns true always.


  void [[OS2 API:somDispatchV(in somId methodId,
                    in somId descriptor,
                    in va_list ap);
  // Obsolete. Use somDispatch instead.

  long [[OS2 API:somDispatchL(in somId methodId,
                    in somId descriptor,
                    in va_list ap);
  // Obsolete. Use somDispatch instead.

  void* [[OS2 API:somDispatchA(in somId methodId,
                     in somId descriptor,
                     in va_list ap);
  // Obsolete. Use somDispatch instead.

  double [[OS2 API:somDispatchD(in somId methodId,
                      in somId descriptor,
                      in va_list ap);
  // Obsolete. Use somDispatch instead.

  //### Development Support

  [[OS2 API:SOMObject [[OS2 API:somPrintSelf();
  // Uses <SOMOutCharRoutine> to write a brief string with identifying
  // information about this object.  The default implementation just gives
  // the object's class name and its address in memory.
  // <self> is returned.

  void [[OS2 API:somDumpSelf(in long level);
  // Uses <SOMOutCharRoutine> to write a detailed description of this object
  // and its current state.
  //
  // <level> indicates the nesting level for describing compound objects
  // it must be greater than or equal to zero.  All lines in the
  // description will be preceeded by <2*level> spaces.
  //
  // This routine only actually writes the data that concerns the object
  // as a whole, such as class, and uses <somDumpSelfInt> to describe
  // the object's current state.  This approach allows readable
  // descriptions of compound objects to be constructed.
  //
  // Generally it is not necessary to override this method, if it is
  // overriden it generally must be completely replaced.

  void [[OS2 API:somDumpSelfInt(in long level);
  // Uses <SOMOutCharRoutine> to write in the current state of this object.
  // Generally this method will need to be overridden.  When overriding
  // it, begin by calling the parent class form of this method and then
  // write in a description of your class's instance data. This will
  // result in a description of all the object's instance data going
  // from its root ancestor class to its specific class.


#ifdef __SOMIDL__
  implementation {
    releaseorder: somInit,somUninit,somFree,somDefaultVCopyInit,
                  somGetClassName,somGetClass,somIsA,somRespondsTo,
                  somIsInstanceOf,somGetSize,somDumpSelf,somDumpSelfInt,
                  somPrintSelf,somDefaultConstVCopyInit,somDispatchV,
                  somDispatchL,somDispatchA,
                  somDispatchD,somDispatch,somClassDispatch,
                  somCastObj, somResetObj, somDefaultInit, somDestruct,
                  somPrivate1, somPrivate2,
                  somDefaultCopyInit, somDefaultConstCopyInit, somDefaultAssign,
                  somDefaultConstAssign, somDefaultVAssign,
                  somDefaultConstVAssign;


    // Class Modifiers
    callstyle = oidl;
    externalstem = somob;
    majorversion = 1;
#ifndef SOMPCALL
    minorversion = 5; // for som2.5 kernel
#else
    minorversion = 6; // for som2.5 kernel with pcall
#endif
    filestem = somobj;
    dllname = "som.dll";

    // Public Method Modifiers
    somDefaultInit: init;
    somDefaultCopyInit: init;
    somDefaultConstCopyInit: init;
    somDefaultVCopyInit: init;
    somDefaultConstVCopyInit: init;

    somDefaultInit: caller_owns_parameters = "ctrl";
    somDestruct: caller_owns_parameters = "ctrl";
    somDefaultCopyInit: caller_owns_parameters = "ctrl";
    somDefaultAssign: caller_owns_parameters = "ctrl";
    somDefaultConstCopyInit: caller_owns_parameters = "ctrl";
    somDefaultVCopyInit: caller_owns_parameters = "ctrl";
    somDefaultConstVCopyInit: caller_owns_parameters = "ctrl";
    somDefaultConstAssign: caller_owns_parameters = "ctrl";
    somDefaultVAssign: caller_owns_parameters = "ctrl";
    somDefaultConstVAssign: caller_owns_parameters = "ctrl";
    somRespondsTo: caller_owns_parameters = "mId";
    somDispatch: caller_owns_parameters = "methodId, ap";
    somClassDispatch: caller_owns_parameters = "methodId, ap";
    somDispatchV: caller_owns_parameters = "methodId, descriptor, ap";
    somDispatchL: caller_owns_parameters = "methodId, descriptor, ap";
    somDispatchA: caller_owns_parameters = "methodId, descriptor, ap";
    somDispatchD: caller_owns_parameters = "methodId, descriptor, ap";


  };
#endif /* __SOMIDL__ */
};