00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 #ifndef BRICK_EXPRESSION_H
00012 #define BRICK_EXPRESSION_H
00013 
00014 
00015 #ifdef IPPL_NO_RESTRICT
00016 #define restrict 
00017 #endif
00018 
00019 
00020 #include "Utility/Pooled.h"
00021 #include "Utility/RefCounted.h"
00022 #include "Field/AssignTags.h"
00023 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00035 
00036 
00037 
00038 template<unsigned Dim, class LHS, class RHS, class OP>
00039 class BrickExpression :
00040   public RefCounted, public Pooled< BrickExpression<Dim,LHS,RHS,OP> >
00041 {
00042 public: 
00043   BrickExpression(const LHS& l, const RHS& r)
00044     : Lhs(l), Rhs(r)
00045       {
00046       }
00047   BrickExpression(const LHS& l, const RHS& r, const OP& o)
00048     : Lhs(l), Rhs(r), Op(o)
00049       {
00050       }
00051 
00052 #if (IPPL_RESTRICT_BUG)
00053   virtual void apply();
00054 #else
00055   virtual void apply() restrict;
00056 #endif
00057 
00058 private:
00059   LHS Lhs;
00060   RHS Rhs;
00061   OP  Op;
00062 };
00063 
00065 
00066 #include "Field/BrickExpression.cpp"
00067 
00068 #endif // BRICK_EXPRESSION_H
00069 
00070 
00071 
00072 
00073 
00074 
00075