Exemplo n.º 1
0
int main() {
	int a;
	printf("Enter an integer: ");
	scanf("%d", &a);
	printf("Rev bits: %d", revbits(a));
	return 0;
}
Exemplo n.º 2
0
void
setup(void)
{
	memset(&root, 0, sizeof(root));
	memset(&rroot, 0, sizeof(rroot));
	memset(&a, 0, sizeof(a));
	memset(&b, 0, sizeof(b));
	memset(&c, 0, sizeof(c));
	memset(&d, 0, sizeof(d));

	root.key = 0;
	root.keylen = 0;
	root.datum = NULL;
	root.left = &rroot;
	root.right = NULL;

	rroot.key = revbits(mkkey("44.0.0.0"));
	rroot.keylen = 8;
	rroot.datum = (void *)rv;
	rroot.left = &a;
	rroot.right = &b;

	a.key = (revbits(mkkey("44.0.0.1")) >> 8);
	a.keylen = 24;
	a.datum = (void *)av;
	a.left = NULL;
	a.right = NULL;

	b.key = (revbits(mkkey("44.130.0.0")) >> 8);
	b.keylen = 8;
	b.datum = (void *)bv;
	b.left = &c;
	b.right = &d;

	c.key = (revbits(mkkey("44.130.24.0")) >> 16);
	c.keylen = 8;
	c.datum = (void *)cv;
	c.left = &e;
	c.right = NULL;

	d.key = (revbits(mkkey("44.130.130.0")) >> 16);
	d.keylen = 8;
	d.datum = (void *)dv;
	d.left = NULL;
	d.right = NULL;

	e.key = (revbits(mkkey("44.130.24.25")) >> 24);
	e.keylen = 8;
	e.datum = (void *)ev;
	e.left = NULL;
	e.right = NULL;
}
Exemplo n.º 3
0
void ocin_gen_bitrev::init (tsim_object *parent, string _name) {
	
{
  // BitRev is broken	
  stringstream tmp;
  tmp << "BitRev generator is broken! Reasons: \n"
      << " a) it doesn't support terminal nodes (source->dest mapping) \n"
      << " b) it's operating on node numbers (instead of coords, eg: bit-comp, transpose). Double check!!";
  ocin_name_fatal(_name,tmp.str());
  exit(0);
}
  name = _name;
  gen_done = false;

  tsim_module::init (parent, name);
  
  top_p = (ocin_top *) parent;

  // setup the packet monitor
  mon = new ocin_mon_packet;
  mon->init(name, nodes.size());

#ifdef DEBUG
  {
    stringstream tmp;
    tmp  << "Initializing Packet Generator";
    ocin_name_debug(name,tmp.str());
  }
#endif

  vector<string>::iterator srcs_it;

  // To speed things up a bit we are creating an order'ed vector of
  // local_iu pointers here and I'll iterate over them instead using
  // the node map directly.

  // iterate over the sources and push pointers onto a list
  for (srcs_it = srcs.begin(); srcs_it != srcs.end(); srcs_it++) {
  	string src = terminal2node_map[srcs_it->c_str()];
  	int port = terminal2port_map[srcs_it->c_str()];
    local_iu_ptrs.push_back(&(nodes[src].local_iu[port]));
    
#ifdef DEBUG
    {
      stringstream tmp;
      tmp  << "Packet Gen source:"<<srcs_it->c_str();
      ocin_name_debug(name,tmp.str());
    }
#endif
  }

  vector<string>::iterator dsts_it;
#ifdef DEBUG
  {

    for (dsts_it = dsts.begin(); dsts_it != dsts.end(); dsts_it++) {
      stringstream tmp;
      tmp  << "Packet Gen ejector:"<<dsts_it->c_str();
      ocin_name_debug(name,tmp.str());
    }
  }
#endif

  // Pre-compute a the src->dst map

  // need this to compute the reverse num
  unsigned maxnode_num = srcs.size()-1;

  // we assume that the srcs order is the node numbering to reverse.
  for (unsigned x = 0; x <= maxnode_num; x++) {
    unsigned bitrev = revbits(x, maxnode_num);
    
    string rev_name = srcs[bitrev];
    // now that we have the bitrev's name we look for a matching dest
    bool found = false;
    for (dsts_it = dsts.begin(); dsts_it != dsts.end(); dsts_it++) {
      
      if (*dsts_it == rev_name) {
        src_to_dst[srcs[x].c_str()] = dsts_it->c_str();
        found = true;
        
#ifdef DEBUG
        {
          stringstream tmp;
          tmp  << "Bit Reversal pair :"<<srcs[x].c_str() << " -> "<< dsts_it->c_str();
          ocin_name_debug(name,tmp.str());
        }
#endif
        
        
      }
    }
    
    if (found == false) {
      cout << name << ": Warning source " <<srcs[x].c_str() <<
        " does not have a valid bit reversal destination, it will be skipped as a source\n";
    }
  }
}