bool ItemAttribute::unserialize(PropStream& stream) { uint8_t type = 0; stream.getByte(type); switch(type) { case STRING: { std::string v; if(!stream.getLongString(v)) return false; set(v); break; } case INTEGER: { uint32_t v; if(!stream.getLong(v)) return false; set(*reinterpret_cast<int32_t*>(&v)); break; } case FLOAT: { float v; if(!stream.getFloat(v)) return false; set(*reinterpret_cast<float*>(&v)); break; } case BOOLEAN: { uint8_t v; if(!stream.getByte(v)) return false; set(v != 0); } default: break; } return true; }