Exemplo n.º 1
0
void ChildListType::deserialize(ChildList& list, const ArchiveNode& node, IUniverse& universe) const {
	if (node.is_array()) {
		for (size_t i = 0; i < node.array_size(); ++i) {
			const ArchiveNode& child = node[i];
			ObjectPtr<> ptr = deserialize_object(child, universe);
			if (ptr != nullptr) {
				list.push_back(std::move(ptr));
			}
		}
	}
}
Exemplo n.º 2
0
void VariableLengthArrayType<T>::deserialize(T& obj, const ArchiveNode& node, IUniverse& universe) const {
	if (node.is_array()) {
		size_t sz = node.array_size();
		obj.reserve(sz);
		for (size_t i = 0; i < sz; ++i) {
			ElementType element;
			get_type<ElementType>()->deserialize(reinterpret_cast<byte*>(&element), node[i], universe);
			obj.push_back(std::move(element));
		}
	}
}
Exemplo n.º 3
0
void VariableLengthArrayType<T>::deserialize(byte* place, const ArchiveNode& node) const {
	T* obj = reinterpret_cast<T*>(place);
	if (node.is_array()) {
		size_t sz = node.array_size();
		obj->reserve(sz);
		for (size_t i = 0; i < sz; ++i) {
			ElementType element;
			get_type<ElementType>()->deserialize(reinterpret_cast<byte*>(&element), node[i]);
			obj->push_back(std::move(element));
		}
	}
}
Exemplo n.º 4
0
void VariableLengthArrayType<T>::serialize(const byte* place, ArchiveNode& node) const {
	const T* obj = reinterpret_cast<const T*>(place);
	for (auto& it: *obj) {
		ArchiveNode& element = node.array_push();
		get_type<ElementType>()->serialize(reinterpret_cast<const byte*>(&it), element);
	}
}
Exemplo n.º 5
0
ObjectPtr<> deserialize_object(const ArchiveNode& node, IUniverse& universe) {
	if (!node.is_map()) {
		std::cerr << "Expected object, got non-map.\n";
		return nullptr;
	}
	
	std::string error;
	const DerivedType* type = get_type_from_map(node, error);
	if (type == nullptr) {
		std::cerr << "ERROR: " << error << '\n';
		return nullptr;
	}
	
	std::string id;
	if (!node["id"].get(id)) {
		std::cerr << "WARNING: Object without id.\n";
	}
	
	ObjectPtr<> ptr = universe.create_object(type, id);
	if (ptr->object_id() != id) {
		std::cerr << "WARNING: Object '" << id << "' was renamed to '" << ptr->object_id() << "' because of a collision.\n";
	}
	
	type->deserialize(reinterpret_cast<byte*>(ptr.get()), node, universe);
	
	return ptr;
}
Exemplo n.º 6
0
void ChildListType::serialize(const ChildList& list, ArchiveNode& node, IUniverse& universe) const {
	for (auto& child: list) {
		ArchiveNode& child_node = node.array_push();
		::serialize(*child, child_node, universe);
	}
}
Exemplo n.º 7
0
void VariableLengthArrayType<T>::serialize(const T& obj, ArchiveNode& node, IUniverse& universe) const {
	for (auto& it: obj) {
		ArchiveNode& element = node.array_push();
		get_type<ElementType>()->serialize(reinterpret_cast<const byte*>(&it), element, universe);
	}
}