00001
00012 #ifndef __IDX_HOLDER_H__
00013 #define __IDX_HOLDER_H__
00014
00015 #include <global.h>
00016
00017 #if !defined(CLASSIC_MODE) && defined(FILL_SOLIDS)
00018
00019 #include <node_index.h>
00020
00021 #if defined(LIMITED_STACK) || defined(MARK_BORDER)
00022
00023 #ifdef USE_QUEUE
00024
00025 #include <utils/data_queue.h>
00026
00027 #else // !USE_QUEUE
00028
00029 #include <utils/data_stack.h>
00030
00031 #endif // !USE_QUEUE
00032
00033 #else // !LIMITED_STACK && !MARK_BORDER
00034
00035 #include <utils/data_holder.h>
00036
00037 #ifdef USE_QUEUE
00038
00039 #include <queue>
00040
00041 #else // !USE_QUEUE
00042
00043 #include <stack>
00044
00045 #endif // !USE_QUEUE
00046
00047 #endif // !LIMITED_STACK && !MARK_BORDER
00048
00059 #if defined(MARK_BORDER) || defined(LIMITED_STACK)
00060
00061 #if MAX_RECURSIVE_DEEP <= 0
00062
00067 #define HOLDER_SIZE (DIMENSIONS << treeHight)
00068
00069 #else // MAX_RECURSIVE_DEEP > 0
00070
00075 #define HOLDER_SIZE MAX_RECURSIVE_DEEP
00076
00077 #endif // MAX_RECURSIVE_DEEP > 0
00078
00079 #ifdef USE_QUEUE
00080
00081 class IdxHolder : public DataQueue<NodeIndex> {
00082
00083 #else // !USE_QUEUE
00084
00085 class IdxHolder : public DataStack<NodeIndex> {
00086
00087 #endif // !USE_QUEUE
00088
00089 #else // !MARK_BORDER && !LIMITED_STACK
00090
00091 class IdxHolder {
00092
00093 #endif // !MARK_BORDER && !LIMITED_STACK
00094
00095 public:
00100 inline IdxHolder(Hight treeHight)
00101 #if defined(LIMITED_STACK) || defined(MARK_BORDER)
00102
00103 #ifdef USE_QUEUE
00104
00105 : DataQueue<NodeIndex>(HOLDER_SIZE) {
00106
00107 #else // !USE_QUEUE
00108
00109 : DataStack<NodeIndex>(HOLDER_SIZE) {
00110
00111 #endif // !USE_QUEUE
00112
00113 #else // !LIMITED_STACK && !MARK_BORDER
00114 {
00115
00116 #endif // !LIMITED_STACK && !MARK_BORDER
00117
00118 }
00119
00125 NodeIndex get();
00126
00131 bool isEmpty();
00132
00137 bool isFull();
00138
00143 void put(NodeIndex item);
00144
00145 #if !defined(MARK_BORDER) && !defined(LIMITED_STACK)
00146 private:
00150 #ifdef USE_QUEUE
00151 queue<NodeIndex> pool;
00152 #else // !USE_QUEUE
00153 stack<NodeIndex> pool;
00154 #endif // !USE_QUEUE
00155
00156 #endif // !MARK_BORDER && !LIMITED_STACK
00157
00158 };
00159
00160 #endif // !CLASSIC_MODE && FILL_SOLIDS
00161
00162 #endif // ! __IDX_HOLDER_H__