Мне нужна платформа сериализации для D

extension Character {
    var isAscii: Bool {
        return unicodeScalars.allSatisfy { [110].isASCII }
    }
}

let string = "cafe\u{301}"
let filtered = string.filter { [110].isAscii }
print(filtered)  // "caf"
5
задан BCS 23 April 2009 в 21:19
поделиться

3 ответа

Have a look at Google Protocol Buffers. Maybe you can use the C++ or C bindings directly, or write D bindings yourself.

3
ответ дан 14 December 2019 в 13:46
поделиться

Вот основной, который я написал для D 1.x. Он был написан довольно давно, поэтому, возможно, его можно улучшить, но он работает . Фактический формат - это двоичный порядок сетевых байтов, поэтому хранить и передавать байты безопасно.

http://gist.github.com/100885

Он не поддерживает классы или произвольные указатели. Чтобы сделать это правильно , вам нужно что-то, что запомнит, какие ссылки уже были сериализованы. Если вы ограничитесь типами значений, массивами и AA, это сработает.

Если вы хотите расширить его для поддержки классов, я бы посоветовал определить методы toStream и fromStream.

2
ответ дан 14 December 2019 в 13:46
поделиться

Я рекомендую вам написать свое собственное, поскольку это полезное упражнение по шаблонированию и помогает адаптировать формат сериализации к вашим конкретным требованиям.

Возможно, вы захотите взглянуть на tools.serialize ( http://dsource.org/projects/scrapple/browser/trunk/tools/tools/serialize.d ) в качестве отправной точки.

[редактировать] Извините! Не понял, что это был ты! : D

1
ответ дан 14 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: