Project

General

Profile

« Previous | Next » 

Revision ce7202ef

Added by Leszek Koltunski over 1 year ago

Improve the tablebase code a bit

View differences:

src/main/java/org/distorted/objectlib/tablebases/TablebasesCreator.java
229 229
    int numQuats = quats.length;
230 230
    int[] tmpQuats = new int[numQuats];
231 231
    byte newLevel = (byte)(level+1);
232
    boolean[] belongs = new boolean[mNumCubits];
233 232
    int quatBasis = 0;
234 233

  
234
    for(int ax=0; ax<mNumAxis; ax++)
235
      for(int cubit=0; cubit<mNumCubits; cubit++)
236
        mRotRow[cubit][ax] = computeRow(mPosition[cubit],quats[cubit],ax);
237

  
235 238
    for(int ax=0; ax<mNumAxis; ax++)
236 239
      {
237 240
      for(int layer=0; layer<mNumLayers[ax]; layer++)
238 241
        {
239 242
        if( !mRotatable[ax][layer] ) continue;
240 243
        int bitLayer = (1<<layer);
241

  
242
        for(int cubit=0; cubit<mNumCubits; cubit++)
243
          {
244
          mRotRow[cubit][ax] = computeRow(mPosition[cubit],quats[cubit],ax);
245
          belongs[cubit] = belongsToMove(cubit,ax,bitLayer);
246
          }
247

  
248 244
        int maxAngle = mAngles[ax][layer];
249 245

  
250 246
        for(int angle=1; angle<maxAngle; angle++ )
......
253 249
          int quat = quatBasis + angle;
254 250

  
255 251
          for(int cubit=0; cubit<mNumCubits; cubit++)
256
            if( belongs[cubit] )
252
            if( mRotRow[cubit][ax]==bitLayer )
257 253
              {
258 254
              int currQuat = tmpQuats[cubit];
259 255
              int newQuat = getMultQuat(quat,currQuat);
......
358 354
    int[] quats = getQuats(index);
359 355
    int numQuats = quats.length;
360 356
    int[] tmpQuats = new int[numQuats];
361
    boolean[] belongs = new boolean[mNumCubits];
362 357

  
363 358
    while(index!=0)
364 359
      {
365 360
      boolean found = false;
366 361

  
362
      for(int ax=0; ax<mNumAxis; ax++)
363
        for(int cubit=0; cubit<mNumCubits; cubit++)
364
          mRotRow[cubit][ax] = computeRow(mPosition[cubit],quats[cubit],ax);
365

  
367 366
      for(int ax=0; ax<mNumAxis; ax++)
368 367
        {
369 368
        int numLayers = mNumLayers[ax];
......
373 372
          {
374 373
          if( !mRotatable[ax][layer] ) continue;
375 374
          int bitLayer = (1<<layer);
376

  
377
          for(int cubit=0; cubit<mNumCubits; cubit++)
378
            {
379
            mRotRow[cubit][ax] = computeRow(mPosition[cubit],quats[cubit],ax);
380
            belongs[cubit] = belongsToMove(cubit,ax,bitLayer);
381
            }
382

  
383 375
          int maxAngle = angles[layer];
384 376

  
385 377
          for(int angle=1; angle<maxAngle; angle++ )
......
388 380
            int quat = quatBasis + angle;
389 381

  
390 382
            for(int cubit=0; cubit<mNumCubits; cubit++)
391
              if( belongs[cubit] )
383
              if( mRotRow[cubit][ax]==bitLayer )
392 384
                {
393 385
                int currQuat = tmpQuats[cubit];
394 386
                int newQuat = getMultQuat(quat,currQuat);
......
438 430
    int[] quats = getQuats(0);
439 431
    int numQuats = quats.length;
440 432
    int[] tmpQuats = new int[numQuats];
441
    boolean[] belongs = new boolean[mNumCubits];
442 433

  
443 434
    while(level<depth)
444 435
      {
445 436
      boolean found = false;
446 437

  
438
      for(int ax=0; ax<mNumAxis; ax++)
439
        for(int cubit=0; cubit<mNumCubits; cubit++)
440
          mRotRow[cubit][ax] = computeRow(mPosition[cubit],quats[cubit],ax);
441

  
447 442
      for(int ax=0; ax<mNumAxis; ax++)
448 443
        {
449 444
        int numLayers = mNumLayers[ax];
......
453 448
          {
454 449
          if( !mRotatable[ax][layer] ) continue;
455 450
          int bitLayer = (1<<layer);
456

  
457
          for(int cubit=0; cubit<mNumCubits; cubit++)
458
            {
459
            mRotRow[cubit][ax] = computeRow(mPosition[cubit],quats[cubit],ax);
460
            belongs[cubit] = belongsToMove(cubit,ax,bitLayer);
461
            }
462

  
463 451
          int maxAngle = angles[layer];
464 452

  
465 453
          for(int angle=1; angle<maxAngle; angle++ )
......
468 456
            int quat = quatBasis + angle;
469 457

  
470 458
            for(int cubit=0; cubit<mNumCubits; cubit++)
471
              if( belongs[cubit] )
459
              if( mRotRow[cubit][ax]==bitLayer )
472 460
                {
473 461
                int currQuat = tmpQuats[cubit];
474 462
                int newQuat = getMultQuat(quat,currQuat);

Also available in: Unified diff