VTK  9.6.20260708
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
175 vtkSmartPointer<vtkTypeUInt8Array> GetBlob(const std::string& hash, bool copy = true);
176
187 std::vector<vtkTypeUInt32> GetDirectDependencies(vtkTypeUInt32 identifier) const;
188
193
197 void ResetDirectDependenciesForNode(vtkTypeUInt32 identifier);
198
202 vtkTypeUInt32 MakeId();
203
210 {
211 vtkMarshalContext* Context = nullptr;
212
213 public:
214 explicit ScopedParentTracker(vtkMarshalContext* context, vtkTypeUInt32 identifier)
215 : Context(context)
216 {
217 if (this->Context)
218 {
219 this->Context->PushParent(identifier);
220 }
221 }
222
224 {
225 if (this->Context)
226 {
227 this->Context->PopParent();
228 }
229 }
230
232 void operator=(const ScopedParentTracker&) = delete;
235 };
236
243 void PushParent(vtkTypeUInt32 identifier);
244
251 void PopParent();
252
253protected:
256
263 bool HasId(vtkObjectBase* objectBase, vtkTypeUInt32& identifier);
264
269 bool IsProcessing(vtkTypeUInt32 identifier);
270
275 bool IsProcessed(vtkTypeUInt32 identifier);
276
287 void AddChild(vtkTypeUInt32 identifier);
288
289private:
290 vtkMarshalContext(const vtkMarshalContext&) = delete;
291 void operator=(const vtkMarshalContext&) = delete;
292
293 friend class vtkDeserializer;
294 friend class vtkSerializer;
295
296 class vtkInternals;
297 std::unique_ptr<vtkInternals> Internals;
298
299 static std::vector<vtkMarshalContextRegistrarFunc>& GetSerDesRegistrars();
300};
301
302VTK_ABI_NAMESPACE_END
303#endif
a simple class to control print indentation
Definition vtkIndent.h:108
void operator=(const ScopedParentTracker &)=delete
ScopedParentTracker(vtkMarshalContext *context, vtkTypeUInt32 identifier)
ScopedParentTracker(const ScopedParentTracker &)=delete
ScopedParentTracker(ScopedParentTracker &&)=delete
void operator=(ScopedParentTracker &&)=delete
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
std::map< std::string, std::set< vtkSmartPointer< vtkObjectBase > > > StrongObjectStore
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.
friend class vtkDeserializer
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.
vtkSmartPointer< vtkTypeUInt8Array > GetBlob(const std::string &hash, bool copy=true)
Find and get the blob registered at hash.
std::map< vtkTypeUInt32, vtkWeakPointer< vtkObjectBase > > WeakObjectStore
nlohmann::json & GetState(vtkTypeUInt32 identifier) const
Find and get the state registered at identifier.
friend class vtkSerializer
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
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.
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.
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.
Hold a reference to a vtkObjectBase instance.
int(* vtkMarshalContextRegistrarFunc)(void *ser, void *deser, void *invoker, const char **error)