SMTK  @SMTK_VERSION@
Simulation Modeling Tool Kit
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
smtk::task::json::Helper Class Reference

A helper for serializing task configurations. More...

#include <Helper.h>

Collaboration diagram for smtk::task::json::Helper:
[legend]

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.
 
ManagertaskManager ()
 
Configurator< Task > & tasks ()
 Return an object for registering task 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 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 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...
 
TaskactiveSerializedTask () const
 
void updateUIState (std::shared_ptr< smtk::task::Task > task, nlohmann::json &j)
 

Static Public Member Functions

static Helperinstance ()
 Return the helper "singleton". More...
 
static HelperpushInstance (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 HelperpushInstance (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

Managerm_taskManager { nullptr }
 
Configurator< Taskm_tasks
 
Configurator< Adaptorm_adaptors
 
Taskm_activeSerializedTask { nullptr }
 
smtk::common::Managers::Ptr m_managers
 
SwizzleId m_adaptorFromId = ~static_cast<SwizzleId>(0)
 
SwizzleId m_adaptorToId = ~static_cast<SwizzleId>(0)
 
bool m_topLevel { true }
 m_topLevel indicates whether pushInstance() (false) or instance() (true) was used to create this helper. More...
 

Detailed Description

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.

Member Function Documentation

◆ clear()

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.

◆ instance()

Helper & smtk::task::json::Helper::instance ( )
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.

◆ nestingDepth()

std::size_t smtk::task::json::Helper::nestingDepth ( )
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).

◆ pushInstance() [1/2]

Helper & smtk::task::json::Helper::pushInstance ( smtk::task::Manager taskManager,
const smtk::common::Managers::Ptr &  otherManagers 
)
static

Push a new top-level helper instance on the local thread's stack.

The returned Helper will have:

  • The same managers as the previous (if any) helper.
  • The parent task is assigned the ID 0.

◆ pushInstance() [2/2]

Helper & smtk::task::json::Helper::pushInstance ( smtk::task::Task parent)
static

Push a new (non-top-level) helper instance on the local thread's stack.

The returned Helper will have:

  • The same taskManager as the previous helper.
  • The same managers as the previous (if any) helper.
  • The parent task is assigned the ID 0.

◆ setActiveSerializedTask()

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.

◆ setAdaptorTaskIds()

void smtk::task::json::Helper::setAdaptorTaskIds ( SwizzleId  fromId,
SwizzleId  toId 
)

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).

◆ setManagers()

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.

Member Data Documentation

◆ m_topLevel

bool smtk::task::json::Helper::m_topLevel { true }
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.


The documentation for this class was generated from the following files: