123456789101112131415161718192021
#ifndef NODE_H #define NODE_H #include "Container.h" class Container; class Node { public: enum NodeType{ FlowOut, FlowIn, DataOut, DataIn, MemOut, MemIn}; Node(NodeType _type); void Connect(Container* &_cont); void* getLink(); private: void* link; NodeType type; }; #endif // NODE_H
12345678910111213141516
#include "../include/Node.h" Node::Node(NodeType _type) { type = _type; } void Node::Connect(Container* &_cont) { link = (_cont->getNode(type))->getLink(); } void Node::getLink() const { return link; }
1234567891011121314151617181920212223242526
#ifndef CONTAINER_H #define CONTAINER_H #include "Node.h" class Node; class Container { public: enum State{ INACTIVE, EXECUTE, PASSIVE }; Container(); virtual ~Container(); Node* getNode(Node::NodeType _type); private: struct U2{ unsigned val:2; }; // 0..4 (2 bits) int numNodes; U2 state; Node *node[/*numNodes*/6]; }; #endif // CONTAINER_H
1234567891011121314151617181920212223242526272829
#include "../include/Container.h" Container::Container() { node[Node::FlowOut] = new Node(Node::FlowOut); node[Node::FlowIn] = new Node(Node::FlowIn); node[Node::DataOut] = new Node(Node::DataOut); node[Node::DataIn] = new Node(Node::DataIn); node[Node::MemOut] = new Node(Node::MemOut); node[Node::MemIn] = new Node(Node::MemIn); numNodes = 6; state = INACTIVE; } Container::~Container() { delete node[Node::FlowOut]; delete node[Node::FlowIn]; delete node[Node::DataOut]; delete node[Node::DataIn]; delete node[Node::MemOut]; delete node[Node::MemIn]; } Node* Container::getNode(Node::NodeType _type) { return node[_type]; }