bool Node::Save(Serializer& dest) { // Write node ID if (!dest.WriteUInt(id_)) return false; // Write attributes if (!Serializable::Save(dest)) return false; // Write components dest.WriteVLE(components_.Size()); for (unsigned i = 0; i < components_.Size(); ++i) { Component* component = components_[i]; // Create a separate buffer to be able to skip unknown components during deserialization VectorBuffer compBuffer; if (!component->Save(compBuffer)) return false; dest.WriteVLE(compBuffer.GetSize()); dest.Write(compBuffer.GetData(), compBuffer.GetSize()); } // Write child nodes dest.WriteVLE(children_.Size()); for (unsigned i = 0; i < children_.Size(); ++i) { Node* node = children_[i]; if (!node->Save(dest)) return false; } return true; }
String XMLFile::ToString(const String& indentation) const { VectorBuffer dest; XMLWriter writer(dest); document_->save(writer, indentation.CString()); return String((const char*)dest.GetData(), dest.GetSize()); }
bool Variant::operator ==(const VectorBuffer& rhs) const { const PODVector<unsigned char>& buffer = *(reinterpret_cast<const PODVector<unsigned char>*>(&value_)); return type_ == VAR_BUFFER && buffer.Size() == rhs.GetSize() ? strncmp(reinterpret_cast<const char*>(&buffer[0]), reinterpret_cast<const char*>(rhs.GetData()), buffer.Size()) == 0 : false; }
bool Node::Save(Serializer& dest) const { // Write node ID if (!dest.WriteUInt(id_)) return false; // Write attributes if (!Animatable::Save(dest)) return false; // Write components dest.WriteVLE(GetNumPersistentComponents()); for (unsigned i = 0; i < components_.Size(); ++i) { Component* component = components_[i]; if (component->IsTemporary()) continue; // Create a separate buffer to be able to skip failing components during deserialization VectorBuffer compBuffer; if (!component->Save(compBuffer)) return false; dest.WriteVLE(compBuffer.GetSize()); dest.Write(compBuffer.GetData(), compBuffer.GetSize()); } // Write child nodes dest.WriteVLE(GetNumPersistentChildren()); for (unsigned i = 0; i < children_.Size(); ++i) { Node* node = children_[i]; if (node->IsTemporary()) continue; if (!node->Save(dest)) return false; } return true; }
void Material::RefreshShaderParameterHash() { VectorBuffer temp; for (HashMap<StringHash, MaterialShaderParameter>::ConstIterator i = shaderParameters_.Begin(); i != shaderParameters_.End(); ++i) { temp.WriteStringHash(i->first_); temp.WriteVariant(i->second_.value_); } shaderParameterHash_ = 0; const unsigned char* data = temp.GetData(); unsigned dataSize = temp.GetSize(); for (unsigned i = 0; i < dataSize; ++i) shaderParameterHash_ = SDBMHash(shaderParameterHash_, data[i]); }
void Network::BroadcastMessage(int msgID, bool reliable, bool inOrder, const VectorBuffer& msg, unsigned contentID) { BroadcastMessage(msgID, reliable, inOrder, msg.GetData(), msg.GetSize(), contentID); }