Advertisement
Vultraz

Untitled

Nov 13th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #define REGISTER_FORMULA_FUNCTION(name, min_args, max_args, execute_body)                                              \
  2.     class name##_function : public function_expression                                                                 \
  3.     {                                                                                                                  \
  4.     public:                                                                                                            \
  5.         explicit name##_function(const args_list& args)                                                                \
  6.             : function_expression(#name, args, ##min_args, ##max_args)                                                 \
  7.         {                                                                                                              \
  8.         }                                                                                                              \
  9.                                                                                                                        \
  10.     private:                                                                                                           \
  11.         variant execute(const formula_callable& variables, formula_debugger* fdb) const                                \
  12.         execute_body                                                                                                   \
  13.     };
  14.  
  15. REGISTER_FORMULA_FUNCTION(debug, 0, 1,
  16. {
  17.     std::shared_ptr<formula_debugger> fdbp;
  18.     bool need_wrapper = false;
  19.  
  20.     if(fdb == nullptr) {
  21.         fdbp.reset(new formula_debugger());
  22.         fdb = &*fdbp;
  23.         need_wrapper = true;
  24.     }
  25.  
  26.     if(args().size() == 1) {
  27.         if(!need_wrapper) {
  28.             return args()[0]->evaluate(variables, fdb);
  29.         } else {
  30.             return wrapper_formula(args()[0]).evaluate(variables, fdb);
  31.         }
  32.     } else {
  33.         return wrapper_formula().evaluate(variables, fdb);
  34.     }
  35. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement