SBCClassInterface Class Reference

This class describes a class interface in a class proxy. More...

Constructors and destructors

 SBCClassInterface ()
 Constructs a class interface.
 
virtual ~SBCClassInterface ()
 Destructs the interface.
 

Managing functions

void addFunction (SBCClassFunction *function)
 Adds a function to the interface.
 
SBCClassFunctiongetFunction (const std::string &functionName, const SBValue &t0=SBValue(), const SBValue &t1=SBValue(), const SBValue &t2=SBValue(), const SBValue &t3=SBValue(), const SBValue &t4=SBValue(), const SBValue &t5=SBValue(), const SBValue &t6=SBValue(), const SBValue &t7=SBValue(), const SBValue &t8=SBValue(), const SBValue &t9=SBValue(), const SBValue &t10=SBValue(), const SBValue &t11=SBValue(), const SBValue &t12=SBValue(), const SBValue &t13=SBValue(), const SBValue &t14=SBValue(), const SBValue &t15=SBValue()) const
 Returns the function with name functionName and arguments t0, t1, ..., t15.
 
SBCClassFunctiongetConstFunction (const std::string &functionName, const SBValue &t0=SBValue(), const SBValue &t1=SBValue(), const SBValue &t2=SBValue(), const SBValue &t3=SBValue(), const SBValue &t4=SBValue(), const SBValue &t5=SBValue(), const SBValue &t6=SBValue(), const SBValue &t7=SBValue(), const SBValue &t8=SBValue(), const SBValue &t9=SBValue(), const SBValue &t10=SBValue(), const SBValue &t11=SBValue(), const SBValue &t12=SBValue(), const SBValue &t13=SBValue(), const SBValue &t14=SBValue(), const SBValue &t15=SBValue()) const
 Returns the const function with name functionName and arguments t0, t1, ..., t15.
 
SBCClassAttributegetAttribute (const std::string &attributeName) const
 Returns the attribute with name attributeName.
 
SBHashMap< std::string, SBCClassFunction * > const & getFunctionMap () const
 Returns the function map.
 
SBHashMap< std::string, SBCClassAttribute * > const & getAttributeMap () const
 Returns the attribute map.
 

Attributes

void addAttribute (SBCClassAttribute *attribute)
 Adds a function to the interface.
 

Debugging

void print (unsigned int offset=0) const
 Prints the interface.
 

Detailed Description

This class describes a class interface in a class proxy. A class interface is a collection of class functions exposed through a class descriptor.

Assume for example a SAMSON Element contains the following class:

class A {
public:
A() {}
virtual ~A() {}
int multiplyByTwo(int i) {
return 2 * i;
}
};
SB_REGISTER_TYPE(A, "A", "BF99103E-06FE-C4C1-D929-4C6E833B101C");

as well as the following class descriptor:

In this example, the function multiplyByTwo is accessible to other SAMSON Elements through the SAMSON's introspection mechanism, even when the definition of class A is not available. Precisely, even though other developers might not have access to the definition of class A (i.e. they do not have the appropriate header file), they may still access its interface from the class proxy:

SBProxy* classProxy = SAMSON::getProxy("A");
SBInterface* classInterface = classProxy->getInterface();

They may then obtain function objects from the interface:

SBFunction* classFunction = classInterface->getFunction("multiplyByTwo", "int");

Since, in this example, the function is not static, we need an object of type A:

const SBValue& objectHolder = classProxy->createInstance();

We may then use the exposed function by wrapping arguments and unwrapping results:

const SBValue& argumentHolder = new SBValueHolder<int>(17);
const SBValue& resultHolder = classFunction->call(objectHolder, argumentHolder);
int result = static_cast<SBValueHolder<int>*>(resultHolder)->getValue();
delete argumentHolder;
delete resultHolder;

Note that the class proxy also makes it possible to directly call a function provided by an exposed class without having first to obtain the SBCClassFunction object:

const SBValue& argumentHolder = new SBValueHolder<int>(17);
const SBValue& resultHolder = classProxy->call(objectHolder, "multiplyByTwo", argument);
int result = static_cast<SBValueHolder<int>*>(resultHolder)->getValue();
delete argumentHolder;
delete resultHolder;

However, when multiple calls are performed, it is more efficient to store a pointer to a SBCClassFunction object and reuse it.

Note that a class interface should never be deleted.

Please refer to the chapter about introspection for more information.

Short name: SBInterface

See also
Introspection
SBCClassProxy
SBCClassFunction