#ifndef somobj_DTS_HH_INCLUDED
#define somobj_DTS_HH_INCLUDED
/* Start Class SOMObject */

// This file was generated by the IBM "DirectToSOM" emitter for C++ (V1.69)
// Generated at 08/27/95 07:19:13 EDT
// This is class: SOMObject
// Mangled class name: SOMObject
// SE: May 19/94

#include <somh.hh>

     #pragma SOMAsDefault(on)
class SOMClass;
     #pragma SOMAsDefault(pop)
     #pragma SOMAsDefault(on)
class SOMObject;
     #pragma SOMAsDefault(pop)
     #pragma SOMNonDTS(on)
#pragma SOMAsDefault(on)
class 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.
	#pragma SOMClassName(*, "SOMObject")
	#pragma SOMNoMangling(*)
	#pragma SOMNoDataDirect(*)
	#pragma SOMNonDTS(*)

     #pragma SOMClassVersion (SOMObject, 1, 4)
     #pragma SOMCallstyle (oidl)
     #pragma SOMAsDefault(off)
  public :
     typedef struct {
        unsigned long _maximum;
	unsigned long _length;
	SOMObject **_buffer;
     } _IDL_SEQUENCE_SOMObject;
     typedef /* seq<         0> */ _IDL_SEQUENCE_SOMObject SOMObjectSequence;
     typedef struct {
        unsigned long _maximum;
	unsigned long _length;
	octet *_buffer;
     } _IDL_SEQUENCE_octet;
     typedef /* seq<         0> */ _IDL_SEQUENCE_octet BooleanSequence;
     typedef struct somObjectOffset {
	      SOMObject* obj;
	      long offset;
     } somObjectOffset;
     typedef struct {
        unsigned long _maximum;
	unsigned long _length;
	somObjectOffset *_buffer;
     } _IDL_SEQUENCE_somObjectOffset;
     typedef /* seq<         0> */ _IDL_SEQUENCE_somObjectOffset somObjectOffsets;
     #pragma SOMAsDefault(pop)

     SOMObject();
     SOMObject(SOMObject&);
     SOMObject(const SOMObject&);
     SOMObject(volatile SOMObject&);
     SOMObject(const volatile SOMObject&);
     virtual ~SOMObject();

#ifdef __EXTENDED__SOM__ASSIGNMENTS__
     virtual SOMObject & somAssign(SOMObject& fromObj);
     virtual SOMObject & somAssign(const SOMObject& fromObj);
     virtual SOMObject & somAssign(volatile SOMObject& fromObj);
     virtual SOMObject & somAssign(const volatile SOMObject& fromObj);
#else
     virtual SOMObject * somDefaultAssign(somAssignCtrl * ctrl, SOMObject * fromObj);
     virtual SOMObject * somDefaultConstAssign(somAssignCtrl * ctrl, const SOMObject * fromObj);
     virtual SOMObject * somDefaultVAssign(somAssignCtrl * ctrl, volatile SOMObject * fromObj);
     virtual SOMObject * somDefaultConstVAssign(somAssignCtrl * ctrl, const volatile SOMObject * fromObj);
#endif

     
     // Obsolete but still supported. Override somDefaultInit instead of somInit.
     virtual void somInit();
     
     // Obsolete but still supported. Use somDestruct with a nonzero
     // <doFree> instead.
     virtual void somFree();
     
     // Obsolete but still supported. Override somDestruct instead of somUninit.
     virtual void somUninit();
     
     // Return the receiver's class.
     virtual SOMClass* somGetClass();
     
     // Return the name of the receiver's class.
     virtual string somGetClassName();
     
     // Return the size of the receiver.
     virtual long somGetSize();
     
     // Returns 1 (true) if the receiver responds to methods
     // introduced by <aClassObj>, and 0 (false) otherwise.
     virtual boolean somIsA(SOMClass* aClassObj);
     
     // Returns 1 (true) if the receiver is an instance of
     // <aClassObj> and 0 (false) otherwise.
     virtual boolean somIsInstanceOf(SOMClass* aClassObj);
     
     // Returns 1 (true) if the indicated method can be invoked
     // on the receiver and 0 (false) otherwise.
     virtual boolean somRespondsTo(somId mId);
     
     // 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.
     virtual boolean somDispatch(somToken* retValue, somId methodId, 
                                 va_list ap);
     
     // Like somDispatch, but method resolution for static methods is done
     // according to the clsObj instance method table.
     virtual boolean somClassDispatch(SOMClass* clsObj, somToken* retValue, 
                                      somId methodId, va_list ap);
     
     // cast the receiving object to cls (which must be an ancestor of the
     // objects true class. Returns true on success.
     virtual boolean somCastObj(SOMClass* cls);
     
     // reset an object to its true class. Returns true always.
     virtual boolean somResetObj();
     
     // 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.
     virtual SOMObject* somPrintSelf();
     
     // 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.
     virtual void somDumpSelf(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.
     virtual void somDumpSelfInt(long level);
     #pragma SOMReleaseOrder ( \
			      "somInit", \
			      "somUninit", \
			      "somFree", \
			      SOMObject(volatile SOMObject&), \
			      "somGetClassName", \
			      "somGetClass", \
			      "somIsA", \
			      "somRespondsTo", \
			      "somIsInstanceOf", \
			      "somGetSize", \
			      "somDumpSelf", \
			      "somDumpSelfInt", \
			      "somPrintSelf", \
			      SOMObject(const volatile SOMObject&), \
			      *, \
			      *, \
			      *, \
			      *, \
			      "somDispatch", \
			      "somClassDispatch", \
			      "somCastObj", \
			      "somResetObj", \
			      SOMObject(), \
			      SOMObject::~SOMObject(), \
			      *, \
			      *, \
			      SOMObject(SOMObject&), \
			      SOMObject(const SOMObject&), \
			      "somDefaultAssign", \
			      "somDefaultConstAssign", \
			      "somDefaultVAssign", \
			      "somDefaultConstVAssign")
};
#pragma SOMAsDefault(pop)

     #pragma SOMNonDTS(pop)
/* End SOMObject */
#endif /* somobj_DTS_HH_INCLUDED */
