Версия Дата выпуска Скачивания Оценка  
1.7.x 138 0.00 звёзд 0 оценок Скачать
Что нового?
- Исправлена передача неверного параметра при чтении json из файла (из-за чего некоторые файлы не могли быть открыты)
- Добавлена сборка `ubuntu-20.04`*


* - для тех, у кого проблемы на `ubuntu-latest`, связанные с `version glibcxx_3.4.x not found` могут попробовать сборку `ubuntu-20.04` (в ином случае придется собирать самостоятельно, либо костылить, особенно это касается пользователей различных панелек)
Что нового?
- Исправлено некорректное поведение при чтении Json из файла, используя Json.JsonF
- Исправлено некорректное возвращение состояния при использовании JsonObject.Set
- Изменена сигнатура метода IJansson::create
  • Мне нравится
Реакции: dvernoff
Что нового?
- Отсрочено выделение памяти под Json объект в случае, когда Json строка синтаксически неверна (в том числе при чтении из файла)*

* - конструктор Json и JsonF теперь содержит пару необязательных параметров для извлечения ошибки.

Версия 1.7.x теперь LTS версия
Что нового?
- Возвращена поддержка null-значения* для JsonObject.Set / JsonArray.Push / JsonArray.Set
- Исправлена утечка памяти при дампе Json в строку
- Для методов с параметром freeHandle теперь гарантируется высвобождение памяти из под объекта при истинности значения параметра

* - поле типа JNullType могут быть получены через JsonObject.Get / JsonArray.Get, как полноценный Json объект, однако в этом нет особого смысла, если вы уже значете, что поле типа JNullType

** - для версий 1.х.х >= 1.6.0 рекомпил плагинов не требуется
Что нового?
- Вызов исключений заменен вызовом сообщений об ошибках (поскольку нет возможности как-то корректно обрабатывать исключения плагином)
- Отложено выделение памяти (должно гарантировать, что очередной Json != null валиден)

Не требует перекомпиляции плагинов
Что нового (итого)?
- Версия релизная, поскольку большая часть функционала протестировано
- Реализован интерфейс для взаимодействия с расширениями: sm-jansson/public/IJansson.h at main · rejchev/sm-jansson
- Обновлено SourcePawn API: sm-jansson/pawn/scripting/include/jansson.inc at main · rejchev/sm-jansson
- Контроль версий: x.y.z ( x - major, y - minor. z - bugs ).
Начиная с 1.6.0 гарантируется, что для заданной major версии сохраняется обратная совместимость minor & bugs.
Что нового?
- Исправлена внутренняя утечка
- [SMExt-API] IJsonError заменен на JsonError_t
- [SMExt-API] IJansson.createp заменен на IJansson.create
- [SMExt-API] IJsonObject.keys(JsonType, size_t) теперь принимает два параметра и возвращает IJsonArray

- [SP-API] JsonError удален
- [SP-API] Json.Error свойство изменено на Json.Valid
- [SP-API] JsonObject.Remove метод возвращен
- [SP-API] JsonObjectKeyIterator полностью вырезан
- [SP-API] JsonObject.Size добавлено *
- [SP-API] JsonArray.Size prop добавлено *
- [SP-API] JsonObject.Keys теперь является методом от двух параметров: JsonType и flags; возвращает JsonArray

* - тоже самое, что и Json.Size, но без приведения типов

Касательно JsonError: тип, как оказалось, не имел смысла, поскольку гарантируется что Json объект типа Handle отличный от null их не содержит; в ином случае - исключение ;/
Что нового?
- JsonObject.Keys() теперь является свойством типа ArrayList*: ArrayList JsonObject.Keys

* - хардкодистая хрень, как и все типы ядра SM (ノ-_-)ノ~┻━┻

Что планируется:
- Что-то придумать с ArrayList, т.к. хранить в нем строки неизвестной длины дорого
- Добавить фильтрацию по типу для метода JsonObject.Keys(JsonType)
- Что-то сделать с JsonError

test.sp:
#include <jansson>

public void OnPluginStart()
{
    Json b;
    Json o = (new JsonBuilder("{}"))
        .SetString("abc", "dbc")
        .SetFloat("ab", 012.32)
        .SetInt("ada", 232)
        .SetBool("asdada", true)
        .Set("array", (b = (new JsonBuilder("[]"))
            .PushString("asdada")
            .PushInt(41)
            .Build()))
        .Build();

    LogMessage("B type: %d", b.Type);
    LogMessage("O type; %d", o.Type);

    LogMessage("Simple int: %d", asJSONA(asJSONO(o).Get("array")).GetInt(1, true));

    ArrayList keys = asJSONO(o).Keys;

    LogMessage("Keys: %x", keys);

    char buffer[1024];
    if(keys)
    {
        for(int i = 0; i < keys.Length; i++)
        {
            keys.GetString(i, buffer, sizeof(buffer));
            LogMessage("Key(%d): %s", i + 1, buffer);
        }
    }
       
    delete keys;

    // char buffer[1024];
    if(b.Dump(buffer, sizeof(buffer), JSON_INDENT(44), true))
        LogMessage("Array: %s", buffer);

    else delete b;

    if(o.Dump(buffer, sizeof(buffer), JSON_INDENT(4), true))
        LogMessage("Dump: %s", buffer);

    else delete o;
}
Что нового?
- Исправлена утечка памяти при неявном закрытии дескриптора
- Исправлено игнорирование encode/decode флагов

test.smx:
#include <jansson>

public void OnPluginStart()
{
    Json b;
    Json o = (new JsonBuilder("{}"))
        .SetString("abc", "dbc")
        .SetFloat("ab", 012.32)
        .SetInt("ada", 232)
        .SetBool("asdada", true)
        .Set("array", (b = (new JsonBuilder("[]"))
            .PushString("asdada")
            .PushInt(41)
            .Build()))
        .Build();

    LogMessage("B type: %d", b.Type);
    LogMessage("O type; %d", o.Type);

    // неявное закрытие JsonArray при извлечении целочисленного
    LogMessage("Simple int: %d", asJSONA(asJSONO(o).Get("array")).GetInt(1, true));

    char buffer[1024];
    if(b.Dump(buffer, sizeof(buffer), JSON_INDENT(44), true))
        LogMessage("Array: %s", buffer);

    else delete b;

    if(o.Dump(buffer, sizeof(buffer), JSON_INDENT(4), true))
        LogMessage("Dump: %s", buffer);

    else delete o;

}
  • Мне нравится
Реакции: zokix
Сверху Снизу