Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef T_COMMON_INCLUDED
Toshihiro Shimizu 890ddd
#define T_COMMON_INCLUDED
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Toshihiro Shimizu 890ddd
#pragma warning(disable : 4786)
Toshihiro Shimizu 890ddd
#pragma warning(disable : 4251)
Toshihiro Shimizu 890ddd
#pragma warning(disable : 4146)
Toshihiro Shimizu 890ddd
#pragma warning(disable : 4267)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef _DEBUG
Toshihiro Shimizu 890ddd
#undef _STLP_DEBUG
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define _STLP_DEBUG 1
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
#if defined(NDEBUG) && defined(VERIFY_TNZCORE)
Toshihiro Shimizu 890ddd
#undef NDEBUG
Toshihiro Shimizu 890ddd
#include <assert.h></assert.h>
Toshihiro Shimizu 890ddd
#define NDEBUG
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#include <assert.h></assert.h>
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <string></string>
Toshihiro Shimizu 890ddd
#include <iostream></iostream>
Toshihiro Shimizu 890ddd
#include <fstream></fstream>
Toshihiro Shimizu 890ddd
#include <algorithm></algorithm>
Toshihiro Shimizu 890ddd
#include <limits></limits>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#if 0 && defined(__GNUC__)
Toshihiro Shimizu 890ddd
// typedef seems strong on GCC and breaks code with TException..
Shinya Kitaoka 3bfa54
#define TString std::wstring
Toshihiro Shimizu 890ddd
#else
Shinya Kitaoka 3bfa54
typedef std::wstring TString;
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// STL
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
 * On  Irix stl_alloc.h refers to nanosleep and timespec
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef __sgi
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
#if (_MIPS_SZLONG == 32)
Toshihiro Shimizu 890ddd
struct timespec {TLong tv_sec; TLong tv_nsec;};
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
struct timespec {int tv_sec; TLong tv_nsec;};
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef __cplusplus
Toshihiro Shimizu 890ddd
extern "C" 
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
int nanosleep(struct timespec *, int);
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <list></list>
Toshihiro Shimizu 890ddd
#include <vector></vector>
Toshihiro Shimizu 890ddd
#include <map></map>
Toshihiro Shimizu 890ddd
// .. and so on
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
namespace TConsts
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
const double epsilon = 1e-8;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Shinya Kitaoka ee259f
// use macros insted of constexprs, because MSVC2013 does not support `constexpr`.
Shinya Kitaoka ee259f
#define M_PI_3 (M_PI / 3)
Shinya Kitaoka ee259f
#define M_PI_180 (M_PI_4 / 45)
Shinya Kitaoka ee259f
#define M_180_PI (90 * M_2_PI)
Shinya Kitaoka ee259f
#define M_2PI (2 * M_PI)
Shinya Kitaoka ee259f
Toshihiro Shimizu 890ddd
// typedef's
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tnztypes.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef signed char SCHAR;
Toshihiro Shimizu 890ddd
typedef unsigned char UCHAR;
Toshihiro Shimizu 890ddd
typedef unsigned short USHORT;
Toshihiro Shimizu 890ddd
typedef short SHORT;
Toshihiro Shimizu 890ddd
typedef unsigned int UINT;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifndef _WIN32
Toshihiro Shimizu 890ddd
typedef unsigned char BYTE;
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
inline void tswap(T &a, T &b)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	T tmp = a;
Toshihiro Shimizu 890ddd
	a = b;
Toshihiro Shimizu 890ddd
	b = tmp;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
template <class t=""></class>
Shinya Kitaoka 12c444
inline T tcrop(T x, T a, T b) { return std::min(std::max(x, a), b); }
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
inline void notLessThan(T threshold, T &x)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (x < threshold)
Toshihiro Shimizu 890ddd
		x = threshold;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
inline void notMoreThan(T threshold, T &x)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (x > threshold)
Toshihiro Shimizu 890ddd
		x = threshold;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*! round(x) returns the nearest integer to x. 
Toshihiro Shimizu 890ddd
    Works well for x<0, but is slower than roundp()
Toshihiro Shimizu 890ddd
    /sa roundp() */
Toshihiro Shimizu 890ddd
inline int tround(double x)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return ((int)(((int)(-0.9) == 0 && x < 0.0) ? (x - 0.5) : (x + 0.5)));
Toshihiro Shimizu 890ddd
	//return ((int)(((int)(-0.9F) == 0 && x<0.0F) ? (x - 0.5F) : (x + 0.5F)));
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*! roundp(x) is like round(x), but the result if x<0 is 
Toshihiro Shimizu 890ddd
    platform dependent 
Toshihiro Shimizu 890ddd
	/sa round() */
Toshihiro Shimizu 890ddd
inline int troundp(double x)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return ((int)((x) + 0.5F));
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*! byteFromUshort(u) converts integer from [0..65535] to [0..255] */
Toshihiro Shimizu 890ddd
inline UCHAR byteFromUshort(USHORT u)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return ((256U * 255U + 1U) * u + (1 << 23)) >> 24;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*! ditheredByteFromUshort(u) is like byteFromUshort().
Toshihiro Shimizu 890ddd
    It is used in dithering ... 
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
inline UCHAR ditheredByteFromUshort(USHORT u, int r)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return ((((u * (256U * 255U + 1U)) -
Toshihiro Shimizu 890ddd
			  ((u * (256U * 255U + 1U)) >> 24)) +
Toshihiro Shimizu 890ddd
			 r) >>
Toshihiro Shimizu 890ddd
			24);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*! ushortFromByte(u) converts integer from [0..255] to  [0..65535]*/
Toshihiro Shimizu 890ddd
inline USHORT ushortFromByte(UCHAR u)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return u | u << 8;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
const int c_maxint = ((int)((~0U) >> 1));
Toshihiro Shimizu 890ddd
const int c_minint = ~c_maxint;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
const unsigned int c_maxuint = (unsigned int)(~0U);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Toshihiro Shimizu 890ddd
#define DV_EXPORT_API __declspec(dllexport)
Toshihiro Shimizu 890ddd
#define DV_IMPORT_API __declspec(dllimport)
Toshihiro Shimizu 890ddd
#define DV_EXPORT_VAR __declspec(dllexport)
Toshihiro Shimizu 890ddd
#define DV_IMPORT_VAR __declspec(dllimport)
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#define DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Toshihiro Shimizu 890ddd
#define DV_ALIGNED(val) __declspec(align(val))
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DV_ALIGNED(val) __attribute__((aligned(val)))
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
inline short swapShort(short val)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return ((val >> 8) & 0x00ff) | (val << 8);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
inline TINT32 swapTINT32(TINT32 val)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	TINT32 appo, aux, aux1;
Toshihiro Shimizu 890ddd
	appo = 0xff0000ff;
Toshihiro Shimizu 890ddd
	aux = (val & appo);
Toshihiro Shimizu 890ddd
	aux1 = (aux >> 24) & 0x000000ff;
Toshihiro Shimizu 890ddd
	aux = (aux << 24) | aux1;
Toshihiro Shimizu 890ddd
	appo = 0x00ffff00;
Toshihiro Shimizu 890ddd
	aux1 = (val & appo);
Toshihiro Shimizu 890ddd
	aux1 = ((aux1 >> 8) | (aux1 << 8)) & appo;
Toshihiro Shimizu 890ddd
	aux = (aux | aux1);
Toshihiro Shimizu 890ddd
	return aux;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
inline USHORT swapUshort(USHORT val) { return val >> 8 | val << 8; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 2148c8
inline std::ostream &operator<<(std::ostream &out, const std::string &s)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return out << s.c_str();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#define tArrayCount(ARRAY) (sizeof(ARRAY) / sizeof(ARRAY[0]))
Toshihiro Shimizu 890ddd
Shinya Kitaoka 3bfa54
const std::string mySettingsFileName = "mysettings.ini";
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif //__T_COMMON_INCLUDED