# Helper functions

Path: /sdk/add_on/scripthelper/

These helper functions simplify the implemention of common tasks. They can be used as is or can serve as the starting point for your own framework.

## Public C++ interface

    // Compare relation between two objects of the same type.
    // Uses the object's opCmp method to perform the comparison.
    // Returns a negative value if the comparison couldn't be performed.
    int CompareRelation(asIScriptEngine *engine, void *leftObj, void *rightObj, int typeId, int &result);

    // Compare equality between two objects of the same type.
    // Uses the object's opEquals method to perform the comparison, or if that doesn't exist the opCmp method.
    // Returns a negative value if the comparison couldn't be performed.
    int CompareEquality(asIScriptEngine *engine, void *leftObj, void *rightObj, int typeId, bool &result);

    // Compile and execute simple statements.
    // The module is optional. If given the statements can access the entities compiled in the module.
    // The caller can optionally provide its own context, for example if a context should be reused.
    int ExecuteString(asIScriptEngine *engine, const char *code, asIScriptModule *mod = 0, asIScriptContext *ctx = 0);

    // Write registered application interface to file.
    // This function creates a file with the configuration for the offline compiler, asbuild, in the samples.
    // If you wish to use the offline compiler you should call this function from you application after the
    // application interface has been fully registered. This way you will not have to create the configuration
    // file manually.
    int WriteConfigToFile(asIScriptEngine *engine, const char *filename);

## Example

To compare two script objects the application can execute the following code:

    void Compare(asIScriptObject *a, asIScriptObject *b)
    {
      asIScriptEngine *engine = a->GetEngine();
      int typeId = a->GetTypeId();

      int cmp;
      int r = CompareRelation(engine, a, b, typeId, cmp);
      if( r < 0 )
      {
        cout << "The relation between a and b cannot be established b" << endl;
      }
      else
      {
        if( cmp < 0 )
          cout << "a is smaller than b" << endl;
        else if( cmp == 0 )
          cout << "a is equal to b" << endl;
        else
          cout << "a is greater than b" << endl;
      }
    }