// Copyright (C) 1999 Jean-Marc Valin
#include "UnPack.h"
#include "net_types.h"
#include "Vector.h"
using namespace std;
namespace FD {
DECLARE_NODE(UnPack)
/*Node
*
* @name UnPack
* @category Flow
* @description Unpack data already packed. This node makes just the opposite of "Pack" and is often used with it.
*
* @input_name INPUT
* @input_description The packed vector
*
* @output_name OUTPUT
* @output_description The single unpacked Object
*
* @output_name NOT_END
* @output_description True if there's still data
*
END*/
UnPack::UnPack(string nodeName, ParameterSet params)
: Node(nodeName, params)
{
outputID = addOutput("OUTPUT");
endID = addOutput("NOT_END");
inputID = addInput("INPUT");
}
void UnPack::initialize()
{
processCount = -1;
this->Node::initialize();
}
void UnPack::reset()
{
processCount = -1;
this->Node::reset();
}
ObjectRef UnPack::getOutput(int output_id, int count)
{
//cerr << "Getting output in UnPack\n";
if (output_id==outputID || output_id==endID)
{
processCount=count;
NodeInput input = inputs[inputID];
ObjectRef inputValue = input.node->getOutput(input.outputID,0);
Vector<ObjectRef> &packed = object_cast <Vector<ObjectRef> > (inputValue);
if (count < int(packed.size()))
{
if (output_id==outputID)
return packed[count];
else
return TrueObject;
}
else
{
if (output_id==outputID)
return nilObject;
else
return FalseObject;
}
}
else
throw new NodeException (this, "UnPack: Unknown output id", __FILE__, __LINE__);
}
}//namespace FD
syntax highlighted by Code2HTML, v. 0.9.1