Advertisement
tinyevil

Untitled

Aug 5th, 2018
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.93 KB | None | 0 0
  1. generator<int> primes(int start, int end){
  2.     for ( int i = start; i < end; i++ ){
  3.         if ( is_prime(i) ){
  4.             yield i;
  5.         }
  6.     }
  7. }
  8.  
  9. for ( auto prime : primes(100, 10000) ){
  10.     cout << prime << " ";
  11. }
  12.  
  13.  
  14. struct unnamed_generator{
  15.     int state;
  16.     int local_i;
  17.     int start;
  18.     int end;
  19.    
  20.     unnamed_generator(int start, int end)
  21.         : start(start)
  22.         , end(end){
  23.     }
  24.    
  25.     std::optional<int> resume(){
  26.         switch ( state ){
  27.         case 0:{
  28.             local_i = start;
  29.             state = 1;
  30.             return resume();
  31.         }break;
  32.         case 1:{
  33.             if ( local_i >= end ){
  34.                 state = 3;
  35.                 return resume();
  36.             }
  37.            
  38.             if ( is_prime(local_i) ){
  39.                 state = 2;
  40.                 return local_i;
  41.             }
  42.             state = 2;
  43.             return resume();
  44.         }break;
  45.         case 2:{
  46.             local_i++;
  47.             state = 1;
  48.             return resume();
  49.         }break;
  50.         default:{
  51.             return nullptr;
  52.         }break;
  53.         }      
  54.     }
  55. }
  56.  
  57. unnamed_generator generator(100, 10000);
  58. while ( auto prime = generator.resume().get() ){
  59.     cout << prime;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement