void KdTree::searchInternal(KdNode* node,List<VecItem*>& items){ if( node ){ searchInternal(node->left,items); items.append( node->item ); searchInternal(node->right,items); } }
void KdTree::searchInternal(KdNode* node,const BBox& bb,int d,List<VecItem*>& items){ if( node ){ Vec pn = node->item->getPosition(); if( (d==0 && bb.getMinX()<pn.getX()) || bb.getMinY()<pn.getY() ){ searchInternal(node->left,bb,(d+1)%m_k,items); } if( bb.contains(pn) ){ items.append( node->item ); } if( (d==0 && pn.getX()<=bb.getMaxX()) || pn.getY()<=bb.getMaxY() ){ searchInternal(node->right,bb,(d+1)%m_k,items); } } }
void KdTree::searchInternal(KdNode* node,const Vec& p,double range,int d,List<VecItem*>& items){ if( node ){ Vec pn = node->item->getPosition(); if( (d==0 && (p.getX()-range)<pn.getX()) || (p.getY()-range)<pn.getY() ){ searchInternal(node->left,p,range,(d+1)%m_k,items); } if( p.distanceToLessThan(pn,range) ){ items.append( node->item ); } if( (d==0 && pn.getX()<=(p.getX()+range)) || pn.getY()<=(p.getY()+range) ){ searchInternal(node->right,p,range,(d+1)%m_k,items); } } }
int BinarySearch::search(const std::vector<int>& datas, const int dest) { LOG(INFO) << "Enter: " << __func__; int ret = -1; ret = searchInternal(datas, 0, datas.size() - 1, dest); LOG(INFO) << "Leave: " << __func__; return ret; }
bool RenderingRuleSearchRequest::search(int state, bool loadOutput) { searchResult = false; int tagKey = values[PROPS->R_TAG->id]; int valueKey = values[PROPS->R_VALUE->id]; bool result = searchInternal(state, tagKey, valueKey, loadOutput); if (result) { searchResult = true; return true; } result = searchInternal(state, tagKey, 0, loadOutput); if (result) { searchResult = true; return true; } result = searchInternal(state, 0, 0, loadOutput); if (result) { searchResult = true; return true; } return false; }
List<VecItem*> KdTree::getItems(const BBox& bb){ List<VecItem*> items; searchInternal(m_root,bb,0,items); return items; }
List<VecItem*> KdTree::getItems(const Vec& p, double range){ List<VecItem*> items; searchInternal(m_root,p,range,0,items); return items; }
List<VecItem*> KdTree::getItems(){ List<VecItem*> items; searchInternal(m_root,items); return items; }