|
SMTK
@SMTK_VERSION@
Simulation Modeling Tool Kit
|
A helper for serializing task configurations. More...
#include <Helper.h>
Public Types | |
| using | SwizzleId = Configurator< Task >::SwizzleId |
| Swizzle IDs are serializable substitutes for pointers. | |
| using | json = nlohmann::json |
| JSON data type. | |
Public Member Functions | |
| ~Helper () | |
| Destructor is public, but you shouldn't use it. | |
| void | setMapUUIDs (bool shouldMap) |
| Turn on/off mapping of JSON UUIDs to new, random UUIDs. More... | |
| bool | mapUUIDs () const |
| Manager & | taskManager () |
| Configurator< Task > & | tasks () |
| Return an object for registering task classes and serialization helpers. | |
| Configurator< Port > & | ports () |
| Return an object for registering port classes and serialization helpers. | |
| Configurator< Adaptor > & | adaptors () |
| Return an object for registering adaptor classes and serialization helpers. | |
| void | setManagers (const smtk::common::Managers::Ptr &managers) |
| Set/get the managers to use when serializing/deserializing. More... | |
| smtk::common::Managers::Ptr | managers () |
| void | clear () |
| Reset the helper's state. More... | |
| void | currentTasks (std::vector< Task * > &tasks) |
| Populate tasks with the set of current tasks. | |
| void | currentPorts (std::vector< Port * > &ports) |
| Populate ports with the set of current ports. | |
| void | currentAdaptors (std::vector< Adaptor * > &adaptors) |
| Populate adaptors with the set of current adaptors. | |
| json | swizzleDependencies (const Task::PassedDependencies &deps) |
| Return a serialization of task-references that is consistent within the scope of serializing a set of tasks. | |
| Task::PassedDependencies | unswizzleDependencies (const json &ids) const |
| Return a deserialization of de-swizzled task-references. | |
| bool | topLevel () const |
| Returns true if the helper is for deserializing top-level or child tasks. | |
| void | setAdaptorTaskIds (SwizzleId fromId, SwizzleId toId) |
| Set/clear a pair of task IDs used when deserializing a single adaptor. More... | |
| void | setAdaptorTaskIds (const smtk::common::UUID &fromId, const smtk::common::UUID &toId) |
| void | clearAdaptorTaskIds () |
| std::pair< Task *, Task * > | getAdaptorTasks () |
| Get task-pointers based on the IDs set earlier. | |
| void | setActiveSerializedTask (Task *task) |
| Set the current helper's active task and all parents which shared the same task manager. More... | |
| Task * | activeSerializedTask () const |
| smtk::resource::PersistentObject * | objectFromJSONSpec (const json &spec, smtk::string::Token objType="task") |
| Return a pointer to a persistent object given a JSON spec. More... | |
| template<typename T > | |
| T * | objectFromJSONSpecAs (const json &spec, smtk::string::Token objType="task") |
Static Public Member Functions | |
| static Helper & | instance () |
| Return the helper "singleton". More... | |
| static Helper & | pushInstance (smtk::task::Manager &taskManager, const smtk::common::Managers::Ptr &otherManagers) |
| Push a new top-level helper instance on the local thread's stack. More... | |
| static Helper & | pushInstance (smtk::task::Task *parent) |
| Push a new (non-top-level) helper instance on the local thread's stack. More... | |
| static void | popInstance () |
| Pop a helper instance off the local thread's stack. | |
| static std::size_t | nestingDepth () |
| Return the nesting level (i.e., the number of helper instances in the stack). More... | |
Protected Member Functions | |
| Helper (Manager *) | |
Protected Attributes | |
| Manager * | m_taskManager { nullptr } |
| Configurator< Task > | m_tasks |
| Configurator< Port > | m_ports |
| Configurator< Adaptor > | m_adaptors |
| Task * | m_activeSerializedTask { nullptr } |
| smtk::common::Managers::Ptr | m_managers |
| SwizzleId | m_adaptorFromId = ~static_cast<SwizzleId>(0) |
| SwizzleId | m_adaptorToId = ~static_cast<SwizzleId>(0) |
| smtk::common::UUID | m_adaptorFromUID |
| smtk::common::UUID | m_adaptorToUID |
| bool | m_topLevel { true } |
| m_topLevel indicates whether pushInstance() (false) or instance() (true) was used to create this helper. More... | |
| bool | m_mapUUIDs { false } |
| m_mapUUIDs is true when deserializing worklet JSON. More... | |
A helper for serializing task configurations.
This is needed in order to serialize dependencies among tasks which are stored as pointers that could, in theory, form a cycle.
| void smtk::task::json::Helper::clear | ( | ) |
Reset the helper's state.
This should be called before beginning serialization or deserialization. Additionally, calling it after each of these tasks is recommended since it will free memory.
|
static |
Return the helper "singleton".
The object returned is a per-thread instance at the top of a stack that may be altered using the pushInstance() and popInstance() methods. This allows nested deserializers to each have their own context that appears to be globally available.
|
static |
Return the nesting level (i.e., the number of helper instances in the stack).
The outermost helper will return 1 (assuming you have called instance() first).
| smtk::resource::PersistentObject * smtk::task::json::Helper::objectFromJSONSpec | ( | const json & | spec, |
| smtk::string::Token | objType = "task" |
||
| ) |
Return a pointer to a persistent object given a JSON spec.
Because workflow designers may provide worklets whose objects (tasks/ports/adaptors) do not have UUIDs, we need a way for worklet state to reference these objects. We must also handle cases where UUIDs are provided. This method is used by deserialization code to fetch the relevant object given a variety of input JSON that uniquely specifies objects in different ways.
The spec may be:
|
static |
Push a new top-level helper instance on the local thread's stack.
The returned Helper will have:
|
static |
Push a new (non-top-level) helper instance on the local thread's stack.
The returned Helper will have:
| void smtk::task::json::Helper::setActiveSerializedTask | ( | Task * | task | ) |
Set the current helper's active task and all parents which shared the same task manager.
You may pass (or expect) a null task.
Set/clear a pair of task IDs used when deserializing a single adaptor.
Storing these IDs as state in the helper allows from_json() to be "stateless" (i.e., taking no additional parameters and using the Helper as a side effect).
| void smtk::task::json::Helper::setManagers | ( | const smtk::common::Managers::Ptr & | managers | ) |
Set/get the managers to use when serializing/deserializing.
Call setManagers() with an instance of all your application's managers before attempting to serialize/deserialize as helpers are allowed to use managers as needed.
| void smtk::task::json::Helper::setMapUUIDs | ( | bool | shouldMap | ) |
Turn on/off mapping of JSON UUIDs to new, random UUIDs.
This is used by EmplaceWorklet. Do not call this after any tasks/ports/adaptors have been swizzled by any of this helper's configurators.
|
protected |
m_mapUUIDs is true when deserializing worklet JSON.
This causes all persistent objects in the JSON to have their UUIDs remapped.
|
protected |
m_topLevel indicates whether pushInstance() (false) or instance() (true) was used to create this helper.
If m_topLevel is false, the parent task is assigned swizzle ID 1.
1.8.17