IniParser.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #ifndef _IniParser_h_
  2. #define _IniParser_h_
  3. #include "..\..\common_h\core.h"
  4. class IniParser
  5. {
  6. struct Token
  7. {
  8. long start; //Начало токена
  9. long size; //Размер токена
  10. };
  11. struct Key
  12. {
  13. Token name; //Имя ключа
  14. Token value; //Значение ключа
  15. long startLine; //Начало строки с ключём
  16. long endLine; //Окончание строки с ключём
  17. };
  18. struct Section
  19. {
  20. Token name; //Имя секции
  21. long start; //Индекс начального ключа
  22. long size; //Количество ключей
  23. long startLine; //Начало строки с названием секции
  24. long endLine; //Окончание строки с названием секции
  25. };
  26. //--------------------------------------------------------------------------------------------------
  27. public:
  28. IniParser();
  29. ~IniParser();
  30. //--------------------------------------------------------------------------------------------------
  31. //Инициализация
  32. //--------------------------------------------------------------------------------------------------
  33. public:
  34. //Выделить буфер для внешнего заполнения
  35. void * Reserved(long _size);
  36. //Разобрать файл на токены для дальнейшего использования
  37. void Parse();
  38. //--------------------------------------------------------------------------------------------------
  39. //Работа с ini
  40. //--------------------------------------------------------------------------------------------------
  41. public:
  42. //Получить все секции
  43. void GetSections(array<string> & sects);
  44. //Найти секцию
  45. long FindSection(const char * section);
  46. //Добавить новую секцию
  47. long AddSection(const char * section);
  48. //Удалить секцию
  49. void DelSection(long sectionIndex);
  50. //Найти ключ в секции начиная с current
  51. long FindKey(long sectionIndex, const char * name, long nameLen, long keyIndex = -1);
  52. //Установить новое значение ключу
  53. void SetKey(long keyIndex, const char * value);
  54. //Получить значение ключа
  55. const char * GetKey(long keyIndex);
  56. //Добавить ключ
  57. long AddKey(long sectionIndex, const char * name, const char * value);
  58. //Удалить ключ
  59. void DelKey(long keyIndex);
  60. //Получить буфер
  61. const void * GetBuffer(dword & size);
  62. //--------------------------------------------------------------------------------------------------
  63. //Вывод сообщений об ошибке
  64. //--------------------------------------------------------------------------------------------------
  65. protected:
  66. //Добавить сообщение об ошибке
  67. void _cdecl AddError(const char * format, ...);
  68. //--------------------------------------------------------------------------------------------------
  69. //Системное
  70. //--------------------------------------------------------------------------------------------------
  71. private:
  72. //Найти начало токена
  73. long ParseFindStartToken(long i);
  74. //Пропускаем коментарий
  75. long ParseSkipComment(long i);
  76. //Зачитываем название секции
  77. long ParseGetSection(long i);
  78. //Зачитываем ключ
  79. long ParseGetKey(long i);
  80. //Сравнить 2 строки
  81. bool ParseEqual(long start1, long size1, long start2, long size2);
  82. //Сравнить 2 строки
  83. bool Equal(const Token & tk, const char * str, long len);
  84. //Заполнить строку
  85. void FillString(const Token & tk, string & str);
  86. //Привести символ к нижнему регистру
  87. static char ToLower(char c);
  88. //Заменить часть данных на новые
  89. void ChangeData(long start, long size, const char * str);
  90. //Поправить начало строки
  91. static void Modify(long start, long dlt, long & current);
  92. //--------------------------------------------------------------------------------------------------
  93. public:
  94. string fileName;
  95. private:
  96. array<byte> data;
  97. array<Key> keys;
  98. array<Section> sections;
  99. string temp;
  100. static long startLine;
  101. static long line;
  102. };
  103. #endif