TiltAngleCreator.hh 5.86 KB
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/* 
 * File:   TiltAngleCreator.hh
 * Author: hacene
 *
 * Created on June 19, 2020, 10:34 AM
 */
#ifndef TILTANGLECREATOR_HH
#define TILTANGLECREATOR_HH

#include "DicError.hh"
#include "AMDA_exception.hh"

#include "ParamData.hh"
#include "VisitorOfParamData.hh"
#include "Tsyganenko96.hh"

class TiltAngleCreator : public VisitorOfParamData {
public:

    ProcessTiltAngleCreator(Process& pProcess, ParamData& paramInput, std::string processType) : _process(pProcess), _paramData(paramInput), _type(processType) {
        _paramData.accept(*this);
    }
    virtual ~ProcessTiltAngleCreator();

    /**
     * @overload VisitorOfParamData::visit(ParamDataScalaireShort *)
     */
    void visit(ParamDataScalaireShort *) {
        BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator 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("Tsyganenko96Creator 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("Tsyganenko96Creator 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("Tsyganenko96Creator 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("Tsyganenko96Creator 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("Tsyganenko96Creator operation not supported"));
    }

    /**
     * @overload VisitorOfParamData::visit(ParamDataTab1DShort *)
     */
    void visit(ParamDataTab1DShort *) {
        createOperation<short>();
    }

    /**
     * @overload VisitorOfParamData::visit(ParamDataTab1DFloat *)
     */
    void visit(ParamDataTab1DFloat *) {
        createOperation<float>();
    }

    /**
     * @overload VisitorOfParamData::visit(ParamDataTab1DDouble *)
     */
    void visit(ParamDataTab1DDouble *) {
        createOperation<double>();
    }

    /**
     * @overload VisitorOfParamData::visit(ParamDataTab1DLongDouble *)
     */
    void visit(ParamDataTab1DLongDouble *) {
        createOperation<long double>();
    }

    /**
     * @overload VisitorOfParamData::visit(ParamDataTab1DInt *)
     */
    void visit(ParamDataTab1DInt *) {
        createOperation<int>();
    }

    /**
     * @overload VisitorOfParamData::visit(ParamDataTab1DLogicalData *)
     */
    void visit(ParamDataTab1DLogicalData *) {
        BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported"));
    }

    /**
     * @overload VisitorOfParamData::visit(ParamDataTab2DShort *)
     */
    void visit(ParamDataTab2DShort *) {
        BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported"));
    }

    /**
     * @overload VisitorOfParamData::visit(ParamDataTab2DFloat *)
     */
    void visit(ParamDataTab2DFloat *) {
        BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported"));
    }

    /**
     * @overload VisitorOfParamData::visit(ParamDataTab2DDouble *)
     */
    void visit(ParamDataTab2DDouble *) {
        BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported"));
    }

    /**
     * @overload VisitorOfParamData::visit(ParamDataTab2DLongDouble *)
     */
    void visit(ParamDataTab2DLongDouble *) {
        BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported"));
    }

    /**
     * @overload VisitorOfParamData::visit(ParamDataTab2DInt *)
     */
    void visit(ParamDataTab2DInt *) {
        BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported"));
    }

    /**
     * @overload VisitorOfParamData::visit(ParamDataTab2DLogicalData *)
     */
    void visit(ParamDataTab2DLogicalData *) {
        BOOST_THROW_EXCEPTION(AMDA::AMDA_exception() << AMDA::errno_code(AMDA_ERROR_UNKNOWN) << AMDA::ex_msg("Tsyganenko96Creator operation not supported"));
    }

    /**
     * @brief get the Tsyganenko96 parameterized operation.
     */
    Operation * getOperation() const {
        return _operation;
    }


private:

    template <typename Type>
    void createOperation() {
        if (_type == "tilte")
            _operation = new DipoleTiltAngle::DipoleTiltAngle<Type>(_process, dynamic_cast<ParamDataSpec<std::vector<Type> > &> (_paramData), _paramImfInput);
    }
    Process &_process;
    ParamData &_paramData;
    ParamData &_paramImfInput;
    std::string _type;
    Operation* _operation;
};

#endif /* TILTANGLECREATOR_HH */