Друзья! В данной статье мы бы хотели рассказать про кроссплатформенную коллекцию утилитных C++ компонентов CUtils.
CUtils — это довольно полезный инструмент при разработке кроссплатформенного программного обеспечения на языке программирования C++.
В первой версии этой коллекции содержатся компоненты, которые были необходимы в разработке игрового движка Case Engine, такие как SystemConfiguration, INIParser, Notification и т. д.
Установка библиотеки
Вы можете скачать репозиторий уже с собранными файлами под Windows, а можете самостоятельно собрать библиотеку из исходников.
1. скачайте официальный репозиторий коллекции с GitHub -
https://github.com/case-tech/CUtils-Win
И подключите Include и Lib к вашему проекту:
2.. Установите исходники библиотеки с GitHub
И соберите её с помощью команд:
mkdir Out
cd Out
cmake ..
cmake --build .
Функционал
Хэширование по алгоритму SHA-256
С помощью библиотеки CUtils можно реализовать хэширование данных через заголовок Hashed.hpp:
#include <Hashed.hpp>
using namespace CUtils;
int main()
{
Hashed hasher;
std::string originalText = "Hello, world!";
std::string filename = "example";
hasher.HashAndSave(originalText, filename);
std::string savedHash = hasher.ReadHashFromFile(filename + ".hash");
return 0;
}
INI Parser
С помощью заголовка INIParser.hpp можно реализовать парсинг данных из конфигурационного файла .ini:
#include <INIParser.hpp>
using namespace CUtils;
int main()
{
INIParser parser("config.ini");
if (parser.Load())
{
std::string value = parser.GetValue("Settings", "Resolution");
std::cout << "Resolution: " << value << std::endl;
parser.SetValue("Settings", "Resolution", "1920x1080");
parser.Save();
}
else
{
std::cerr << "Failed to load INI file." << std::endl;
}
return 0;
}
NoisePerlin
В CUtils уже есть готовая реализация алгоритма Шума Перлина:
#include <NoisePerlin.hpp>
#include <iostream>
using namespace CUtils;
int main()
{
NoisePerlin perlin;
double value = perlin.Noise(1.0, 2.0);
std::cout << "Perlin Noise Value: " << value << std::endl;
return 0;
}
Notification
Вы можете реализовать вывод ошибок, предупреждений, информации с помощью заголовка Notification.hpp:
#include <Notification.hpp>
using namespace CUtils;
int main()
{
Notification::notify(Notification::TYPE_ERROR, "This is an error message.");
Notification::notify(Notification::TYPE_WARNING, "This is a warning message.");
Notification::notify(Notification::TYPE_INFO, "This is an info message.");
return 0;
}
А остальное вы сможете посмотреть в нашей документации
Ссылки
Комментарии (8)
rbetik
10.11.2024 11:01Зачем говорить, что можно собрать библиотеку из исходников и при этом хранить их в отдельном репо, не предоставив на них ссылку?
Еще у вас написано, что community версия движка open source, но я ее не вижу на гитхабе. Скринов движка тоже нет, а только лишь красивая картинка пдфка с описанием. Будет ли доступ к исходникам, интересно на них посмотреть?
Serpentine
10.11.2024 11:01На Хабре было две новости про этот движок:
Его разрабатывают
Разработку заморозили
В последней была ссылка на исходники (сейчас последний коммит там был перед заморозкой, т.е. в апреле).
case-tech Автор
10.11.2024 11:01Игровой движок Case Engine сейчас находится в разработке, и все исходники можно будет посмотреть после релиза.
Подробнее про Case Engine вы можете посмотреть на сайте - https://caseengine.ru/
qweururu
10.11.2024 11:01void HashAndSave(const std::string& text, const std::string& filename);
std::string ReadHashFromFile(const std::string& filename) const;
Подобные интерфейсы очень сильно ограничивают применимость библиотеки. Если не нужен хэш в файле, нужно будет выкручиваться с tmpfs или чем-то подобным(и дае так это хуже, чем иметь hash_t sha256(data_t&)). Причём реализацию такой подход также не упрощает. Неясна мотивация выбора данного подхода.
ivazhu
10.11.2024 11:01Это, кстати, почему-то частая проблема библиотек шифрования. У них почему-то обычно хорошо описаны с примерами интерфейсы через файлы (вплоть до сохранения и чтения открытого и закрытого ключа) и спрятаны как можно дальше аналоги для всего того же из памяти
voldemar_d
10.11.2024 11:01подключите Include и Lib к вашему проекту:
Мало того, что здесь скриншот, из которого текст не скопируешь, так ещё и пути в нём не целиком видны.
Те, кто это писал, задумывались о том, как такой инструкцией пользоваться?
simplepersonru
Репозиторий называется CUtils-Win, в Readme еще раз прописано CUtils Windows
В репозитории лежат скомпилированные библиотеки под Windows.
Где тут кроссплатформа?
Последний пример кода явно поврежден.
Оглавления нет. Вместо кодовых вставок сырой текст. Пояснений почти нет, просто некрасиво оформленный код
Полистал документацию. Компоненты обо всем и ни о чем. Ощущение, что было принято решение сделать свои велосипеды почти на всё, когда есть альтернативы. У такого решения есть обоснование?
Поверил бы больше, если датой публикации было бы 1 апреля
case-tech Автор
В статье мы написали два способа подключения библиотеки. Вы можете использовать уже собранные файлы, а можете собрать библиотеку из исходников - https://github.com/case-tech/CUtils-Sources.
Документация, которая указана в репозиториях на GitHub, является временной, и в скором времени мы это исправим.