00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef SEQOPERATOR_H
00019 #define SEQOPERATOR_H
00020
00021 #include <odinseq/seqclass.h>
00022
00023
00024
00025 class SeqObjBase;
00026 class SeqGradObjInterface;
00027 class SeqObjList;
00028 class SeqObjLoop;
00029 class SeqDecoupling;
00030 class SeqParallel;
00031 class SeqGradChan;
00032 class SeqGradChanList;
00033 class SeqGradChanParallel;
00034
00039 class SeqOperator : public SeqClass {
00040
00041 public:
00042 static SeqObjList& concat(const SeqObjBase& s1, const SeqObjBase& s2);
00043 static SeqObjList& concat(const SeqObjBase& s1, const SeqObjList& s2, bool swap);
00044 static SeqObjList& concat(const SeqObjBase& s1, const SeqObjLoop& s2, bool swap);
00045 static SeqObjList& concat(const SeqObjBase& s1, const SeqDecoupling& s2, bool swap);
00046 static SeqObjList& concat(const SeqObjBase& s1, const SeqParallel& s2, bool swap);
00047 static SeqObjList& concat(const SeqObjBase& s1, SeqGradChan& s2, bool swap);
00048 static SeqObjList& concat(const SeqObjBase& s1, SeqGradChanList& s2, bool swap);
00049 static SeqObjList& concat(const SeqObjBase& s1, SeqGradChanParallel& s2, bool swap);
00050
00051 static SeqObjList& concat(const SeqObjList& s1, const SeqObjList& s2);
00052 static SeqObjList& concat(const SeqObjList& s1, const SeqObjLoop& s2, bool swap);
00053 static SeqObjList& concat(const SeqObjList& s1, const SeqDecoupling& s2, bool swap);
00054 static SeqObjList& concat(const SeqObjList& s1, const SeqParallel& s2, bool swap);
00055 static SeqObjList& concat(const SeqObjList& s1, SeqGradChan& s2, bool swap);
00056 static SeqObjList& concat(const SeqObjList& s1, SeqGradChanList& s2, bool swap);
00057 static SeqObjList& concat(const SeqObjList& s1, SeqGradChanParallel& s2, bool swap);
00058
00059 static SeqObjList& concat(const SeqObjLoop& s1, const SeqObjLoop& s2);
00060 static SeqObjList& concat(const SeqObjLoop& s1, const SeqDecoupling& s2, bool swap);
00061 static SeqObjList& concat(const SeqObjLoop& s1, const SeqParallel& s2, bool swap);
00062 static SeqObjList& concat(const SeqObjLoop& s1, SeqGradChan& s2, bool swap);
00063 static SeqObjList& concat(const SeqObjLoop& s1, SeqGradChanList& s2, bool swap);
00064 static SeqObjList& concat(const SeqObjLoop& s1, SeqGradChanParallel& s2, bool swap);
00065
00066 static SeqObjList& concat(const SeqDecoupling& s1, const SeqDecoupling& s2);
00067 static SeqObjList& concat(const SeqDecoupling& s1, const SeqParallel& s2, bool swap);
00068 static SeqObjList& concat(const SeqDecoupling& s1, SeqGradChan& s2, bool swap);
00069 static SeqObjList& concat(const SeqDecoupling& s1, SeqGradChanList& s2, bool swap);
00070 static SeqObjList& concat(const SeqDecoupling& s1, SeqGradChanParallel& s2, bool swap);
00071
00072 static SeqObjList& concat(const SeqParallel& s1, const SeqParallel& s2);
00073 static SeqObjList& concat(const SeqParallel& s1, SeqGradChan& s2, bool swap);
00074 static SeqObjList& concat(const SeqParallel& s1, SeqGradChanList& s2, bool swap);
00075 static SeqObjList& concat(const SeqParallel& s1, SeqGradChanParallel& s2, bool swap);
00076
00077 static SeqGradChanList& concat(SeqGradChan& s1, SeqGradChan& s2);
00078 static SeqGradChanList& concat(SeqGradChan& s1, SeqGradChanList& s2, bool swap);
00079 static SeqGradChanParallel& concat(SeqGradChan& s1, SeqGradChanParallel& s2, bool swap);
00080
00081 static SeqGradChanList& concat(SeqGradChanList& s1, SeqGradChanList& s2);
00082 static SeqGradChanParallel& concat(SeqGradChanList& s1, SeqGradChanParallel& s2, bool swap);
00083
00084 static SeqGradChanParallel& concat(SeqGradChanParallel& s1, SeqGradChanParallel& s2);
00085
00086
00087
00088 static SeqParallel& simultan(const SeqObjBase& s1, SeqGradObjInterface& s2);
00089 static SeqParallel& simultan(const SeqObjBase& s1, SeqGradChan& s2);
00090 static SeqParallel& simultan(const SeqObjBase& s1, SeqGradChanList& s2);
00091
00092
00093 static SeqGradChanParallel& simultan(SeqGradChan& s1, SeqGradChan& s2);
00094 static SeqGradChanParallel& simultan(SeqGradChan& s1, SeqGradChanList& s2);
00095 static SeqGradChanParallel& simultan(SeqGradChan& s1, SeqGradChanParallel& s2);
00096
00097 static SeqGradChanParallel& simultan(SeqGradChanList& s1, SeqGradChanList& s2);
00098 static SeqGradChanParallel& simultan(SeqGradChanList& s1, SeqGradChanParallel& s2);
00099
00100 static SeqGradChanParallel& simultan(SeqGradChanParallel& s1, SeqGradChanParallel& s2);
00101
00102 private:
00103 static void append_list2list(SeqObjList& dst, const SeqObjList& src);
00104
00105 static SeqObjList& create_SeqObjList_label(const STD_string& label1, const STD_string& label2, bool swap);
00106 static SeqObjList& create_SeqObjList_obj(const SeqObjBase& s1, const SeqObjBase& s2, bool swap);
00107 static SeqObjList& create_SeqObjList_list(const SeqObjList& s1, const SeqObjBase& s2, bool swap);
00108
00109 static SeqGradChanList& create_SeqGradChanList(const STD_string& label1, const STD_string& label2, bool swap);
00110 static SeqGradChanList& create_SeqGradChanList(SeqGradChan& sgc);
00111 static SeqGradChanParallel& create_SeqGradChanParallel_concat(const STD_string& label1, const STD_string& label2, bool swap);
00112
00113 static SeqParallel& create_SeqParallel(const STD_string& label1, const STD_string& label2);
00114 static SeqGradChanParallel& create_SeqGradChanParallel_simultan(const STD_string& label1, const STD_string& label2);
00115
00116 };
00117
00118 inline SeqObjList& operator + (const SeqObjBase& s1, const SeqObjBase& s2){return SeqOperator::concat(s1,s2);}
00119 inline SeqObjList& operator + (const SeqObjBase& s1, const SeqObjList& s2) {return SeqOperator::concat(s1,s2,false);}
00120 inline SeqObjList& operator + (const SeqObjBase& s1, const SeqObjLoop& s2) {return SeqOperator::concat(s1,s2,false);}
00121 inline SeqObjList& operator + (const SeqObjBase& s1, const SeqDecoupling& s2) {return SeqOperator::concat(s1,s2,false);}
00122 inline SeqObjList& operator + (const SeqObjBase& s1, const SeqParallel& s2) {return SeqOperator::concat(s1,s2,false);}
00123 inline SeqObjList& operator + (const SeqObjBase& s1, SeqGradChan& s2) {return SeqOperator::concat(s1,s2,false);}
00124 inline SeqObjList& operator + (const SeqObjBase& s1, SeqGradChanList& s2) {return SeqOperator::concat(s1,s2,false);}
00125 inline SeqObjList& operator + (const SeqObjBase& s1, SeqGradChanParallel& s2) {return SeqOperator::concat(s1,s2,false);}
00126
00127 inline SeqObjList& operator + (const SeqObjList& s1, const SeqObjBase& s2){return SeqOperator::concat(s2,s1,true);}
00128 inline SeqObjList& operator + (const SeqObjList& s1, const SeqObjList& s2) {return SeqOperator::concat(s1,s2);}
00129 inline SeqObjList& operator + (const SeqObjList& s1, const SeqObjLoop& s2) {return SeqOperator::concat(s1,s2,false);}
00130 inline SeqObjList& operator + (const SeqObjList& s1, const SeqDecoupling& s2) {return SeqOperator::concat(s1,s2,false);}
00131 inline SeqObjList& operator + (const SeqObjList& s1, const SeqParallel& s2) {return SeqOperator::concat(s1,s2,false);}
00132 inline SeqObjList& operator + (const SeqObjList& s1, SeqGradChan& s2) {return SeqOperator::concat(s1,s2,false);}
00133 inline SeqObjList& operator + (const SeqObjList& s1, SeqGradChanList& s2) {return SeqOperator::concat(s1,s2,false);}
00134 inline SeqObjList& operator + (const SeqObjList& s1, SeqGradChanParallel& s2) {return SeqOperator::concat(s1,s2,false);}
00135
00136 inline SeqObjList& operator + (const SeqObjLoop& s1, const SeqObjBase& s2){return SeqOperator::concat(s2,s1,true);}
00137 inline SeqObjList& operator + (const SeqObjLoop& s1, const SeqObjList& s2) {return SeqOperator::concat(s2,s1,true);}
00138 inline SeqObjList& operator + (const SeqObjLoop& s1, const SeqObjLoop& s2) {return SeqOperator::concat(s1,s2);}
00139 inline SeqObjList& operator + (const SeqObjLoop& s1, const SeqDecoupling& s2) {return SeqOperator::concat(s1,s2,false);}
00140 inline SeqObjList& operator + (const SeqObjLoop& s1, const SeqParallel& s2) {return SeqOperator::concat(s1,s2,false);}
00141 inline SeqObjList& operator + (const SeqObjLoop& s1, SeqGradChan& s2) {return SeqOperator::concat(s1,s2,false);}
00142 inline SeqObjList& operator + (const SeqObjLoop& s1, SeqGradChanList& s2) {return SeqOperator::concat(s1,s2,false);}
00143 inline SeqObjList& operator + (const SeqObjLoop& s1, SeqGradChanParallel& s2) {return SeqOperator::concat(s1,s2,false);}
00144
00145 inline SeqObjList& operator + (const SeqDecoupling& s1, const SeqObjBase& s2){return SeqOperator::concat(s2,s1,true);}
00146 inline SeqObjList& operator + (const SeqDecoupling& s1, const SeqObjList& s2) {return SeqOperator::concat(s2,s1,true);}
00147 inline SeqObjList& operator + (const SeqDecoupling& s1, const SeqObjLoop& s2) {return SeqOperator::concat(s2,s1,true);}
00148 inline SeqObjList& operator + (const SeqDecoupling& s1, const SeqDecoupling& s2) {return SeqOperator::concat(s1,s2);}
00149 inline SeqObjList& operator + (const SeqDecoupling& s1, const SeqParallel& s2) {return SeqOperator::concat(s1,s2,false);}
00150 inline SeqObjList& operator + (const SeqDecoupling& s1, SeqGradChan& s2) {return SeqOperator::concat(s1,s2,false);}
00151 inline SeqObjList& operator + (const SeqDecoupling& s1, SeqGradChanList& s2) {return SeqOperator::concat(s1,s2,false);}
00152 inline SeqObjList& operator + (const SeqDecoupling& s1, SeqGradChanParallel& s2) {return SeqOperator::concat(s1,s2,false);}
00153
00154 inline SeqObjList& operator + (const SeqParallel& s1, const SeqObjBase& s2){return SeqOperator::concat(s2,s1,true);}
00155 inline SeqObjList& operator + (const SeqParallel& s1, const SeqObjList& s2) {return SeqOperator::concat(s2,s1,true);}
00156 inline SeqObjList& operator + (const SeqParallel& s1, const SeqObjLoop& s2) {return SeqOperator::concat(s2,s1,true);}
00157 inline SeqObjList& operator + (const SeqParallel& s1, const SeqDecoupling& s2) {return SeqOperator::concat(s2,s1,true);}
00158 inline SeqObjList& operator + (const SeqParallel& s1, const SeqParallel& s2) {return SeqOperator::concat(s1,s2);}
00159 inline SeqObjList& operator + (const SeqParallel& s1, SeqGradChan& s2) {return SeqOperator::concat(s1,s2,false);}
00160 inline SeqObjList& operator + (const SeqParallel& s1, SeqGradChanList& s2) {return SeqOperator::concat(s1,s2,false);}
00161 inline SeqObjList& operator + (const SeqParallel& s1, SeqGradChanParallel& s2) {return SeqOperator::concat(s1,s2,false);}
00162
00163 inline SeqObjList& operator + (SeqGradChan& s1, const SeqObjBase& s2){return SeqOperator::concat(s2,s1,true);}
00164 inline SeqObjList& operator + (SeqGradChan& s1, const SeqObjList& s2) {return SeqOperator::concat(s2,s1,true);}
00165 inline SeqObjList& operator + (SeqGradChan& s1, const SeqObjLoop& s2) {return SeqOperator::concat(s2,s1,true);}
00166 inline SeqObjList& operator + (SeqGradChan& s1, const SeqDecoupling& s2) {return SeqOperator::concat(s2,s1,true);}
00167 inline SeqObjList& operator + (SeqGradChan& s1, const SeqParallel& s2) {return SeqOperator::concat(s2,s1,true);}
00168 inline SeqGradChanList& operator + (SeqGradChan& s1, SeqGradChan& s2) {return SeqOperator::concat(s1,s2);}
00169 inline SeqGradChanList& operator + (SeqGradChan& s1, SeqGradChanList& s2) {return SeqOperator::concat(s1,s2,false);}
00170 inline SeqGradChanParallel& operator + (SeqGradChan& s1, SeqGradChanParallel& s2) {return SeqOperator::concat(s1,s2,false);}
00171
00172 inline SeqObjList& operator + (SeqGradChanList& s1, const SeqObjBase& s2){return SeqOperator::concat(s2,s1,true);}
00173 inline SeqObjList& operator + (SeqGradChanList& s1, const SeqObjList& s2) {return SeqOperator::concat(s2,s1,true);}
00174 inline SeqObjList& operator + (SeqGradChanList& s1, const SeqObjLoop& s2) {return SeqOperator::concat(s2,s1,true);}
00175 inline SeqObjList& operator + (SeqGradChanList& s1, const SeqDecoupling& s2) {return SeqOperator::concat(s2,s1,true);}
00176 inline SeqObjList& operator + (SeqGradChanList& s1, const SeqParallel& s2) {return SeqOperator::concat(s2,s1,true);}
00177 inline SeqGradChanList& operator + (SeqGradChanList& s1, SeqGradChan& s2) {return SeqOperator::concat(s2,s1,true);}
00178 inline SeqGradChanList& operator + (SeqGradChanList& s1, SeqGradChanList& s2) {return SeqOperator::concat(s1,s2);}
00179 inline SeqGradChanParallel& operator + (SeqGradChanList& s1, SeqGradChanParallel& s2) {return SeqOperator::concat(s1,s2,false);}
00180
00181 inline SeqObjList& operator + (SeqGradChanParallel& s1, const SeqObjBase& s2){return SeqOperator::concat(s2,s1,true);}
00182 inline SeqObjList& operator + (SeqGradChanParallel& s1, const SeqObjList& s2) {return SeqOperator::concat(s2,s1,true);}
00183 inline SeqObjList& operator + (SeqGradChanParallel& s1, const SeqObjLoop& s2) {return SeqOperator::concat(s2,s1,true);}
00184 inline SeqObjList& operator + (SeqGradChanParallel& s1, const SeqDecoupling& s2) {return SeqOperator::concat(s2,s1,true);}
00185 inline SeqObjList& operator + (SeqGradChanParallel& s1, const SeqParallel& s2) {return SeqOperator::concat(s2,s1,true);}
00186 inline SeqGradChanParallel& operator + (SeqGradChanParallel& s1, SeqGradChan& s2) {return SeqOperator::concat(s2,s1,true);}
00187 inline SeqGradChanParallel& operator + (SeqGradChanParallel& s1, SeqGradChanList& s2) {return SeqOperator::concat(s2,s1,true);}
00188 inline SeqGradChanParallel& operator + (SeqGradChanParallel& s1, SeqGradChanParallel& s2) {return SeqOperator::concat(s1,s2);}
00189
00190
00191
00192 inline SeqParallel& operator / (const SeqObjBase& s1, SeqGradObjInterface& s2) {return SeqOperator::simultan(s1,s2);}
00193 inline SeqParallel& operator / (SeqGradObjInterface& s1, const SeqObjBase& s2) {return SeqOperator::simultan(s2,s1);}
00194
00195 inline SeqParallel& operator / (const SeqObjBase& s1, SeqGradChan& s2) {return SeqOperator::simultan(s1,s2);}
00196 inline SeqParallel& operator / (SeqGradChan& s1, const SeqObjBase& s2) {return SeqOperator::simultan(s2,s1);}
00197
00198 inline SeqParallel& operator / (const SeqObjBase& s1, SeqGradChanList& s2) {return SeqOperator::simultan(s1,s2);}
00199 inline SeqParallel& operator / (SeqGradChanList& s1, const SeqObjBase& s2) {return SeqOperator::simultan(s2,s1);}
00200
00201
00202 inline SeqGradChanParallel& operator / (SeqGradChan& s1, SeqGradChan& s2) {return SeqOperator::simultan(s1,s2);}
00203
00204 inline SeqGradChanParallel& operator / (SeqGradChan& s1, SeqGradChanList& s2) {return SeqOperator::simultan(s1,s2);}
00205 inline SeqGradChanParallel& operator / (SeqGradChanList& s1, SeqGradChan& s2) {return SeqOperator::simultan(s2,s1);}
00206
00207 inline SeqGradChanParallel& operator / (SeqGradChan& s1, SeqGradChanParallel& s2) {return SeqOperator::simultan(s1,s2);}
00208 inline SeqGradChanParallel& operator / (SeqGradChanParallel& s1, SeqGradChan& s2) {return SeqOperator::simultan(s2,s1);}
00209
00210 inline SeqGradChanParallel& operator / (SeqGradChanList& s1, SeqGradChanList& s2) {return SeqOperator::simultan(s1,s2);}
00211
00212 inline SeqGradChanParallel& operator / (SeqGradChanList& s1, SeqGradChanParallel& s2) {return SeqOperator::simultan(s1,s2);}
00213 inline SeqGradChanParallel& operator / (SeqGradChanParallel& s1, SeqGradChanList& s2) {return SeqOperator::simultan(s2,s1);}
00214
00215 inline SeqGradChanParallel& operator / (SeqGradChanParallel& s1, SeqGradChanParallel& s2) {return SeqOperator::simultan(s1,s2);}
00216
00217
00218 #endif