You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
arts/mcop/flowsystem.h

148 lines
4.1 KiB

/*
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, 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