VTK  9.5.20250927
vtkMarshalContext.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
18#ifndef vtkMarshalContext_h
19#define vtkMarshalContext_h
20
21#include "vtkObject.h"
22
23#include "vtkCommonCoreModule.h" // for export macro
24#include "vtkSmartPointer.h" // for vtkSmartPointer
25#include "vtkTypeUInt8Array.h" // for vtkTypeUInt8Array
26#include "vtkWeakPointer.h" // for vtkWeakPointer
27
28// clang-format off
29#include "vtk_nlohmannjson.h" // for json
30#include VTK_NLOHMANN_JSON(json.hpp) // for json
31// clang-format on
32
33#include <memory> // for unique_ptr
34#include <set> // for set
35
37 void* ser, void* deser, void* invoker, const char** error);
38
39VTK_ABI_NAMESPACE_BEGIN
40class VTKCOMMONCORE_EXPORT vtkMarshalContext : public vtkObject
41{
42public:
45 void PrintSelf(ostream& os, vtkIndent indent) override;
46
47 using WeakObjectStore = std::map<vtkTypeUInt32, vtkWeakPointer<vtkObjectBase>>;
48 using StrongObjectStore = std::map<std::string, std::set<vtkSmartPointer<vtkObjectBase>>>;
49
54
58 static bool CallRegistrars(void* ser, void* deser, void* invoker, const char** error);
59
63 const nlohmann::json& Blobs() const;
64
68 const nlohmann::json& States() const;
69
74
79
84 void KeepAlive(const std::string& owner, vtkObjectBase* objectBase);
85
93 void Retire(const std::string& owner, vtkObjectBase* objectBase);
94
103 bool RegisterState(nlohmann::json state);
104
110 bool UnRegisterState(vtkTypeUInt32 identifier);
111
117 nlohmann::json& GetState(vtkTypeUInt32 identifier) const;
118
127 bool RegisterObject(vtkObjectBase* objectBase, vtkTypeUInt32& identifier);
128
134 bool UnRegisterObject(vtkTypeUInt32 identifier);
135
139 vtkSmartPointer<vtkObjectBase> GetObjectAtId(vtkTypeUInt32 identifier) const;
140
144 vtkTypeUInt32 GetId(vtkObjectBase* objectBase) const;
145
157
163 bool UnRegisterBlob(const std::string& hash);
164
171 vtkSmartPointer<vtkTypeUInt8Array> GetBlob(const std::string& hash, bool copy = false);
172
183 std::vector<vtkTypeUInt32> GetDirectDependencies(vtkTypeUInt32 identifier) const;
184
189
193 void ResetDirectDependenciesForNode(vtkTypeUInt32 identifier);
194
198 vtkTypeUInt32 MakeId();
199
206 {
207 vtkMarshalContext* Context = nullptr;
208
209 public:
210 explicit ScopedParentTracker(vtkMarshalContext* context, vtkTypeUInt32 identifier)
211 : Context(context)
212 {
213 if (this->Context)
214 {
215 this->Context->PushParent(identifier);
216 }
217 }
218
220 {
221 if (this->Context)
222 {
223 this->Context->PopParent();
224 }
225 }
226
228 void operator=(const ScopedParentTracker&) = delete;
231 };
232
239 void PushParent(vtkTypeUInt32 identifier);
240
247 void PopParent();
248
249protected:
252
259 bool HasId(vtkObjectBase* objectBase, vtkTypeUInt32& identifier);
260
265 bool IsProcessing(vtkTypeUInt32 identifier);
266
271 bool IsProcessed(vtkTypeUInt32 identifier);
272
283 void AddChild(vtkTypeUInt32 identifier);
284
285private:
286 vtkMarshalContext(const vtkMarshalContext&) = delete;
287 void operator=(const vtkMarshalContext&) = delete;
288
289 friend class vtkDeserializer;
290 friend class vtkSerializer;
291
292 class vtkInternals;
293 std::unique_ptr<vtkInternals> Internals;
294
295 static std::vector<vtkMarshalContextRegistrarFunc>& GetSerDesRegistrars();
296};
297
298VTK_ABI_NAMESPACE_END
299#endif
Deserialize VTK objects from JSON.
a simple class to control print indentation
Definition vtkIndent.h:108
Convenient to push a parent as the 'active' identifier and add children to that parent when (de)seria...
void operator=(const ScopedParentTracker &)=delete
ScopedParentTracker(vtkMarshalContext *context, vtkTypeUInt32 identifier)
ScopedParentTracker(const ScopedParentTracker &)=delete
ScopedParentTracker(ScopedParentTracker &&)=delete
void operator=(ScopedParentTracker &&)=delete
Shared context used by vtkSerializer and vtkDeserializer
bool RegisterBlob(vtkSmartPointer< vtkTypeUInt8Array > blob, std::string &hash)
Add a blob into the blob store associated with hash.
void AddChild(vtkTypeUInt32 identifier)
Records identifier in the list of children of the 'active' identifier.
static vtkMarshalContext * New()
bool RegisterState(nlohmann::json state)
Add a state.
bool IsProcessed(vtkTypeUInt32 identifier)
Returnstrue if identifier exists in the genealogy of object(s)/state(s), false otherwise.
~vtkMarshalContext() override
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
const WeakObjectStore & WeakObjects() const
Get map of weak objects.
const StrongObjectStore & StrongObjects() const
Get map of strong objects.
void PopParent()
Adds the 'active' identifier into the genealogy.
bool IsProcessing(vtkTypeUInt32 identifier)
Return true if identifier has been through PushParent, but not yet been through PopParent,...
static void AddRegistrar(vtkMarshalContextRegistrarFunc registrar)
Add a serialization registrar to the static vector.
bool UnRegisterObject(vtkTypeUInt32 identifier)
Removes an objectBase registered at identifier from the weak object store.
nlohmann::json & GetState(vtkTypeUInt32 identifier) const
Find and get the state registered at identifier.
bool HasId(vtkObjectBase *objectBase, vtkTypeUInt32 &identifier)
Return true if objectBase exists in the weak object store, false otherwise If the objectBase exists,...
void ResetDirectDependenciesForNode(vtkTypeUInt32 identifier)
Reset the dependency cache for the given identifier
std::map< vtkTypeUInt32, vtkWeakPointer< vtkObjectBase > > WeakObjectStore
vtkTypeUInt32 GetId(vtkObjectBase *objectBase) const
Get the identifier associated with objectBase.
void Retire(const std::string &owner, vtkObjectBase *objectBase)
Release the strong reference kept by owner to the given objectBase.
vtkSmartPointer< vtkTypeUInt8Array > GetBlob(const std::string &hash, bool copy=false)
Find and get the blob registered at hash.
vtkTypeUInt32 MakeId()
Make a new identifier.
void PushParent(vtkTypeUInt32 identifier)
Make identifier the active identifier.
void ResetDirectDependencies()
Reset the dependency cache.
bool UnRegisterState(vtkTypeUInt32 identifier)
Removes a state.
const nlohmann::json & Blobs() const
Get blobs.
static bool CallRegistrars(void *ser, void *deser, void *invoker, const char **error)
Call all registrars with the given arguments.
std::map< std::string, std::set< vtkSmartPointer< vtkObjectBase > > > StrongObjectStore
bool RegisterObject(vtkObjectBase *objectBase, vtkTypeUInt32 &identifier)
Add an objectBase into the weak object store associated with identifier.
bool UnRegisterBlob(const std::string &hash)
Removes a blob registered at hash from the blob store.
const nlohmann::json & States() const
Get states.
std::vector< vtkTypeUInt32 > GetDirectDependencies(vtkTypeUInt32 identifier) const
Return all direct dependencies of the object/state registered at identifier.
void KeepAlive(const std::string &owner, vtkObjectBase *objectBase)
This method creates a record of ownership between owner and objectBase.
vtkSmartPointer< vtkObjectBase > GetObjectAtId(vtkTypeUInt32 identifier) const
Find and get the objectBase registered at identifier.
abstract base class for most VTK objects
abstract base class for most VTK objects
Definition vtkObject.h:162
Serialize VTK objects to JSON.
Hold a reference to a vtkObjectBase instance.
int(* vtkMarshalContextRegistrarFunc)(void *ser, void *deser, void *invoker, const char **error)