00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef WM4SYSTEM_H
00017 #define WM4SYSTEM_H
00018
00019 #include "Wm4FoundationLIB.h"
00020 #include "Wm4Platforms.h"
00021
00022
00023 #include <cassert>
00024 #include <cctype>
00025 #include <cfloat>
00026 #include <climits>
00027 #include <cmath>
00028 #include <cstdarg>
00029 #include <cstddef>
00030 #include <cstdio>
00031 #include <cstdlib>
00032 #include <cstring>
00033 #include <ctime>
00034 #include <iostream>
00035 #include <fstream>
00036
00037
00038 #include <algorithm>
00039 #include <list>
00040 #include <map>
00041 #include <queue>
00042 #include <set>
00043 #include <stack>
00044 #include <string>
00045 #include <utility>
00046 #include <vector>
00047
00048
00049 #include "Wm4Memory.h"
00050
00051 namespace Wm4
00052 {
00053
00054 class WM4_FOUNDATION_ITEM System
00055 {
00056 public:
00057
00058 static void SwapBytes (int iSize, void* pvValue);
00059 static void SwapBytes (int iSize, int iQuantity, void* pvValue);
00060
00061
00062 static bool IsBigEndian ();
00063 static void EndianCopy (int iSize, const void* pvSrc, void* pvDst);
00064 static void EndianCopy (int iSize, int iQuantity, const void* pvSrc,
00065 void* pvDst);
00066
00067
00068 static double GetTime ();
00069
00070
00071 static bool Load (const char* acFilename, char*& racBuffer, int& riSize);
00072 static bool Save (const char* acFilename, const char* acBuffer,
00073 int iSize);
00074 static bool Append (const char* acFilename, char* acBuffer, int iSize);
00075
00076
00077
00078 static int Read1 (const char* acBuffer, int iQuantity, void* pvData);
00079 static int Write1 (char* acBuffer, int iQuantity, const void* pvData);
00080 static int Read1 (FILE* pkFile, int iQuantity, void* pvData);
00081 static int Write1 (FILE* pkFile, int iQuantity, const void* pvData);
00082
00083
00084
00085
00086
00087 static int Read2le (const char* acBuffer, int iQuantity, void* pvData);
00088 static int Read4le (const char* acBuffer, int iQuantity, void* pvData);
00089 static int Read8le (const char* acBuffer, int iQuantity, void* pvData);
00090 static int Write2le (char* acBuffer, int iQuantity, const void* pvData);
00091 static int Write4le (char* acBuffer, int iQuantity, const void* pvData);
00092 static int Write8le (char* acBuffer, int iQuantity, const void* pvData);
00093 static int Read2le (FILE* pkFile, int iQuantity, void* pvData);
00094 static int Read4le (FILE* pkFile, int iQuantity, void* pvData);
00095 static int Read8le (FILE* pkFile, int iQuantity, void* pvData);
00096 static int Write2le (FILE* pkFile, int iQuantity, const void* pvData);
00097 static int Write4le (FILE* pkFile, int iQuantity, const void* pvData);
00098 static int Write8le (FILE* pkFile, int iQuantity, const void* pvData);
00099
00100
00101
00102
00103
00104 static int Read2be (const char* acBuffer, int iQuantity, void* pvData);
00105 static int Read4be (const char* acBuffer, int iQuantity, void* pvData);
00106 static int Read8be (const char* acBuffer, int iQuantity, void* pvData);
00107 static int Write2be (char* acBuffer, int iQuantity, const void* pvData);
00108 static int Write4be (char* acBuffer, int iQuantity, const void* pvData);
00109 static int Write8be (char* acBuffer, int iQuantity, const void* pvData);
00110 static int Read2be (FILE* pkFile, int iQuantity, void* pvData);
00111 static int Read4be (FILE* pkFile, int iQuantity, void* pvData);
00112 static int Read8be (FILE* pkFile, int iQuantity, void* pvData);
00113 static int Write2be (FILE* pkFile, int iQuantity, const void* pvData);
00114 static int Write4be (FILE* pkFile, int iQuantity, const void* pvData);
00115 static int Write8be (FILE* pkFile, int iQuantity, const void* pvData);
00116
00117
00118
00119
00120
00121
00122
00123 static const char* GetPath (const char* acDirectory,
00124 const char* acFilename);
00125
00126
00127
00128
00129
00130
00131
00132 static void Initialize ();
00133 static void Terminate ();
00134 static int GetDirectoryQuantity ();
00135 static const char* GetDirectory (int i);
00136 static bool InsertDirectory (const char* acDirectory);
00137 static bool RemoveDirectory (const char* acDirectory);
00138 static void RemoveAllDirectories ();
00139
00140
00141
00142
00143
00144 enum
00145 {
00146 SM_READ,
00147 SM_WRITE,
00148 SM_READ_WRITE
00149 };
00150 static const char* GetPath (const char* acFilename, int eMode);
00151
00152
00153 static unsigned int MakeRGB (unsigned char ucR, unsigned char ucG,
00154 unsigned char ucB);
00155 static unsigned int MakeRGBA (unsigned char ucR, unsigned char ucG,
00156 unsigned char ucB, unsigned char ucA);
00157
00158
00159
00160
00161
00162
00163 static FILE* Fopen (const char* acFilename, const char* acMode);
00164 static int Fprintf (FILE* pkFile, const char* acFormat, ...);
00165 static int Fclose (FILE* pkFile);
00166 static const char* GetEnv (const char* acEnvVarName);
00167 static void* Memcpy (void* pvDst, size_t uiDstSize, const void* pvSrc,
00168 size_t uiSrcSize);
00169 static int Sprintf (char* acDst, size_t uiDstSize, const char* acFormat,
00170 ...);
00171 static char* Strcpy (char* acDst, size_t uiDstSize, const char* acSrc);
00172 static char* Strcat (char* acDst, size_t uiDstSize, const char* acSrc);
00173 static char* Strncpy (char* acDst, size_t uiDstSize, const char* acSrc,
00174 size_t uiSrcSize);
00175 static char* Strtok (char* acToken, const char* acDelimiters,
00176 char*& racNextToken);
00177
00178 private:
00179 enum { SYSTEM_MAX_PATH = 1024, SYSTEM_MAX_ENVVAR = 1024 };
00180 static char ms_acPath[SYSTEM_MAX_PATH];
00181 static char ms_acEnvVar[SYSTEM_MAX_ENVVAR];
00182 static std::vector<std::string>* ms_pkDirectories;
00183
00184 public:
00185 static char WM4_PATH[SYSTEM_MAX_ENVVAR];
00186 };
00187
00188
00189
00190 template <class T> void Allocate (int iCols, int iRows, T**& raatArray);
00191 template <class T> static void Deallocate (T**& raatArray);
00192
00193
00194
00195 template <class T> void Allocate (int iCols, int iRows, int iSlices,
00196 T***& raaatArray);
00197 template <class T> void Deallocate (T***& raaatArray);
00198
00199 #include "Wm4System.inl"
00200
00201 }
00202
00203
00204
00205
00206 #include "Wm4THashSet.h"
00207 #include "Wm4THashTable.h"
00208 #include "Wm4TMinHeap.h"
00209 #include "Wm4TStringHashTable.h"
00210 #include "Wm4TSmallUnorderedSet.h"
00211 #include "Wm4TTuple.h"
00212
00213 #endif