1 /*
2 ** == Bool ==
3 **
4 **  Boolean type which provide singleton data objects.
5 **  These objects evaluate to true or false in "if" statments.
6 **  They have no data object but are hardcoded into type_of
7 **
8 **  Normal boolean operators should work on Bool as expected.
9 **  And also "bool" can be cast to "var" and back again.
10 **
11 */
12 
13 #ifndef CelloBool_h
14 #define CelloBool_h
15 
16 #include "Prelude.h"
17 #include "Format.h"
18 
19 global var Bool;
20 
21 local var True = (var)1;
22 local var False = (var)0;
23 
24 var bool_var(bool x);
25 
26 var Bool_Eq(var self, var obj);
27 var Bool_Gt(var self, var obj);
28 var Bool_Lt(var self, var obj);
29 
30 long Bool_Hash(var self);
31 char Bool_AsChar(var self);
32 const char* Bool_AsStr(var self);
33 long Bool_AsLong(var self);
34 double Bool_AsDouble(var self);
35 
36 int Bool_Show(var self, var output, int pos);
37 
38 instance(Bool, Eq) = { Bool_Eq };
39 instance(Bool, Ord) = { Bool_Gt, Bool_Lt };
40 instance(Bool, Hash) = { Bool_Hash };
41 instance(Bool, AsChar) = { Bool_AsChar };
42 instance(Bool, AsLong) = { Bool_AsLong };
43 instance(Bool, AsDouble) = { Bool_AsDouble };
44 instance(Bool, AsStr) = { Bool_AsStr };
45 instance(Bool, Show) = { Bool_Show, NULL };
46 
47 #endif
48