VTK  9.4.20241221
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
15#ifndef vtkMarshalContext_h
16#define vtkMarshalContext_h
17
18#include "vtkObject.h"
19
20#include "vtkCommonCoreModule.h" // for export macro
21#include "vtkSmartPointer.h" // for vtkSmartPointer
22#include "vtkTypeUInt8Array.h" // for vtkTypeUInt8Array
23#include "vtkWeakPointer.h" // for vtkWeakPointer
24
25// clang-format off
26#include "vtk_nlohmannjson.h" // for json
27#include VTK_NLOHMANN_JSON(json.hpp) // for json
28// clang-format on
29
30#include <memory> // for unique_ptr
31#include <set> // for set
32
33VTK_ABI_NAMESPACE_BEGIN
34class VTKCOMMONCORE_EXPORT vtkMarshalContext : public vtkObject
35{
36public:
39 void PrintSelf(ostream& os, vtkIndent indent) override;
40
41 using WeakObjectStore = std::map<vtkTypeUInt32, vtkWeakPointer<vtkObjectBase>>;
42 using StrongObjectStore = std::map<std::string, std::set<vtkSmartPointer<vtkObjectBase>>>;
43
47 const nlohmann::json& Blobs() const;
48
52 const nlohmann::json& States() const;
53
58
63
68 void KeepAlive(const std::string& owner, vtkObjectBase* objectBase);
69
77 void Retire(const std::string& owner, vtkObjectBase* objectBase);
78
87 bool RegisterState(nlohmann::json state);
88
94 bool UnRegisterState(vtkTypeUInt32 identifier);
95
101 nlohmann::json& GetState(vtkTypeUInt32 identifier) const;
102
111 bool RegisterObject(vtkObjectBase* objectBase, vtkTypeUInt32& identifier);
112
118 bool UnRegisterObject(vtkTypeUInt32 identifier);
119
123 vtkSmartPointer<vtkObjectBase> GetObjectAtId(vtkTypeUInt32 identifier) const;
124
128 vtkTypeUInt32 GetId(vtkObjectBase* objectBase) const;
129
141
147 bool UnRegisterBlob(const std::string& hash);
148
153
164 std::vector<vtkTypeUInt32> GetDirectDependencies(vtkTypeUInt32 identifier) const;
165
170
174 void ResetDirectDependenciesForNode(vtkTypeUInt32 identifier);
175
179 vtkTypeUInt32 MakeId();
180
187 {
188 vtkMarshalContext* Context = nullptr;
189
190 public:
191 explicit ScopedParentTracker(vtkMarshalContext* context, vtkTypeUInt32 identifier)
192 : Context(context)
193 {
194 if (this->Context)
195 {
196 this->Context->PushParent(identifier);
197 }
198 }
199
201 {
202 if (this->Context)
203 {
204 this->Context->PopParent();
205 }
206 }
207
209 void operator=(const ScopedParentTracker&) = delete;
212 };
213
220 void PushParent(vtkTypeUInt32 identifier);
221
228 void PopParent();
229
230protected:
233
240 bool HasId(vtkObjectBase* objectBase, vtkTypeUInt32& identifier);
241
246 bool IsProcessing(vtkTypeUInt32 identfier);
247
252 bool IsProcessed(vtkTypeUInt32 identifier);
253
264 void AddChild(vtkTypeUInt32 identifier);
265
266private:
267 vtkMarshalContext(const vtkMarshalContext&) = delete;
268 void operator=(const vtkMarshalContext&) = delete;
269
270 friend class vtkDeserializer;
271 friend class vtkSerializer;
272
273 class vtkInternals;
274 std::unique_ptr<vtkInternals> Internals;
275};
276
277VTK_ABI_NAMESPACE_END
278#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 UnRegisterObject(vtkTypeUInt32 identifier)
Removes an objectBase registered at identifier from the weak object store.
vtkSmartPointer< vtkTypeUInt8Array > GetBlob(const std::string &hash)
Find and get the blob registered at hash.
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.
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.
bool IsProcessing(vtkTypeUInt32 identfier)
Return true if identifier has been through PushParent, but not yet been through PopParent,...
const nlohmann::json & Blobs() const
Get blobs.
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.