#ifndef __bootstrap_hpp #define __bootstrap_hpp__ #include "boxedcpp.hpp" template Ret add(P1 p1, P2 p2) { return p1 + p2; } template Ret subtract(P1 p1, P2 p2) { return p1 - p2; } template Ret divide(P1 p1, P2 p2) { return p1 - p2; } template Ret multiply(P1 p1, P2 p2) { return p1 * p2; } template bool bool_and(P1 p1, P2 p2) { return p1 && p2; } template bool bool_or(P1 p1, P2 p2) { return p1 || p2; } template bool equals(P1 p1, P2 p2) { return p1 == p2; } template bool not_equals(P1 p1, P2 p2) { return p1 != p2; } template bool less_than(P1 p1, P2 p2) { return p1 < p2; } template bool greater_than(P1 p1, P2 p2) { return p1 > p2; } template bool less_than_equals(P1 p1, P2 p2) { return p1 <= p2; } template bool greater_than_equals(P1 p1, P2 p2) { return p1 >= p2; } template P1 ×equal(P1 &p1, P2 p2) { return (p1 *= p2); } template std::string to_string(Input i) { return boost::lexical_cast(i); } void bootstrap(BoxedCPP_System &s) { s.register_type("void"); s.register_type("double"); s.register_type("int"); s.register_type("char"); s.register_type("bool"); s.register_type("string"); s.register_function(boost::function(&add), "+"); s.register_function(boost::function(&add), "+"); s.register_function(boost::function(&add), "+"); s.register_function(boost::function(&add), "+"); s.register_function(boost::function(&add), "+"); s.register_function(boost::function(&subtract), "-"); s.register_function(boost::function(&subtract), "-"); s.register_function(boost::function(&subtract), "-"); s.register_function(boost::function(&subtract), "-"); s.register_function(boost::function), "/"); s.register_function(boost::function), "/"); s.register_function(boost::function), "/"); s.register_function(boost::function), "/"); s.register_function(boost::function(&bool_and), "&&"); s.register_function(boost::function(&bool_or), "||"); s.register_function(boost::function(&equals), "=="); s.register_function(boost::function(&equals), "=="); s.register_function(boost::function(&equals), "=="); s.register_function(boost::function(&equals), "=="); s.register_function(boost::function(¬_equals), "!="); s.register_function(boost::function(¬_equals), "!="); s.register_function(boost::function(¬_equals), "!="); s.register_function(boost::function(¬_equals), "!="); s.register_function(boost::function(&less_than), "<"); s.register_function(boost::function(&less_than), "<"); s.register_function(boost::function(&less_than), "<"); s.register_function(boost::function(&less_than), "<"); s.register_function(boost::function(&greater_than), ">"); s.register_function(boost::function(&greater_than), ">"); s.register_function(boost::function(&greater_than), ">"); s.register_function(boost::function(&greater_than), ">"); s.register_function(boost::function(&less_than_equals), "<="); s.register_function(boost::function(&less_than_equals), "<="); s.register_function(boost::function(&less_than_equals), "<="); s.register_function(boost::function(&less_than_equals), "<="); s.register_function(boost::function(&greater_than_equals), ">="); s.register_function(boost::function(&greater_than_equals), ">="); s.register_function(boost::function(&greater_than_equals), ">="); s.register_function(boost::function(&greater_than_equals), ">="); s.register_function(boost::function(&multiply), "*"); s.register_function(boost::function(&multiply), "*"); s.register_function(boost::function(&multiply), "*"); s.register_function(boost::function(&multiply), "*"); s.register_function(boost::function(&to_string), "to_string"); s.register_function(boost::function(&to_string), "to_string"); s.register_function(boost::function(&to_string), "to_string"); s.register_function(boost::function(&to_string), "to_string"); s.register_function(boost::function(×equal), "*="); s.register_function(boost::function(×equal), "*="); s.register_function(boost::function(×equal), "*="); s.register_function(boost::function(×equal), "*="); } #endif