лимиты для сериализации
От: niXman Ниоткуда https://github.com/niXman
Дата: 23.10.16 11:27
Оценка:
снова привет!

хочу добавить в YAS лимиты.
очевидное применение — ограничения на размеры десериализуемых контейнеров/строк.

пример:
struct type {
   std::string str;

   template<typename Ar>
   void serialize(Ar &ar) {
      ar & yas::limit(str, 32); // при десериализации длина строки ограничена 32ум символам
   }
};

// ...
type t;
yas::binary_oarchive oa;
oa & t;

при десериализации, если сериализатор видит что пришла строка длинее 32 — бросает исключение.

вопроса у меня два:
1. нужно ли использовать лимиты и для сериализации?(для записи в архив) вроде как это забота юзера.
2. нужно ли использовать лимиты и для фундаментальных типов?


спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: лимиты для сериализации
От: niXman Ниоткуда https://github.com/niXman
Дата: 24.10.16 07:38
Оценка:
Здравствуйте, niXman, Вы писали:

X>1. нужно ли использовать лимиты и для сериализации?(для записи в архив) вроде как это забота юзера.

да.

X>2. нужно ли использовать лимиты и для фундаментальных типов?

да.


сделал два типа лимитов:
yas::limit(v, 32); // max limit

и
yas::limit(v, 32, 64); // min-max limit
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: лимиты для сериализации
От: PM  
Дата: 24.10.16 22:22
Оценка:
Здравствуйте, niXman, Вы писали:

Ещё лимиты можно задавать для типов данных на этапе компиляции. Что-то типа constrained_type из https://github.com/foonathan/type_safe

Т.е. типа такого

struct X
{
    constrained<std::string, non_empty> name;
    constrained<int, in_range<0, 150>> age;

    template<typename Ar>
    void serialize(Ar& ar)
    {
        ar & name & age;
    }
};
Re[3]: лимиты для сериализации
От: niXman Ниоткуда https://github.com/niXman
Дата: 25.10.16 09:01
Оценка:
Здравствуйте, PM, Вы писали:

PM>Ещё лимиты можно задавать для типов данных на этапе компиляции.

два минуса:
1. в компайл-тайм проберка будет работать только для constexpr выражений.
2. это только для фундаментальных типов.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.