{type A {attr m_a {of std::string}} } {type B {super {virtual} A} {attr m_b {of std::string}} } {type C {super {virtual} A} {attr m_c {of std::string}} } {type D {attr m_d {of std::string}} } {type E {super D} {super {virtual} B} {super {virtual} C} {attr m_e {of std::string}} }
При сериализации типа E, сериализация его базовой составляющей из типа A инициировалась через E::B::A и E::C::A.
Для того чтобы виртуальная базовая составляющая сериализовалась только один раз, в каждом сериализуемом типе хранился специальный флаг, который использовался для указания того, что составляющая данного типа уже была сериализована.
Из-за того, что данный флаг хранился в самом сериализуемом объекте, вспомогательный код сериализации оказывался нереентерабильным.
Для преодоления этой проблемы в v.1.2.0 изменена структура вспомогательного кода. Теперь никаких флагов в сериализуемых объектах не хранится. Контроль повторной сериализации осуществляется на уровне классов oess_1::stdsn::oent_t.
Реентерабильность вспомогательного кода дает возможность параллельной сериализации одного и того же объекта на разных нитях.