// Copyright (C) 1999 Jean-Marc Valin & Dominic Letourneau

#include "Collector.h"

//@implements core

using namespace std;

namespace FD {

DECLARE_NODE(Collector)

/*Node

 * @name Collector
 * @category Flow
 * @description Pass through with unlimited number of input/output pairs

 * @input_name INPUT
 * @input_description The input

 * @output_name OUTPUT
 * @output_description The output = The input (same name)

END*/


Collector::Collector(string nodeName, ParameterSet params) 
   : Node(nodeName, params) 
{
}

ObjectRef Collector::getOutputNamed (const string &outputName, int count) {
   
   for (unsigned int i=0; i< inputs.size(); i++) {
      if (inputs[i].name == outputName) {
         return getOutput(i,count);
      }
   }   
 
   throw new NodeException(this,string("Unknown output name :")+outputName,__FILE__,__LINE__);
}


void Collector::initialize()
{
   this->Node::initialize();
}

int Collector::translateInput (string inputName)
{

   for (unsigned int i=0; i< inputs.size(); i++) {
      if (inputs[i].name == inputName) {
         return i;
      }
   }    

   return addInput(inputName);
}

int Collector::translateOutput (string outputName)
{
  // Simply call translateInput because it should return
  // the same integer...
  return translateInput(outputName);
}

bool Collector::hasOutput(int output_id) const
{
  return(int(inputs.size()) > output_id);
}

ObjectRef Collector::getOutput(int output_id, int count)
{
   if (hasOutput(output_id)) {
      try{	
	 int outputID = inputs[output_id].outputID;
	 return (inputs[output_id].node)->getOutput(outputID,count);
      } catch (BaseException *e)
      {
	 //e->print();
	 throw e->add(new NodeException (this, "Exception caught in Collector::getOutput", __FILE__, __LINE__));
      }
   }
   else {
      throw new NodeException(this,"Unknown output_id",__FILE__,__LINE__);
   }
}

}//namespace FD






syntax highlighted by Code2HTML, v. 0.9.1