diff --git a/include/chaiscript/dispatchkit/operators.hpp b/include/chaiscript/dispatchkit/operators.hpp new file mode 100644 index 0000000..2ec33f3 --- /dev/null +++ b/include/chaiscript/dispatchkit/operators.hpp @@ -0,0 +1,442 @@ +#ifndef __CHAISCRIPT_OPERATORS_HPP__ +#define __CHAISCRIPT_OPERATORS_HPP__ + +namespace chaiscript +{ + namespace operators + { + template + Ret assign(L l, R r) + { + return (l = r); + } + + template + Ret assign_bitwise_and(L l, R r) + { + return (l &= r); + } + + template + Ret assign_xor(L l, R r) + { + return (l ^= r); + } + + template + Ret assign_bitwise_or(L l, R r) + { + return (l |= r); + } + + template + Ret assign_difference(L l, R r) + { + return (l -= r); + } + + template + Ret assign_left_shift(L l, R r) + { + return (l <<= r); + } + + template + Ret assign_product(L l, R r) + { + return (l *= r); + } + + template + Ret assign_quotient(L l, R r) + { + return (l /= r); + } + + template + Ret assign_remainder(L l, R r) + { + return (l %= r); + } + + template + Ret assign_right_shift(L l, R r) + { + return (l >>= r); + } + + template + Ret assign_sum(L l, R r) + { + return (l += r); + } + + template + Ret prefix_decrement(L l) + { + return (--l); + } + + template + Ret prefix_increment(L l) + { + return (++l); + } + + template + Ret equal(L l, R r) + { + return (l == r); + } + + template + Ret greater_than(L l, R r) + { + return (l > r); + } + + template + Ret greater_than_equal(L l, R r) + { + return (l >= r); + } + + template + Ret less_than(L l, R r) + { + return (l < r); + } + + template + Ret less_than_equal(L l, R r) + { + return (l <= r); + } + + template + Ret logical_compliment(L l) + { + return (!l); + } + + template + Ret not_equal(L l, R r) + { + return (l != r); + } + + template + Ret addition(L l, R r) + { + return (l + r); + } + + template + Ret unary_plus(L l) + { + return (+l); + } + + template + Ret subtraction(L l, R r) + { + return (l - r); + } + + template + Ret unary_minus(L l) + { + return (-l); + } + + template + Ret bitwise_and(L l, R r) + { + return (l & r); + } + + template + Ret bitwise_compliment(L l) + { + return (~l); + } + + template + Ret bitwise_xor(L l, R r) + { + return (l ^ r); + } + + template + Ret bitwise_or(L l, R r) + { + return (l | r); + } + + template + Ret division(L l, R r) + { + return (l / r); + } + + template + Ret left_shift(L l, R r) + { + return l << r; + } + + template + Ret multiplication(L l, R r) + { + return l * r; + } + + template + Ret remainder(L l, R r) + { + return (l % r); + } + + template + Ret right_shift(L l, R r) + { + return (l >> r); + } + + + + + template + ModulePtr assign(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&assign), "="); + return m; + } + + template + ModulePtr assign_bitwise_and(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&assign_bitwise_and), "&="); + return m; + } + + template + ModulePtr assign_xor(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&assign_xor), "^="); + return m; + } + + template + ModulePtr assign_bitwise_or(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&assign_bitwise_or), "|="); + return m; + } + + template + ModulePtr assign_difference(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&assign_difference), "-="); + return m; + } + + template + ModulePtr assign_left_shift(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&assign_left_shift), "<<="); + return m; + } + + template + ModulePtr assign_product(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&assign_product), "*="); + return m; + } + + template + ModulePtr assign_quotient(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&assign_quotient), "/="); + return m; + } + + template + ModulePtr assign_remainder(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&assign_remainder), "%="); + return m; + } + + template + ModulePtr assign_right_shift(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&assign_right_shift), ">>="); + return m; + } + + template + ModulePtr assign_sum(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&assign_sum), "+="); + return m; + } + + template + ModulePtr prefix_decrement(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&prefix_decrement), "--"); + return m; + } + + template + ModulePtr prefix_increment(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&prefix_increment), "++"); + return m; + } + + template + ModulePtr equal(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&equal), "=="); + return m; + } + + template + ModulePtr greater_than(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&greater_than), ">"); + return m; + } + + template + ModulePtr greater_than_equal(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&greater_than_equal), ">="); + return m; + } + + template + ModulePtr less_than(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&less_than), "<"); + return m; + } + + template + ModulePtr less_than_equal(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&less_than_equal), "<="); + return m; + } + + template + ModulePtr logical_compliment(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&logical_compliment), "!"); + return m; + } + + template + ModulePtr not_equal(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(¬_equal), "!="); + return m; + } + + template + ModulePtr addition(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&addition), "+"); + return m; + } + + template + ModulePtr unary_plus(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&unary_plus), "+"); + return m; + } + + template + ModulePtr subtraction(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&subtraction), "-"); + return m; + } + + template + ModulePtr unary_minus(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&unary_minus), "-"); + return m; + } + + template + ModulePtr bitwise_and(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&bitwise_and), "&"); + return m; + } + + template + ModulePtr bitwise_compliment(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&bitwise_compliment), "~"); + return m; + } + + template + ModulePtr bitwise_xor(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&bitwise_xor), "^"); + return m; + } + + template + ModulePtr bitwise_or(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&bitwise_or), "|"); + return m; + } + + template + ModulePtr division(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&division), "/"); + return m; + } + + template + ModulePtr left_shift(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&left_shift), "<<"); + return m; + } + + template + ModulePtr multiplication(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&multiplication), "*"); + return m; + } + + template + ModulePtr remainder(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&remainder), "%"); + return m; + } + + template + ModulePtr right_shift(ModulePtr m = ModulePtr(new Module())) + { + m->add(fun(&right_shift), ">>"); + return m; + } + } +} + +#endif