00001 // Copyright (C) Calum Grant 2008 00002 00003 #include "cppscript" 00004 #include "dynamic/extensions.hpp" 00005 00006 static_call( register_pickle_type( cmp_true, true ) ); 00007 static_call( register_pickle_type( cmp_false, false ) ); 00008 00009 00010 namespace dynamic 00011 { 00013 namespace types 00014 { 00016 00020 template<bool b> 00021 class bool_impl : public dynamic::var_impl 00022 { 00023 public: 00024 00025 void output(ostream & os) 00026 { 00027 os << (b ? "true" : "false"); 00028 } 00029 00030 std::string class_name() { return "bool"; } 00031 00032 void output(wostream & os) 00033 { 00034 os << (b ? L"true" : L"false"); 00035 } 00036 00037 int as_int() 00038 { 00039 return b ? 1 : 0; 00040 } 00041 00042 double as_double() 00043 { 00044 return b ? 1.0 : 0.0; 00045 } 00046 00047 bool as_bool() 00048 { 00049 return b; 00050 } 00051 00052 var op_add(const var & x) 00053 { 00054 return b||x; 00055 } 00056 00057 var op_mul(const var & x) 00058 { 00059 return b&&x; 00060 } 00061 00062 var op_and(const var & x) 00063 { 00064 return b && x; 00065 } 00066 00067 var op_or(const var & x) 00068 { 00069 return b || x; 00070 } 00071 00072 var op_inv() 00073 { 00074 return !b; 00075 } 00076 00077 var op_xor(const var & x) 00078 { 00079 return b != x.as_bool(); 00080 } 00081 00082 var_cmp_index comparison_index() 00083 { 00084 return b ? cmp_true : cmp_false; 00085 } 00086 00087 void pickle(pickler & p) 00088 { 00089 p.write_object_type(b ? cmp_true : cmp_false); 00090 } 00091 00092 void unpickle(unpickler & u) 00093 { 00094 } 00095 00096 var as_root() 00097 { 00098 return b; 00099 } 00100 00101 var as_nonroot() 00102 { 00103 return b; 00104 } 00105 00106 void copy_to(void*dest) const 00107 { 00108 new(dest) bool_impl(*this); 00109 } 00110 }; 00111 } 00112 } 00113 00114 00115 var::var(bool b) : 00116 m_variant( b ? 00117 var_variant(types::bool_impl<true>()) : 00118 var_variant(types::bool_impl<false>()) 00119 ) 00120 { 00121 }
1.5.7.1