bool Database::Statement::read(Serializable &s) { if(mInputLevel == 0 || s.isInlineSerializable()) return s.deserialize(*this); else { String tmp; if(!read(tmp)) return false; JsonSerializer serializer(&tmp); s.deserialize(serializer); return true; } }
Serializable * newDeserialize(ptree serial) { #if VERBOSE cout << "registered types:" << endl; for(map<string, Serializable * (*)()>::iterator iterator = Deserializer::d().begin(); iterator != Deserializer::d().end(); iterator++) { cout << iterator->first << endl; } #endif string type = serial.get<std::string>("type"); map<string, Serializable * (*)()>::iterator it = Deserializer::d().find(type); if(it != Deserializer::d().end()) { Serializable * toReturn = Deserializer::d()[type](); toReturn->deserialize(serial); #if VERBOSE stringstream ss2; write_xml(ss2, toReturn->serialize()); cout << "newDeserialize()->serialize() *pre-returned* to string:" << endl << ss2.str() << endl; #endif return toReturn; } else { cout<<"ERROR! No compatible deserialization function for " << type; //In case someone forgets to add a deserializer throw 319; } }
void Deserializer::deserialize(const std::string& key, Serializable& sObj) { try { NodeSwitch ns(*this, key); sObj.deserialize(*this); } catch (TxException&) { } }
bool JsonSerializer::input(Serializable &s) { if(s.isInlineSerializable() && !s.isNativeSerializable()) { String str; if(!input(str)) return false; s.fromString(str); return true; } else return s.deserialize(*this); }