Class-specific macros resolve references to class methods, class functions, and class instance data. The macro name or macro parameters contain a class method name, a class function name, an instance variable name, or a class name. The SOM compiler automatically generates and places them in the class Header files. Class implementers can use them by including the class-implementation Header file (.IH) in their source programs. Client programs can use them by including the public class Header file (.H). Because the IH file includes the H file, the class macros defined in the H file are available to both class implementers and clients; and the ones defined in the IH file but not in the H file are available only to class implementers.

The simplest macro is the " _ " (underscore) macro. Object instance data can be referred to by preceding the name of the data element with an underscore character, as shown in the following figure:

return _var1;

Underscored-data-name macros are defined in the H public class Header file and are available to both class implementers and client programs. In addition, instance variables may be accessed by somThisvariable_name, as shown in the following figure:

return somThisvar1;

Object methods can be referred to similarly and invoked by preceding the method name with an underscore ( _ ) character, as shown in the following figure:

/* method A, with parameters x and y, operates on object obj */
_methodA(obj, x, y)

Underscored-method-name macros also are defined in the H public class Header file and are available to both class implementers and client programs. When nonrelated classes independently define methods with the same name, their methods can be invoked with a variation of this macro. The method name is prefixed with the underscore ( _ ) character and class name, as shown in the following figure:

#include "classa.h"
#undef _methodA
#include "classa.h"

/* methodA, defined for ClassA objects,    */
/* operates on ClassA instance object obj1 */
ClassA_methodA (obj1);

/* methodA, defined for unrelated ClassB objects, */
/* operates on ClassB instance object obj2        */
ClassB_methodA (obj2);

Class objects also can be referred to by preceding the class name with an underscore character. Underscored-class-name macros also are defined in the H public class Header file and are available to both class implementers and client programs.

Other class-specific macros are summarized in the following table:

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³Macros              ³Function                                          ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Access instance data³get_<instance variable>                           ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³                    ³<classname>GetData                                ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Instantiate objects ³<classname>New                                    ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³                    ³<classname>Renew                                  ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Invoke methods      ³SOM_Resolve                                       ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³                    ³SOM_ResolveNoCheck                                ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Invoke methods for  ³<classname>_parents_<methodname>                  ³
³each parent         ³                                                  ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Invoke parent       ³<classname>_parent_<parentclassname> _<methodname>³
³methods             ³                                                  ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³Trace methods       ³<classname>MethodDebug                            ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

Of the macros listed in the previous table, <classname>GetData and the parent method macros are defined in the IH file, but not in the H file. They are available only for class implementers.

A class-specific function also is defined in the H file associated with a class. This function, <classname>NewClass, creates the class object. It is invoked automatically when an object is instantiated through the <classname>New class macro.


[Back] [Next]