All components should take the form of a class definition file that defines a class derived from one of the component base classes (described below). The name of the class should be exactly the Class Name of the component, with the slashes replaced by underscores, followed by an additional underscore, followed by the release number in numerals. For example, the current numeric source component has class name std_2009_source_numeric_0.


The base classes of all three component types are the same, except that the Process base class has two instances of SystemMLInterface representing its input and output interfaces, as follows.

C++ API (1065)
class Data, Process, Utility { public: virtual void event(Event1065& event) = 0; string processName(); { return pdata->name; } const ComponentTime* ptime; const ComponentData* pdata; Symbol hComponent; ComponentOut bout; #ifdef __PROC__ SystemMLInterface iif; SystemMLInterface oif; #endif };

Your class must define the virtual event() function, and perform all its processing within. The member variables have the following significance.

Pointer to the time object for this component (which is maintained by the framework). You can access it using ptime-> (or the old style time., through the definition of the symbol time, see Legacy Redirects).
Pointer to the data object for this component; you should not generally need this.
The handle of this component, which should be passed to Component Interface functions which request hCaller (the handle of the caller).
The component's output object, which is connected to the BRAHMS structured logging system. Any messages for the user should be sent through this object. The bout object is documented in the 1199 documentation.
The SystemMLInterface object representing the input interface.
The SystemMLInterface object representing the output interface.