//===========================================================================// // File: style.hh // // Project: MUNGA Brick: None assigned - coding styles, etc. // // Contents: Base information used by all MUNGA source files // //---------------------------------------------------------------------------// // Date Who Modification // // -------- --- ---------------------------------------------------------- // // 10/14/94 JMA Initial coding. // // 11/03/94 ECH Made compatible with BC4.0 // //---------------------------------------------------------------------------// // Copyright (C) 1994-1995, Virtual World Entertainment, Inc. // // PROPRIETARY AND CONFIDENTIAL // //===========================================================================// #if !defined(STYLE_HPP) # define STYLE_HPP # if !defined(DEBUG_STREAM) # define DEBUG_STREAM cout # endif # if !defined(Verify) # if !defined(DEBUG_LEVEL) # define DEBUG_LEVEL 0 # endif # if DEBUG_LEVEL<1 # include # elif DEBUG_LEVEL<2 # include # elif DEBUG_LEVEL<3 # include # else # include # endif # endif # if defined(__BCPLUSPLUS__) extern int _matherr(struct exception *a); # endif extern int Fpu_Ok(); extern void Verify_Failed(char *message, char *file, int line); extern void Fail_To_Debugger(char *message, char *file, int line); extern void Exit(int exit_code); class Signature { private: # if DEBUG_LEVEL>0 enum Mark { ok, destroyed, corrupted, noMagic=(int)0xAB135795L, magic=(int)0xFFED1231L } mark; # endif protected: Signature(); ~Signature(); public: friend int Is_Signature_Bad(const volatile Signature *p); }; # if defined(USE_SIGNATURE) # define SIGNATURED : public Signature # else # define SIGNATURED # define Is_Signature_Bad(p) (False) # endif //##########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //# MACROS # //########## # define ELEMENTS(Array) (sizeof(Array)/sizeof(*Array)) # if defined(TEST_CLASS) # define Test(c)\ if (!(c)) {\ DEBUG_STREAM << __FILE__"(" << __LINE__ << "): "#c" failed!\07\n";\ return False;\ } # define Test_And_Dump(c,v)\ if (!(c)) {\ DEBUG_STREAM << __FILE__"(" << __LINE__ << "): "#c" failed!\07\n";\ DEBUG_STREAM << __FILE__"(" << __LINE__ << "): "#v" = " << (v) << '\n';\ return False;\ } # define Test_Message(m)\ (DEBUG_STREAM << m) # define Test_Branch_On()\ Fail("First visit of branch") # define Test_Branch_Off() # else # define Test(c) # define Test_And_Dump(c,v) # define Test_Message(m) # endif # if defined(__sgi__) # define stricmp(s1, s2) (strcasecmp(s1, s2)) # define strnicmp(s1, s2, n) (strncasecmp(s1, s2, n)) # endif //################~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //# ENUMERATIONS # //################ enum { False = 0, True = 1 }; //###########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //# CASTING # //########### # define SKIPPY_CAST(Type,var) (*((Type*)&(var))) //#############~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //# TEMPLATES # //############# # define SMALL (1e-4f) # define Abs(value) ((value>0) ? value : -value) # define Clamp(v,f,c) (v = ((vc) ? c : v))) # define Max_Clamp(v,c) (v = ((v>c) ? c : v)) # define Is_Many_Bits(value) (Lowbit(value)^value) # define Low_Bit(value) (value & (-value)) # define Min_Clamp(v,f) (v = ((vb) ? a : b) # define Min(a,b) ((aSMALL) //############~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //# TYPEDEFS # //############ typedef int Logical; // machine dependant zero/not-zero typedef unsigned char Byte; // 8 bits unsigned typedef unsigned short Word; // 16 bits unsigned typedef unsigned long LWord; // 32 bits unsigned typedef int Enumeration; # if !defined(HEAP_HPP) # include # endif #endif