Example #1
0
void AdInvIdx<KEY>::Filter(const set<KEY> & keys, set<Ice::Long> & gids) {
  vector<set<Ice::Long> > g_sets;
  IceUtil::RWRecMutex::WLock lock(mutex_);
  for (typename set<KEY>::const_iterator kit = keys.begin(); kit != keys.end(); ++kit) {
    typename map<KEY, set<Ice::Long> >::iterator mit = map_.find(*keys);
    if (mit == map_.end()) {
      continue;
    } else {
      set<Ice::Long> tmp;
      set_intersection(mit->second.begin(), mit->second.end(), gids.begin(),
          gids.end(), inserter(tmp, tmp.begin()));
      g_sets.push_back(tmp);
    }
  }
  if(g_sets.empty()){
    gids.clear();
    return;
  }else if(g_sets.size() == 1){
    gids.swap(g_sets.at(0));
    return;
  }
  set<Ice::Long> result;
  result.swap(g_sets.at(0));
  for(vector<set<Ice::Long> >::iterator vit = ++(g_sets.begin());vit != g_sets.end();++vit){
    set<Ice::Long> tmp;
    set_union(result.begin(),result.end(),(*vit).begin(),(*vit).end(),inserter(tmp,tmp.begin()));
    result.swap(tmp);
  }
  gids.swap(result);
}
Example #2
0
//---------------------------------------------------------------------------
void SpecialFilter::Filt(set<int> & targets) {
  set<int> tmpset;

  IceUtil::Mutex::Lock lock(mutex_);
  //  set_intersection(targets.begin(),targets.end(), ids_.begin(), ids_.end(),std::inserter(tmpset,tmpset.begin()));
  for (set<int>::iterator sit = targets.begin(); sit != targets.end(); ++sit) {
    if (ids_.find(*sit) != ids_.end()) {
      tmpset.insert(*sit);
    }
  }
  targets.swap(tmpset);
}
Example #3
0
void AdInvIdx<KEY>::Filter(KEY key, set<Ice::Long> & gids) {
  IceUtil::RWRecMutex::WLock lock(mutex_);
  typename map<KEY, set<Ice::Long> >::iterator mit = map_.find(key);
  if (mit == map_.end()) {
    gids.clear();
  } else {
    set<Ice::Long> tmp;
    set_intersection(mit->second.begin(), mit->second.end(), gids.begin(),
        gids.end(), inserter(tmp, tmp.begin()));
    gids.swap(tmp);
  }
}