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 #ifndef __CS_SPARSE3D_H__
00021 #define __CS_SPARSE3D_H__
00022
00027 #include "csextern.h"
00028
00033 class CS_CRYSTALSPACE_EXPORT csSparse3D
00034 {
00035 public:
00037 csSparse3D () { }
00039 virtual ~csSparse3D () { }
00040
00042 virtual void Clear () = 0;
00043
00045 virtual void Set (int x, int y, int z, void* obj) = 0;
00046
00048 virtual void* Get (int x, int y, int z) = 0;
00049
00051 virtual void Del (int x, int y, int z) = 0;
00052 };
00053
00067 class CS_CRYSTALSPACE_EXPORT csWideSparse3D : public csSparse3D
00068 {
00069 private:
00071 struct SparseCell
00072 {
00073 int z;
00074 void* obj;
00075 SparseCell* next, * prev;
00076 };
00078 struct HdY
00079 {
00080 HdY () { first_z = 0; }
00081 int y;
00082 HdY* next, * prev;
00083 SparseCell* first_z;
00084 };
00086 struct HdX
00087 {
00088 HdX () { first_y = 0; }
00089 int x;
00090 HdX* next, * prev;
00091 HdY* first_y;
00092 };
00093
00095 HdX* first_x;
00097 HdX* get_header_x (int x);
00099 HdY* get_header_y (HdX* y_list, int y);
00101 SparseCell* get_cell_z (HdY* z_list, int z);
00102
00103 public:
00105 csWideSparse3D ();
00107 virtual ~csWideSparse3D ();
00108
00110 virtual void Clear ();
00111
00113 virtual void Set (int x, int y, int z, void* obj);
00114
00116 virtual void* Get (int x, int y, int z);
00117
00119 virtual void Del (int x, int y, int z);
00120 };
00121
00122 #endif // __CS_SPARSE3D_H__