#include "stdafx.h"
#include "LogInfoCls.h"

std::string errorCode2errInfo(ErrorCode e)
{
    switch (e)
    {
        _CASE_STR(SUCCESS); 
        _CASE_STR(VIRTUALABSTRACT);
        _CASE_STR(FAIL);
        _CASE_STR(FILENOFOUND);
        _CASE_STR(OrbitNodeNotEnough);
        _CASE_STR(XYDataPointNotEqual);
        _CASE_STR(FILEOPENFAIL           );
        _CASE_STR(XMLPARSEFAIL           );
        _CASE_STR(XMLNOTFOUNDElEMENT     );
        _CASE_STR(FILEPATHISEMPTY);
        _CASE_STR(FOLDER_NOT_EXIST);
        _CASE_STR(FILE_NOT_EXIST);
        _CASE_STR(FIND_ID_ERROR);
        _CASE_STR(INSERT_ID_ERROR);
        _CASE_STR(EPSGCODE_NOTSAME);
        _CASE_STR(EPSGCODE_NOTSUPPORT);
        _CASE_STR(RASTERBAND_NOTEQUAL);
        _CASE_STR(RASTER_DATETYPE_NOTSAME);
        //GSL 1xx
        _CASE_STR(Error_GSL_FAILURE );
        _CASE_STR(Error_GSL_CONTINUE );
        _CASE_STR(Error_GSL_EDOM );
        _CASE_STR(Error_GSL_ERANGE );
        _CASE_STR(Error_GSL_EFAULT );
        _CASE_STR(Error_GSL_EINVAL );
        _CASE_STR(Error_GSL_EFAILED );
        _CASE_STR(Error_GSL_EFACTOR );
        _CASE_STR(Error_GSL_ESANITY );
        _CASE_STR(Error_GSL_ENOMEM );
        _CASE_STR(Error_GSL_EBADFUNC );
        _CASE_STR(Error_GSL_ERUNAWAY );
        _CASE_STR(Error_GSL_EMAXITER );
        _CASE_STR(Error_GSL_EZERODIV );
        _CASE_STR(Error_GSL_EBADTOL );
        _CASE_STR(Error_GSL_ETOL );
        _CASE_STR(Error_GSL_EUNDRFLW );
        _CASE_STR(Error_GSL_EOVRFLW );
        _CASE_STR(Error_GSL_ELOSS );
        _CASE_STR(Error_GSL_EROUND );
        _CASE_STR(Error_GSL_EBADLEN );
        _CASE_STR(Error_GSL_ENOTSQR );
        _CASE_STR(Error_GSL_ESING );
        _CASE_STR(Error_GSL_EDIVERGE );
        _CASE_STR(Error_GSL_EUNSUP );
        _CASE_STR(Error_GSL_EUNIMPL );
        _CASE_STR(Error_GSL_ECACHE );
        _CASE_STR(Error_GSL_ETABLE );
        _CASE_STR(Error_GSL_ENOPROG );
        _CASE_STR(Error_GSL_ENOPROGJ );
        _CASE_STR(Error_GSL_ETOLF );
        _CASE_STR(Error_GSL_ETOLX );
        _CASE_STR(Error_GSL_ETOLG );
        _CASE_STR(Error_GSL_EOF );
        // RFPC 
        _CASE_STR(RFPC_PARAMSISEMPTY);
        _CASE_STR(ECHO_L0DATA_NOTOPEN);
        _CASE_STR(ECHO_L0DATA_ROW_COL_NOEQUAL);
        _CASE_STR(ECHO_L0DATA_PRFIDXOUTRANGE);
        _CASE_STR(ECHO_L0DATA_GPSFILEFORMATERROR);
        _CASE_STR(ECHO_L0DATA_ECHOFILEFORMATERROR);
        _CASE_STR(ECHO_L0DATA_ECHOFILENOTOPEN);
        _CASE_STR(ECHO_L0DATA_GPSFILEFNOTOPEN);
        _CASE_STR(ECHO_L0DATA_XMLFILENOTOPEN);
        _CASE_STR(OUTOFRANGE);
        _CASE_STR(ECHO_L0DATA_XMLNAMEERROR);
        // 
        _CASE_STR(TBP_L0OPENFAIL);

        //
        _CASE_STR(IMAGE_L1DATA_XMLNAMEERROR);
        _CASE_STR(IMAGE_L1DATA_XMLNAMEOPENERROR);


    default:
        break;
    }
    return "UNKNOW_EVENT!";
}

ErrorCode GSLState2ErrorCode(int gslState)
{
     
    switch (gslState)
    {
    case 0:
        return ErrorCode::SUCCESS;
        break;
    case -1:
        return ErrorCode::Error_GSL_FAILURE;
        break;
    case -2:
        return ErrorCode::Error_GSL_CONTINUE;
        break;
    case 1:
        return ErrorCode::Error_GSL_EDOM;      // 输入域错误，例如 sqrt(-1)
        break;

    case 2:
        return ErrorCode::Error_GSL_ERANGE;    // 输出范围错误，例如 exp(1e100)
        break;

    case 3:
        return ErrorCode::Error_GSL_EFAULT;     // 无效指针
        break;

    case 4:
        return ErrorCode::Error_GSL_EINVAL;     // 用户提供的无效参数
        break;

    case 5:
        return ErrorCode::Error_GSL_EFAILED;    // 通用失败
        break;

    case 6:
        return ErrorCode::Error_GSL_EFACTOR;    // 因子分解失败
        break;

    case 7:
        return ErrorCode::Error_GSL_ESANITY;    // 理智检查失败，通常不应该发生
        break;

    case 8:
        return ErrorCode::Error_GSL_ENOMEM;     // 内存分配失败
        break;

    case 9:
        return ErrorCode::Error_GSL_EBADFUNC;    // 用户提供的函数存在问题
        break;

    case 10:
        return ErrorCode::Error_GSL_ERUNAWAY;   // 迭代过程失控
        break;

    case 11:
        return ErrorCode::Error_GSL_EMAXITER;   // 超过最大迭代次数
        break;

    case 12:
        return ErrorCode::Error_GSL_EZERODIV;   // 尝试进行零除
        break;

    case 13:
        return ErrorCode::Error_GSL_EBADTOL;    // 用户指定的容忍度无效
        break;

    case 14:
        return ErrorCode::Error_GSL_ETOL;       // 未能达到指定的容忍度
        break;

    case 15:
        return ErrorCode::Error_GSL_EUNDRFLW;   // 下溢
        break;

    case 16:
        return ErrorCode::Error_GSL_EOVRFLW;    // 上溢
        break;

    case 17:
        return ErrorCode::Error_GSL_ELOSS;      // 精度损失
        break;

    case 18:
        return ErrorCode::Error_GSL_EROUND;     // 因舍入错误而失败
        break;

    case 19:
        return ErrorCode::Error_GSL_EBADLEN;    // 矩阵或向量长度不匹配
        break;

    case 20:
        return ErrorCode::Error_GSL_ENOTSQR;    // 矩阵不是方阵
        break;

    case 21:
        return ErrorCode::Error_GSL_ESING;      // 检测到明显的奇异性
        break;

    case 22:
        return ErrorCode::Error_GSL_EDIVERGE;   // 积分或级数发散
        break;

    case 23:
        return ErrorCode::Error_GSL_EUNSUP;     // 请求的特性不受硬件支持
        break;

    case 24:
        return ErrorCode::Error_GSL_EUNIMPL;    // 请求的特性尚未实现
        break;

    case 25:
        return ErrorCode::Error_GSL_ECACHE;     // 超过缓存限制
        break;

    case 26:
        return ErrorCode::Error_GSL_ETABLE;     // 超过表限制
        break;

    case 27:
        return ErrorCode::Error_GSL_ENOPROG;    // 迭代未能朝向解决方案取得进展
        break;

    case 28:
        return ErrorCode::Error_GSL_ENOPROGJ;   // 雅可比评估未能改善解决方案
        break;

    case 29:
        return ErrorCode::Error_GSL_ETOLF;      // 无法达到 F 的指定容忍度
        break;

    case 30:
        return ErrorCode::Error_GSL_ETOLX;      // 无法达到 X 的指定容忍度
        break;

    case 31:
        return ErrorCode::Error_GSL_ETOLG;      // 无法达到梯度的指定容忍度
        break;

    case 32:
        return ErrorCode::Error_GSL_EOF;        // 文件结束
        break;

    default:
        return ErrorCode::Error_GSL_FAILURE;    // 未知错误，返回一般失败
        break;
    }
}
