00001 using namespace std;
00002
00003 #include "AltDeMuxPatternMaster.h"
00004 #include <iostream>
00005
00006 AltDeMuxPatternMaster::AltDeMuxPatternMaster()
00007 {
00008
00009 AltDeMuxPattern* pPattern;
00010
00011
00012 pPattern = new AltDeMuxPattern(11);
00013 pattern11.push_back(pPattern);
00014
00015
00016
00017 pPattern = new AltDeMuxPattern(11,22);
00018 pattern22.push_back(pPattern);
00019 pPattern = new AltDeMuxPattern(12,21);
00020 pattern22.push_back(pPattern);
00021
00022
00023
00024
00025 pPattern = new AltDeMuxPattern(11,22);
00026 pattern23.push_back(pPattern);
00027 pPattern = new AltDeMuxPattern(12,21);
00028 pattern23.push_back(pPattern);
00029 pPattern = new AltDeMuxPattern(11,23);
00030 pattern23.push_back(pPattern);
00031 pPattern = new AltDeMuxPattern(13,21);
00032 pattern23.push_back(pPattern);
00033 pPattern = new AltDeMuxPattern(12,23);
00034 pattern23.push_back(pPattern);
00035 pPattern = new AltDeMuxPattern(13,22);
00036 pattern23.push_back(pPattern);
00037
00038
00039
00040
00041 pPattern = new AltDeMuxPattern(11,22);
00042 pattern32.push_back(pPattern);
00043 pPattern = new AltDeMuxPattern(12,21);
00044 pattern32.push_back(pPattern);
00045 pPattern = new AltDeMuxPattern(11,32);
00046 pattern32.push_back(pPattern);
00047 pPattern = new AltDeMuxPattern(12,31);
00048 pattern32.push_back(pPattern);
00049 pPattern = new AltDeMuxPattern(21,32);
00050 pattern32.push_back(pPattern);
00051 pPattern = new AltDeMuxPattern(22,31);
00052 pattern32.push_back(pPattern);
00053
00054
00055
00056 pPattern = new AltDeMuxPattern(11,22,33);
00057 pattern33.push_back(pPattern);
00058 pPattern = new AltDeMuxPattern(11,23,32);
00059 pattern33.push_back(pPattern);
00060 pPattern = new AltDeMuxPattern(12,21,33);
00061 pattern33.push_back(pPattern);
00062 pPattern = new AltDeMuxPattern(12,23,31);
00063 pattern33.push_back(pPattern);
00064 pPattern = new AltDeMuxPattern(13,21,32);
00065 pattern33.push_back(pPattern);
00066 pPattern = new AltDeMuxPattern(13,22,31);
00067 pattern33.push_back(pPattern);
00068
00069
00070
00071 for(int i1=1 ;i1 <=4; i1++){
00072 for(int i2=1 ;i2 <=4; i2++){
00073 if(i2!=i1){
00074 for(int i3=1 ;i3 <=4; i3++){
00075 if((i3!=i1)&&(i3!=i2)){
00076 pPattern = new AltDeMuxPattern(10+i1,20+i2,30+i3);
00077 pattern34.push_back(pPattern);
00078 }
00079 }
00080 }
00081 }
00082 }
00083
00084
00085 for(int i1=1 ;i1 <=5; i1++){
00086 for(int i2=1 ;i2 <=5; i2++){
00087 if(i2!=i1){
00088 for(int i3=1 ;i3 <=5; i3++){
00089 if((i3!=i1)&&(i3!=i2)){
00090 pPattern = new AltDeMuxPattern(10+i1,20+i2,30+i3);
00091 pattern35.push_back(pPattern);
00092 }
00093 }
00094 }
00095 }
00096 }
00097
00098
00099 for(int i1=1 ;i1 <=3; i1++){
00100 for(int i2=1 ;i2 <=3; i2++){
00101 if(i2!=i1){
00102 for(int i3=1 ;i3 <=3; i3++){
00103 if((i3!=i1)&&(i3!=i2)){
00104 pPattern = new AltDeMuxPattern(10+i1,20+i2,30+i3);
00105 pattern43.push_back(pPattern);
00106 pPattern = new AltDeMuxPattern(10+i1,20+i2,40+i3);
00107 pattern43.push_back(pPattern);
00108 pPattern = new AltDeMuxPattern(10+i1,30+i2,40+i3);
00109 pattern43.push_back(pPattern);
00110 pPattern = new AltDeMuxPattern(20+i1,30+i2,40+i3);
00111 pattern43.push_back(pPattern);
00112 }
00113 }
00114 }
00115 }
00116 }
00117
00118
00119 for(int i1=1 ;i1 <=4; i1++){
00120 for(int i2=1 ;i2 <=4; i2++){
00121 if(i2!=i1){
00122 for(int i3=1 ;i3 <=4; i3++){
00123 if((i3!=i1)&&(i3!=i2)){
00124 for(int i4=1 ;i4 <=4; i4++){
00125 if((i4!=i1)&&(i4!=i2)&&(i4!=i3)){
00126 pPattern = new AltDeMuxPattern(10+i1,20+i2,30+i3,40+i4);
00127 pattern44.push_back(pPattern);
00128 }
00129 }
00130 }
00131 }
00132 }
00133 }
00134 }
00135
00136
00137
00138
00139 for(int i1=1 ;i1 <=5; i1++){
00140 for(int i2=1 ;i2 <=5; i2++){
00141 if(i2!=i1){
00142 for(int i3=1 ;i3 <=5; i3++){
00143 if((i3!=i1)&&(i3!=i2)){
00144 for(int i4=1 ;i4 <=5; i4++){
00145 if((i4!=i1)&&(i4!=i2)&&(i4!=i3)){
00146 pPattern = new AltDeMuxPattern(10+i1,20+i2,30+i3,40+i4);
00147 pattern45.push_back(pPattern);
00148 }
00149 }
00150 }
00151 }
00152 }
00153 }
00154 }
00155
00156
00157 for(int i1=1 ;i1 <=3; i1++){
00158 for(int i2=1 ;i2 <=3; i2++){
00159 if(i2!=i1){
00160 for(int i3=1 ;i3 <=3; i3++){
00161 if((i3!=i1)&&(i3!=i2)){
00162 pPattern = new AltDeMuxPattern(10+i1,20+i2,30+i3);
00163 pattern53.push_back(pPattern);
00164 pPattern = new AltDeMuxPattern(10+i1,20+i2,40+i3);
00165 pattern53.push_back(pPattern);
00166 pPattern = new AltDeMuxPattern(10+i1,20+i2,50+i3);
00167 pattern53.push_back(pPattern);
00168 pPattern = new AltDeMuxPattern(10+i1,30+i2,40+i3);
00169 pattern53.push_back(pPattern);
00170 pPattern = new AltDeMuxPattern(10+i1,30+i2,50+i3);
00171 pattern53.push_back(pPattern);
00172 pPattern = new AltDeMuxPattern(10+i1,40+i2,50+i3);
00173 pattern53.push_back(pPattern);
00174 pPattern = new AltDeMuxPattern(20+i1,30+i2,40+i3);
00175 pattern53.push_back(pPattern);
00176 pPattern = new AltDeMuxPattern(20+i1,30+i2,50+i3);
00177 pattern53.push_back(pPattern);
00178 pPattern = new AltDeMuxPattern(20+i1,40+i2,50+i3);
00179 pattern53.push_back(pPattern);
00180 pPattern = new AltDeMuxPattern(30+i1,40+i2,50+i3);
00181 pattern53.push_back(pPattern);
00182 }
00183 }
00184 }
00185 }
00186 }
00187
00188
00189
00190 for(int i1=1 ;i1 <=4; i1++){
00191 for(int i2=1 ;i2 <=4; i2++){
00192 if(i2!=i1){
00193 for(int i3=1 ;i3 <=4; i3++){
00194 if((i3!=i1)&&(i3!=i2)){
00195 for(int i4=1 ;i4 <=4; i4++){
00196 if((i4!=i1)&&(i4!=i2)&&(i4!=i3)){
00197 pPattern = new AltDeMuxPattern(10+i1,20+i2,30+i3,40+i4);
00198 pattern54.push_back(pPattern);
00199 pPattern = new AltDeMuxPattern(10+i1,20+i2,30+i3,50+i4);
00200 pattern54.push_back(pPattern);
00201 pPattern = new AltDeMuxPattern(10+i1,20+i2,40+i3,50+i4);
00202 pattern54.push_back(pPattern);
00203 pPattern = new AltDeMuxPattern(10+i1,30+i2,30+i3,40+i4);
00204 pattern54.push_back(pPattern);
00205 pPattern = new AltDeMuxPattern(10+i1,30+i2,30+i3,50+i4);
00206 pattern54.push_back(pPattern);
00207 pPattern = new AltDeMuxPattern(10+i1,30+i2,40+i3,50+i4);
00208 pattern54.push_back(pPattern);
00209 pPattern = new AltDeMuxPattern(20+i1,30+i2,30+i3,40+i4);
00210 pattern54.push_back(pPattern);
00211 pPattern = new AltDeMuxPattern(20+i1,30+i2,30+i3,50+i4);
00212 pattern54.push_back(pPattern);
00213 pPattern = new AltDeMuxPattern(20+i1,30+i2,40+i3,50+i4);
00214 pattern54.push_back(pPattern);
00215 }
00216 }
00217 }
00218 }
00219 }
00220 }
00221 }
00222
00223
00224
00225 for(int i1=1 ;i1 <=5; i1++){
00226 for(int i2=1 ;i2 <=5; i2++){
00227 if(i2!=i1){
00228 for(int i3=1 ;i3 <=5; i3++){
00229 if( (i3!=i1)&& (i3!=i2) ){
00230 for(int i4=1 ;i4 <=5; i4++){
00231 if((i4!=i1)&&(i4!=i2)&&(i4!=i3)){
00232 for(int i5=1 ;i5 <=5; i5++){
00233 if((i5!=i1)&&(i5!=i2)&&(i5!=i3)&&(i5!=i4)){
00234 pPattern=new AltDeMuxPattern(10+i1,20+i2,30+i3,40+i4,50+i5);
00235 pattern55.push_back(pPattern);
00236 }
00237 }
00238 }
00239 }
00240 }
00241 }
00242 }
00243 }
00244 }
00245
00246
00247 }
00248
00249
00250 bool AltDeMuxPatternMaster::SelectPattern(int ne, int nw)
00251 {
00252
00253 int selector;
00254
00255 if(ne<1 || ne > 6)return false;
00256 if(nw<1 || nw > 6)return false;
00257 if( (ne!=nw) && (ne==1 || nw==1) )return false;
00258
00259 selector = 10*ne+nw;
00260
00261 switch(selector){
00262 case 11:
00263 pCurrentSet = &pattern11;
00264 break;
00265 case 22:
00266 pCurrentSet = &pattern22;
00267 break;
00268 case 23:
00269 pCurrentSet = &pattern23;
00270 break;
00271 case 32:
00272 pCurrentSet = &pattern32;
00273 break;
00274 case 33:
00275 pCurrentSet = &pattern33;
00276 break;
00277 case 34:
00278 pCurrentSet = &pattern34;
00279 break;
00280 case 35:
00281 pCurrentSet = &pattern35;
00282 break;
00283 case 43:
00284 pCurrentSet = &pattern43;
00285 break;
00286 case 44:
00287 pCurrentSet = &pattern44;
00288 break;
00289 case 45:
00290 pCurrentSet = &pattern45;
00291 break;
00292 case 53:
00293 pCurrentSet = &pattern53;
00294 break;
00295 case 54:
00296 pCurrentSet = &pattern54;
00297 break;
00298 case 55:
00299 pCurrentSet = &pattern55;
00300 break;
00301 default:
00302 return false;
00303 break;
00304 }
00305
00306 icursor = -1;
00307 imax = (*pCurrentSet).size() - 1;
00308
00309 return true;
00310 }
00311
00312 AltDeMuxPattern* AltDeMuxPatternMaster::Next(){
00313
00314 icursor++;
00315 if(icursor>imax)return NULL;
00316 return (*pCurrentSet)[icursor];
00317
00318 }
00319
00320 AltDeMuxPattern::AltDeMuxPattern(int i1)
00321 {
00322
00323 PatternPair p;
00324 int ie1 = i1/10;
00325 int iw1 = i1-ie1*10;
00326
00327 isize = 1;
00328
00329 p.eEntry = ie1;
00330 p.wEntry = iw1;
00331
00332 pattern.push_back(p);
00333
00334 return;
00335
00336 }
00337
00338
00339 AltDeMuxPattern::AltDeMuxPattern(int i1, int i2)
00340 {
00341 PatternPair p1,p2;
00342
00343 isize = 2;
00344
00345 int ie1 = i1/10;
00346 int iw1 = i1-ie1*10;
00347 int ie2 = i2/10;
00348 int iw2 = i2-ie2*10;
00349
00350 p1.eEntry = ie1;
00351 p1.wEntry = iw1;
00352 p2.eEntry = ie2;
00353 p2.wEntry = iw2;
00354 pattern.push_back(p1);
00355 pattern.push_back(p2);
00356
00357 return;
00358
00359 }
00360
00361
00362 AltDeMuxPattern::AltDeMuxPattern(int i1, int i2, int i3)
00363 {
00364
00365 PatternPair p1,p2,p3;
00366
00367 isize = 3;
00368
00369 int ie1 = i1/10;
00370 int iw1 = i1-ie1*10;
00371 int ie2 = i2/10;
00372 int iw2 = i2-ie2*10;
00373 int ie3 = i3/10;
00374 int iw3 = i3-ie3*10;
00375
00376 p1.eEntry = ie1;
00377 p1.wEntry = iw1;
00378 p2.eEntry = ie2;
00379 p2.wEntry = iw2;
00380 p3.eEntry = ie3;
00381 p3.wEntry = iw3;
00382 pattern.push_back(p1);
00383 pattern.push_back(p2);
00384 pattern.push_back(p3);
00385
00386 return;
00387
00388 }
00389
00390
00391 AltDeMuxPattern::AltDeMuxPattern(int i1, int i2, int i3, int i4)
00392 {
00393
00394 PatternPair p1,p2,p3,p4;
00395
00396 isize = 4;
00397
00398 int ie1 = i1/10;
00399 int iw1 = i1-ie1*10;
00400 int ie2 = i2/10;
00401 int iw2 = i2-ie2*10;
00402 int ie3 = i3/10;
00403 int iw3 = i3-ie3*10;
00404 int ie4 = i4/10;
00405 int iw4 = i4-ie4*10;
00406
00407
00408 p1.eEntry = ie1;
00409 p1.wEntry = iw1;
00410 p2.eEntry = ie2;
00411 p2.wEntry = iw2;
00412 p3.eEntry = ie3;
00413 p3.wEntry = iw3;
00414 p4.eEntry = ie4;
00415 p4.wEntry = iw4;
00416 pattern.push_back(p1);
00417 pattern.push_back(p2);
00418 pattern.push_back(p3);
00419 pattern.push_back(p4);
00420
00421 return;
00422
00423 }
00424
00425
00426 AltDeMuxPattern::AltDeMuxPattern(int i1, int i2, int i3, int i4, int i5)
00427 {
00428
00429 PatternPair p1,p2,p3,p4,p5;
00430
00431 isize = 5;
00432
00433 int ie1 = i1/10;
00434 int iw1 = i1-ie1*10;
00435 int ie2 = i2/10;
00436 int iw2 = i2-ie2*10;
00437 int ie3 = i3/10;
00438 int iw3 = i3-ie3*10;
00439 int ie4 = i4/10;
00440 int iw4 = i4-ie4*10;
00441 int ie5 = i5/10;
00442 int iw5 = i5-ie5*10;
00443
00444 p1.eEntry = ie1;
00445 p1.wEntry = iw1;
00446 p2.eEntry = ie2;
00447 p2.wEntry = iw2;
00448 p3.eEntry = ie3;
00449 p3.wEntry = iw3;
00450 p4.eEntry = ie4;
00451 p4.wEntry = iw4;
00452 p5.eEntry = ie5;
00453 p5.wEntry = iw5;
00454 pattern.push_back(p1);
00455 pattern.push_back(p2);
00456 pattern.push_back(p3);
00457 pattern.push_back(p4);
00458 pattern.push_back(p5);
00459
00460 return;
00461
00462 }
00463
00464
00465 PatternPair AltDeMuxPattern::GetI(int i)
00466 {
00467 return pattern[i];
00468 }