Друзья! В данной статье мы бы хотели рассказать про кроссплатформенную коллекцию утилитных C++ компонентов CUtils.

CUtils — это довольно полезный инструмент при разработке кроссплатформенного программного обеспечения на языке программирования C++.

В первой версии этой коллекции содержатся компоненты, которые были необходимы в разработке игрового движка Case Engine, такие как SystemConfiguration, INIParser, Notification и т. д.

Установка библиотеки

Вы можете скачать репозиторий уже с собранными файлами под Windows, а можете самостоятельно собрать библиотеку из исходников.

1. скачайте официальный репозиторий коллекции с GitHub -

https://github.com/case-tech/CUtils-Win

И подключите Include и Lib к вашему проекту:

Библиотека CUtils
Библиотека CUtils

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; 
}

А остальное вы сможете посмотреть в нашей документации

Ссылки

Наш GitHub

Официальный сайт

Комментарии (8)


  1. simplepersonru
    10.11.2024 11:01

    кроссплатформенную коллекцию утилитных C++ компонентов CUtils

    1. Репозиторий называется CUtils-Win, в Readme еще раз прописано CUtils Windows

    2. В репозитории лежат скомпилированные библиотеки под Windows.

    Где тут кроссплатформа?

    Вы можете реализовать вывод ошибок, предупреждений, информации с помощью заголовка Notification.hpp

    Последний пример кода явно поврежден.

    А остальное вы сможете посмотреть в нашей документации

    Оглавления нет. Вместо кодовых вставок сырой текст. Пояснений почти нет, просто некрасиво оформленный код

    Полистал документацию. Компоненты обо всем и ни о чем. Ощущение, что было принято решение сделать свои велосипеды почти на всё, когда есть альтернативы. У такого решения есть обоснование?

    Поверил бы больше, если датой публикации было бы 1 апреля


    1. case-tech Автор
      10.11.2024 11:01

      В статье мы написали два способа подключения библиотеки. Вы можете использовать уже собранные файлы, а можете собрать библиотеку из исходников - https://github.com/case-tech/CUtils-Sources.

      Документация, которая указана в репозиториях на GitHub, является временной, и в скором времени мы это исправим.


  1. rbetik
    10.11.2024 11:01

    Зачем говорить, что можно собрать библиотеку из исходников и при этом хранить их в отдельном репо, не предоставив на них ссылку?

    Еще у вас написано, что community версия движка open source, но я ее не вижу на гитхабе. Скринов движка тоже нет, а только лишь красивая картинка пдфка с описанием. Будет ли доступ к исходникам, интересно на них посмотреть?


    1. Serpentine
      10.11.2024 11:01

      На Хабре было две новости про этот движок:

      1. Его разрабатывают

      2. Разработку заморозили

      В последней была ссылка на исходники (сейчас последний коммит там был перед заморозкой, т.е. в апреле).


    1. case-tech Автор
      10.11.2024 11:01

      Игровой движок Case Engine сейчас находится в разработке, и все исходники можно будет посмотреть после релиза.

      Подробнее про Case Engine вы можете посмотреть на сайте - https://caseengine.ru/


  1. qweururu
    10.11.2024 11:01

    void HashAndSave(const std::string& text, const std::string& filename);

    std::string ReadHashFromFile(const std::string& filename) const;

    Подобные интерфейсы очень сильно ограничивают применимость библиотеки. Если не нужен хэш в файле, нужно будет выкручиваться с tmpfs или чем-то подобным(и дае так это хуже, чем иметь hash_t sha256(data_t&)). Причём реализацию такой подход также не упрощает. Неясна мотивация выбора данного подхода.


    1. ivazhu
      10.11.2024 11:01

      Это, кстати, почему-то частая проблема библиотек шифрования. У них почему-то обычно хорошо описаны с примерами интерфейсы через файлы (вплоть до сохранения и чтения открытого и закрытого ключа) и спрятаны как можно дальше аналоги для всего того же из памяти


  1. voldemar_d
    10.11.2024 11:01

    подключите Include и Lib к вашему проекту:

    Мало того, что здесь скриншот, из которого текст не скопируешь, так ещё и пути в нём не целиком видны.

    Те, кто это писал, задумывались о том, как такой инструкцией пользоваться?