Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.36 KB | None | 0 0
  1. /*
  2.  *  cScriptExec.h
  3.  *  ScriptLib
  4.  *
  5.  *  Created by avansc on 2/17/11.
  6.  *  Copyright 2011 avansc. All rights reserved.
  7.  *
  8.  */
  9.  
  10. #ifndef _cScriptExec_h
  11. #define _cScriptExec_h
  12.  
  13. #include "ScriptLib.h"
  14.  
  15. enum AS_ARG_TYPE { AS_BYTE = 0, AS_WORD, AS_DWORD, AS_QWORD, AS_FLOAT, AS_DOUBLE, AS_ADDRESS, AS_OBJECT };
  16.  
  17. class cScriptExec : public iScriptable<cScriptExec>
  18. {
  19. public:
  20.     cScriptExec();
  21.     cScriptExec(asIScriptContext *_ctx);
  22.     ~cScriptExec();
  23.    
  24.     int exec();
  25.     int reset();
  26.    
  27.     template<typename T>
  28.     int push_arg(T data, AS_ARG_TYPE type);
  29.    
  30.     template<typename T>
  31.     T get_arg(AS_ARG_TYPE type);
  32.    
  33.     void REGISTER_SCRIPTABLES(cScriptEngine *engine);
  34.    
  35. private:
  36.     asIScriptContext *ctx;
  37.     int argc;
  38. };
  39.  
  40. template<typename T>
  41. int cScriptExec::push_arg(T data, AS_ARG_TYPE type)
  42. {
  43.     switch(type)
  44.     {
  45.         case AS_BYTE :
  46.         {
  47.             this->argc++;
  48.             return this->ctx->SetArgByte(this->argc-1, data);
  49.         }
  50.         case AS_WORD :
  51.         {
  52.             this->argc++;
  53.             return this->ctx->SetArgWord(this->argc-1, data);
  54.         }
  55.         case AS_DWORD :
  56.         {
  57.             this->argc++;
  58.             return this->ctx->SetArgDWord(this->argc-1, data);
  59.         }
  60.         case AS_QWORD :
  61.         {
  62.             this->argc++;
  63.             return this->ctx->SetArgQWord(this->argc-1, data);
  64.         }
  65.         case AS_FLOAT :
  66.         {
  67.             this->argc++;
  68.             return this->ctx->SetArgFloat(this->argc-1, data);
  69.         }
  70.         case AS_DOUBLE :
  71.         {
  72.             this->argc++;
  73.             return this->ctx->SetArgDouble(this->argc-1, data);
  74.         }
  75.         case AS_ADDRESS :
  76.         {
  77.             this->argc++;
  78.             return this->ctx->SetArgAddress(this->argc-1, (T*)&data);
  79.         }
  80.         case AS_OBJECT :
  81.         {
  82.             this->argc++;
  83.             return this->ctx->SetArgObject(this->argc-1, (T*)&data);
  84.         }
  85.         default:
  86.             break;
  87.     }
  88.     return -1;
  89. }
  90.  
  91. template<typename T>
  92. T cScriptExec::get_arg(AS_ARG_TYPE type)
  93. {
  94.     switch(type)
  95.     {
  96.         case AS_BYTE :
  97.         {
  98.             return this->ctx->GetReturnByte();
  99.         }
  100.         case AS_WORD :
  101.         {
  102.             return this->ctx->GetReturnWord();
  103.         }
  104.         case AS_DWORD :
  105.         {
  106.             return this->ctx->GetReturnDWord();
  107.         }
  108.         case AS_QWORD :
  109.         {
  110.             return this->ctx->GetReturnQWord();
  111.         }
  112.         case AS_FLOAT :
  113.         {
  114.             return (T)this->ctx->GetReturnFloat();
  115.         }
  116.         case AS_DOUBLE :
  117.         {
  118.             return this->ctx->GetReturnDouble();
  119.         }
  120.         case AS_ADDRESS :
  121.         {
  122.             return *((T*)this->ctx->GetReturnAddress());
  123.         }
  124.         case AS_OBJECT :
  125.         {
  126.             return *((T*)this->ctx->GetReturnObject());
  127.         }
  128.         default:
  129.             break;
  130.     }
  131.        
  132.     return (T)0;
  133. }
  134.  
  135. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement