zoukankan      html  css  js  c++  java
  • 代码的核心定义文件

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

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


  • 相关阅读:
    详解package-lock.json的作用
    Cisco计网实验配置总结
    使用Vue制作了一个计算机网络中子网划分部分的简陋计算工具
    Prettier-Code Formater代码格式化插件使用教程
    Node.js中npx命令的使用方法、场景
    从几道题目带你深入理解Event Loop_宏队列_微队列
    简单模拟实现javascript中的call、apply、bind方法
    git使用说明书
    使用闭包模拟实现AMD模块化规范
    if执行后else if即使满足条件也不再执行
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6313999.html
Copyright © 2011-2022 走看看