00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CS_SPARSE3D_H__
00021 #define __CS_SPARSE3D_H__
00022
00027 class csSparse3D
00028 {
00029 public:
00031 csSparse3D () { }
00033 virtual ~csSparse3D () { }
00034
00036 virtual void Clear () = 0;
00037
00039 virtual void Set (int x, int y, int z, void* obj) = 0;
00040
00042 virtual void* Get (int x, int y, int z) = 0;
00043
00045 virtual void Del (int x, int y, int z) = 0;
00046 };
00047
00061 class csWideSparse3D : public csSparse3D
00062 {
00063 private:
00065 struct SparseCell
00066 {
00067 int z;
00068 void* obj;
00069 SparseCell* next, * prev;
00070 };
00072 struct HdY
00073 {
00074 HdY () { first_z = 0; }
00075 int y;
00076 HdY* next, * prev;
00077 SparseCell* first_z;
00078 };
00080 struct HdX
00081 {
00082 HdX () { first_y = 0; }
00083 int x;
00084 HdX* next, * prev;
00085 HdY* first_y;
00086 };
00087
00089 HdX* first_x;
00091 HdX* get_header_x (int x);
00093 HdY* get_header_y (HdX* y_list, int y);
00095 SparseCell* get_cell_z (HdY* z_list, int z);
00096
00097 public:
00099 csWideSparse3D ();
00101 virtual ~csWideSparse3D ();
00102
00104 virtual void Clear ();
00105
00107 virtual void Set (int x, int y, int z, void* obj);
00108
00110 virtual void* Get (int x, int y, int z);
00111
00113 virtual void Del (int x, int y, int z);
00114 };
00115
00116 #endif // __CS_SPARSE3D_H__