00001 #ifndef EXPRESSION_TEMPLATE_H
00002 #define EXPRESSION_TEMPLATE_H
00003
00004
00005
00006
00007
00008
00009 template<typename L, typename Op, typename R>
00010 struct X_read_read {
00011
00012 const L & l;
00013 const R & r;
00014
00015 X_read_read(const L & _l, const R & _r) : l(_l), r(_r) {}
00016
00017 template<typename T>
00018 void apply(T & dst) const { Op::apply(dst, l, r); }
00019 };
00020
00021
00022 template<typename L, typename Op, typename R>
00023 struct X_read_write {
00024
00025 const L & l;
00026 R & r;
00027
00028 X_read_write(const L & _l, R & _r) : l(_l), r(_r) {}
00029
00030 };
00031
00032
00033 template<typename L, typename Op, typename R>
00034 struct X_write_read {
00035
00036 L & l;
00037 const R & r;
00038
00039 X_write_read(L & _l, const R & _r) : l(_l), r(_r) {}
00040
00041 };
00042
00043
00044 template<typename L, typename Op, typename R>
00045 struct X_write_write {
00046
00047 L & l;
00048 R & r;
00049
00050 X_write_write(L & _l, R & _r) : l(_l), r(_r) {}
00051
00052 };
00053
00054 #endif // EXPRESSION_TEMPLATE_H
00055