конвейерная обработка данных
От: niXman Ниоткуда https://github.com/niXman
Дата: 28.09.13 10:28
Оценка:
приветствую!

предыстория: есть YAS. пользователи просят добавить возможность для 'endian independenсу', и для 'zlib compression'. встраивать их в сериализаторы/десериализаторы по умолчанию — плохая идея. выносить наружу и передавать в сериализаторы/десериализаторы ссылки на объекты — как-то не хочется.

думаю изменить сериализаторы/десериализаторы так, чтоб использовать их можно было так.
1. сериализаторы/десериализаторы делаем шаблонами.
2. по умолчанию специализируем void`ом.
3. используем так:
yas::binary_oarchive<> oa; // сериализатор по умочанию
yas::binary_oarchive<yas::endian_convertor> oa; // сериализатор "прогоняющий" данные через endian_convertor перед записью в IO-device
yas::binary_oarchive<yas::endian_convertor, yas::zlib_compressor> oa; // сериализатор "прогоняющий" данные через endian_convertor и zlib_compressor перед записью в IO-device


т.е. порядок действий таков:
1. разрабатываем концепт для output-device и для input-device (интерфейсы), и назовем их data-processor`ами
2. наследуем интерфейс(или оба) в реализацию
3. получившуюся реализацию передаем как параметр для сериализатора/десериализатора
4. сериализаторы/десериализаторы "внутрях" создают объекты этих типов
5. сериализуемые/десериализуемые данные "прогоняем" по очереди через каждый data-processor(если были указаны)
6. последний data-processor кладет данные в IO-device

поток сознания: думаю, в сериализаторы/десериализаторы добавить метод flush(), который, будет необходим при использовании буферизирующих data-processor`ов(zlib_compressor к примеру)

в общем, никогда подобного не делал, и, наверное, понаписывал всякие глупости =)

расскажите, как бы вы реализовали подобную задачу, и почему именно так?

благодарен.

зы
хранить data-processor`ы в векторе, и иметь возможность добавлять/удалять их в run-time — как-то не особо вижу в этом смысл...
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.