1 #include "Cello/Bool.h"
2
3 #include "Cello/Prelude.h"
4 #include "Cello/Type.h"
5
6 #include <string.h>
7
bool_var(bool x)8 var bool_var(bool x) {
9 return (var)(intptr_t)(x);
10 }
11
12 var Bool = type_data {
13 type_begin(Bool),
14 type_entry(Bool, Eq),
15 type_entry(Bool, Ord),
16 type_entry(Bool, Hash),
17 type_entry(Bool, AsChar),
18 type_entry(Bool, AsLong),
19 type_entry(Bool, AsDouble),
20 type_entry(Bool, AsStr),
21 type_entry(Bool, Show),
22 type_end(Bool)
23 };
24
Bool_Eq(var self,var obj)25 var Bool_Eq(var self, var obj) {
26 return bool_var(self == obj);
27 }
28
Bool_Gt(var self,var obj)29 var Bool_Gt(var self, var obj) {
30 return bool_var(self > obj);
31 }
32
Bool_Lt(var self,var obj)33 var Bool_Lt(var self, var obj) {
34 return bool_var(self < obj);
35 }
36
Bool_Hash(var self)37 long Bool_Hash(var self) {
38 return (long)(intptr_t)self;
39 }
40
Bool_AsChar(var self)41 char Bool_AsChar(var self) {
42 return (char)(self is True);
43 }
44
45 local const char* true_str = "True";
46 local const char* false_str = "False";
47
Bool_AsStr(var self)48 const char* Bool_AsStr(var self) {
49 if (self) {
50 return true_str;
51 } else {
52 return false_str;
53 }
54 }
55
Bool_AsLong(var self)56 long Bool_AsLong(var self) {
57 return (long)(intptr_t)self;
58 }
59
Bool_AsDouble(var self)60 double Bool_AsDouble(var self) {
61 return (double)(self is True);
62 }
63
Bool_Show(var self,var output,int pos)64 int Bool_Show(var self, var output, int pos) {
65 if (self) { pos = print_to(output, pos, true_str); }
66 else { pos = print_to(output, pos, false_str); }
67 return pos;
68 }
69
70