// Copyright (C) 1999 Jean-Marc Valin #include #include "BufferedNode.h" #include "Buffer.h" #include "Vector.h" #include "FeatureMap.h" using namespace std; namespace FD { class FMapCalc; DECLARE_NODE(FMapCalc) /*Node * * @name FMapCalc * @category VQ * @require FeatureMap * @description Calculates the result of an hetero-associative map (trained by FMapTrain) for an input vector * * @input_name INPUT * @input_type Vector * @input_description Input vector * * @input_name FMAP * @input_type FeatureMap * @input_description The feature map that will be used * * @output_name OUTPUT * @output_type Vector * @output_description Output features * * @parameter_name INPUTLENGTH * @parameter_type int * @parameter_description Number of input features * * @parameter_name OUTPUTLENGTH * @parameter_type int * @parameter_description Number of output features * END*/ class FMapCalc : public BufferedNode { int inputID; int netInputID; int outputID; public: FMapCalc(string nodeName, ParameterSet params) : BufferedNode(nodeName, params) { inputID = addInput("INPUT"); netInputID = addInput("FMAP"); outputID = addOutput("OUTPUT"); } void calculate(int output_id, int count, Buffer &out) { ObjectRef inputValue = getInput(inputID, count); ObjectRef netValue = getInput(netInputID, count); FeatureMap &fmap = object_cast (netValue); out[count] = Vector::alloc(fmap.getOutDimension()); Vector &output = object_cast > (out[count]); const Vector &in = object_cast > (inputValue); int inputLength = in.size(); fmap.calc(&in[0], &output[0]); } }; }//namespace FD