source: trunk/mediafolder/include/SOMCLS.HH@ 201

Last change on this file since 201 was 51, checked in by gyoung, 2 years ago

hh files that are needed and don't seem to be generated.

  • Property svn:eol-style set to native
File size: 24.2 KB
Line 
1#ifndef _DTS_HH_INCLUDED_somcls
2#define _DTS_HH_INCLUDED_somcls
3/* Start Class SOMClass */
4
5// This file was generated by the IBM "DirectToSOM" emitter for C++ (V1.77)
6// Generated at 05/01/95 01:53:19 EDT
7// This is class: SOMClass
8// Mangled class name: SOMClass
9// SE: May 19/94
10
11#include <som.hh>
12
13 #pragma SOMAsDefault(on)
14class SOMClass;
15 #pragma SOMAsDefault(pop)
16 #pragma SOMAsDefault(on)
17class SOMObject;
18 #pragma SOMAsDefault(pop)
19#include <somobj.hh>
20#pragma SOMNonDTS(on)
21
22#pragma SOMAsDefault(on)
23class SOMClass : public SOMObject {
24
25//
26// This is the SOM metaclass. That is, the instances of this class
27// are class objects. When the SOM environment is created an instance
28// of SOMClass is created and a pointer to it is placed in the external
29// data location (SOMClassClassData.classObject). Bindings provide the
30// macro _SOMClass for this expression. _SOMClass is unique in that it
31// is its own class object. I.e., _SOMClass == _somGetClass(_SOMClass).
32// SOMClass can be subclassed just like any SOM class. The subclasses
33// of SOMClass are new metaclasses and can generate class objects with
34// different implementations than those produced by _SOMClass.
35//
36// An important rule for metaclass programming is that no methods
37// introduced by SOMClass should ever be overridden. While this
38// limits the utility of metaclass programming in SOM, it guarantees
39// that SOM will operate correctly. Special class frameworks may be
40// available from IBM to alleviate this restriction.
41//
42
43 #pragma SOMClassName(*, "SOMClass")
44 #pragma SOMNoMangling(*)
45 #pragma SOMNonDTS(*)
46
47 #pragma SOMClassVersion (SOMClass, 1, 4)
48 #pragma SOMCallstyle (oidl)
49 #pragma SOMAsDefault(off)
50 public :
51 typedef struct {
52 unsigned long _maximum;
53 unsigned long _length;
54 somToken *_buffer;
55 } _IDL_SEQUENCE_somToken;
56 typedef /* seq< 0> */ _IDL_SEQUENCE_somToken somTokenSequence;
57 typedef struct {
58 unsigned long _maximum;
59 unsigned long _length;
60 SOMClass **_buffer;
61 } _IDL_SEQUENCE_SOMClass;
62 typedef /* seq< 0> */ _IDL_SEQUENCE_SOMClass SOMClassSequence;
63
64 // a structure to describe a class-related offset
65 typedef struct somOffsetInfo {
66 SOMClass* cls;
67 long offset;
68 } somOffsetInfo;
69 typedef struct {
70 unsigned long _maximum;
71 unsigned long _length;
72 somOffsetInfo *_buffer;
73 } _IDL_SEQUENCE_somOffsetInfo;
74 typedef /* seq< 0> */ _IDL_SEQUENCE_somOffsetInfo somOffsets;
75 typedef struct {
76 unsigned long _maximum;
77 unsigned long _length;
78 somId *_buffer;
79 } _IDL_SEQUENCE_somId;
80 typedef /* seq< 0> */ _IDL_SEQUENCE_somId somIdSequence;
81 somOffsets somInstanceDataOffsets;
82
83 #pragma SOMAttribute(somInstanceDataOffsets, readonly, virtualaccessors, nodata)
84 #pragma SOMAsDefault(pop)
85
86 // Uses SOMMalloc to allocate storage for a new instance of the
87 // receiving class, and then calls somRenewNoInitNoZero to load the
88 // new object's method table pointer. Then somDefaultInit is called to
89 // initialize the new object. Note: If the instance is a class object,
90 // somInitMIClass must then be invoked to declare parents and
91 // initialize the class's instance method table. Upon failure, NULL
92 // is returned.
93 virtual SOMObject* somNew();
94
95 // Equivalent to somNew except that somDefaultInit is not called.
96 virtual SOMObject* somNewNoInit();
97
98 // Equivalent to somNew except that storage is not allocated.
99 // <obj> is taken as the address of the new object.
100 virtual SOMObject* somRenew(void* obj);
101
102 // Equivalent to somRenew except that somDefaultInit is not called.
103 virtual SOMObject* somRenewNoInit(void* obj);
104
105 // Equivalent to somRenew except that memory is not zeroed out.
106 virtual SOMObject* somRenewNoZero(void* obj);
107
108 // The purpose of this method is to load an object's method table.
109 // The SOM API requires that somRenewNoInitNoZero always be
110 // called when creating a new object whose metaclass is not SOMClass.
111 // This is because metaclasses must be guaranteed that they can use
112 // somRenewNoInitNoZero to track object creation if this is desired.
113 virtual SOMObject* somRenewNoInitNoZero(void* obj);
114
115 string somAllocate(long size);
116
117 // Allocates memory to hold an object and returns a pointer to this memory.
118 // This is a nonstatic method, and cannot be overridden. The default
119 // implementation calls SOMMalloc, but a class designer can specify a
120 // different implementation using the somallocate modifier in IDL. The
121 // allocator takes the same parameters as this method.
122
123 void somDeallocate(string memptr);
124
125 // Zeros out the method table pointer stored in the word pointed to by
126 // memptr, and then deallocates the block of memory pointed to by memptr.
127 // This is a nonstatic method and cannot be overridden. The default
128 // deallocator called is SOMFree, but a class designer can specify a
129 // different deallocator using the somdeallocate modifier in IDL. The
130 // deallocator takes the same parameters as this method.
131
132 // Loads a structure used to control calls to initializers.
133 // Computed when first requested (using the somDirectedInitClasses
134 // attribute) and then cached.
135 virtual somBooleanVector somGetInstanceInitMask(somInitCtrl* ctrl);
136
137 // Loads a structure used to control calls to somDestruct.
138 // Computed at the same time as somInstanceConstructionMask
139 virtual somBooleanVector somGetInstanceDestructionMask(somDestructCtrl* ctrl);
140
141 // Loads a structure used to control calls to assignment ops.
142 // Computed at the same time as somInstanceConstructionMask
143 virtual somBooleanVector somGetInstanceAssignmentMask(somAssignCtrl* ctrl);
144
145 // somInitClass is obsolete, and should no longer be used. The SOM 2.0
146 // kernel provides special handling for redispatch stubs in the case
147 // of SOM 1.0 classes, and use of this method is what tells the kernel
148 // that old-style redispatch stubs will be registered.
149 virtual void somInitClass(string className, SOMClass* parentClass,
150 long dataSize, long maxStaticMethods,
151 long majorVersion, long minorVersion);
152
153 // somInitMIClass implements the second phase of dynamic class creation:
154 // inheritance of interface and possibly implementation (instance
155 // variables) by suitable initialization of <self> (a class object).
156 //
157 // For somInitMIClass, the inherit_vars argument controls whether abstract
158 // or implementation inheritance is used. Inherit_vars is a 32 bit
159 // bit-vector. Implementation is inherited from parent i iff the bit
160 // 1<<i is on, or i>=32.
161 // On a class-by-class basis, for each class ancestor, implementation
162 // inheritance always takes precidence over abstract inheritance. This is
163 // necessary to guarantee that procedures supporting parent method calls
164 // (available on non-abstract parents) are always supported by parent
165 // instance variables.
166 //
167 // <className> is a string containing the class name. A copy is made, so
168 // the string may be freed upon return to the caller if this is desired.
169 //
170 // <parentClasses> is a SOMClassSequence containing pointers to the
171 // parent classes. somInitMIClass makes a copy of this, so it may
172 // be freed upon return to the caller if this is desired.
173 //
174 // <dataSize> is the space needed for the instance variables
175 // introduced by this class.
176 //
177 // <dataAlignment> specifies the desired byte alignment for instance
178 // data introduced by this class. A value of 0 selects a system-wide default;
179 // any other argument is taken as the desired byte alignment multiple. Thus,
180 // for example, even if a byte multiple of 8 is needed for double precision
181 // values on a given system (so 8 is the default), a class whose instance data
182 // doesn't require this can indicate otherwise. If A is the next memory
183 // address available for holding instance data, the address that will be
184 // used is A + (A mod byte-alignment).
185 //
186 // <maxStaticMethods> is the maximum number of static methods that will be
187 // added to the initialized class using addStaticMethod.
188 //
189 // <majorVersion> indicates the major version number for this
190 // implementation of the class definition, and <minorVersion>
191 // indicates the minor version number.
192 virtual void somInitMIClass(long inherit_vars, string className,
193 SOMClassSequence* parentClasses,
194 long dataSize, long dataAlignment,
195 long maxStaticMethods, long majorVersion,
196 long minorVersion);
197
198 // Adds the indicated method, creating and returning a new method token.
199 //
200 // <methodDescriptor> is the somId for an identifier that can be used
201 // to access signature information about the method from an interface
202 // repository.
203 //
204 // <method> is the actual method procedure for this method
205 //
206 // <redispatchStub> is a procedure with the same calling sequence as
207 // <method> that invokes somDispatch for the method.
208 //
209 // <applyStub> is a procedure used to support somApply.
210 virtual somMToken somAddStaticMethod(somId methodId, somId methodDescriptor,
211 somMethodPtr method,
212 somMethodPtr redispatchStub,
213 somMethodPtr applyStub);
214
215 // Adds the indicated method to the class's name lookup list.
216 // If this happens to override a static method then this operation is
217 // equivalent to <somOverrideSMethod> and the <methodDescriptor> and
218 // <applyStub> arguments are ignored (the overridden method's values
219 // will be used).
220 //
221 // <methodDescriptor> is the somId of a string describing the calling
222 // sequence to this method as described in <somcGetNthMethodInfo>
223 // defined in the SOMObject class definition.
224 //
225 // <method> is the actual method procedure for this method
226 //
227 // <applyStub> is a procedure that takes a standard variable argument
228 // list data structure applies it to its target object by calling
229 // <method> with arguments derived from the data structure. Its
230 // calling sequence is the same as the calling sequence of the
231 // dispatch methods defined in SOMObject. This stub is used in the
232 // support of the dispatch methods used in some classes. In classes
233 // where the dispatch functions do not need such a function this
234 // parameter may be null.
235 virtual void somAddDynamicMethod(somId methodId, somId methodDescriptor,
236 somMethodPtr method, somMethodPtr applyStub);
237
238 // This method can be used instead of <somAddStaticMethod> or
239 // <somAddDynamicMethod> when it is known that the class' parent
240 // class already supports this method. This call does not require the
241 // method descriptor and stub methods that the others do.
242 virtual void somOverrideSMethod(somId methodId, somMethodPtr method);
243
244 // This method is invoked when all of the static initialization for
245 // the class has been finished. The default implementation simply
246 // registers the newly constructed class with the SOMClassMgr.
247 virtual void somClassReady();
248
249 // Returns the apply stub associated with the specified method,
250 // if one exists; otherwise NULL is returned. This method is obsolete,
251 // and retained for binary compatability. In SOMr2, users never access
252 // apply stubs directly; The function somApply is used to invoke apply
253 // stubs. See somApply documentation for further information on apply
254 // stubs, and see somAddStaticMethod documentation for information
255 // on how apply stubs are registered by class implementations.
256 virtual somMethodPtr somGetApplyStub(somId methodId);
257 virtual somClassDataStructure* somGetClassData();
258
259 // The class' pointer to the static <className>ClassData structure.
260 virtual void somSetClassData(somClassDataStructure* cds);
261
262 // A pointer to the method table used by instances of this class. This
263 // method was misnamed; it should have been called somGetInstanceMtab.
264 virtual somMethodTab* somGetClassMtab();
265
266 // Returns the offset of instance data introduced by the receiver in
267 // an instance of the receiver. This method is obsolete and not useful in
268 // multiple-inheritance situations. The attribute somInstanceDataOffsets
269 // replaces this method.
270 virtual long somGetInstanceOffset();
271
272 // The size in bytes of the instance data introduced by the receiving
273 // class.
274 virtual long somGetInstancePartSize();
275
276 // The total size of an instance of the receiving class.
277 virtual long somGetInstanceSize();
278
279 // A data token that identifies the introduced portion of this class
280 // within itself or any derived class. This token can be subsequently
281 // passed to the run-time somDataResolve function to locate the instance
282 // data introduced by this class in any object derived from this class.
283 virtual somDToken somGetInstanceToken();
284
285 // Returns a data token that for the data member at offset
286 // "memberOffset" within the introduced portion of the class identified
287 // by instanceToken. The instance token must have been obtained from a
288 // previous invocation of somGetInstanceToken. The returned member
289 // token can be subsequently passed to the run-time somDataResolve
290 // function to locate the data member.
291 virtual somDToken somGetMemberToken(long memberOffset, somDToken instanceToken);
292
293 // Sets the fields in the method descriptor block, <md>, to
294 // information about the method. 1 (true) is returned if the method is
295 // supported by this object and 0 (false) otherwise. The id field in
296 // the method descriptor block will also be set to NULL.
297 virtual boolean somGetMethodData(somId methodId, somMethodData* md);
298
299 // Returns a redispatch stub for the indicated method, if possible.
300 // If not possible (because a valid redispatch stub has not been
301 // registered, and there is insufficient information to dynamically
302 // construct one), then a NULL is returned.
303 virtual somMethodProc* somGetRdStub(somId methodId);
304
305 // Returns the method descriptor for the indicated method. If
306 // this object does not support the indicated method then NULL is
307 // returned.
308 virtual somId somGetMethodDescriptor(somId methodId);
309
310 // Returns the index for the specified method. (A number that may
311 // change if any methods are added or deleted to this class object or
312 // any of its ancestors). This number is the basis for other calls to
313 // get info about the method. Indexes start at 0. A -1 is returned if
314 // the method cannot be found.
315 virtual long somGetMethodIndex(somId id);
316
317 // Returns the specified method's access token. This token can then
318 // be passed to method resolution routines, which use the token
319 // to select a method pointer from a method table.
320 virtual somMToken somGetMethodToken(somId methodId);
321
322 // This object's class name as a NULL terminated string.
323 virtual string somGetName();
324
325 // loads *md with the method data associated with the the nth method,
326 // or NULL if there is no such method. Returns true is successful;
327 // false otherwise.
328 virtual boolean somGetNthMethodData(long n, somMethodData* md);
329
330 // Returns the id of the <n>th method if one exists and NULL
331 // otherwise.
332 //
333 // The ordering of the methods is unpredictable, but will not change
334 // unless some change is made to the class or one of its ancestor classes.
335 //
336 // See CORBA documentation for info on method descriptors.
337 virtual somId somGetNthMethodInfo(long n, somId* descriptor);
338
339 // The number of methods currently supported by this class,
340 // including inherited methods (both static and dynamic).
341 virtual long somGetNumMethods();
342
343 // The number of static methods that this class has. Can
344 // be used by a child class when initializing its method table.
345 virtual long somGetNumStaticMethods();
346
347 // Returns the parent class of self (along its "left-hand" derivation
348 // path), if one exists and NULL otherwise.
349 virtual SOMClass* somGetParent();
350
351 // The parent classes of self.
352 virtual SOMClassSequence somGetParents();
353
354 // Returns a list of the method tables of this class's parent classes in the
355 // specific format required by somParentNumResolve (for making parent method
356 // calls. The first entry on the list is actually the method table of the
357 // receiving class. Because the CClassData structure contains this list, the
358 // method table for any class with a CClassData structure is statically
359 // available. This method now returns a list because older SI emitters load
360 // CClassData.parentMtab with the result of this call, and the new runtime
361 // requires a list of classes in that position.
362 virtual somMethodTabs somGetPClsMtab();
363
364 // Returns a list of the method tables of this class's parent classes in the
365 // specific format required by somParentNumResolve (for making parent method
366 // calls. The first entry on the list is actually the method table of the
367 // receiving class. Because the CClassData structure contains this list, the
368 // method table for any class with a CClassData structure is statically
369 // available.
370 virtual somMethodTabs somGetPClsMtabs();
371
372 // Returns the class' major and minor version numbers in the corresponding
373 // output parameters.
374 virtual void somGetVersionNumbers(long* majorVersion, long* minorVersion);
375
376 // Sets the method descriptor given by <descriptor> for the method
377 // <methodId> into the method information kept by the receiving class.
378 // 1 (true) is returned if the method is supported by this object
379 // and 0 (false) otherwise.
380 virtual boolean somSetMethodDescriptor(somId methodId, somId descriptor);
381
382 // Finds the method procedure associated with <methodId> for this
383 // class and sets <m> to it. 1 (true) is returned when the
384 // method procedure is a static method and 0 (false) is returned
385 // when the method procedure is dynamic method.
386 //
387 // If the class does not support the specified method then
388 // <m> is set to NULL and the return value is meaningless.
389 //
390 virtual boolean somFindMethod(somId methodId, somMethodPtr* m);
391
392 // Just like <somFindMethod> except that if the method is not
393 // supported then an error is raised and execution is halted.
394 virtual boolean somFindMethodOk(somId methodId, somMethodPtr* m);
395
396 // Finds the indicated method, which must be a static method supported
397 // by this class, and returns a pointer to its method procedure.
398 // If the method is not supported by the receiver (as a static method
399 // or at all) then a NULL pointer is returned.
400 virtual somMethodPtr somFindSMethod(somId methodId);
401
402 // Uses <somFindSMethod>, and raises an error if the result is NULL.
403 virtual somMethodPtr somFindSMethodOk(somId methodId);
404
405 // Like <somFindSMethodOK>, but without restriction to static methods.
406 virtual somMethodPtr somLookupMethod(somId methodId);
407
408 // Returns 1 (true) if the implementation of this class is
409 // compatible with the specified major and minor version number and
410 // false (0) otherwise. An implementation is compatible with the
411 // specified version numbers if it has the same major version number
412 // and a minor version number that is equal to or greater than
413 // <minorVersion>. The major, minor version number pair (0,0) is
414 // considered to match any version. This method is usually called
415 // immediately after creating the class object to verify that a
416 // dynamically loaded class definition is compatible with a using
417 // application.
418 virtual boolean somCheckVersion(long majorVersion, long minorVersion);
419
420 // Returns 1 (true) if <self> is a descendent class of <aClassObj> and
421 // 0 (false) otherwise. Note: a class object is considered to be
422 // descended itself for the purposes of this method.
423 virtual boolean somDescendedFrom(SOMClass* aClassObj);
424
425 // Returns 1 (true) if the indicated method is supported by this
426 // class and 0 (false) otherwise.
427 virtual boolean somSupportsMethod(somId mId);
428
429 // if the receiving class either introduces or overrides the
430 // indicated method, then its somMethodPtr is returned, otherwise
431 // NULL is returned.
432 virtual somMethodPtr somDefinedMethod(somMToken method);
433
434 // Overrides the method table pointers to point to the redispatch stubs.
435 // All the methods except somDispatch methods are overriden.
436 virtual void somOverrideMtab();
437
438 // The alignment required for the instance data structure
439 // introduced by the receiving class.
440 long somDataAlignment;
441
442 #pragma SOMAttribute(somDataAlignment, readonly, virtualaccessors)
443
444 // The ancestors whose initializers the receiving
445 // class wants to directly invoke.
446 SOMClassSequence somDirectInitClasses;
447
448 #pragma SOMAttribute(somDirectInitClasses, virtualaccessors, noset)
449
450 // The memory allocation routine used by somAllocate. Provided in this
451 // form to support array allocation.
452 somMethodProc *somClassAllocate;
453
454 #pragma SOMAttribute(somClassAllocate, readonly, virtualaccessors)
455
456 // The memory allocation routine called by somDeallocate. Provided in
457 // this form to support array deallocation.
458 somMethodProc *somClassDeallocate;
459
460 #pragma SOMAttribute(somClassDeallocate, readonly, virtualaccessors)
461 #pragma SOMReleaseOrder ( \
462 "somNew", \
463 "somRenew", \
464 "somInitClass", \
465 "somClassReady", \
466 "somGetName", \
467 "somGetParent", \
468 "somDescendedFrom", \
469 "somCheckVersion", \
470 "somFindMethod", \
471 "somFindMethodOk", \
472 "somSupportsMethod", \
473 "somGetNumMethods", \
474 "somGetInstanceSize", \
475 "somGetInstanceOffset", \
476 "somGetInstancePartSize", \
477 "somGetMethodIndex", \
478 "somGetNumStaticMethods", \
479 "somGetPClsMtab", \
480 "somGetClassMtab", \
481 "somAddStaticMethod", \
482 "somOverrideSMethod", \
483 "somAddDynamicMethod", \
484 *, \
485 "somGetApplyStub", \
486 "somFindSMethod", \
487 "somFindSMethodOk", \
488 "somGetMethodDescriptor", \
489 "somGetNthMethodInfo", \
490 "somSetClassData", \
491 "somGetClassData", \
492 "somNewNoInit", \
493 "somRenewNoInit", \
494 "somGetInstanceToken", \
495 "somGetMemberToken", \
496 "somSetMethodDescriptor", \
497 "somGetMethodData", \
498 "somOverrideMtab", \
499 "somGetMethodToken", \
500 "somGetParents", \
501 "somGetPClsMtabs", \
502 "somInitMIClass", \
503 "somGetVersionNumbers", \
504 "somLookupMethod", \
505 "_get_somInstanceDataOffsets", \
506 "somRenewNoZero", \
507 "somRenewNoInitNoZero", \
508 "somAllocate", \
509 "somDeallocate", \
510 "somGetRdStub", \
511 "somGetNthMethodData", \
512 *, \
513 *, \
514 "_get_somDirectInitClasses", \
515 "_set_somDirectInitClasses", \
516 "somGetInstanceInitMask", \
517 "somGetInstanceDestructionMask", \
518 *, \
519 *, \
520 *, \
521 *, \
522 *, \
523 "somDefinedMethod", \
524 *, \
525 *, \
526 *, \
527 *, \
528 *, \
529 *, \
530 *, \
531 *, \
532 "_get_somDataAlignment", \
533 "somGetInstanceAssignmentMask", \
534 *, \
535 *, \
536 "_get_somClassAllocate", \
537 "_get_somClassDeallocate")
538};
539#pragma SOMAsDefault(pop)
540
541 #pragma SOMNonDTS(pop)
542/* End SOMClass */
543#endif /* _DTS_HH_INCLUDED_somcls */
Note: See TracBrowser for help on using the repository browser.