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.
150 lines
5.2 KiB
150 lines
5.2 KiB
15 years ago
|
/*
|
||
|
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
|
||
15 years ago
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||
|
Boston, MA 02110-1301, USA.
|
||
15 years ago
|
*/
|
||
|
|
||
|
#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)
|
||
|
{
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
}
|