// Copyright (C) 1999 Jean-Marc Valin
#include "Node.h"
using namespace std;
namespace FD {
class Action;
DECLARE_NODE(Action)
/*Node
*
* @name Action
* @category General
* @description Pulls in order the inputs: BEFORE, INPUT and AFTER.
*
* @input_name INPUT
* @input_description The input
*
* @input_name BEFORE
* @input_description To be pulled before
*
* @input_name AFTER
* @input_description To be pulled after
*
* @output_name OUTPUT
* @output_description The output = The input
*
END*/
class Action : public Node {
protected:
int inputID;
int beforeID;
int afterID;
int outputID;
public:
Action(string nodeName, ParameterSet params)
: Node(nodeName, params)
{
try {
inputID = addInput("INPUT");
beforeID = -1;
afterID = -1;
outputID=addOutput("OUTPUT");
} catch (BaseException *e)
{
//e->print();
throw e->add(new NodeException (NULL, "Exception caught in Action constructor", __FILE__, __LINE__));
}
}
int translateInput (string inputName)
{
for (unsigned int i=0; i< inputs.size(); i++) {
if (inputs[i].name == inputName) {
return i;
}
}
if (inputName == "BEFORE")
{
beforeID = addInput(inputName);
return beforeID;
} else if (inputName == "AFTER")
{
afterID = addInput(inputName);
return afterID;
} else {
throw new NodeException(this,string("Unknown input in translateInput : ") + inputName, __FILE__,__LINE__);
}
}
/**Standard request-passing method between nodes during initialization*/
virtual void request(int outputID, const ParameterSet &req)
{
inputs[inputID].node->request(inputs[inputID].outputID,req);
if (beforeID != -1)
inputs[beforeID].node->request(inputs[beforeID].outputID,req);
if (afterID != -1)
inputs[afterID].node->request(inputs[afterID].outputID,req);
}
ObjectRef getOutput(int output_id, int count)
{
if (beforeID != -1)
getInput(beforeID,count);
ObjectRef inputValue = getInput(inputID,count);
if (afterID != -1)
getInput(afterID,count);
return inputValue;
}
};
}//namespace FD
syntax highlighted by Code2HTML, v. 0.9.1