00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef SUB_PARTICLE_ASSIGN_H
00012 #define SUB_PARTICLE_ASSIGN_H
00013
00014
00015 #include "Field/Assign.h"
00016 #include "SubParticle/SubParticleAttrib.h"
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00042
00043 template<class PA, class T, unsigned Dim, class RHS, class OP>
00044 void
00045 assign(SubParticleAttrib<PA,T,Dim> a, RHS b, OP op, ExprTag<true>);
00046
00047
00049
00050 template<class PA, class T, unsigned Dim, class OP>
00051 inline void
00052 assign(SubParticleAttrib<PA,T,Dim> a, const T& b, OP op, ExprTag<true>) {
00053 assign(a, PETE_Scalar<T>(b), op, ExprTag<true>());
00054 }
00055
00056
00058
00059 #define SUBPARTICLE_ASSIGNMENT_OPERATORS(FUNC,OP) \
00060 \
00061 template<class PA, class T, unsigned Dim> \
00062 inline void \
00063 FUNC(const SubParticleAttrib<PA,T,Dim>& lhs, const T& rhs) \
00064 { \
00065 assign(lhs, PETE_Scalar<T>(rhs), OP(), ExprTag<true>()); \
00066 }
00067
00068
00069 SUBPARTICLE_ASSIGNMENT_OPERATORS(assign,OpAssign)
00070 SUBPARTICLE_ASSIGNMENT_OPERATORS(operator<<,OpAssign)
00071 SUBPARTICLE_ASSIGNMENT_OPERATORS(operator+=,OpAddAssign)
00072 SUBPARTICLE_ASSIGNMENT_OPERATORS(operator-=,OpSubtractAssign)
00073 SUBPARTICLE_ASSIGNMENT_OPERATORS(operator*=,OpMultipplyAssign)
00074 SUBPARTICLE_ASSIGNMENT_OPERATORS(operator/=,OpDivideAssign)
00075 SUBPARTICLE_ASSIGNMENT_OPERATORS(mineq,OpMinAssign)
00076 SUBPARTICLE_ASSIGNMENT_OPERATORS(maxeq,OpMaxAssign)
00077
00078 #include "SubParticle/SubParticleAssign.cpp"
00079
00080 #endif
00081
00082
00083
00084
00085
00086