numSimpleEffect.cc
Go to the documentation of this file.
00001 /* numSimpleEffect.cc
00002  */
00003 #include "osl/effect/numSimpleEffect.h"
00004 #include <emmintrin.h>
00005 typedef __v2di v2di;
00006 
00007 void osl::effect::
00008 NumSimpleEffectTable::init(const SimpleState& state)
00009 {
00010   std::fill(effects.begin(), effects.end(),NumBitmapEffect());
00011   for(int num=0;num<40;num++){
00012     if (state.isOnBoard(num)){
00013       Piece p=state.pieceOf(num);
00014 #if 0
00015       doEffect<NumBitmapEffect::Add,false>(state,p);
00016 #else
00017       doEffect<NumBitmapEffect::Add,true>(state,p);
00018 #endif
00019     }
00020   }
00021 }
00022 
00023 void osl::effect::
00024 NumSimpleEffectTable::copyFrom(const NumSimpleEffectTable& src)
00025 {
00026   this->effected_mask = src.effected_mask;
00027   this->mobilityTable = src.mobilityTable;
00028   this->changed_effects = src.changed_effects;
00029   this->changed_effect_pieces = src.changed_effect_pieces;
00030   this->effected_changed_mask = src.effected_changed_mask;
00031 
00032 #if defined(__i386__) || defined(__x86_64__)
00033   {  
00034     v2di en0=*((v2di*)&src.effectedNumTable[0]);
00035     v2di en2=*((v2di*)&src.effectedNumTable[2]);
00036     v2di en4=*((v2di*)&src.effectedNumTable[4]);
00037     v2di en6=*((v2di*)&src.effectedNumTable[6]);
00038     v2di en8=*((v2di*)&src.effectedNumTable[8]);
00039     v2di en10=*((v2di*)&src.effectedNumTable[10]);
00040     v2di en12=*((v2di*)&src.effectedNumTable[12]);
00041     v2di en14=*((v2di*)&src.effectedNumTable[14]);
00042     v2di en16=*((v2di*)&src.effectedNumTable[16]);
00043     v2di en18=*((v2di*)&src.effectedNumTable[18]);
00044 
00045     *((v2di*)&(*this).effectedNumTable[0])=en0;
00046     *((v2di*)&(*this).effectedNumTable[2])=en2;
00047     *((v2di*)&(*this).effectedNumTable[4])=en4;
00048     *((v2di*)&(*this).effectedNumTable[6])=en6;
00049     *((v2di*)&(*this).effectedNumTable[8])=en8;
00050     *((v2di*)&(*this).effectedNumTable[10])=en10;
00051     *((v2di*)&(*this).effectedNumTable[12])=en12;
00052     *((v2di*)&(*this).effectedNumTable[14])=en14;
00053     *((v2di*)&(*this).effectedNumTable[16])=en16;
00054     *((v2di*)&(*this).effectedNumTable[18])=en18;
00055 
00056     v2di en20=*((v2di*)&src.effectedNumTable[20]);
00057     v2di en22=*((v2di*)&src.effectedNumTable[22]);
00058     v2di en24=*((v2di*)&src.effectedNumTable[24]);
00059     v2di en26=*((v2di*)&src.effectedNumTable[26]);
00060     v2di en28=*((v2di*)&src.effectedNumTable[28]);
00061     v2di en30=*((v2di*)&src.effectedNumTable[30]);
00062     v2di en32=*((v2di*)&src.effectedNumTable[32]);
00063     v2di en34=*((v2di*)&src.effectedNumTable[34]);
00064     v2di en36=*((v2di*)&src.effectedNumTable[36]);
00065     v2di en38=*((v2di*)&src.effectedNumTable[38]);
00066 
00067     *((v2di*)&(*this).effectedNumTable[20])=en20;
00068     *((v2di*)&(*this).effectedNumTable[22])=en22;
00069     *((v2di*)&(*this).effectedNumTable[24])=en24;
00070     *((v2di*)&(*this).effectedNumTable[26])=en26;
00071     *((v2di*)&(*this).effectedNumTable[28])=en28;
00072     *((v2di*)&(*this).effectedNumTable[30])=en30;
00073     *((v2di*)&(*this).effectedNumTable[32])=en32;
00074     *((v2di*)&(*this).effectedNumTable[34])=en34;
00075     *((v2di*)&(*this).effectedNumTable[36])=en36;
00076     *((v2di*)&(*this).effectedNumTable[38])=en38;
00077   }
00078 #else
00079   for(int i=0;i<40;i++)
00080     (*this).effectedNumTable[i]=src.effectedNumTable[i];
00081 #endif
00082 
00083 #if defined(__i386__) || defined(__x86_64__)
00084   {  
00085     v2di e18=*((v2di*)&src.effects[18]);
00086     v2di e20=*((v2di*)&src.effects[20]);
00087     v2di e22=*((v2di*)&src.effects[22]);
00088     v2di e24=*((v2di*)&src.effects[24]);
00089     v2di e26=*((v2di*)&src.effects[26]);
00090 
00091     v2di e34=*((v2di*)&src.effects[34]);
00092     v2di e36=*((v2di*)&src.effects[36]);
00093     v2di e38=*((v2di*)&src.effects[38]);
00094     v2di e40=*((v2di*)&src.effects[40]);
00095     v2di e42=*((v2di*)&src.effects[42]);
00096 
00097     *((v2di*)&(*this).effects[18])=e18;
00098     *((v2di*)&(*this).effects[20])=e20;
00099     *((v2di*)&(*this).effects[22])=e22;
00100     *((v2di*)&(*this).effects[24])=e24;
00101     *((v2di*)&(*this).effects[26])=e26;
00102 
00103     *((v2di*)&(*this).effects[34])=e34;
00104     *((v2di*)&(*this).effects[36])=e36;
00105     *((v2di*)&(*this).effects[38])=e38;
00106     *((v2di*)&(*this).effects[40])=e40;
00107     *((v2di*)&(*this).effects[42])=e42;
00108 
00109     v2di e50=*((v2di*)&src.effects[50]);
00110     v2di e52=*((v2di*)&src.effects[52]);
00111     v2di e54=*((v2di*)&src.effects[54]);
00112     v2di e56=*((v2di*)&src.effects[56]);
00113     v2di e58=*((v2di*)&src.effects[58]);
00114 
00115     v2di e66=*((v2di*)&src.effects[66]);
00116     v2di e68=*((v2di*)&src.effects[68]);
00117     v2di e70=*((v2di*)&src.effects[70]);
00118     v2di e72=*((v2di*)&src.effects[72]);
00119     v2di e74=*((v2di*)&src.effects[74]);
00120 
00121     *((v2di*)&(*this).effects[50])=e50;
00122     *((v2di*)&(*this).effects[52])=e52;
00123     *((v2di*)&(*this).effects[54])=e54;
00124     *((v2di*)&(*this).effects[56])=e56;
00125     *((v2di*)&(*this).effects[58])=e58;
00126 
00127     *((v2di*)&(*this).effects[66])=e66;
00128     *((v2di*)&(*this).effects[68])=e68;
00129     *((v2di*)&(*this).effects[70])=e70;
00130     *((v2di*)&(*this).effects[72])=e72;
00131     *((v2di*)&(*this).effects[74])=e74;
00132 
00133     v2di e82=*((v2di*)&src.effects[82]);
00134     v2di e84=*((v2di*)&src.effects[84]);
00135     v2di e86=*((v2di*)&src.effects[86]);
00136     v2di e88=*((v2di*)&src.effects[88]);
00137     v2di e90=*((v2di*)&src.effects[90]);
00138 
00139     v2di e98=*((v2di*)&src.effects[98]);
00140     v2di e100=*((v2di*)&src.effects[100]);
00141     v2di e102=*((v2di*)&src.effects[102]);
00142     v2di e104=*((v2di*)&src.effects[104]);
00143     v2di e106=*((v2di*)&src.effects[106]);
00144 
00145     *((v2di*)&(*this).effects[82])=e82;
00146     *((v2di*)&(*this).effects[84])=e84;
00147     *((v2di*)&(*this).effects[86])=e86;
00148     *((v2di*)&(*this).effects[88])=e88;
00149     *((v2di*)&(*this).effects[90])=e90;
00150 
00151     *((v2di*)&(*this).effects[98])=e98;
00152     *((v2di*)&(*this).effects[100])=e100;
00153     *((v2di*)&(*this).effects[102])=e102;
00154     *((v2di*)&(*this).effects[104])=e104;
00155     *((v2di*)&(*this).effects[106])=e106;
00156 
00157     v2di e114=*((v2di*)&src.effects[114]);
00158     v2di e116=*((v2di*)&src.effects[116]);
00159     v2di e118=*((v2di*)&src.effects[118]);
00160     v2di e120=*((v2di*)&src.effects[120]);
00161     v2di e122=*((v2di*)&src.effects[122]);
00162 
00163     v2di e130=*((v2di*)&src.effects[130]);
00164     v2di e132=*((v2di*)&src.effects[132]);
00165     v2di e134=*((v2di*)&src.effects[134]);
00166     v2di e136=*((v2di*)&src.effects[136]);
00167     v2di e138=*((v2di*)&src.effects[138]);
00168 
00169     *((v2di*)&(*this).effects[114])=e114;
00170     *((v2di*)&(*this).effects[116])=e116;
00171     *((v2di*)&(*this).effects[118])=e118;
00172     *((v2di*)&(*this).effects[120])=e120;
00173     *((v2di*)&(*this).effects[122])=e122;
00174 
00175     *((v2di*)&(*this).effects[130])=e130;
00176     *((v2di*)&(*this).effects[132])=e132;
00177     *((v2di*)&(*this).effects[134])=e134;
00178     *((v2di*)&(*this).effects[136])=e136;
00179     *((v2di*)&(*this).effects[138])=e138;
00180 
00181     v2di e146=*((v2di*)&src.effects[146]);
00182     v2di e148=*((v2di*)&src.effects[148]);
00183     v2di e150=*((v2di*)&src.effects[150]);
00184     v2di e152=*((v2di*)&src.effects[152]);
00185     v2di e154=*((v2di*)&src.effects[154]);
00186 
00187     *((v2di*)&(*this).effects[146])=e146;
00188     *((v2di*)&(*this).effects[148])=e148;
00189     *((v2di*)&(*this).effects[150])=e150;
00190     *((v2di*)&(*this).effects[152])=e152;
00191     *((v2di*)&(*this).effects[154])=e154;
00192   }
00193 #else
00194   for(int x=1;x<=9;x++)
00195     for(int y=1;y<=9;y++)
00196       this->effects[Square(x,y).index()]=src.effects[Square(x,y).index()];
00197 #endif
00198 }
00199 
00200 bool osl::effect::operator==(const NumSimpleEffectTable& et1,const NumSimpleEffectTable& et2)
00201 {
00202   for(int y=1;y<=9;y++)
00203     for(int x=9;x>0;x--){
00204       Square pos(x,y);
00205       if (!(et1.effectSetAt(pos)==et2.effectSetAt(pos))) return false;
00206     }
00207   if (! (et1.effected_mask == et2.effected_mask))
00208     return false;
00209   if(!(et1.mobilityTable==et2.mobilityTable)) return false;
00210   if(!(et1.effectedNumTable==et2.effectedNumTable)) return false;
00211   // intentionally ignore history dependent members: changed_effects, changed_effect_pieces, effected_changed_mask
00212   return true;
00213 }
00214 
00215 #ifndef MINIMAL
00216 std::ostream& osl::effect::operator<<(std::ostream& os,const NumSimpleEffectTable& effectTable)
00217 {
00218   os << "Effect" << std::endl;
00219   for(int y=1;y<=9;y++){
00220     for(int x=9;x>0;x--){
00221       Square pos(x,y);
00222       os << effectTable.effectSetAt(pos) << " ";
00223     }
00224     os << std::endl;
00225   }
00226   os << "Effect" << std::endl;
00227   for(int y=1;y<=9;y++){
00228     for(int x=9;x>0;x--){
00229       Square pos(x,y);
00230       os << effectTable.effectSetAt(pos) << " ";
00231     }
00232     os << std::endl;
00233   }
00234   return os;
00235 }
00236 #endif
00237 // ;;; Local Variables:
00238 // ;;; mode:c++
00239 // ;;; c-basic-offset:2
00240 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines