代码的核心定义文件

之前的博客里面的很多代码,有一些自己定义的数据类型,很多人很迷糊,下面把我的代码定义的公用部分贴出来,方便大家查看代码。

/***************************************************************************
*
* 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


原文地址:https://www.cnblogs.com/xiaowangba/p/6313999.html