Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef __UTIL__COMPACT_H
00038 #define __UTIL__COMPACT_H
00039
00040 #include <assert.h>
00041
00042 namespace util
00043 {
00051 template <typename T, bool DEBUG=false>
00052 class Compact2D
00053 {
00054 int sizeX, sizeY;
00055 T* data;
00056
00057 private:
00059 Compact2D();
00061 Compact2D(const Compact2D&);
00063 const Compact2D& operator= (const Compact2D&);
00064
00065 public:
00067 Compact2D(int x, int y);
00068 T* operator[] (int x);
00069 const T* operator[] (int x) const;
00070 ~Compact2D();
00071 };
00072
00078 template <typename T>
00079 class Compact3D
00080 {
00081 int sizeX, sizeY, sizeZ;
00082 T* data;
00083
00084 public:
00085 Compact3D(int x, int y, int z)
00086 :sizeX(x),sizeY(y), sizeZ(z)
00087 {
00088 assert (x>0);
00089 assert (y>0);
00090 assert (z>0);
00091
00092 data = new T[sizeX*sizeY*sizeZ];
00093 }
00094
00095 const T& operator() (int x, int y, int z) const
00096 {
00097 assert (x>=0 && x < sizeX);
00098 assert (y>=0 && y < sizeY);
00099 assert (z>=0 && z < sizeZ);
00100 return *(data+sizeY*sizeX*z+sizeX*y+x);
00101 }
00102
00103 T& operator() (int x, int y, int z)
00104 {
00105 assert (x>=0 && x < sizeX);
00106 assert (y>=0 && y < sizeY);
00107 assert (z>=0 && z < sizeZ);
00108 return *(data+sizeY*sizeX*z+sizeX*y+x);
00109 }
00110
00111
00112 ~Compact3D()
00113 {
00114 delete[] data;
00115 }
00116 };
00117
00118 }
00119
00120 #include "compact_impl.hpp"
00121
00122 #endif