Upstream version 1.3.40
[profile/ivi/swig.git] / Examples / modula3 / enum / example.h
1 /* File : example.h */
2
3 #define PI 3.141
4
5 #define DAY_MONDAY    0
6 #define DAY_TUESDAY   1
7 #define DAY_WEDNESDAY 2
8 #define DAY_THURSDAY  3
9 #define DAY_FRIDAY    4
10 #define DAY_SATURDAY  5
11 #define DAY_SUNDAY    6
12
13 enum color { BLUE, RED, GREEN };
14
15 #define CLB_BLACK   0
16 #define CLB_BLUE    1
17 #define CLB_RED     2
18 #define CLB_MAGENTA 3
19 #define CLB_GREEN   4
20 #define CLB_CYAN    5
21 #define CLB_YELLOW  6
22 #define CLB_WHITE   7
23
24 /* Using this would be good style
25    which cannot be expected for general C header files.
26    Instead I want to demonstrate how to live without it.
27 enum month {
28   MTHF_JANUARY,
29   MTHF_FEBRUARY,
30   MTHF_MARCH,
31   MTHF_APRIL,
32   MTHF_MAY,
33   MTHF_JUNE,
34   MTHF_JULY,
35   MTHF_AUGUST,
36   MTHF_SEPTEMBER,
37   MTHF_OCTOBER,
38   MTHF_NOVEMBER,
39   MTHF_DECEMBER,
40 }
41 */
42
43 /* Since there are no compile time constants in C / C++
44    it is a common abuse
45    to declare bit set (flag) constants
46    as enumerations. */
47 enum calendar {
48   MTHB_JANUARY   = 1 <<  0,     /* 1 << MTHF_JANUARY, */
49   MTHB_FEBRUARY  = 1 <<  1,     /* 1 << MTHF_FEBRUARY, */
50   MTHB_MARCH     = 1 <<  2,     /* 1 << MTHF_MARCH, */
51   MTHB_APRIL     = 1 <<  3,     /* 1 << MTHF_APRIL, */
52   MTHB_MAY       = 1 <<  4,     /* 1 << MTHF_MAY, */
53   MTHB_JUNE      = 1 <<  5,     /* 1 << MTHF_JUNE, */
54   MTHB_JULY      = 1 <<  6,     /* 1 << MTHF_JULY, */
55   MTHB_AUGUST    = 1 <<  7,     /* 1 << MTHF_AUGUST, */
56   MTHB_SEPTEMBER = 1 <<  8,     /* 1 << MTHF_SEPTEMBER, */
57   MTHB_OCTOBER   = 1 <<  9,     /* 1 << MTHF_OCTOBER, */
58   MTHB_NOVEMBER  = 1 << 10,     /* 1 << MTHF_NOVEMBER, */
59   MTHB_DECEMBER  = 1 << 11,     /* 1 << MTHF_DECEMBER, */
60
61   MTHB_SPRING    = MTHB_MARCH     | MTHB_APRIL   | MTHB_MAY,
62   MTHB_SUMMER    = MTHB_JUNE      | MTHB_JULY    | MTHB_AUGUST,
63   MTHB_AUTUMN    = MTHB_SEPTEMBER | MTHB_OCTOBER | MTHB_NOVEMBER,
64   MTHB_WINTER    = MTHB_DECEMBER  | MTHB_JANUARY | MTHB_FEBRUARY,
65 };
66
67
68 namespace Answer {
69   enum {
70     UNIVERSE_AND_EVERYTHING = 42,
71     SEVENTEEN_AND_FOUR = 21,
72     TWOHUNDRED_PERCENT_OF_NOTHING = 0,
73   };
74
75   class Foo {
76    public:
77     Foo() { }
78     enum speed { IMPULSE  = -2, WARP = 0, HYPER, LUDICROUS = 3};
79     void enum_test(speed s);
80   };
81 };
82
83 void enum_test(color c, Answer::Foo::speed s);