23 #ifndef __MYGUI_BIINDEX_BASE_H__
24 #define __MYGUI_BIINDEX_BASE_H__
41 #if MYGUI_DEBUG_MODE == 1
50 if (_index == mIndexFace.size())
53 index = mIndexFace.size();
55 mIndexFace.push_back(_index);
56 mIndexBack.push_back(_index);
61 index = mIndexFace[_index];
63 size_t count = mIndexFace.size();
64 for (
size_t pos=0; pos<count; ++pos)
66 if (mIndexFace[pos] >= index) mIndexFace[pos]++;
68 mIndexFace.insert(mIndexFace.begin() + _index, index);
71 mIndexBack.push_back(0);
72 for (
size_t pos=0; pos<count; ++pos)
74 mIndexBack[mIndexFace[pos]] = pos;
78 #if MYGUI_DEBUG_MODE == 1
87 #if MYGUI_DEBUG_MODE == 1
93 size_t index = mIndexFace[_index];
95 mIndexFace.erase(mIndexFace.begin() + _index);
96 mIndexBack.pop_back();
98 size_t count = mIndexFace.size();
99 for (
size_t pos=0; pos<count; ++pos)
101 if (mIndexFace[pos] > index) mIndexFace[pos]--;
102 mIndexBack[mIndexFace[pos]] = pos;
105 #if MYGUI_DEBUG_MODE == 1
121 #if MYGUI_DEBUG_MODE == 1
130 #if MYGUI_DEBUG_MODE == 1
139 #if MYGUI_DEBUG_MODE == 1
144 std::swap(mIndexFace[_index1], mIndexFace[_index2]);
145 std::swap(mIndexBack[mIndexFace[_index1]], mIndexBack[mIndexFace[_index2]]);
151 #if MYGUI_DEBUG_MODE == 1
156 std::swap(mIndexBack[_index1], mIndexBack[_index2]);
157 std::swap(mIndexFace[mIndexBack[_index1]], mIndexFace[mIndexBack[_index2]]);
160 #if MYGUI_DEBUG_MODE == 1
164 assert(mIndexFace.size() == mIndexBack.size());
167 std::vector<bool> vec;
168 size_t count = mIndexFace.size();
171 for (
size_t pos=0; pos<count; ++pos) vec.push_back(
false);
173 for (
size_t pos=0; pos<count; ++pos)
176 size_t index = mIndexBack[pos];
177 if (index >= count)
throw new std::exception();
180 index = mIndexFace[pos];
181 if (index >= count)
throw new std::exception();
183 if (vec[index])
throw new std::exception();
187 for (
size_t pos=0; pos<count; ++pos)
189 if (!vec[pos])
throw new std::exception();
193 for (
size_t pos=0; pos<count; ++pos)
195 size_t index = mIndexFace[pos];
196 if (mIndexBack[index] != pos)
throw new std::exception();
203 typedef std::vector<size_t> VectorSizeT;
207 VectorSizeT mIndexFace;
211 VectorSizeT mIndexBack;
216 #endif // __MYGUI_BIINDEX_BASE_H__