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/connect.cc

150 lines
5.2 KiB

/*
Copyright (C) 2000 Nicolas Brodu
nicolas.brodu@free.fr
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.
*/
#include "connect.h"
#include "flowsystem.h"
#include <assert.h>
#include "debug.h"
// NDEBUG is the symbol name that can remove the assertions
#ifdef NDEBUG
#define mywarning(a,b)
#else
#include <iostream>
#define mywarning(a,b) if (!(a)) arts_warning("MCOP connection warning: %s",b)
#endif
using namespace std;
namespace Arts {
// Connect function overloaded for objects with default port
void connect(const Object& src, const std::string& output, const Object& dest, const std::string& input)
{
ScheduleNode *node = src._node();
assert(node);
node->connect(output, dest._node(), input);
}
void connect(const Object& src, const string& output, const Object& dest)
{
ScheduleNode *node = src._node();
assert(node);
vector<std::string> portsIn = dest._defaultPortsIn();
mywarning(portsIn.size() == 1, "default input not found in void connect(const Object& src, const string& output, const Object& dest);");
node->connect(output, dest._node(), portsIn[0]);
}
void connect(const Object& src, const Object& dest, const string& input)
{
ScheduleNode *node = src._node();
assert(node);
vector<std::string> portsOut = src._defaultPortsOut();
mywarning(portsOut.size() == 1, "default output not found in void connect(const Object& src, const Object& dest, const string& input);");
node->connect(portsOut[0], dest._node(), input);
}
void connect(const Object& src, const Object& dest)
{
ScheduleNode *node = src._node();
assert(node);
vector<std::string> portsOut = src._defaultPortsOut();
vector<std::string> portsIn = dest._defaultPortsIn();
mywarning(portsOut.size() == portsIn.size(), "number of defaults for src and dest don't match in void connect(const Object& src, const Object& dest);");
mywarning(!portsOut.empty(), "no defaults for src and dest in void connect(const Object& src, const Object& dest);");
vector<std::string>::iterator ot = portsOut.begin();
vector<std::string>::iterator it = portsIn.begin();
for (; ot != portsOut.end(); it++, ot++) {
node->connect(*ot, dest._node(), *it);
}
}
void disconnect(const Object& src, const std::string& output, const Object& dest, const std::string& input)
{
ScheduleNode *node = src._node();
assert(node);
node->disconnect(output, dest._node(), input);
}
void disconnect(const Object& src, const string& output, const Object& dest)
{
ScheduleNode *node = src._node();
assert(node);
vector<std::string> portsIn = dest._defaultPortsIn();
mywarning(portsIn.size() == 1, "default input not found in void disconnect(const Object& src, const string& output, const Object& dest);");
node->disconnect(output, dest._node(), portsIn[0]);
}
void disconnect(const Object& src, const Object& dest, const string& input)
{
ScheduleNode *node = src._node();
assert(node);
vector<std::string> portsOut = src._defaultPortsOut();
mywarning(portsOut.size() == 1, "default output not found in void disconnect(const Object& src, const Object& dest, const string& input);");
node->disconnect(portsOut[0], dest._node(), input);
}
void disconnect(const Object& src, const Object& dest)
{
ScheduleNode *node = src._node();
assert(node);
vector<std::string> portsOut = src._defaultPortsOut();
vector<std::string> portsIn = dest._defaultPortsIn();
mywarning(portsOut.size() == portsIn.size(), "number of defaults for src and dest don't match in void disconnect(const Object& src, const Object& dest);");
mywarning(!portsOut.empty(), "no defaults for src and dest in void disconnect(const Object& src, const Object& dest);");
vector<std::string>::iterator ot = portsOut.begin();
vector<std::string>::iterator it = portsIn.begin();
for (; ot != portsOut.end(); it++, ot++) {
node->disconnect(*ot, dest._node(), *it);
}
}
// setValue function overloaded for objects with default port
void setValue(const Object& c, const std::string& port, const float fvalue)
{
ScheduleNode *node = c._node();
assert(node);
node->setFloatValue(port, fvalue);
}
void setValue(const Object& c, const float fvalue)
{
ScheduleNode *node = c._node();
assert(node);
vector<std::string> portsIn = c._defaultPortsIn();
mywarning(!portsIn.empty(), "c has no default ports in void setValue(const Object& c, const float fvalue);");
vector<std::string>::iterator it = portsIn.begin();
for (; it != portsIn.end(); it++) {
node->setFloatValue(*it, fvalue);
}
}
/* String values???
void setValue(Object& c, const string& port, const string& svalue)
{
}
void setValue(Object& c, const string& svalue)
{
}
*/
}