AngelScript
|
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.
// 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); // Print information on script exception to the standard output. // Whenever the asIScriptContext::Execute method returns asEXECUTION_EXCEPTION, the application // can call this function to print some more information about that exception onto the standard // output. The information obtained includes the current function, the script source section, // program position in the source section, and the exception description itself. void PrintException(asIScriptContext *ctx, bool printStack = false);
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; } }