source: libcfa/src/enum.hfa@ d3aa55e9

Last change on this file since d3aa55e9 was d5efcb7, checked in by Peter A. Buhr <pabuhr@…>, 16 months ago

first attempt at updating enum auxiliary operations

  • Property mode set to 100644
File size: 1.1 KB
Line 
1#pragma once
2
3#include "iostream.hfa"
4
5forall( E ) trait Bounded {
6 E lowerBound();
7 E upperBound();
8};
9
10forall( E | Bounded(E) ) trait Serial {
11 unsigned fromInstance( E e );
12 E fromInt( unsigned i );
13 E succ( E e );
14 E pred( E e );
15};
16
17// Design one
18forall( E, V | Serial(E) ) trait CfaEnum {
19 char * label( E e );
20 unsigned int posn( E e );
21 V value( E e );
22 char * type_name( E e );
23// bool scoped( E e );
24};
25
26// I/O
27
28forall( ostype & | basic_ostream(ostype), E, V | CfaEnum(E, V) ) {
29 ostype & ?|?( ostype &, E );
30 OSTYPE_VOID( E );
31}
32
33//forall( ostype & | basic_ostream(ostype), E | CfaEnum(E, quasi_void) )
34//ostype & ?|?( ostype &, E );
35
36// Design two <- should go for this if we have change the cost model
37// forall(E | Serial(E)) trait CfaEnum {
38// char * label(E e);
39// unsigned int posn(E e);
40// };
41
42// forall(E, V| CfaEnum(E)) trait TypedEnum {
43// V value(E e);
44// };
45
46forall( E, V | CfaEnum(E, V) ) { // relational operators
47 int ?==?(E, E);
48 int ?!=?(E, E);
49 int ?<?(E, E);
50 int ?<=?(E, E);
51 int ?>?(E, E);
52 int ?>=?(E, E);
53}
Note: See TracBrowser for help on using the repository browser.