Changeset 576
- Timestamp:
- 06/30/08 08:26:33 (2 months ago)
- Files:
-
- trunk/rphp/runtime/rphp_hash.h (modified) (1 diff)
- trunk/rphp/runtime/rphp_object.h (modified) (1 diff)
- trunk/rphp/runtime/rphp_pvar.h (modified) (3 diffs)
- trunk/rphp/runtime/rphp_types.h (modified) (6 diffs)
- trunk/rphp/runtime/var-test.cpp (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/rphp/runtime/rphp_hash.h
r572 r576 25 25 26 26 // XXX placeholder 27 class ph p_hash {27 class phash { 28 28 private: 29 29 int size; 30 30 public: 31 ph p_hash(int sizevar) : size(sizevar) { }31 phash(int sizevar) : size(sizevar) { } 32 32 33 ph p_hash(const php_hash& h) {33 phash(const phash& h) { 34 34 size = h.size; 35 35 } 36 36 int getSize() const { return size; } 37 ~phash() { std::cout << "destorying php_hash with " << size << " fake elements" << std::endl; } 37 38 38 39 }; 39 40 40 std::ostream& operator << (std::ostream& os, const rphp::ph p_hash& h)41 std::ostream& operator << (std::ostream& os, const rphp::phash& h) 41 42 { 42 43 return os << "php_hash" << std::endl; trunk/rphp/runtime/rphp_object.h
r572 r576 26 26 27 27 // XXX placeholder 28 class p hp_object {28 class pobject { 29 29 private: 30 ph p_hash properties;30 phash properties; 31 31 public: 32 p hp_object() : properties(5) { }32 pobject() : properties(5) { } 33 33 34 34 }; 35 35 36 36 37 std::ostream& operator << (std::ostream& os, const rphp::p hp_object& h)37 std::ostream& operator << (std::ostream& os, const rphp::pobject& h) 38 38 { 39 return os << "p hp_object" << std::endl;39 return os << "pobject" << std::endl; 40 40 } 41 41 trunk/rphp/runtime/rphp_pvar.h
r572 r576 23 23 #include "boost/variant.hpp" 24 24 #include "boost/lexical_cast.hpp" 25 #include "boost/shared_ptr.hpp" 26 25 27 #include "unicode/unistr.h" 28 26 29 #include "rphp_hash.h" 27 30 #include "rphp_object.h" 31 28 32 #include <iostream> 29 33 … … 39 43 }; 40 44 45 // pvar numbers 46 typedef long pint; 47 typedef double pfloat; 48 41 49 // string types: binary and unicode flavor 42 50 typedef std::string bstring; … … 44 52 45 53 // a variant that represents a php variable 46 typedef boost::variant< p3state/*int*/, long, double, bstring, ustring, php_hash, php_object> pvar; 54 typedef boost::variant< p3state/*int*/, pint/*long*/, pfloat/*double*/, bstring, ustring, phash, pobject> pvarBase; 55 56 // reference to a pvar_base 57 typedef boost::shared_ptr<pvarBase> pvarRef; 58 59 // full pvar definition: a variant that can hold a base type or reference 60 typedef boost::variant< p3state/*int*/, pint/*long*/, pfloat/*double*/, bstring, ustring, phash, pobject, pvarRef> pvar; 47 61 48 62 // associated enum for checking type 49 63 typedef enum { 50 PVAR_NULL, // p3state 51 PVAR_BOOL, // p3state 52 PVAR_LONG, // long 53 PVAR_DOUBLE, // double 54 PVAR_BSTRING, // bstring 55 PVAR_USTRING, // ustring 56 PVAR_HASH, // rphp::hash 57 PVAR_OBJ // rphp::object 64 PVAR_NULL, // rphp::p3state 65 PVAR_BOOL, // rphp::p3state 66 PVAR_INT, // rphp::pint 67 PVAR_FLOAT, // rphp::pfloat 68 PVAR_BSTRING, // rphp::bstring 69 PVAR_USTRING, // rphp::ustring 70 PVAR_HASH, // rphp::phash 71 PVAR_OBJ, // rphp::pobject 72 PVAR_REF // rphp::pvarRef 58 73 } pvarType; 59 74 trunk/rphp/runtime/rphp_types.h
r575 r576 33 33 } 34 34 35 pvarType operator()(const long&i) const {36 return PVAR_ LONG;35 pvarType operator()(const pint &i) const { 36 return PVAR_INT; 37 37 } 38 38 39 pvarType operator()(const double&i) const {40 return PVAR_ DOUBLE;39 pvarType operator()(const pfloat &i) const { 40 return PVAR_FLOAT; 41 41 } 42 42 … … 49 49 } 50 50 51 pvarType operator()(const ph p_hash &h) const {51 pvarType operator()(const phash &h) const { 52 52 return PVAR_HASH; 53 53 } 54 54 55 pvarType operator()(const p hp_object &h) const {55 pvarType operator()(const pobject &h) const { 56 56 return PVAR_OBJ; 57 } 58 59 pvarType operator()(const pvarRef &p) const { 60 return PVAR_REF; 57 61 } 58 62 … … 73 77 } 74 78 75 void operator()(const long&a) const {79 void operator()(const pint &a) const { 76 80 // nothing, already numeric 77 81 } 78 82 79 void operator()(const double&i) const {83 void operator()(const pfloat &i) const { 80 84 // nothing, already numeric 81 85 } … … 96 100 } 97 101 98 void operator()(const ph p_hash &h) const {102 void operator()(const phash &h) const { 99 103 var = (long)h.getSize(); 100 104 } 101 105 102 void operator()(const p hp_object &h) const {106 void operator()(const pobject &h) const { 103 107 var = 0l; 108 } 109 110 void operator()(const pvarRef &r) const { 111 // unbox 112 //boost::apply_visitor(convertToNumber(*r), *r); 104 113 } 105 114 … … 122 131 } 123 132 124 inline long pvar_getVal_long(const pvar &p) { 125 return boost::get<long>(p); 133 inline long pvar_getVal_int(const pvar &p) { 134 return boost::get<pint>(p); 135 } 136 137 inline pvarRef pvar_getVal_ref(const pvar &p) { 138 return boost::get<pvarRef>(p); 126 139 } 127 140 … … 153 166 r = pvar_castToNumber(rhs); 154 167 //std::cout << "pvar_add: r is " << r << std::endl; 155 result = pvar_getVal_ long(l) + pvar_getVal_long(r);168 result = pvar_getVal_int(l) + pvar_getVal_int(r); 156 169 //std::cout << "pvar_add: result is " << result << std::endl; 157 170 } trunk/rphp/runtime/var-test.cpp
r572 r576 27 27 } 28 28 29 int operator()(const long&i) const {30 std::cout << "i see a long" << std::endl;29 int operator()(const rphp::pint &i) const { 30 std::cout << "i see a pint" << std::endl; 31 31 return i; 32 32 } 33 33 34 int operator()(const double&i) const {34 int operator()(const rphp::pfloat &i) const { 35 35 std::cout << "i see a float" << std::endl; 36 36 return 0; … … 47 47 } 48 48 49 int operator()(const rphp::ph p_hash &h) const {50 std::cout << "i see a ph p_hash" << std::endl;49 int operator()(const rphp::phash &h) const { 50 std::cout << "i see a phash" << std::endl; 51 51 return 0; 52 52 } 53 53 54 int operator()(const rphp::p hp_object &h) const {55 std::cout << "i see a p hp_object" << std::endl;54 int operator()(const rphp::pobject &h) const { 55 std::cout << "i see a pobject" << std::endl; 56 56 return 0; 57 57 } 58 58 59 int operator()(const rphp::pvarRef &h) const { 60 std::cout << "i see a php reference" << std::endl; 61 return 0; 62 } 59 63 }; 64 65 void changeRef(rphp::pvar r) { 66 67 rphp::pvarRef rval; 68 if (rval = rphp::pvar_getVal_ref(r)) { 69 *rval = rphp::bstring("changed the ref to a string!"); 70 } 71 else { 72 std::cout << "not a ref" << std::endl; 73 } 74 75 } 60 76 61 77 // driver … … 78 94 79 95 // long 80 u = 15l;96 u = rphp::pint(15); 81 97 82 98 std::cout << u << std::endl; … … 84 100 85 101 // float 86 u = 2.3123;102 u = rphp::pfloat(2.3123); 87 103 88 104 std::cout << u << std::endl; … … 106 122 107 123 // php hash 108 rphp::ph p_hash h(5);124 rphp::phash h(5); 109 125 std::cout << h; 110 126 u = h; … … 121 137 std::cout << "found a hash" << std::endl; 122 138 break; 123 case rphp::PVAR_ DOUBLE:139 case rphp::PVAR_FLOAT: 124 140 std::cout << "found a float" << std::endl; 125 141 break; … … 141 157 142 158 // try adding a long and a numeric string 143 u = 10l; // NOTE: this is a long. int's turn into p3state (bool/null)159 u = rphp::pint(10); // NOTE: this is a long. int's turn into p3state (bool/null) 144 160 t = std::string("20"); 145 161 r = pvar_add(u, t); … … 148 164 std::cout << "t is: " << t << std::endl; 149 165 166 // references 167 168 // create a new reference. can only be comprise of pvarBase items (i.e., can't be a ref to a ref) 169 std::cout << "references----" << std::endl; 170 rphp::pvarRef r1(new rphp::pvarBase); 171 172 // assign a value to the pvar 173 *r1 = rphp::pint(5); 174 boost::apply_visitor( my_visitor(), *r1 ); 175 176 // call a function which takes a pvar (not strictly a pvarRef) 177 changeRef(r1); 178 boost::apply_visitor( my_visitor(), *r1 ); 179 180 // assign two variables to the same reference 181 rphp::pvarRef r2 = r1; 182 boost::apply_visitor( my_visitor(), *r1 ); 183 boost::apply_visitor( my_visitor(), *r2 ); 184 185 // change one 186 *r2 = rphp::pint(20); 187 boost::apply_visitor( my_visitor(), *r1 ); 188 boost::apply_visitor( my_visitor(), *r2 ); 189 150 190 }
