// SPDX-FileCopyrightText: 2021 Jorrit Rouwe // SPDX-License-Identifier: MIT #include #include #include #include #include JPH_NAMESPACE_BEGIN JPH_IMPLEMENT_SERIALIZABLE_ABSTRACT_BASE(GroupFilter) { JPH_ADD_BASE_CLASS(GroupFilter, SerializableObject) } void GroupFilter::SaveBinaryState(StreamOut &inStream) const { inStream.Write(GetRTTI()->GetHash()); } void GroupFilter::RestoreBinaryState(StreamIn &inStream) { // RTTI hash is read in sRestoreFromBinaryState } GroupFilter::GroupFilterResult GroupFilter::sRestoreFromBinaryState(StreamIn &inStream) { GroupFilterResult result; // Read the type of the group filter uint32 hash; inStream.Read(hash); if (inStream.IsEOF() || inStream.IsFailed()) { result.SetError("Failed to read type hash"); return result; } // Get the RTTI for the group filter const RTTI *rtti = Factory::sInstance->Find(hash); if (rtti == nullptr) { result.SetError("Failed to create instance of group filter"); return result; } // Construct and read the data of the group filter Ref group_filter = reinterpret_cast(rtti->CreateObject()); if (group_filter == nullptr) { result.SetError("Failed to create instance of group filter"); return result; } group_filter->RestoreBinaryState(inStream); if (inStream.IsEOF() || inStream.IsFailed()) { result.SetError("Failed to restore group filter"); return result; } result.Set(group_filter); return result; } JPH_NAMESPACE_END