Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * cScriptExec.h
- * ScriptLib
- *
- * Created by avansc on 2/17/11.
- * Copyright 2011 avansc. All rights reserved.
- *
- */
- #ifndef _cScriptExec_h
- #define _cScriptExec_h
- #include "ScriptLib.h"
- enum AS_ARG_TYPE { AS_BYTE = 0, AS_WORD, AS_DWORD, AS_QWORD, AS_FLOAT, AS_DOUBLE, AS_ADDRESS, AS_OBJECT };
- class cScriptExec : public iScriptable<cScriptExec>
- {
- public:
- cScriptExec();
- cScriptExec(asIScriptContext *_ctx);
- ~cScriptExec();
- int exec();
- int reset();
- template<typename T>
- int push_arg(T data, AS_ARG_TYPE type);
- template<typename T>
- T get_arg(AS_ARG_TYPE type);
- void REGISTER_SCRIPTABLES(cScriptEngine *engine);
- private:
- asIScriptContext *ctx;
- int argc;
- };
- template<typename T>
- int cScriptExec::push_arg(T data, AS_ARG_TYPE type)
- {
- switch(type)
- {
- case AS_BYTE :
- {
- this->argc++;
- return this->ctx->SetArgByte(this->argc-1, data);
- }
- case AS_WORD :
- {
- this->argc++;
- return this->ctx->SetArgWord(this->argc-1, data);
- }
- case AS_DWORD :
- {
- this->argc++;
- return this->ctx->SetArgDWord(this->argc-1, data);
- }
- case AS_QWORD :
- {
- this->argc++;
- return this->ctx->SetArgQWord(this->argc-1, data);
- }
- case AS_FLOAT :
- {
- this->argc++;
- return this->ctx->SetArgFloat(this->argc-1, data);
- }
- case AS_DOUBLE :
- {
- this->argc++;
- return this->ctx->SetArgDouble(this->argc-1, data);
- }
- case AS_ADDRESS :
- {
- this->argc++;
- return this->ctx->SetArgAddress(this->argc-1, (T*)&data);
- }
- case AS_OBJECT :
- {
- this->argc++;
- return this->ctx->SetArgObject(this->argc-1, (T*)&data);
- }
- default:
- break;
- }
- return -1;
- }
- template<typename T>
- T cScriptExec::get_arg(AS_ARG_TYPE type)
- {
- switch(type)
- {
- case AS_BYTE :
- {
- return this->ctx->GetReturnByte();
- }
- case AS_WORD :
- {
- return this->ctx->GetReturnWord();
- }
- case AS_DWORD :
- {
- return this->ctx->GetReturnDWord();
- }
- case AS_QWORD :
- {
- return this->ctx->GetReturnQWord();
- }
- case AS_FLOAT :
- {
- return (T)this->ctx->GetReturnFloat();
- }
- case AS_DOUBLE :
- {
- return this->ctx->GetReturnDouble();
- }
- case AS_ADDRESS :
- {
- return *((T*)this->ctx->GetReturnAddress());
- }
- case AS_OBJECT :
- {
- return *((T*)this->ctx->GetReturnObject());
- }
- default:
- break;
- }
- return (T)0;
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement