// // Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo // // The contents of this file are covered under the licence agreement in the // file "LICENCE" distributed with Cforall. // // fibonacci.c -- // // Author : Thierry Delisle // Created On : Thu Jun 8 07:29:37 2017 // Last Modified By : Peter A. Buhr // Last Modified On : Thu Jun 8 07:37:12 2017 // Update Count : 5 // #include #include coroutine Fibonacci { int fn; // used for communication }; void ?{}( Fibonacci * this ) { this->fn = 0; } void main( Fibonacci * this ) { int fn1, fn2; // retained between resumes this->fn = 0; // case 0 fn1 = this->fn; suspend(); // return to last resume this->fn = 1; // case 1 fn2 = fn1; fn1 = this->fn; suspend(); // return to last resume for ( ;; ) { // general case this->fn = fn1 + fn2; fn2 = fn1; fn1 = this->fn; suspend(); // return to last resume } // for } int next( Fibonacci * this ) { resume( this ); // transfer to last suspend return this->fn; } int main() { Fibonacci f1, f2; for ( int i = 1; i <= 10; i += 1 ) { sout | next( &f1 ) | ' ' | next( &f2 ) | endl; } // for } // Local Variables: // // tab-width: 4 // // compile-command: "cfa fibonacci.c" // // End: //