之前的博客里面的很多代码,有一些自己定义的数据类型,很多人很迷糊,下面把我的代码定义的公用部分贴出来,方便大家查看代码。
/*************************************************************************** * * Time: 2009-09-21 * Project: 遥感平台 * Purpose: 核心库文件 * Author: 李民录 * Copyright (c) 2009, liminlu0314@gmail.com * Describe:提供常用的数据类型定义等 * ****************************************************************************/ #ifndef IMGALG_H #define IMGALG_H /** * \file ImgCore.h * @brief 核心类型定义 * * 导出接口(使用C语言方式),核心类型定义 */ /** * 忽略在MS Widows平台上的警告 lml 2010-10-19 * warning C4100: “*”: 未引用的形参 * warning C4190: “identifier1”有指定的 C 链接,但返回了与 C 不兼容的 UDT“identifier2” * warning C4251: 类“type”需要由类“type2”的客户端使用 dll 接口 * warning C4275: 非 DLL 接口类键“identifier”作为 DLL 接口类键“identifier”的基使用 * warning C4305: 从“type1”到“type2”截断 * warning C4309: 截断常数值 * warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 * warning C4996: 使用了非标准扩展: 限定名中使用了枚举 */ #if defined(_MSC_VER) && (_MSC_VER >= 1400) #pragma warning(disable: 4100 4190 4251 4275 4305 4309 4819 4996 ) #endif /** * @brief 是否使用Vld内存泄露监测工具 */ #if _USEVLD #if _DEBUG //在debug模式下检测内存泄露 #include "vld.h" #endif #endif /** * @brief 是否使用LOG工具进行写日志 */ #if _USELOG #define USE_LOG4CPP #endif #include <float.h> #include <algorithm> #include <deque> #include <fstream> #include <limits> #include <map> #include <stack> #include <string> #include <vector> using namespace std; /** * @brief 导出符号定义 */ #ifdef IMGALG_EXPORTS #define IMGALG_API __declspec(dllexport) #else #define IMGALG_API __declspec(dllimport) #endif /** * @brief 定义NULL */ #ifndef NULL # define NULL 0 #endif /** * @brief 定义FALSE */ #ifndef FALSE # define FALSE 0 #endif /** * @brief 定义TRUE */ #ifndef TRUE # define TRUE 1 #endif #ifndef MAX /*! 求最大值 */ # define MIN(a, b) ((a<b) ? a : b) /*! 求最小值 */ # define MAX(a, b) ((a>b) ? a : b) #endif /** * @brief 定义ABS,求绝对值 */ #ifndef ABS # define ABS(x) ((x<0) ? (-1*(x)) : x) #endif /** * @brief 定义PI=3.141592653...以及度和弧度转换 */ #ifndef M_PI /*! 定义圆周率PI */ # define M_PI 3.1415926535897932384626433832795 /*! 弧度转度 */ # define DEG_PER_RAD ((double)(180.0/M_PI)) /*! 度转弧度 */ # define RAD_PER_DEG ((double)(M_PI/180.0)) #endif /** * @brief 定义平方 */ #ifndef M_SQUARE # define M_SQUARE(x) (x)*(x) #endif /** * @brief 定义立方 */ #ifndef M_CUBE # define M_CUBE(x) (x)*(x)*(x) #endif /*! 判断浮点数是否NaN值 */ inline bool isnan(const float& v) { return _isnan(v) ? true : false; } /*! 判断double数是否NaN值 */ inline bool isnan(const double& v) { return _isnan(v) ? true : false; } /*! 获取double的NaN值 */ inline double nan() { return numeric_limits<double>::quiet_NaN(); } /** * @brief float类型的极值 */ #ifndef FLT_EQUALS /*! 浮点数是否相等 */ #define FLT_EQUALS(x, y) (fabs((double)x-y)<FLT_EPSILON) /*! 浮点数是否相等(指定比较阈值) */ #define FLT_EQUALS_N(x, y, z) (fabs((double)x-y)<z) #endif #ifndef FLT_ZERO /*! 浮点数是否为0 */ #define FLT_ZERO(x) (fabs(x)<FLT_EPSILON) #endif /** * @brief 释放数组 */ #define RELEASE(x) if(x!=NULL) {delete []x; x = NULL;} /** * @brief 将全局区域设为操作系统默认区域 */ #define SET_LOCAL { locale::global(locale("")); setlocale(LC_ALL,"Chinese-simplified"); } /** * @brief 还原全局区域设定 */ #define REVERT_LOCAL locale::global(locale("C")) #ifndef EQUAL #if defined(WIN32) || defined(WIN32CE) /*! 比较字符串是否相等 */ # define EQUALN(a, b, n) (_strnicmp(a, b, n) == 0) /*! 比较字符串是否相等 */ # define EQUAL(a, b) (_stricmp(a, b) == 0) #else /*! 比较字符串是否相等 */ # define EQUALN(a, b, n) (strncasecmp(a, b, n) == 0) /*! 比较字符串是否相等 */ # define EQUAL(a, b) (strcasecmp(a, b) == 0) #endif #endif /*! byte */ typedef unsigned char byte; /*! 8U */ typedef unsigned char DT_8U; /*! 16U */ typedef unsigned short DT_16U; /*! 16S */ typedef short DT_16S; /*! 32U */ typedef unsigned int DT_32U; /*! 32S */ typedef int DT_32S; /*! 32F */ typedef float DT_32F; /*! 64F */ typedef double DT_64F; /*! 成功执行 */ const int RE_SUCCESS = 0; /*! 文件不存在 */ const int RE_FILENOTEXIST = 1; /*! 文件格式不被支持 */ const int RE_FILENOTSUPPORT = 2; /*! 图像数据类型不正确 */ const int RE_FILETYPEERROR = 3; /*! 创建图像失败 */ const int RE_CREATEFAILED = 4; /*! 输入参数错误 */ const int RE_PARAMERROR = 5; /*! 其他错误 */ const int RE_FAILED = 6; /*! 图像不存在公共区域 */ const int RE_NOSAMEEXTENT = 7; /*! 用户取消操作 */ const int RE_USERCANCEL = 8; /*! 文件已经被使用 */ const int RE_FILEISUESED = 9; /*! 不支持的像素深度 */ const int RE_DEPTHNOTSUPPORT = 10; /*! 波段数量不符合要求 */ const int RE_BANDCOUNTERROR = 11; /*! 文件不存在投影 */ const int RE_NOPROJECTION = 12; /*! 投影不一致 */ const int RE_PROJECTIONDIFF = 13; #endif