Project

General

Profile

« Previous | Next » 

Revision f2060de1

Added by Leszek Koltunski 12 months ago

speedup in PruningTable

View differences:

src/main/java/org/distorted/objectlib/tablebases/PruningTable.java
21 21
  private int mBucketBytes;
22 22
  private int mNumBuckets;
23 23
  private int mLevel;
24
  private int[] mBucketOffsets;
24 25

  
25 26
///////////////////////////////////////////////////////////////////////////////////////////////////
26 27

  
......
60 61

  
61 62
  private int getBucketOffset(int bucket)
62 63
    {
63
    if( bucket>=mNumBuckets ) return mData.length;
64
    if( mBucketOffsets[bucket]==0 )
65
      {
66
      if( bucket>=mNumBuckets ) mBucketOffsets[bucket] = mData.length;
67
      else
68
        {
69
        int ret = 0;
70
        int start = HEADER_SIZE + bucket*mBucketBytes;
64 71

  
65
    int ret = 0;
66
    int start = HEADER_SIZE + bucket*mBucketBytes;
72
        for(int i=0; i<mBucketBytes; i++)
73
          {
74
          ret<<=8;
75
          ret += ( ((int)(mData[start+i]))&0xff);
76
          }
67 77

  
68
    for(int i=0; i<mBucketBytes; i++)
69
      {
70
      ret<<=8;
71
      ret += ( ((int)(mData[start+i]))&0xff);
78
        mBucketOffsets[bucket] = HEADER_SIZE+mNumBuckets*mBucketBytes+ret;
79
        }
72 80
      }
73 81

  
74
    return HEADER_SIZE+mNumBuckets*mBucketBytes+ret;
82
    return mBucketOffsets[bucket];
75 83
    }
76 84

  
77 85
///////////////////////////////////////////////////////////////////////////////////////////////////
......
235 243
    mNumBuckets = (size+entrySize-1)/entrySize;
236 244
    int[] bucket = new int[mNumBuckets];
237 245

  
246
    mBucketOffsets = new int[mNumBuckets+1];
247

  
238 248
    for(int i=0; i<size; i++)
239 249
      if( table.retrieveUnpacked(i)==level )
240 250
        {
......
309 319
    mBucketBytes =  ((int)mData[1])&0xff;
310 320
    mNumBits     =  ((int)mData[2])&0xff;
311 321
    mNumBuckets  =((((int)mData[3])&0xff)<<16) + ((((int)mData[4])&0xff)<<8) + (((int)mData[5])&0xff);
322

  
323
    mBucketOffsets = new int[mNumBuckets+1];
312 324
    }
313 325

  
314 326
///////////////////////////////////////////////////////////////////////////////////////////////////
......
343 355

  
344 356
    int lower = 0;
345 357
    int upper = numEntriesInBucket-1;
358
    int rem = (bucket<<mNumBits);
346 359

  
347 360
    while( upper>=lower )
348 361
      {
349 362
      int mid = (lower+upper)/2;
350
      int value = retrieveData(offset1,mid);
351

  
352
      value += (bucket<<mNumBits);
363
      int value = retrieveData(offset1,mid) + rem;
353 364
      if( value==number ) return true;
354

  
355 365
      if( value>number ) upper = mid-1;
356 366
      else               lower = mid+1;
357 367
      }
src/main/java/org/distorted/objectlib/tablebases/TablebasesAbstract.java
341 341

  
342 342
          for(int cubit=0; cubit<mNumCubits; cubit++)
343 343
            if( (mRotRow[cubit][ax] & bitLayer) != 0 )
344
              {
345
              int currQuat = tmpQuats[cubit];
346
              int newQuat = getMultQuat(quat,currQuat);
347
              tmpQuats[cubit] = newQuat;
348
              }
344
              tmpQuats[cubit] = getMultQuat(quat,tmpQuats[cubit]);
349 345

  
350 346
          int childIndex = getIndex(tmpQuats);
351 347
          if( mTablebase.insertUnpacked(childIndex,newLevel) ) ret++;

Also available in: Unified diff