Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/coroutine/prodcons.c

    r18cf979 r200fcb3  
    1010// Created On       : Mon Sep 18 12:23:39 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Dec 12 23:04:49 2018
    13 // Update Count     : 53
     12// Last Modified On : Tue Dec 11 21:58:25 2018
     13// Update Count     : 52
    1414//
    1515
     
    2424
    2525coroutine Prod {
    26         Cons & c;
     26        Cons * c;
    2727        int N, money, receipt;
    2828};
     
    3030        // 1st resume starts here
    3131        for ( i; N ) {                                                                          // N pairs of values
    32                 int p1 = random( 100 ), p2 = random( 100 );
     32                int p1 = random( 100 );
     33                int p2 = random( 100 );
    3334                sout | p1 | " " | p2;
    34                 int status = delivery( c, p1, p2 );
    35                 sout | " $" | money | nl | status;
     35                int status = delivery( *c, p1, p2 );
     36                sout | " $" | money;
     37                sout | status;
    3638                receipt += 1;
    3739        }
    38         stop( c );
     40        stop( *c );
    3941        sout | "prod stops";
    4042}
     
    4547}
    4648void start( Prod & prod, int N, Cons &c ) {
    47         &prod.c = &c;
    48         prod.[N, receipt] = [N, 0];
     49        prod.N = N;
     50        prod.c = &c;
     51        prod.receipt = 0;
    4952        resume( prod );                                                                         // activate main
    5053}
    5154
    5255coroutine Cons {
    53         Prod & p;
     56        Prod * p;
    5457        int p1, p2, status;
    5558        bool done;
    5659};
    5760void ?{}( Cons & cons, Prod & p ) {
    58         &cons.p = &p;
    59         cons.[status, done ] = [0, false];
     61        cons.p = &p;
     62        cons.status = 0;
     63        cons.done = false;
    6064}
    6165void ^?{}( Cons & cons ) {}
     
    6468        int money = 1, receipt;
    6569        for ( ; ! done; ) {
    66                 sout | p1 | " " | p2 | nl | " $" | money;
     70                sout | p1 | " " | p2;
     71                sout | " $" | money;
    6772                status += 1;
    68                 receipt = payment( p, money );
     73                receipt = payment( *p, money );
    6974                sout | " #" | receipt;
    7075                money += 1;
     
    7378}
    7479int delivery( Cons & cons, int p1, int p2 ) {
    75         cons.[p1, p2] = [p1, p2];
     80        cons.p1 = p1;
     81        cons.p2 = p2;
    7682        resume( cons );                                                                         // main 1st time, then
    7783        return cons.status;                                                                     // cons in payment
Note: See TracChangeset for help on using the changeset viewer.