00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include <basix/evaluator.hpp>
00014 #include <basix/glue.hpp>
00015 namespace mmx {
00016
00017
00018
00019
00020
00021 void* evaluator_rep::get_internal_data () const {
00022 return NULL; }
00023 void evaluator_rep::set (const generic& var, const generic& val) const {
00024 (void) var; (void) val; }
00025 void evaluator_rep::reset (const generic& var) const {
00026 (void) var; }
00027 void evaluator_rep::overload
00028 (const generic& var, const generic& val, nat pen) const {
00029 (void) var; (void) val; (void) pen; }
00030 bool evaluator_rep::contains (const generic& var) const {
00031 (void) var; return false; }
00032 generic evaluator_rep::get (const generic& var) const {
00033 return var; }
00034 bool evaluator_rep::get (const generic& var, generic& val) const {
00035 (void) var; (void) val; return false; }
00036
00037 generic evaluator_rep::eval (const generic& x) const {
00038 return x; }
00039 generic evaluator_rep::construct (const generic& x) const {
00040 return x; }
00041 generic evaluator_rep::apply (const generic& fun) const {
00042 return gen (fun); }
00043 generic evaluator_rep::apply (const generic& fun, const generic& x1) const {
00044 return gen (fun, x1); }
00045 generic evaluator_rep::apply (const generic& fun,
00046 const generic& x1, const generic& x2) const {
00047 return gen (fun, x1, x2); }
00048 generic evaluator_rep::apply (const generic& fun,
00049 const vector<generic>& v) const {
00050 return gen (fun, v); }
00051
00052
00053
00054
00055
00056 bool ev_lock= false;
00057 evaluator current_ev;
00058 list<evaluator> stack_ev;
00059
00060 void
00061 select_evaluator (const evaluator& ev) {
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 stack_ev = cons (current_ev, stack_ev);
00073 current_ev= ev;
00074
00075
00076 }
00077
00078 void
00079 restore_evaluator () {
00080
00081
00082
00083 ASSERT (!is_nil (stack_ev), "empty evaluator stack");
00084
00085
00086
00087
00088
00089
00090
00091 evaluator aux_ev= current_ev;
00092 current_ev= read_car (stack_ev);
00093 stack_ev = read_cdr (stack_ev);
00094
00095
00096 }
00097
00098 }