mirror of https://git.do.srb2.org/STJr/ZenNode.git
259 lines
6.5 KiB
C++
259 lines
6.5 KiB
C++
//----------------------------------------------------------------------------
|
||
//
|
||
// File: common.hpp
|
||
// Date:
|
||
// Programmer: Marc Rousseau
|
||
//
|
||
// Description:
|
||
//
|
||
// Copyright (c) 1994-2004 Marc Rousseau, All Rights Reserved.
|
||
//
|
||
// This program is free software; you can redistribute it and/or modify
|
||
// it under the terms of the GNU General Public License as published by
|
||
// the Free Software Foundation; either version 2 of the License, or
|
||
// (at your option) any later version.
|
||
//
|
||
// This program is distributed in the hope that it will be useful,
|
||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
// GNU General Public License for more details.
|
||
//
|
||
// You should have received a copy of the GNU General Public License
|
||
// along with this program; if not, write to the Free Software
|
||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||
//
|
||
// Revision History:
|
||
//
|
||
//----------------------------------------------------------------------------
|
||
|
||
#ifndef COMMON_HPP_
|
||
#define COMMON_HPP_
|
||
|
||
//----------------------------------------------------------------------------
|
||
// Generic definitions
|
||
//----------------------------------------------------------------------------
|
||
|
||
#ifdef UNREFERENCED_PARAMETER
|
||
#undef UNREFERENCED_PARAMETER
|
||
#endif
|
||
|
||
#if defined ( _MSC_VER )
|
||
#define UNREFERENCED_PARAMETER(x) x
|
||
#else
|
||
#define UNREFERENCED_PARAMETER(x)
|
||
#endif
|
||
|
||
#define OFFSET_OF(t,x) (( size_t ) & (( t * ) 0 )->( x ))
|
||
#define SIZE(x) ( sizeof ( x ) / sizeof (( x )[0] ))
|
||
#define EVER ;;
|
||
|
||
typedef signed char INT8;
|
||
typedef signed short INT16;
|
||
typedef signed int INT32;
|
||
|
||
typedef unsigned char UINT8, UCHAR;
|
||
typedef unsigned short UINT16;
|
||
typedef unsigned int UINT32;
|
||
|
||
#if defined ( __GNUC__ )
|
||
|
||
typedef long long INT64;
|
||
typedef unsigned long long UINT64;
|
||
|
||
#else
|
||
|
||
typedef __int64 INT64;
|
||
typedef unsigned __int64 UINT64;
|
||
|
||
#endif
|
||
|
||
#if defined ( __WIN32__ ) || defined ( __AMIGAOS__ )
|
||
|
||
// Undo any previos definitions
|
||
#define BIG_ENDIAN 1234
|
||
#define LITTLE_ENDIAN 4321
|
||
|
||
#define BYTE_ORDER LITTLE_ENDIAN
|
||
|
||
#else
|
||
|
||
// Use the environments endian definitions
|
||
#undef __USE_BSD
|
||
#define __USE_BSD
|
||
#include <endian.h>
|
||
|
||
#endif
|
||
|
||
typedef int (*QSORT_FUNC) ( const void *, const void * );
|
||
|
||
#ifdef max
|
||
#undef max
|
||
#endif
|
||
#ifdef min
|
||
#undef min
|
||
#endif
|
||
|
||
template < class T > inline void swap ( T &item1, T &item2 )
|
||
{
|
||
T temp = item1;
|
||
item1 = item2;
|
||
item2 = temp;
|
||
}
|
||
|
||
//----------------------------------------------------------------------------
|
||
// Platform specific definitions
|
||
//----------------------------------------------------------------------------
|
||
|
||
#if defined ( __OS2__ ) || defined ( __WIN32__ )
|
||
|
||
#define SEPERATOR '\\'
|
||
#define DEFAULT_CHAR '<27>'
|
||
|
||
#elif defined ( __GNUC__ ) || defined ( __INTEL_COMPILER )
|
||
|
||
#define SEPERATOR '/'
|
||
#define DEFAULT_CHAR '*'
|
||
|
||
#endif
|
||
|
||
//----------------------------------------------------------------------------
|
||
// Compiler specific definitions
|
||
//----------------------------------------------------------------------------
|
||
|
||
#if defined ( __BORLANDC__ )
|
||
|
||
#if defined ( __BCPLUSPLUS__ ) || defined ( __TCPLUSPLUS__ )
|
||
#undef NULL
|
||
#define NULL ( void * ) 0
|
||
#endif
|
||
|
||
#if (( __BORLANDC__ < 0x0500 ) || defined ( __OS2__ ))
|
||
|
||
// Fake out ANSI definitions for deficient compilers
|
||
#define for if (0); else for
|
||
|
||
enum { false, true };
|
||
class bool {
|
||
int value;
|
||
public:
|
||
operator = ( int x ) { value = x ? true : false; }
|
||
bool operator ! () { return value; }
|
||
};
|
||
|
||
#endif
|
||
|
||
template <class T> inline const T &min ( const T &t1, const T &t2 )
|
||
{
|
||
return ( t1 > t2 ) ? t2 : t1;
|
||
}
|
||
|
||
template <class T> inline const T &max ( const T &t1, const T &t2 )
|
||
{
|
||
return ( t1 > t2 ) ? t1 : t2;
|
||
}
|
||
|
||
#elif defined ( _MSC_VER )
|
||
|
||
#undef NULL
|
||
#define NULL 0L
|
||
|
||
#define MAXPATH _MAX_PATH
|
||
#define MAXDRIVE _MAX_DRIVE
|
||
#define MAXDIR _MAX_DIR
|
||
#define MAXFNAME _MAX_FNAME
|
||
#define MAXEXT _MAX_EXT
|
||
|
||
#if ( _MSC_VER < 1300 )
|
||
|
||
// Fake out ANSI definitions for deficient compilers
|
||
#define for if (0); else for
|
||
|
||
#pragma warning ( disable: 4127 ) // C4127: conditional expression is constant
|
||
|
||
#endif
|
||
|
||
#pragma warning ( disable: 4244 ) // C4244: 'xyz' conversion from 'xxx' to 'yyy', possible loss of data
|
||
#pragma warning( disable : 4290 ) // C4290: C++ exception specification ignored...
|
||
#pragma warning ( disable: 4514 ) // C4514: 'xyz' unreferenced inline function has been removed
|
||
|
||
template <class T> inline const T &min ( const T &t1, const T &t2 )
|
||
{
|
||
return ( t1 > t2 ) ? t2 : t1;
|
||
}
|
||
|
||
template <class T> inline const T &max ( const T &t1, const T &t2 )
|
||
{
|
||
return ( t1 > t2 ) ? t1 : t2;
|
||
}
|
||
|
||
#if ( _MSC_VER >= 1300 )
|
||
extern char *strndup ( const char *string, size_t max );
|
||
#endif
|
||
|
||
#elif defined ( __WATCOMC__ )
|
||
|
||
#define M_PI 3.14159265358979323846
|
||
|
||
template <class T> inline const T &min ( const T &t1, const T &t2 )
|
||
{
|
||
return ( t1 > t2 ) ? t2 : t1;
|
||
}
|
||
|
||
template <class T> inline const T &max ( const T &t1, const T &t2 )
|
||
{
|
||
return ( t1 > t2 ) ? t1 : t2;
|
||
}
|
||
|
||
#elif defined ( __GNUC__ ) || defined ( __INTEL_COMPILER )
|
||
|
||
#define MAXPATH FILENAME_MAX
|
||
#define MAXDRIVE FILENAME_MAX
|
||
#define MAXDIR FILENAME_MAX
|
||
#define MAXFNAME FILENAME_MAX
|
||
#define MAXEXT FILENAME_MAX
|
||
|
||
#define O_BINARY 0
|
||
|
||
#define stricmp strcasecmp
|
||
#define strnicmp strncasecmp
|
||
|
||
template <class T> inline const T &min ( const T &t1, const T &t2 )
|
||
{
|
||
return ( t1 > t2 ) ? t2 : t1;
|
||
}
|
||
|
||
template <class T> inline const T &max ( const T &t1, const T &t2 )
|
||
{
|
||
return ( t1 > t2 ) ? t1 : t2;
|
||
}
|
||
|
||
#elif defined ( __AMIGAOS__ )
|
||
|
||
// Fake out ANSI definitions for deficient compilers
|
||
#define for if (0); else for
|
||
|
||
enum { false, true };
|
||
class bool {
|
||
int value;
|
||
public:
|
||
operator = ( int x ) { value = x ? true : false; }
|
||
bool operator ! () { return value; }
|
||
};
|
||
|
||
template <class T> inline const T &min ( const T &t1, const T &t2 )
|
||
{
|
||
return ( t1 > t2 ) ? t2 : t1;
|
||
}
|
||
|
||
template <class T> inline const T &max ( const T &t1, const T &t2 )
|
||
{
|
||
return ( t1 > t2 ) ? t1 : t2;
|
||
}
|
||
|
||
extern char *strdup ( const char *string );
|
||
extern char *strndup ( const char *string, size_t max );
|
||
|
||
#endif
|
||
|
||
#endif
|