Esempio n. 1
0
boost::any coro_body(coroutine_type::self& self)  {
  self.yield(first_type());
  self.yield(second_type());
  self.yield(third_type());
  self.yield(fourth_type());
  return fifth_type();  
}
void b_body(coroutine_type::self& self, int arg)
{
    std::cout << "B(" << arg << ")" << std::endl;
    BOOST_CHECK_EQUAL(arg, 11);
    arg = self.yield();

    std::cout << "B(" << arg << ")" << std::endl;
    BOOST_CHECK_EQUAL(arg, 21);
    arg = self.yield_to(coro_a, arg+=1);

    BOOST_FAIL("Coroutine-B reached the end of the function");
}
Esempio n. 3
0
my_result coro(coroutine_type& other, 
	       int id,  
	       coroutine_type::self& self, 
	       my_parm parm) {
  int i = 10;
  my_result t;
  while(--i) {
    std::cout<<"in coroutine "<<id<<"\n";
    parm = self.yield_to(other, parm);
  }
  return t;
}
Esempio n. 4
0
boost::optional<int> coro_body(coroutine_type::self& self, int parm)  {
  self.yield();
  self.yield(0);
  self.yield();
  self.yield(0);
  self.yield();
  self.yield(1);
  return boost::optional<int>();
}
Esempio n. 5
0
option random_result(coroutine_type::self& self, option) {
  while(true)
    self.yield(std::rand()%2? defect: cooperate);
  return defect;
}
Esempio n. 6
0
option always_defect(coroutine_type::self& self, option) {
  while(true)
    self.yield(defect);
  return defect;
}
Esempio n. 7
0
option always_cooperate(coroutine_type::self& self, option) {
  while(true)
    self.yield(cooperate);
  return cooperate;
}
Esempio n. 8
0
option tit_for_tat_forgiving(coroutine_type::self& self, option a, int forgiveness) {
  while(true)
    a = self.yield((std::rand() %100) < forgiveness? cooperate: a);
  return cooperate;
}
Esempio n. 9
0
option tit_for_tat(coroutine_type::self& self, option a) {
  while(true)
    a = self.yield(a);
  return cooperate;
}
Esempio n. 10
0
void fsm_regexp(coroutine_type::self& self, char) {
  while(true) {
    if(self.result() == '0') {
      std::cout << '0';
      self.yield();
      if(self.result() == '1') {
	std::cout << '0';
	self.yield();
	while(self.result() == '1') {
	  std::cout << '0';
	  self.yield();
	}
	std::cout <<'0';
	self.yield();
	if(self.result() == '1') {
	  std::cout << '0';
	  self.yield();
	  if(self.result() == '0') {
	    std::cout << '1';
	    self.yield();
	  } else {
	    std::cout <<'0';
	    self.yield();
	  }
	} else {
	  std::cout <<'0';
	  self.yield();
	}
      } else {
	std::cout << '0';
	self.yield();
      }
    } else {
      std::cout <<'0';
      self.yield();
    }
  }
}