1 #ifndef _HASHTABLE_3D_H_
2 #define _HASHTABLE_3D_H_
19 template <
class T,
int COLLIDETABLESIZE,
int COLLIDETABLEACCURACY,
int HUGEOBJECT >
23 std::vector< T >hugeobjects;
27 static void hash_vec(
double i,
double j,
double k,
int &
x,
int &
y,
int &
z )
34 static void hash_vec(
const QVector &t,
int &x,
int &y,
int &z )
36 hash_vec( t.i, t.j, t.k, x, y, z );
42 return ( (
int) ( ( (aye < 0) ? (aye
53 if ( table[i][j][k].
size() )
54 table[i][j][k].clear();
57 int Get(
const QVector &Exact, std::vector< T > *retval[] )
62 retval[0] = &hugeobjects;
73 unsigned int sizer = 1;
84 retval[0] = &hugeobjects;
93 if ( !table[x][y][z].empty() ) {
94 retval[sizer] = &table[
x][
y][z];
116 if (target->
Mini.i == maxx)
126 *( (double) COLLIDETABLEACCURACY )
128 target->
hhuge =
true;
129 hugeobjects.push_back( objectToPut );
132 target->
hhuge =
false;
134 for (
double i = target->
Mini.i; i < maxx; i += COLLIDETABLEACCURACY) {
136 for (
double j = target->
Mini.j; j < maxy; j += COLLIDETABLEACCURACY) {
138 for (
double k = target->
Mini.k; k < maxz; k += COLLIDETABLEACCURACY) {
140 table[
x][
y][z].push_back( objectToPut );
148 typename std::vector< T >::iterator removal = myvector.begin();
149 while ( removal != myvector.end() ) {
150 removal = std::find( removal, myvector.end(), objectToKill );
151 if ( removal != myvector.end() ) {
153 int offset = removal-myvector.begin();
154 objectToKill = *removal;
155 myvector.erase( removal );
156 removal = myvector.begin()+offset;
195 if (!ret && !target->
hhuge)
196 fprintf( stderr,
"Nonfatal Collide Error\n" );
197 if (!ret || target->
hhuge)