
The application programming interface for plugins is all in the class ComputeCore.

## Relationships:

CorePlugin  <--->  MasterModeHandler (an adapter)  <---> ComputeCore
CorePlugin  <--->  SlaveModeHandler (an adapter)  <---> ComputeCore
CorePlugin  <--->  MessageTagHandler (an adapter)  <---> ComputeCore

see RayPlatform/core/ComputeCore.h

Macros can be used to push adapters on the ComputeCore instance.
Otherwise, the code must be written for adapters (declaration, implementation, binding).


## in the .h file of a plugin, before the class declaration

__DeclarePlugin(PluginExample)	->	declares a plugin. this is required because adapters need a forward declaration

__DeclareMasterModeAdapter(PluginExample,MASTER_MODE_EXAMPLE)	->	declares a master mode adapter for a plugin

__DeclareSlaveModeAdapter(PluginExample,SLAVE_MODE_EXAMPLE)	->	declares a slave mode adapter for a plugin

__DeclareMessageTagAdapter(PluginExample,MESSAGE_TAG_EXAMPLE)	->	declares a message tag adapter for a plugin


## in the .h file of a plugin, inside the class declaration

__AddAdapter(PluginExample,MASTER_MODE_EXAMPLE)

__AddAdapter(PluginExample,SLAVE_MODE_EXAMPLE)

__AddAdapter(PluginExample,MESSAGE_TAG_EXAMPLE)


## in the .cpp file of a plugin, before the first method implementation

__CreatePlugin(PluginExample)  -> this is used when mini-ranks are not enabled.

__CreateMasterModeAdapter(PluginExample,MASTER_MODE_EXAMPLE)	->	creates the actual code for a master mode adapter

__CreateSlaveModeAdapter(PluginExample,SLAVE_MODE_EXAMPLE)	->	creates the actual code for a slave mode adapter

__CreateSlaveModeAdapter(PluginExample,MESSAGE_TAG_EXAMPLE)	->	creates the actual code for a message tag adapter


## in the .cpp file of a plugin, inside registerPlugin or resolveSymbols

__GetAdapter(PluginExample,MASTER_MODE_EXAMPLE)	->	gets the reference to an adapter

__GetAdapter(PluginExample,SLAVE_MODE_EXAMPLE)	->	gets the reference to an adapter

__GetAdapter(PluginExample,MESSAGE_TAG_EXAMPLE)	->	gets the reference to an adapter

__BindPlugin(PluginExample)	-> binds a plugin

__BindAdapter(PluginExample,MASTER_MODE_EXAMPLE)	->	binds a adapter

__BindAdapter(PluginExample,SLAVE_MODE_EXAMPLE)	->	binds a adapter

__BindAdapter(PluginExample,MESSAGE_TAG_EXAMPLE)	->	binds a adapter



## Simplified API

It is possible to use only a single API call to configure a given handler.


__ConfigureMasterModeHandler(PluginExample, MASTER_MODE_EXAMPLE);  -> configure a handler

__ConfigureSlaveModeHandler(PluginExample, SLAVE_MODE_EXAMPLE);    -> configure a handler

__ConfigureMessageTagHandler(PluginExample, MESSAGE_TAG_EXAMPLE);  -> configure a handler
