KScriptSet.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:4k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Engine (c) 1999-2000 by Kingsoft
  3. // 
  4. // File: KScriptSet.h
  5. // Date: 2001-10-31 10:50:28
  6. // Code: Romandou
  7. // Desc:
  8. //---------------------------------------------------------------------------
  9. #ifndef _KSCRIPTSET_H
  10. #define _KSCRIPTSET_H
  11. #include "KScript.h"
  12. #include "KLuaScript.h"
  13. #define MAXSCRIPTNUM 100 // 最大脚本量
  14. #define KEY_NUMBER  0
  15. #define KEY_STRING  1
  16. struct TScript  
  17. {
  18. char szKey[32]; //关键字可以是脚本对应的文件名或其它
  19. DWORD nKey;//关键字为数字
  20. KScript * pScript; //对应的脚本实例的地址
  21. TScript * pParent; //父
  22. TScript * pLeftChild; //左子
  23. TScript * pRightChild; //右子
  24. TScript * pMoreRecent; //比之最近的
  25. TScript * pLessRecent; //比之最迟的
  26. };//按照文件名或其它属性作为脚本标识的排序二叉树
  27. //二叉树结构标准函数
  28. extern TScript * BTSearch(TScript * pParentTScript, TScript * pTScript, char * szKey, BOOL * pResult);
  29. extern DWORD BTPreorder(TScript * pTScript);//中序遍历排序二叉树
  30. extern TScript * BTInsert(TScript *pTScript, char * szKey);
  31. extern TScript * BTFindLess(TScript * pTScript);
  32. extern TScript * BTSearch(TScript * pParentTScript, TScript * pTScript, DWORD nKey, BOOL * pResult);
  33. extern DWORD BTPreorder(TScript * pTScript);//中序遍历排序二叉树
  34. extern TScript * BTInsert(TScript *pTScript, DWORD nKey);
  35. extern TScript *  BTDelete(TScript * pTScript, TScript ** ppRootTScript, int nKeyStyle);
  36. //---------------------------------------------------------------------------
  37. class ENGINE_API KScriptSet //脚本集合控制类
  38. {
  39. public:
  40. KScriptSet();
  41. ~KScriptSet();
  42. KScriptSet(int Key_Style);
  43. KScript * GetScript(char * szKey, BOOL nNeedCreate, BOOL nNeedUpdateRecent); //根据关键字获得脚本
  44. KScript * GetScript(DWORD nKey, BOOL nNeedCreate, BOOL nNeedUpdateRecent);
  45. DWORD  ListScriptsKey();
  46. DWORD  ListRecent(int order);
  47. TScript *  SearchScript(char * szKey, BOOL *pnResult);//查找关键字的结点,若存在则*pnResult = 1,返回该结点;否则*pnResult = 0,返回接近点。
  48. TScript *  SearchScript(DWORD nKey, BOOL *pnResult);//查找关键字的结点,若存在则*pnResult = 1,返回该结点;否则*pnResult = 0,返回接近点。
  49. BOOL DeleteScript(char * szKey);//删除关键字的结点
  50. BOOL DeleteScript(DWORD szKey);//删除关键字的结点
  51. DWORD GetCount(){return ListRecent(0);}; //获得当前结点数量
  52. int   GetKeyStyle(){return m_nKeyStyle; };
  53. virtual BOOL Run(char * szKey);
  54. virtual BOOL Run(DWORD nKey);
  55. virtual BOOL RunFunction(DWORD nKey, char * szFuncName, char * szFormat, ...);
  56. virtual BOOL RunFunction(char * szKey, char * szFuncName, char * szFormat, ...);
  57.  
  58. //protected:
  59. TScript * m_pRootList; //二叉树根支点
  60. TScript * m_pMostRecent; //最新使用脚本
  61. TScript * m_pLestRecent; //最老使用脚本
  62. virtual KScript *  CreateScript(char * szKey , int StackSize); 
  63. virtual KScript *  CreateScript(DWORD nKey , int StackSize); 
  64. virtual char * GetScriptFileNameFromKey(char * szKey){ return szKey;};
  65. virtual char * GetScriptFileNameFromKey(DWORD nKey){return NULL;}
  66. virtual int  GetInitStackSize(char * szKey);//在进行初始化时,获得脚本堆的大小
  67. virtual int  GetInitStackSize(DWORD nKey);//在进行初始化时,获得脚本堆的大小
  68. TScript * InsertScript(char * szKey);//插入以该关键字的结点
  69. TScript * InsertScript(DWORD nKey);//插入以该关键字的结点
  70. BOOL DeleteScript(TScript * pTScript);//删除结点
  71. void UpdateRecent(BOOL bExistedScript, TScript * pTScript);
  72. int m_nKeyStyle ;//关键字的类型 有两种 数字与字符串,值分别为 KEY_NUMER KEY_STRING
  73. };
  74. //---------------------------------------------------------------------------
  75. #endif