home *** CD-ROM | disk | FTP | other *** search
- /*
-
- Copyright (C) 2000 Stefan Westerfeld
- stefan@space.twc.de
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-
- */
-
- #ifndef FLOWSYSTEM_H
- #define FLOWSYSTEM_H
-
- #include "arts_export.h"
- #include "object.h"
- #include "common.h"
-
- /*
- * BC - Status (2002-03-08): ScheduleNode, FlowSystem, FlowSystem_impl,
- * RemoteScheduleNode
- *
- * Heavy interactions with generated and hand-written code, flowsystem binding
- * and whatever. DO KEEP COMPATIBLE. Do not change the underlying IDL MODEL.
- * d ptrs available.
- */
-
- namespace Arts {
-
- class Object_skel;
- class Object_stub;
- class RemoteScheduleNode;
- class ScheduleNodePrivate;
-
- class ARTS_EXPORT ScheduleNode
- {
- private:
- Object_base *_nodeObject;
- ScheduleNodePrivate *d; // unused
-
- public:
- ScheduleNode(Object_base *object);
- virtual ~ScheduleNode();
-
- Object nodeObject();
-
- // check if this is a remote schedule node
-
- virtual RemoteScheduleNode *remoteScheduleNode();
-
- // other casts
-
- virtual void *cast(const std::string& target);
-
- // internal interface against Object_skel
-
- typedef bool (*QueryInitStreamFunc)(Object_skel *object,
- const std::string& name);
-
- virtual void initStream(const std::string& name, void *ptr, long flags) = 0;
-
- // interface against node implementation
-
- virtual void requireFlow() = 0;
- virtual void virtualize(const std::string& port, ScheduleNode *implNode,
- const std::string& implPort) = 0;
- virtual void devirtualize(const std::string& port, ScheduleNode *implNode,
- const std::string& implPort) = 0;
-
- // interface to modify the node from outside
-
- virtual void start() = 0;
- virtual void stop() = 0;
- virtual void connect(const std::string& port, ScheduleNode *remoteNode,
- const std::string& remotePort) = 0;
- virtual void disconnect(const std::string& port, ScheduleNode *remoteNode,
- const std::string& remotePort) = 0;
-
- // constant values
- virtual void setFloatValue(const std::string& port, float value) = 0;
- };
-
- class RemoteScheduleNodePrivate;
-
- class ARTS_EXPORT RemoteScheduleNode : public ScheduleNode
- {
- private:
- RemoteScheduleNodePrivate *d; // unused
- public:
- RemoteScheduleNode(Object_stub *stub);
-
- RemoteScheduleNode *remoteScheduleNode();
-
- // internal interface against Object_skel
-
- void initStream(const std::string& name, void *ptr, long flags);
-
- // interface against node implementation
-
- void requireFlow();
- virtual void virtualize(const std::string& port, ScheduleNode *implNode,
- const std::string& implPort);
- virtual void devirtualize(const std::string& port, ScheduleNode *implNode,
- const std::string& implPort);
-
- // interface to modify the node from outside
-
- void start();
- void stop();
- void connect(const std::string& port, ScheduleNode *remoteNode,
- const std::string& remotePort);
- void disconnect(const std::string& port, ScheduleNode *remoteNode,
- const std::string& remotePort);
-
- // constant values
- void setFloatValue(const std::string& port, float value);
- };
-
- class FlowSystem_impl_private;
-
- class FlowSystem_impl :virtual public FlowSystem_skel
- {
- private:
- FlowSystem_impl_private *d;
- public:
- virtual ScheduleNode *addObject(Object_skel *object) = 0;
- virtual void removeObject(ScheduleNode *node) = 0;
- virtual bool suspendable() = 0;
- virtual bool suspended() = 0;
- virtual void suspend() = 0;
- virtual void restart() = 0;
- };
-
- }
-
- #endif
-