예제 #1
0
//@random
edge_info graph_serv::get_edge(const std::string& nid, const edge_id_t& id)const
{
  jubatus::graph::edge_info info;
  g_.get_model()->get_edge((jubatus::graph::edge_id_t)id, info);
  jubatus::edge_info ret;
  ret.p = info.p;
  ret.src = i2n(info.src);
  ret.tgt = i2n(info.tgt);
  return ret;
}
예제 #2
0
파일: xigrid.c 프로젝트: bareid/xi
//put periodicopt == 1 for periodic boundary conditions (i.e., in a box)
void getnbrs(int cellnum, int NFAC, int Ncell, int *nbrs, int *nnbrs, int *closenbrs, int periodicopt) {
  int iposcen[3];
  int ipos[3];
  //tmp!!
  int iposchk[3];
  n2i(cellnum,Ncell,iposcen);
  int ix, iy, iz;
  int nbrindx = 0;
  int closecnt = 0;
  for(ix=iposcen[0]-NFAC;ix<=iposcen[0]+NFAC;ix++) {
    for(iy=iposcen[1]-NFAC;iy<=iposcen[1]+NFAC;iy++) {
      for(iz=iposcen[2]-NFAC;iz<=iposcen[2]+NFAC;iz++) {
        if(closenbrs[closecnt] == 0) {
          closecnt += 1;
          continue;
          }
        else {
          closecnt += 1;
          }
        if(periodicopt == 0) {
          if(ix < 0 || ix >= Ncell || iy < 0 || iy >= Ncell || iz < 0 || iz >= Ncell) {
            continue;
            }
          ipos[0] = ix;
          ipos[1] = iy;
          ipos[2] = iz;
          }
        else { //periodicopt = 1
          ipos[0] = wrapgridperiodic(ix,Ncell);
          ipos[1] = wrapgridperiodic(iy,Ncell);
          ipos[2] = wrapgridperiodic(iz,Ncell);
          }
        nbrs[nbrindx] = i2n(ipos,Ncell);
        #ifdef SANITYCHECKS
        n2i(nbrs[nbrindx],Ncell,iposchk);
        if(iposchk[0] != ix && iposchk[0] != ix-Ncell && iposchk[0] != ix+Ncell) {
          printf("x err!\n");
          exit(1);
          }
        if(iposchk[1] != iy && iposchk[1] != iy-Ncell && iposchk[1] != iy+Ncell) {
          printf("y err!\n");
          exit(1);
          }
        if(iposchk[2] != iz && iposchk[2] != iz-Ncell && iposchk[2] != iz+Ncell) {
          printf("z err!\n");
          exit(1);
          }
        #endif
        nbrindx += 1;
        }
      }
    }
  (*nnbrs) = nbrindx;
  #if defined(SANITYCHECKS) && defined(ASSERT_ON)
  assert(closecnt == (2*NFAC+1)*(2*NFAC+1)*(2*NFAC+1));
  #endif
  }
예제 #3
0
//@random
std::vector<node_id> graph_serv::shortest_path(const shortest_path_req& req) const
{ 
  std::vector<jubatus::graph::node_id_t> ret0;
  jubatus::graph::preset_query q;
  framework::convert(req.q, q);
  g_.get_model()->shortest_path(n2i(req.src), n2i(req.tgt), req.max_hop, ret0, q);
  std::vector<node_id> ret;
  for(size_t i=0;i<ret0.size();++i){
    ret.push_back(i2n(ret0[i]));
  }
  return ret;
}