// Copyright (C) 2001 Dominic Letourneau (doumdi@yahoo.com)
//
//////////////////////////////////////////////////////////////////////
#include "BufferedNode.h"
#include "Buffer.h"
#include "FuzzyOperators.h"
#include "GenericModel.h"
using namespace std;
namespace FD {
class FuzzyModelExec;
DECLARE_NODE(FuzzyModelExec)
/*Node
*
* @name FuzzyModelExec
* @category Fuzzy
* @description FuzzyModelExec takes a FuzzyModel and find its output according the the specified intput.
*
* @input_name MODEL
* @input_description The model to use
*
* @input_name INPUT
* @input_description The input values to calculate
*
* @output_name OUTPUT
* @output_description The output of the fuzzy model
*
END*/
class FuzzyModelExec : public BufferedNode {
int modelID;
int inputID;
int outputID;
public:
FuzzyModelExec(string nodeName, ParameterSet params)
: BufferedNode(nodeName, params) {
inputID = addInput("INPUT");
modelID = addInput("MODEL");
outputID = addOutput("OUTPUT");
}
void calculate(int output_id, int count, Buffer &out) {
try {
ObjectRef modelRef = getInput(modelID,count);
ObjectRef inputRef = getInput(inputID,count);
FuzzyModel &model = object_cast<FuzzyModel>(modelRef);
Vector<float> &input_value = object_cast<Vector<float> >(inputRef);
//we are now ready to calculate
Vector<float>& calc_output = model.evaluate(input_value);
Vector<float> *my_output = new Vector<float>(calc_output.size());
//copying output values
for (int i = 0; i < calc_output.size(); i++) {
(*my_output)[i] = calc_output[i];
}
out[count] = ObjectRef(my_output);
}//try
catch (BaseException *e) {
throw e->add (new GeneralException("Exception caught in FuzzyModelExec", __FILE__, __LINE__));
}
}//calculate
};
}//namespace FD
syntax highlighted by Code2HTML, v. 0.9.1