Embedding Simkin in your application


Simkin hooks directly into your C++ application.

First, you need to create an instance of the skInterpreter class. This is usually done at the beginning of your application:

void main()
{
 // Set up global interpreter
 skInterpreter interpreter;
 // set up an executable context
 skExecutableContext ctxt(&interpreter);


// application code ....

 // e.g. call an entry point

 skRValueArray args;
 skRValue return_value;
 obj.method("init",args,return_value,ctxt);
}


To expose fields and methods in your C++ classes you derive from the Simkin base classes skiExecutable or skExecutable.

skiExecutable is an abstract base class for maximum flexibility. skExecutable provides a better starting point, as it implements all the abstract methods.

For example (click on the highlighted method to see its implementation):

class Person : public skExecutable
{
public:
    bool getValue (const skString& fieldName, const skString& attribute, skRValue& value);
    // returns a field's value

    bool setValue (const skString& fieldName, const skString& attribute, const skRValue& value);
    // sets a field's value

    bool method (const skString& methodName, skRValueArray& arguments,skRValue& returnValue);
    // calls a method in this object
private:
    skString m_Name;
    skString m_EmailAddress;
};
You can also derive from skElementExecutable, skXMLExecutable or skScriptedExecutable. These classes load a Simkin script from files.

Their versions of "getValue", "setValue" and "method" find their values and behaviour from the Simkin script file. You can override these to add your own specialized C++ behaviour.

For example (click on the highlighted method to see its implementation):

class ScriptablePerson : public skXMLExecutable
{
public:
    bool getValue (const skString& fieldName, const skString& attribute,skRValue&; value);
    // returns a field's value

    bool setValue (const skString& fieldName, const skString& attribute,const skRValue& value);
    // sets a field's value

    bool method (const skString& methodName, skRValueArray& arguments,skRValue& returnValue);
    // calls a method in this object
private:
    skString m_Name;
    skString m_EmailAddress;
};
Please see Example.cpp which shows all of this.