Lumiera  0.pre.03
»edit your freedom«
model-port-registry.hpp File Reference

Go to the source code of this file.

Description

Mutation and management facility for model ports within the builder.

Model ports denote the points where output might possibly be produced. While client code accesses model ports only as immutable descriptors handled through an (opaque) reference, the builder is in charge of detecting and organising any (new) model ports arising as the result of the build process. Changes to the set of current model ports are to be activated with an atomic transactional switch.

builder::ModelPortRegistry thus acts as management interface and factory for model ports. A given instance of this registry can be promoted to be "the" model port registry reflecting the current active model ports. Within the Lumiera application, the builder subsystem cares for setting up such a registry, while all other parts of the system just access the current model ports through the mobject::ModelPort frontend.

Note
the locking is rather coarse grained; basically we're using just one single global lock for all ModelPortRegistry instances and all access/mutations, as well as for accessing the globally valid Registry through the ModelPort frontend. Assumed that usually there is just one Registry maintained by the builder, this is likely to be sufficient.
See also
ModelPort
OutputDesignation
ModelPortRegistry_test

Definition in file model-port-registry.hpp.

#include "lib/error.hpp"
#include "lib/optional-ref.hpp"
#include "steam/asset/pipe.hpp"
#include "steam/asset/struct.hpp"
#include "steam/mobject/model-port.hpp"
#include <map>

Classes

class  ModelPortRegistry::ModelPortDescriptor
 ModelPortDescriptor records are used as actual storage within the model port registration table; they are immutable value objects and never exposed to client code directly. More...
 
class  ModelPortRegistry
 Management facility for tracking model ports. More...
 

Functions

 LUMIERA_ERROR_DECLARE (DUPLICATE_MODEL_PORT)
 Attempt to define a new model port with an pipe-ID already denoting an existing port.
 

Namespaces

 steam
 Steam-Layer implementation namespace root.
 
 steam::fixture
 Fixture and low-level-Model.