/* * SumIntoTableRangeCreator.hh * * Created on: Oct 6, 2016 * Author: AKKA IS */ #ifndef FRAMEINTOTABLERANGECREATOR_HH_ #define FRAMEINTOTABLERANGECREATOR_HH_ #include "ParamData.hh" #include "VisitorOfParamData.hh" #include "SumIntoTableRange.hh" #include "AMDA_exception.hh" namespace AMDA { namespace Parameters { /** * @class SumIntoTableRangeCreator * @brief Creator of the Operation SumIntoTableRange parameterized with ParamData input type. * @details Implement the interface VisitorOfParamData. */ class SumIntoTableRangeCreator : public VisitorOfParamData { public: /** * @brief Constructor. */ SumIntoTableRangeCreator(Process& pProcess, ParamData& paramInput, double minRange1, double maxRange1, AMDA::Info::ParamTable* table1Ptr, int table1RelatedDim, double minRange2, double maxRange2, AMDA::Info::ParamTable* table2Ptr) : _process(pProcess), _paramData(paramInput), _operation(NULL), _minRange1(minRange1), _maxRange1(maxRange1), _table1Ptr(table1Ptr), _table1RelatedDim(table1RelatedDim), _minRange2(minRange2), _maxRange2(maxRange2), _table2Ptr(table2Ptr) { _paramData.accept(*this); } /** * @overload VisitorOfParamData::visit(ParamDataScalaireShort *) */ void visit(ParamDataScalaireShort *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("SumIntoTableRange operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataScalaireFloat *) */ void visit(ParamDataScalaireFloat *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("SumIntoTableRange operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataScalaireDouble *) */ void visit(ParamDataScalaireDouble *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("SumIntoTableRange operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataScalaireLongDouble *) */ void visit(ParamDataScalaireLongDouble *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("SumIntoTableRange operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataScalaireInt *) */ void visit(ParamDataScalaireInt *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("SumIntoTableRange operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataLogicalData *) */ void visit(ParamDataLogicalData *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("SumIntoTableRange operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataTab1DShort *) */ void visit(ParamDataTab1DShort *) {_operation = new SumIntoTableRange::SumIntoTableRange1D( _process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr);} /** * @overload VisitorOfParamData::visit(ParamDataTab1DFloat *) */ void visit(ParamDataTab1DFloat *) {_operation = new SumIntoTableRange::SumIntoTableRange1D( _process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr);} /** * @overload VisitorOfParamData::visit(ParamDataTab1DDouble *) */ void visit(ParamDataTab1DDouble *) {_operation = new SumIntoTableRange::SumIntoTableRange1D( _process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr);} /** * @overload VisitorOfParamData::visit(ParamDataTab1DLongDouble *) */ void visit(ParamDataTab1DLongDouble *) {_operation = new SumIntoTableRange::SumIntoTableRange1D( _process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr);} /** * @overload VisitorOfParamData::visit(ParamDataTab1DInt *) */ void visit(ParamDataTab1DInt *) {_operation = new SumIntoTableRange::SumIntoTableRange1D( _process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr);} /** * @overload VisitorOfParamData::visit(ParamDataTab1DLogicalData *) */ void visit(ParamDataTab1DLogicalData *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("FramesTransformation operation not supported")); } /** * @overload VisitorOfParamData::visit(ParamDataTab2DShort *) */ void visit(ParamDataTab2DShort *) { if (_table2Ptr == NULL) { _operation = new SumIntoTableRange::SumIntoTableRange2DOneRange(_process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr, _table1RelatedDim); } else { _operation = new SumIntoTableRange::SumIntoTableRange2DTwoRanges(_process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr, _table1RelatedDim, _minRange2, _maxRange2, _table2Ptr); } } /** * @overload VisitorOfParamData::visit(ParamDataTab2DFloat *) */ void visit(ParamDataTab2DFloat *) { if (_table2Ptr == NULL) { _operation = new SumIntoTableRange::SumIntoTableRange2DOneRange(_process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr, _table1RelatedDim); } else { _operation = new SumIntoTableRange::SumIntoTableRange2DTwoRanges(_process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr, _table1RelatedDim, _minRange2, _maxRange2, _table2Ptr); } } /** * @overload VisitorOfParamData::visit(ParamDataTab2DDouble *) */ void visit(ParamDataTab2DDouble *) { if (_table2Ptr == NULL) { _operation = new SumIntoTableRange::SumIntoTableRange2DOneRange(_process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr, _table1RelatedDim); } else { _operation = new SumIntoTableRange::SumIntoTableRange2DTwoRanges(_process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr, _table1RelatedDim, _minRange2, _maxRange2, _table2Ptr); } } /** * @overload VisitorOfParamData::visit(ParamDataTab2DLongDouble *) */ void visit(ParamDataTab2DLongDouble *) { if (_table2Ptr == NULL) { _operation = new SumIntoTableRange::SumIntoTableRange2DOneRange(_process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr, _table1RelatedDim); } else { _operation = new SumIntoTableRange::SumIntoTableRange2DTwoRanges(_process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr, _table1RelatedDim, _minRange2, _maxRange2, _table2Ptr); } } /** * @overload VisitorOfParamData::visit(ParamDataTab2DInt *) */ void visit(ParamDataTab2DInt *) { if (_table2Ptr == NULL) { _operation = new SumIntoTableRange::SumIntoTableRange2DOneRange(_process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr, _table1RelatedDim); } else { _operation = new SumIntoTableRange::SumIntoTableRange2DTwoRanges(_process, dynamic_cast(_paramData), _minRange1, _maxRange1, _table1Ptr, _table1RelatedDim, _minRange2, _maxRange2, _table2Ptr); } } /** * @overload VisitorOfParamData::visit(ParamDataTab2DLogicalData *) */ void visit(ParamDataTab2DLogicalData *) { BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("SumIntoTableRange operation not supported")); } /** * @brief get the Deriv parameterized operation. */ Operation * getOperation() const { return _operation; } private: Process &_process; ParamData &_paramData; Operation *_operation; double _minRange1; double _maxRange1; AMDA::Info::ParamTable* _table1Ptr; int _table1RelatedDim; double _minRange2; double _maxRange2; AMDA::Info::ParamTable* _table2Ptr; }; } /* namespace Parameters */ } /* namespace AMDA */ #endif /* FRAMEINTOTABLERANGECREATOR_HH_ */