source: doc/papers/general/evaluation/cfa-stack.c@ 1a3040c

ADT arm-eh ast-experimental enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr pthread-emulation qualifiedEnum
Last change on this file since 1a3040c was 4c80a75, checked in by Peter A. Buhr <pabuhr@…>, 7 years ago

update evaluation programs

  • Property mode set to 100644
File size: 1013 bytes
Line 
1#include <stdlib>
2#include "cfa-stack.h"
3
4forall( otype T ) {
5 struct node {
6 T value;
7 node(T) * next;
8 };
9
10 void ?{}( stack(T) & s, stack(T) t ) { // copy
11 node(T) ** cr = &s.head;
12 for ( node(T) * nx = t.head; nx; nx = nx->next ) {
13 *cr = alloc();
14 ((*cr)->value){ nx->value };
15 cr = &(*cr)->next;
16 }
17 *cr = 0;
18 }
19
20 void clear( stack(T) & s ) with( s ) {
21 for ( node(T) * nx = head; nx; ) {
22 node(T) * cr = nx;
23 nx = cr->next;
24 ^(*cr){};
25 free( cr );
26 }
27 head = 0;
28 }
29
30 void ?{}( stack(T) & s ) { (s.head){ 0 }; }
31 void ^?{}( stack(T) & s) { clear( s ); }
32
33 stack(T) ?=?( stack(T) & s, stack(T) t ) {
34 if ( s.head == t.head ) return s;
35 clear( s );
36 s{ t };
37 return s;
38 }
39
40 _Bool empty( const stack(T) & s ) {
41 return s.head == 0;
42 }
43
44 void push( stack(T) & s, T value ) with( s ) {
45 node(T) * n = alloc();
46 (*n){ value, head };
47 head = n;
48 }
49
50 T pop( stack(T) & s ) with( s ) {
51 node(T) * n = head;
52 head = n->next;
53 T v = n->value;
54 ^(*n){};
55 free( n );
56 return v;
57 }
58}
Note: See TracBrowser for help on using the repository browser.