Changeset 600d7be


Ignore:
Timestamp:
Jun 4, 2019, 6:28:55 PM (5 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
7261e3c
Parents:
466fa01
Message:

example updates

Location:
doc/papers/concurrency/examples
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • doc/papers/concurrency/examples/Fib.c

    r466fa01 r600d7be  
    11#include <stdio.h>
    22
    3 #define FIB_INIT { 0, 1 }
    4 typedef struct { int fn1, fn; } Fib;
     3typedef struct {
     4        int fn1, fn;
     5} Fib;
     6
     7#define FibCtor { 1, 0 }
     8
    59int fib( Fib * f ) {
    6 
    7         int ret = f->fn1;
    8         f->fn1 = f->fn;
    9         f->fn = ret + f->fn;
    10 
    11         return ret;
     10        int fn = f->fn; f->fn = f->fn1;
     11                f->fn1 = f->fn + fn;
     12        return fn;
    1213}
    1314int main() {
    14         Fib f1 = FIB_INIT, f2 = FIB_INIT;
     15        Fib f1 = FibCtor, f2 = FibCtor;
    1516        for ( int i = 0; i < 10; i += 1 ) {
    1617                printf( "%d %d\n", fib( &f1 ), fib( &f2 ) );
  • doc/papers/concurrency/examples/Fib.cfa

    r466fa01 r600d7be  
    1313}
    1414
    15 #define FIB_INIT { 0, 1 }
    16 typedef struct { int fn1, fn2; } Fib;
     15#define FibCtor { 0, 1 }
     16typedef struct { int fn, fn1; } Fib;
    1717int fib_state( Fib & f ) with( f ) {
    18         int ret = fn2;
    19         int fn = fn1 + fn2;
    20         fn2 = fn1; fn1 = fn;
    21         return ret;
     18        int fn0 = fn1 + fn2;  fn2 = fn1;  fn = fn0;
     19        return fn1;
    2220}
    2321
     
    3028        }
    3129}
    32 int next( Fib1 & fib ) with( fib ) { resume( fib ); return fn; }
     30int ?()( Fib1 & fib ) with( fib ) { return resume( fib ).fn; }
    3331
    34 coroutine Fib2 { int ret; };                                    // used for communication
     32coroutine Fib2 { int fn; };                                             // used for communication
    3533void main( Fib2 & fib ) with( fib ) {                   // called on first resume
    36         int fn, fn1 = 1, fn2 = 0;                                       // precompute first two states
     34        int fn1 = 1, fn2 = 0;                                           // precompute first two states
    3735        for () {
    38                 ret = fn2;
    3936                fn = fn1 + fn2;  fn2 = fn1;  fn1 = fn;  // general case
    4037                suspend();                                                              // restart last resume
    4138        }
    4239}
    43 int next( Fib2 & fib ) with( fib ) {
    44         resume( fib );                                                          // restart last suspend
    45         return ret;
     40int ?()( Fib2 & fib ) with( fib ) {
     41        return resume( fib ).fn;                                        // restart last suspend
     42}
     43int ?()( Fib2 & fib, int N ) with( fib ) {
     44        for ( N - 1 ) fib();
     45        return fib();
     46}
     47double ?()( Fib2 & fib ) with( fib ) {
     48        return (int)(fib()) / 3.14159;                                          // restart last suspend
    4649}
    4750
     
    5154        sout | nl;
    5255
    53         Fib f1 = FIB_INIT, f2 = FIB_INIT;
     56        Fib f1 = FibCtor, f2 = FibCtor;
    5457        for ( 10 )
    5558                sout | fib_state( f1 ) | fib_state( f2 );
     
    5861        Fib1 f1, f2;
    5962        for ( 10 )
    60                 sout | next( f1 ) | next( f2 );
     63                sout | f1() | f2();
    6164        sout | nl;
    6265
    63         Fib2 f1, f2;
     66        Fib2 f12, f22;
    6467        for ( 10 )
    65                 sout | next( (Fib2 &)f1 ) | next( (Fib2 &)f2 );
     68                sout | (int)f12() | (double)f12() | f22( 2 );
    6669}
    6770
  • doc/papers/concurrency/examples/Fib2.cfa

    r466fa01 r600d7be  
    1010// Created On       : Thu Apr 26 23:20:08 2018
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Mar 22 17:26:41 2019
    13 // Update Count     : 28
     12// Last Modified On : Sat May 18 08:55:59 2019
     13// Update Count     : 36
    1414//
    1515
     
    1717#include <coroutine.hfa>
    1818
    19 coroutine Fibonacci { int fn1; };                                               // used for communication
     19coroutine Fibonacci { int fn1, fn; };                                   // used for communication
    2020
    2121void main( Fibonacci & fib ) with( fib ) {                              // called on first resume
    22         int fn;
    23         [fn1, fn] = [0, 1];                                                                     // precompute first two states
     22        [fn1, fn] = [1, 0];                                                                     // precompute first two states
    2423        for () {
    2524                suspend();                                                                              // restart last resume
     
    2928
    3029int ?()( Fibonacci & fib ) with( fib ) {                                // function call operator
    31         resume( fib );                                                                          // restart last suspend
    32         return fn1;
     30        return resume( fib ).fn1;                                                       // restart last suspend
    3331}
    3432
     
    3634        Fibonacci f1, f2;
    3735        for ( 10 ) {                                                                            // print N Fibonacci values
    38                 sout | f1() | f2();
     36                sout | resume( f1 ).fn | resume( f2 ).fn;
    3937        } // for
    4038}
     
    4240// Local Variables: //
    4341// tab-width: 4 //
    44 // compile-command: "cfa fibonacci_1.cfa" //
     42// compile-command: "cfa Fib2.cfa" //
    4543// End: //
Note: See TracChangeset for help on using the changeset viewer.