⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scripttypes.h

📁 编译并且测试成功的虚拟机
💻 H
字号:
#ifndef SCRIPTTYPES_H#define SCRIPTTYPES_H#include <string>#include "opcodes.h"#include "pxdScriptHeaders.h"using namespace std;const int STACK_LIMIT = 1024;const int MAX_RECURSION_DEPTH = 1024;class StackItem { public:  int intval;  string strval;};class Activation { public:   int endCode;  int pc, bsp, sp;  int numParams; };class ProgramInstance {  private:     // current activation                int a;              // Stacks:     StackItem *stack;      Activation *activationStack;     public:     // Constructor:     ProgramInstance();     ~ProgramInstance();          // The template for this program instance     PROGRAMHEADER *programTemplate;                // State:     bool sleeping;     bool dead;      unsigned long wakeuptime;           // utility functions to make things look nice:     inline char *getName()                            {if (programTemplate) return programTemplate->name; return NULL;}     inline void pushActivation()                      {a++;}     inline void popActivation()                       {a--;}     inline int getPC()                              {return activationStack[a].pc;}     inline int getSP()                              {return activationStack[a].sp;}     inline int getBSP()                             {return activationStack[a].bsp;}     inline int getNumParams()                          {return activationStack[a].numParams;}     inline int getEndCode()                         {return activationStack[a].endCode;}          inline void addPC(int offset)                   {activationStack[a].pc += offset;}     inline void setPC(int address)                  {activationStack[a].pc = address;}     inline void addSP(int offset)                   {activationStack[a].sp += offset;}     inline void setSP(int address)                  {activationStack[a].sp = address;}     inline void setEC(int address)                  {activationStack[a].endCode = address;}     inline void setBSP(int address)                 {activationStack[a].bsp = address;}     inline void setNumParams(int count)             {activationStack[a].numParams = count;}               inline void pop(int nr=1)                       {activationStack[a].sp -= nr;}     inline void push()                              {activationStack[a].sp++;}          // The 'push' series of functions pushes to the top of stack: (increases the 'sp' by one)     inline void  pushInt(int i)                       {stack[++activationStack[a].sp].intval = i;}     inline void  pushStr(string s)                    {stack[++activationStack[a].sp].strval = s;}     inline void  pushStackItem(StackItem s)           {stack[++activationStack[a].sp] = s;}           // The 'pop' series retrieves top stack element and decreases sp by one:     inline int   popInt()                             {return stack[activationStack[a].sp--].intval;}     inline string popStr()                             {return stack[activationStack[a].sp--].strval;}               // The 'set' series sets an existing stack value     inline void  setInt(int i, int ofs=0)             {stack[activationStack[a].sp + ofs].intval = i;}     inline void  setStr(string s, int ofs=0)          {stack[activationStack[a].sp + ofs].strval = s;}     inline void  setStackItem(StackItem s, int ofs=0) {stack[activationStack[a].sp + ofs] = s;}               // The 'get' series retrieves an existing stack value:     inline int   getInt(int ofs=0)                    {return stack[activationStack[a].sp + ofs].intval;}     inline string getStr(int ofs=0)                   {return stack[activationStack[a].sp + ofs].strval;}     inline StackItem getStackItem(int ofs=0)          {return stack[activationStack[a].sp + ofs];}         // The 'getLocal' series retrieves an existing stack value:     inline int   getLocalInt(int ofs)                 {return stack[activationStack[a].bsp + ofs].intval;}     inline string getLocalStr(int ofs)                {return stack[activationStack[a].bsp + ofs].strval;}              // The setLocal series sets an existing stack value     inline void  setLocalInt(int i, int ofs)          {stack[activationStack[a].bsp + ofs].intval = i;}     inline void  setLocalStr(string s, int ofs)       {stack[activationStack[a].bsp + ofs].strval = s;} };#endif 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -