source: libcfa/src/enum.hfa@ 509ec82

Last change on this file since 509ec82 was b006c51e, checked in by JiadaL <j82liang@…>, 12 months ago

Move enum trait declaration to builtin/c

  • Property mode set to 100644
File size: 1.4 KB
RevLine 
[72713e5]1#pragma once
2
[85855b0]3#include "iostream.hfa"
4
[68ea8d2]5forall( istype & | istream( istype ), E | CfaEnum( E ) | Serial(E) )
[bc48c0d]6istype & ?|?( istype &, E & );
[64eeb06]7
[236f133]8forall( ostype & | ostream( ostype ), E | CfaEnum( E ) ) {
[d5efcb7]9 ostype & ?|?( ostype &, E );
10 OSTYPE_VOID( E );
11}
12
[062467b]13static inline
[26d40a1]14forall( E | CfaEnum(E) | Serial(E) ) {
[6804f38]15 int ?==?( E l, E r ) { return posn( l ) == posn( r ); } // relational operators
16 int ?!=?( E l, E r ) { return posn( l ) != posn( r ); }
17 int ?<?( E l, E r ) { return posn( l ) < posn( r ); }
18 int ?<=?( E l, E r ) { return posn( l ) <= posn( r ); }
19 int ?>?( E l, E r ) { return posn( l ) > posn( r ); }
20 int ?>=?( E l, E r ) { return posn( l ) >= posn( r ); }
[062467b]21
[6804f38]22 E ++?( E & l ) { // increment operators
[5f210c0]23 int pos = posn(l);
24 l = fromInt_unsafe(pos+1);
25 return l;
26 }
27
28 E --?( E & l ) {
29 int pos = posn(l);
30 l = fromInt_unsafe(pos-1);
[6804f38]31 return l;
32 }
[1571e4d]33
34 E ?+=? ( E & l, one_t ) {
[5f210c0]35 int pos = posn(l);
36 l = fromInt_unsafe(pos+1);
[1571e4d]37 return l;
38 }
[5f210c0]39
[2dd5c6d]40 E ?-=? ( E & l, one_t ) {
[5f210c0]41 int pos = posn(l);
42 l = fromInt_unsafe(pos-1);
[2dd5c6d]43 return l;
44 }
45
46 E ?+=? ( E & l, int i ) {
[5f210c0]47 int pos = posn(l);
48 l = fromInt_unsafe(pos+i);
[7db4fcd4]49 return l;
[2dd5c6d]50 }
51
52 E ?-=? ( E & l, int i ) {
[5f210c0]53 int pos = posn(l);
54 l = fromInt_unsafe(pos-i);
55 return l;
[6804f38]56 }
[062467b]57
[5f210c0]58 E ?++( E & l ) {
59 int pos = posn(l);
60 l = fromInt_unsafe(pos+1);
61 return fromInt_unsafe(pos);
[6804f38]62 }
[062467b]63
[6804f38]64 E ?--( E & l ) {
[5f210c0]65 int pos = posn(l);
66 l = fromInt_unsafe(pos-1);
67 return fromInt_unsafe(pos);
[6804f38]68 }
[64eeb06]69}
Note: See TracBrowser for help on using the repository browser.