找回密码
 点一下
查看: 1379|回复: 1

ID发布函数库

[复制链接]
发表于 2014-6-23 08:48:54 | 显示全部楼层 |阅读模式
本帖最后由 疯人¢衰人 于 2014-6-23 08:48 编辑

这个函数库是用来发布唯一ID的,本身不复杂,但是实际应用中可能会很有用处。
函数发布的ID不保证有序,在正确的释放ID的前提下,可以保证ID唯一。采用类似WE中Handle型变量Handle值发布的算法


以下为声明变量

  1. //======================================================================
  2. //Common Function : IndexGetSystem
  3. //======================================================================
  4. //Constant
  5. const string libGAWH_GV_COM_IS_NameIndexSystemFirstName = "IS:";
  6. const string libGAWH_GV_COM_IS_NameIndexSystemDeleteNum = ":DeleteNum:";
  7. const string libGAWH_GV_COM_IS_NameIndexSystemDeleteIndex = ":DeleteIndex:";
  8. const string libGAWH_GV_COM_IS_NameIndexSystemMaxNum = ":Max:";
  9. const string libGAWH_GV_COM_IS_NameIndexSystemLastIndex = ":LastIndex:";
  10. const string libGAWH_GV_COM_IS_NameIndexSystemUsed = ":Used:";
  11. //----------------------------------------------------------------------
  12. //Function Declaration
  13. //----------------------------------------------------------------------
  14. int libGAWH_FUNC_COM_IS_IndexSystemGetIndex(string lp_IndexName);
  15. void libGAWH_FUNC_COM_IS_IndexSystemFlushIndexRecord(string lp_IndexName);
  16. void libGAWH_FUNC_COM_IS_IndexSystemDeleteIndex(string lp_IndexName, int lp_Index);
  17. int libGAWH_FUNC_COM_IS_IndexSystemLastUsedIndex(string lp_IndexName);
复制代码

以下为相关函数

  1. //======================================================================
  2. //Common Function : IndexGetSystem
  3. //======================================================================
  4. //----------------------------------------------------------------------
  5. //Functions
  6. //----------------------------------------------------------------------
  7. int libGAWH_FUNC_COM_IS_IndexSystemGetIndex(string lp_IndexName)
  8. {
  9.     int lv_DeleteNum = DataTableGetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemDeleteNum);
  10.     int lv_MaxNum = 0;
  11.     int lv_LastIndex = 0;
  12.    
  13.     if (lv_DeleteNum == 0)
  14.     {
  15.         lv_MaxNum = DataTableGetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemMaxNum);
  16.         DataTableSetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemMaxNum, lv_MaxNum + 1);
  17.         DataTableSetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemLastIndex, lv_MaxNum);
  18.         DataTableSetBool(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + IntToString(lv_MaxNum) + libGAWH_GV_COM_IS_NameIndexSystemUsed, true);
  19.         return lv_MaxNum;
  20.     }
  21.     else
  22.     {
  23.         lv_DeleteNum =lv_DeleteNum - 1;
  24.         DataTableSetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemDeleteNum, lv_DeleteNum);
  25.         lv_LastIndex = DataTableGetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemDeleteIndex + IntToString(lv_DeleteNum));
  26.         DataTableSetBool(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + IntToString(lv_LastIndex) + libGAWH_GV_COM_IS_NameIndexSystemUsed, true);
  27.         DataTableSetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemLastIndex, lv_LastIndex);
  28.         return lv_LastIndex;
  29.     }
  30. }
  31. void libGAWH_FUNC_COM_IS_IndexSystemFlushIndexRecord(string lp_IndexName)
  32. {
  33.     int lv_I = 0;
  34.     int lv_MaxNum = DataTableGetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemMaxNum);
  35.     DataTableSetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemMaxNum, 0);
  36.     DataTableSetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemDeleteNum, 0);
  37.     DataTableSetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemLastIndex, 0);
  38.     while (lv_I < lv_MaxNum)
  39.     {
  40.         DataTableSetBool(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + IntToString(lv_I) + libGAWH_GV_COM_IS_NameIndexSystemUsed, false);
  41.         lv_I += 1;
  42.     }
  43. }
  44. void libGAWH_FUNC_COM_IS_IndexSystemDeleteIndex(string lp_IndexName, int lp_Index)
  45. {
  46.     int lv_DeleteNum = DataTableGetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemDeleteNum);
  47.     bool lv_Used = DataTableGetBool(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + IntToString(lp_Index) + libGAWH_GV_COM_IS_NameIndexSystemUsed);
  48.     if (lv_Used)
  49.     {
  50.         DataTableSetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemDeleteNum, lv_DeleteNum + 1);
  51.         DataTableSetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemDeleteIndex + IntToString(lv_DeleteNum), lp_Index);
  52.         DataTableSetBool(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + IntToString(lp_Index) + libGAWH_GV_COM_IS_NameIndexSystemUsed, false);
  53.     }
  54.     else
  55.     {
  56.         TriggerDebugOutput(1, StringToText("\xe6\x97\xa0\xe6\xb3\x95\xe9\x87\x8a\xe6\x94\xbe\xe6\x9c\xaa\xe4\xbd\xbf\xe7\x94\xa8\xe5\xba\x8f\xe5\x8f\xb7\xef\xbc\x9a") + IntToText(lp_Index), false);
  57.     }
  58. }
  59. int libGAWH_FUNC_COM_IS_IndexSystemLastUsedIndex(string lp_IndexName)
  60. {
  61.     return DataTableGetInt(true, libGAWH_GV_COM_IS_NameIndexSystemFirstName + lp_IndexName + libGAWH_GV_COM_IS_NameIndexSystemLastIndex);
  62. }

复制代码


函数
  1. int libGAWH_FUNC_COM_IS_IndexSystemGetIndex(string lp_IndexName)
复制代码
为获得ID的函数,参数string lp_IndexName为区别ID所属的识别字符,即当地图中存在多个需要获取ID的系统时,只要采用不同的string lp_IndexName即可获得相互独立的ID

函数
  1. void libGAWH_FUNC_COM_IS_IndexSystemFlushIndexRecord(string lp_IndexName)
复制代码
用于清空某个系列的ID,即释放某个string lp_IndexName对应的ID系列,重置状态

函数
  1. void libGAWH_FUNC_COM_IS_IndexSystemDeleteIndex(string lp_IndexName, int lp_Index)
复制代码
释放在string lp_IndexName对应的ID系列中已经使用的ID——int lp_Index,使其能够重新使用

函数
  1. int libGAWH_FUNC_COM_IS_IndexSystemLastUsedIndex(string lp_IndexName)
复制代码
返回在string lp_IndexName对应的ID系列中,上次分发的ID,其可能已经被释放

发表于 2014-6-23 14:57:27 | 显示全部楼层
唯一ID生成器啊~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-6-15 08:34 , Processed in 0.090931 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表