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

模拟服务器

开发平台:

C/C++

  1. // KScriptValueSet.cpp: implementation of the KScriptValueSet class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "KCore.h"
  5. #include "KScriptValueSet.h"
  6. #include "KIniFile.h"
  7. KScriptValueSet g_ScriptValueSet;
  8. //////////////////////////////////////////////////////////////////////
  9. // Construction/Destruction
  10. //////////////////////////////////////////////////////////////////////
  11. KScriptValueSet::KScriptValueSet()
  12. {
  13. }
  14. KScriptValueSet::~KScriptValueSet()
  15. {
  16. }
  17. BOOL KScriptValueSet::Load(char * FileName)
  18. {
  19. KIniFile File;
  20. if (!File.Load(FileName)) return FALSE;
  21. char ValueName[40];
  22. strcpy(ValueName, "");
  23. while (File.GetNextKey("StringValue", ValueName, ValueName))
  24. {
  25. char StringValue[100];
  26. File.GetString("StringValue", ValueName, "", StringValue, 100);
  27. TStringValueNode * pNode = new TStringValueNode(ValueName, StringValue);
  28. m_StringValueList.AddTail(pNode);
  29. }
  30. strcpy(ValueName,"");
  31. while (File.GetNextKey("IntegerValue", ValueName, ValueName))
  32. {
  33. int nValue;
  34. File.GetInteger("IntegerValue", ValueName, 0, &nValue);
  35. TIntegerValueNode * pNode = new TIntegerValueNode(ValueName, nValue);
  36. m_IntegerValueList.AddTail(pNode);
  37. }
  38. return TRUE;
  39. }
  40. BOOL KScriptValueSet::Save(char * FileName)
  41. {
  42. KIniFile File;
  43. File.Load(FileName);
  44. TStringValueNode * pStrNode = (TStringValueNode*)m_StringValueList.GetHead();
  45. while(pStrNode)
  46. {
  47. File.WriteString("StringValue", pStrNode->ValueName, pStrNode->strValue);
  48. pStrNode = (TStringValueNode*)pStrNode->GetNext();
  49. }
  50. TIntegerValueNode * pIntNode = (TIntegerValueNode*)m_IntegerValueList.GetHead();
  51. while(pIntNode)
  52. {
  53. File.WriteInteger("IntegerValue", pIntNode->ValueName, pIntNode->intValue);
  54. pIntNode = (TIntegerValueNode * ) pIntNode->GetNext();
  55. }
  56. File.Save(FileName);
  57. return TRUE;
  58. }
  59. BOOL KScriptValueSet::SetValue(char * pValueName, char * pValue)
  60. {
  61. TStringValueNode * pNode = (TStringValueNode *) SearchValue(pValueName, 0);
  62. if (pNode == NULL)
  63. {
  64. AddValue(pValueName , pValue);
  65. return FALSE;
  66. }
  67. else 
  68. {
  69. strcpy(pNode->strValue, pValue);
  70. return TRUE;
  71. }
  72. return FALSE;
  73. }
  74. BOOL KScriptValueSet::SetValue(char * pValueName, int  nValue)
  75. {
  76. TIntegerValueNode * pNode = (TIntegerValueNode *) SearchValue(pValueName, 1);
  77. if (pNode == NULL)
  78. {
  79. AddValue(pValueName, nValue);
  80. return FALSE;
  81. }
  82. else
  83. {
  84. pNode->intValue = nValue;
  85. return TRUE;
  86. }
  87. return FALSE;
  88. }
  89. BOOL KScriptValueSet::GetValue(char * pValueName, char * pValue)
  90. {
  91. TStringValueNode * pNode = (TStringValueNode *) SearchValue(pValueName, 0);
  92. if (pNode == NULL) {strcpy(pValue,""); return FALSE;};
  93. strcpy(pValue, pNode->strValue);
  94. return TRUE;
  95. }
  96. BOOL KScriptValueSet::GetValue(char * pValueName, int *pValue)
  97. {
  98. TIntegerValueNode * pNode = (TIntegerValueNode *) SearchValue(pValueName, 1);
  99. if (pNode == NULL) {*pValue = 0 ; return FALSE;};
  100. *pValue = pNode->intValue;
  101. return TRUE;
  102. }
  103. void KScriptValueSet::AddValue(char * pValueName , char * pValue)
  104. {
  105. TStringValueNode * pNode = new TStringValueNode(pValueName, pValue);
  106. m_StringValueList.AddTail(pNode);
  107. }
  108. void KScriptValueSet::AddValue(char * pValueName, int Value)
  109. {
  110. TIntegerValueNode * pNode = new TIntegerValueNode(pValueName, Value);
  111. m_IntegerValueList.AddTail(pNode);
  112. }
  113. KNode* KScriptValueSet::SearchValue(char * pValueName, int nType)
  114. {
  115. switch(nType)
  116. {
  117. case 0:
  118. {
  119. TStringValueNode * pNode = (TStringValueNode*)m_StringValueList.GetHead();
  120. while (pNode)
  121. {
  122. if (!strcmp(pNode->ValueName, pValueName)) return pNode;
  123. pNode = (TStringValueNode*)pNode->GetNext();
  124. }
  125. }break;
  126. case 1:
  127. {
  128. TIntegerValueNode * pNode = (TIntegerValueNode*)m_IntegerValueList.GetHead();
  129. while (pNode)
  130. {
  131. if (!strcmp(pNode->ValueName, pValueName)) return pNode;
  132. pNode = (TIntegerValueNode*)pNode->GetNext();
  133. }
  134. }break;
  135. }
  136. return NULL;
  137. }