A Node is an entity performing a treatement or job using ingoing data given in ingoing Ports provided by other Nodes or 'manually' set and providing itself data in outgoing Ports. A Node is eventually put into a scope (see Node hierarchy) in which all it's links with other Nodes can be performed. The most little scope if it exists of a Node is referenced by YACS::ENGINE::Node::_father.
There are 2 types of Node :
A YACS::ENGINE::Port is an interface of a YACS::ENGINE::Node from the outside. Ports can have several semantics.
The semantic of this port is to put constraints on the sequence of execution to synchronize nodes, on THE SAME LEVEL of Node hierarchy between them.
Instances of these type of ports inherits from YACS::ENGINE::DataFlowPort. This type of port represents data exchange protocol performed physically by implementation in Runtime at the end of execution an instance of an ElementaryNode. So contrary to DataStream, this data exchange protocol is performed following Control flow synchronization.
Instances of these type of ports inherits from YACS::ENGINE::DataStreamPort. DataStream ports are ports for data exchange NOT synchronized by Control flow.
A link in YACS does not lie onto a C++ object. A link exists in YACS::ENGINE model only like a sorted pair (YACS::ENGINE::OutPort, YACS::ENGINE::InPort). The semantic of elements of pair can be different (Data or DataStream ). This pair is stored in both YACS::ENGINE::OutPort side and YACS::ENGINE::InPort side. The storage YACS::ENGINE::InPort side is only for edition facility (Node, Port suppression), but at execution time, only links info YACS::ENGINE::OutPort side is used.
A link is constructed by the call to YACS::ENGINE::ComposedNode::edAddLink method. The instance of YACS::ENGINE::ComposedNode on which apply edAddLink must be so that inPort and OutPort are both in its scope.
It is important to note that a link defined by edAddLink method can hide potentially a serie of elementary links. This is particalary true when 2 dataflow ports inside 2 different loops are linked each other ; in this case Data / DataStream conversion is requested. An elementary link is a link in which the semantic of both elements in pair are exactly the same. So the complexity linked to modification of port semantic in a link is managed at edition time so that at run time only elementary links are seen.
YACS::ENGINE::TypeCode instances are destined to describe data structure of a piece of data expected by an instance of YACS::ENGINE::DataPort (for type checking at edition : static type checking) or held in YACS::ENGINE::Any instance (for type checking at execution : dynamic type checking). All data exchanged by calculation nodes through input and output data ports have a type.
The type is given by the port that holds the data by calling its YACS::ENGINE::DataPort::edGetType() method. All types are instances of the YACS::ENGINE::TypeCode class or one of its derived classes : YACS::ENGINE::TypeCode_objref, YACS::ENGINE::TypeCode_seq.
A context is a set of libraries allowing directly or indirectly from C++ calls to :
Concretely it takes form of set of :
A runtime exists in a given Context. A runtime is in charge to :
The runtime simply appears in engine as an interface that a concrete runtime must implement to be piloted by YACS::ENGINE.
This the 3rd point of view of a graph of execution, after links between nodes (see Links ) and hierarchy in nodes ( Node hierarchy ). Deployment concept is accessible in interface YACS::ENGINE::Task with the concept of YACS::ENGINE::ComponentInstance and YACS::ENGINE::Container.
A task needed to be placed or deployed at runtime has to return something different from 0 on call to YACS::ENGINE::Task::getComponent(). YACS::ENGINE::ServiceNode is the abstract class representing all executable nodes needed to be deployed.
It's important to note that the placement (or deployment) of ServiceNodes can be performed at different moment at runtime.