Skip to content
Snippets Groups Projects
Commit 0754f2a7 authored by Perttu Ahola's avatar Perttu Ahola
Browse files

ToolDefManager serialization

parent 8d2d28f1
No related branches found
No related tags found
No related merge requests found
......@@ -66,7 +66,7 @@ void ToolDefinition::deSerialize(std::istream &is)
{
int version = readU8(is);
if(version != 0) throw SerializationError(
"unsupported ToolDiggingProperties version");
"unsupported ToolDefinition version");
imagename = deSerializeString(is);
properties.basetime = readF1000(is);
properties.dt_weight = readF1000(is);
......@@ -133,6 +133,41 @@ class CToolDefManager: public IWritableToolDefManager
m_tool_definitions[toolname] = new ToolDefinition(def);
return true;
}
virtual void serialize(std::ostream &os)
{
writeU8(os, 0); // version
u16 count = m_tool_definitions.size();
writeU16(os, count);
for(core::map<std::string, ToolDefinition*>::Iterator
i = m_tool_definitions.getIterator();
i.atEnd() == false; i++){
std::string name = i.getNode()->getKey();
ToolDefinition *def = i.getNode()->getValue();
// Serialize name
os<<serializeString(name);
// Serialize ToolDefinition and write wrapped in a string
std::ostringstream tmp_os(std::ios::binary);
def->serialize(tmp_os);
os<<serializeString(tmp_os.str());
}
}
virtual void deSerialize(std::istream &is)
{
int version = readU8(is);
if(version != 0) throw SerializationError(
"unsupported ToolDefManager version");
u16 count = readU16(is);
for(u16 i=0; i<count; i++){
// Deserialize name
std::string name = deSerializeString(is);
// Deserialize a string and grab a ToolDefinition from it
std::istringstream tmp_is(deSerializeString(is), std::ios::binary);
ToolDefinition def;
def.deSerialize(tmp_is);
// Register
registerTool(name, def);
}
}
private:
// Key is name
core::map<std::string, ToolDefinition*> m_tool_definitions;
......
......@@ -85,6 +85,9 @@ class IWritableToolDefManager : public IToolDefManager
const std::string &toolname) const =0;
virtual bool registerTool(std::string toolname, const ToolDefinition &def)=0;
virtual void serialize(std::ostream &os)=0;
virtual void deSerialize(std::istream &is)=0;
};
IWritableToolDefManager* createToolDefManager();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment