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.