Самый быстрый INI ридер/райтер ( Penis )

Самый быстрый INI ридер/райтер ( Penis ) 2025-10-08

Нет прав для скачивания

Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
Версия мультиплеера
  1. SA:MP 0.3.7
  2. SA:MP 0.3e
  3. CR:MP 0.3.7
  4. CR:MP 0.3e
  5. open.mp

📚 PENIS — Ultra-Fast Key-Value Config Handler for SA-MP

PENIS — это высокопроизводительная библиотека для работы с конфигурационными файлами в формате key = value (аналог INI), разработанная специально для серверов San Andreas Multiplayer (SA-MP) на языке Pawn.

Важно: Название PENIS не имеет никакого отношения к анатомии. Это аббревиатура от Pawn Efficient Non-blocking In-memory Storage — и отражает суть библиотеки: максимальная скорость, минимальное потребление ресурсов, работа в памяти без блокировок диска при чтении.



💡 Почему PENIS?​

  • ✅ Мгновенный доступ к данным — всё содержимое файла хранится в оперативной памяти.
  • ✅ Нулевые задержки при чтении — парсинг выполняется один раз при открытии.
  • ✅ Безопасная запись — изменения сохраняются только при закрытии файла.
  • ✅ Поддержка строк, целых и дробных чисел — всё, что нужно для конфигов.
  • ✅ Автоматическое создание/добавление ключей — не нужно вручную редактировать файлы.
  • ✅ Полная совместимость с SA-MP 0.3.x и компилятором Pawn 3.10+.



📦 Установка​

  1. Скачайте файл penis.inc.
  2. Поместите его в папку pawno\include вашего SA-MP сервера.
  3. В начале вашего скрипта добавьте

#include <penis>


⚠️ Убедитесь, что у вас нет других INI-библиотек (например, mxINI.inc), чтобы избежать конфликтов имён.



🧰 Доступные функции​

penis_create(const path[], const content[] = "")Создаёт новый файл в памяти (запись на диск — при закрытии).
penis_open(const path[])Открывает существующий файл и загружает его в память.
penis_close(file_id)Сохраняет изменения (если были) и освобождает память.
penis_set_str(file_id, "key", "value")Устанавливает строковое значение ключа.
penis_set_int(file_id, "key", 123)Устанавливает целочисленное значение.
penis_set_float(file_id, "key", 3.14)Устанавливает дробное значение.
penis_get_str(file_id, "key", output[], size = sizeof(output))Получает строку по ключу.
penis_get_int(file_id, "key", &value)Получает целое число.
penis_get_float(file_id, "key", &Float:value)Получает дробное число.
penis_remove(file_id, "key")Удаляет ключ и его значение из файла.
penis_error_msg(code)Возвращает человекочитаемое описание ошибки.



Все функции возвращают код результата:
  • >= 0 — успех (для penis_create/penis_open это ID файла),
  • < 0 — ошибка (используйте penis_error_msg для диагностики).



🧪 Пример использования​


#include <a_samp>
#include <penis>

main()
{
new cfg = penis_create("players/123.pen");
if (cfg < 0)
cfg = penis_open("players/123.pen");

if (cfg >= 0)
{
// Запись данных
penis_set_str(cfg, "name", "John_Doe");
penis_set_int(cfg, "score", 9876);
penis_set_float(cfg, "health", 99.5);

// Чтение данных
new name[32]; new score; new Float:hp;
penis_get_str(cfg, "name", name);
penis_get_int(cfg, "score", score);
penis_get_float(cfg, "health", hp);

printf("[PENIS] Игрок: %s, Счёт: %d, Здоровье: %.1f", name, score, hp);

// Удаление ключа
penis_remove(cfg, "temp_flag");

// Сохранение и закрытие
penis_close(cfg);
}
else
{
printf("[PENIS ERROR] %s", penis_error_msg(cfg));
}
}







⚙️ Настройка под ваш проект​

Вы можете переопределить лимиты до подключения библиотеки:


#define PENIS_MAX_FILES 10 // макс. одновременно открытых файлов
#define PENIS_MAX_SIZE 262144 // макс. размер файла (256 КБ)
#define PENIS_MAX_PATH 256 // макс. длина пути к файлу
#define PENIS_MAX_KEYS 4096 // макс. ключей в одном файле

#include <penis>

По умолчанию:
  • 2 файла,
  • 64 КБ на файл,
  • 128 символов в пути,
  • 2048 ключей.



🛡️ Безопасность и ограничения​

  • Имена ключей не могут содержать символы \r и \n.
  • Значения автоматически обрезаются по концу строки.
  • Пробелы и табуляции до и после = игнорируются.
  • Формат float: %.6f (6 знаков после запятой).
  • Все операции неблокирующие — идеально для игровых циклов.



📝 Заключение​

PENIS — это не просто замена mxINI. Это эволюция: меньше кода, выше скорость, чище архитектура.
Идеально подходит для:

  • Сохранения профилей игроков,
  • Хранения настроек сервера,
  • Временных конфигураций,
  • Лёгких баз данных без SQL.

🚀 PENIS — потому что ваш сервер заслуживает скорости.


Автор @pawneror специально для портала pawno-help.ru

Если у вас есть вопросы или предложения — пишите в комментариях.

Удачного кодинга! 💻
Автор
pawneror
Скачивания
1
Просмотры
127
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху