ParamList.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "ParamList.h"
  2. ParamList::~ParamList()
  3. {
  4. for (auto v : parms_list)
  5. {
  6. delete v;
  7. }
  8. parms_list.clear();
  9. }
  10. const wchar_t *ParamList::getItemName(int i)
  11. {
  12. if(((size_t)i)>=getNbItems())
  13. return L"";
  14. return
  15. parms_list[i]->parm;
  16. }
  17. const wchar_t *ParamList::getItemValueIndex(int i)
  18. {
  19. if(((size_t)i)>=getNbItems())
  20. return L"";
  21. return
  22. parms_list[i]->value;
  23. }
  24. const wchar_t *ParamList::getItemValue(const wchar_t *name)
  25. {
  26. for(size_t i=0;i!=getNbItems();i++)
  27. if(!_wcsicmp(parms_list[i]->parm, name))
  28. return parms_list[i]->value;
  29. return NULL;
  30. }
  31. const wchar_t *ParamList::enumItemValues(const wchar_t *name, int nb)
  32. {
  33. int f=0;
  34. for(size_t i=0;i!=getNbItems();i++)
  35. if(!_wcsicmp(parms_list[i]->parm, name))
  36. if(f==nb)
  37. return parms_list[i]->value;
  38. else f++;
  39. return NULL;
  40. }
  41. int ParamList::getItemValueInt(const wchar_t *name, int def)
  42. {
  43. for(size_t i=0;i!=getNbItems();i++)
  44. if(!_wcsicmp(parms_list[i]->parm, name))
  45. {
  46. return (parms_list[i]->value ? _wtoi(parms_list[i]->value) : def);
  47. }
  48. return def;
  49. }
  50. size_t ParamList::getNbItems()
  51. {
  52. return parms_list.size();
  53. }
  54. void ParamList::addItem(const wchar_t *parm, const wchar_t *value)
  55. {
  56. parms_struct *p= new parms_struct;
  57. p->parm = _wcsdup(parm);
  58. p->ownValue = true;
  59. p->value = _wcsdup(value);
  60. parms_list.push_back(p);
  61. }
  62. void ParamList::removeItem(const wchar_t *parm)
  63. {
  64. //for (size_t i=0;i!=parms_list.size();i++)
  65. //{
  66. // parms_struct *s = parms_list[i];
  67. // if (!_wcsicmp(parm, s->parm))
  68. // {
  69. // delete s;
  70. // parms_list.eraseindex(i);
  71. // i--;
  72. // }
  73. //}
  74. for (auto it = parms_list.begin(); it != parms_list.end(); it++)
  75. {
  76. parms_struct* s = *it;
  77. if (!_wcsicmp(parm, s->parm))
  78. {
  79. delete s;
  80. it = parms_list.erase(it);
  81. }
  82. }
  83. }
  84. int ParamList::findItem(const wchar_t *parm)
  85. {
  86. for(size_t i=0;i!=getNbItems();i++)
  87. if(!_wcsicmp(parms_list[i]->parm, parm))
  88. return (int)i;
  89. return -1;
  90. }
  91. #define CBCLASS ParamList
  92. START_DISPATCH;
  93. CB(XMLREADERPARAMS_GETITEMNAME, getItemName)
  94. CB(XMLREADERPARAMS_GETITEMVALUE, getItemValueIndex)
  95. CB(XMLREADERPARAMS_GETITEMVALUE2, getItemValue)
  96. CB(XMLREADERPARAMS_ENUMITEMVALUES, enumItemValues)
  97. CB(XMLREADERPARAMS_GETITEMVALUEINT, getItemValueInt)
  98. CB(XMLREADERPARAMS_GETNBITEMS, getNbItems)
  99. END_DISPATCH;
  100. #undef CBCLASS