| 224 cx_foreach(void *, elem, iter) { |
224 cx_foreach(void *, elem, iter) { |
| 225 // investigate the current node |
225 // investigate the current node |
| 226 int ret_elem = sfunc(elem, node); |
226 int ret_elem = sfunc(elem, node); |
| 227 if (ret_elem == 0) { |
227 if (ret_elem == 0) { |
| 228 // if found, exit the search |
228 // if found, exit the search |
| 229 *result = (void *) elem; |
229 *result = elem; |
| 230 ret = 0; |
230 ret = 0; |
| 231 break; |
231 break; |
| 232 } else if (ret_elem > 0 && ret_elem < ret) { |
232 } else if (ret_elem > 0 && ret_elem < ret) { |
| 233 // new distance is better |
233 // new distance is better |
| 234 *result = elem; |
234 *result = elem; |
| 235 ret = ret_elem; |
235 ret = ret_elem; |
| 236 } else { |
236 } else if (ret_elem < 0 || ret_elem > ret) { |
| 237 // not contained or distance is worse, skip entire subtree |
237 // not contained or distance is worse, skip entire subtree |
| 238 cxTreeIteratorContinue(iter); |
238 cxTreeIteratorContinue(iter); |
| 239 } |
239 } |
| 240 |
240 |
| 241 // when we reached the max depth, skip the subtree |
241 // when we reached the max depth, skip the subtree |