https://github.com/krutoimag/turboini
Стараюсь написать максимально быстродействующую библиотеку C++ для чтения файлов ".ini" формата.
https://github.com/krutoimag/turboini
cpp cpp17 fast ini ini-parser xmake
Last synced: over 1 year ago
JSON representation
Стараюсь написать максимально быстродействующую библиотеку C++ для чтения файлов ".ini" формата.
- Host: GitHub
- URL: https://github.com/krutoimag/turboini
- Owner: KrutoiMag
- Created: 2024-11-11T12:46:19.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-11-25T22:23:47.000Z (over 1 year ago)
- Last Synced: 2025-03-01T15:37:27.909Z (over 1 year ago)
- Topics: cpp, cpp17, fast, ini, ini-parser, xmake
- Language: C++
- Homepage:
- Size: 487 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[](https://github.com/HotWizard/TurboINI/actions/workflows/codeql.yml)
# TurboINI
### Примечания
- Версия C++ >= 17.
- [xmake](https://xmake.io/#/)
### Построение и запуск тестовых программ
```shell
# Построение и запуск tests/0.cpp и tests/1.cpp программ.
xmake && xmake run 0 && xmake run 1
```
### Документация
Документацию можете посмотреть в файле [DOCUMENTATION.md](DOCUMENTATION.md)
### Пример кода C++, не требующий \"INI\" файла
```cpp
#include "TurboINI.hpp"
#include
#include
#include
using TIT = TurboINI::types;
inline std::unique_ptr parser;
const inline void InitParser(const std::string &raw)
{
parser = std::make_unique(raw);
}
int main(void)
{
InitParser("\"integer\"=324");
if (parser->exists(TIT::INTEGER, "integer"))
std::cout << parser->GetInteger("integer") << std::endl;
return EXIT_SUCCESS;
}
```
---
### Пример кода C++, но уже с использованием \"INI\" файла
```cpp
// main.cpp
#include "TurboINI.hpp"
#include
#include
using namespace std;
TurboINI::parser parser;
const inline void init(const std::string &path)
{
if (!parser.open(path))
exit(EXIT_FAILURE);
parser.EnableRefreshing(true);
}
int main(int argc, char **argv)
{
if (argc == 2)
{
init(argv[1]);
if (parser.exists(TurboINI::types::INTEGER, "integer"))
cout << parser.GetInteger("integer") << endl;
if (parser.exists(TurboINI::types::STRING, "string"))
cout << parser.get("string") << endl;
if (parser.NamespaceExists("namespace"))
{
if (parser.ExistsInNamespace(TurboINI::types::INTEGER, "namespace", "integer"))
cout << parser.GetIntegerFromNamespace("namespace", "integer") << endl;
if (parser.ExistsInNamespace(TurboINI::types::STRING, "namespace", "string"))
cout << parser.GetFromNamespace("namespace", "string") << endl;
}
}
parser.close();
return EXIT_SUCCESS;
}
```
```ini
"integer"=1
"string"="string"
["namespace"]
"integer"=1
"string"="1"
```
### Пример команды компиляции и запуска тестовой программы с помощью GCC на Unix
```shell
g++ -std=c++17 -Wall -Werror -Wpedantic -pedantic-errors -g tools.cpp parser.cpp main.cpp && ./a.out test.ini
```
### ToDo
- [x] Добавить возможность чтения значения строки.
- [x] Добавить возможность чтения пространств имён.
- [ ] Добавить возможность чтения массивов.
- [x] Добавить возможность чтения целых чисел.
- [ ] Добавить возможность чтения вещественных чисел.