Project

General

Profile

« Previous | Next » 

Revision 00947987

Added by Leszek Koltunski about 1 year ago

New PruningTable data structure for solvers.

View differences:

src/main/java/org/distorted/objectlib/tablebases/PruningTable.java
17 17
  private final byte[] mData;
18 18
  private final int mNumBits;
19 19
  private final int mBucketBytes;
20
  private final int mTotalSize;
21 20
  private final int mNumBuckets;
22 21
  private final int mLevel;
23 22

  
......
58 57

  
59 58
  private int getBucketOffset(int bucket)
60 59
    {
61
    if( bucket>=mNumBuckets ) return mTotalSize;
60
    if( bucket>=mNumBuckets ) return mData.length;
62 61

  
63 62
    int ret = 0;
64 63
    int start = HEADER_SIZE + bucket*mBucketBytes;
......
178 177
///////////////////////////////////////////////////////////////////////////////////////////////////
179 178
// only numBits = 4,8,12,16 actually supported
180 179

  
181
  public PruningTable(Tablebase table, int level, int numBits)
180
  PruningTable(Tablebase table, int level, int numBits)
182 181
    {
183 182
    mNumBits = numBits;
184 183
    mLevel = level;
......
205 204

  
206 205
    mBucketBytes = numBytesForIndices(totalBytesForTable);
207 206
    int totalBytesForBuckets = mNumBuckets*mBucketBytes;
208
    mTotalSize = HEADER_SIZE + totalBytesForBuckets + totalBytesForTable;
209
    mData = new byte[mTotalSize];
207
    int totalSize = HEADER_SIZE + totalBytesForBuckets + totalBytesForTable;
208
    mData = new byte[totalSize];
210 209

  
211 210
    writeHeader();
212 211
    writeBucketPointers(bucket);
......
215 214

  
216 215
///////////////////////////////////////////////////////////////////////////////////////////////////
217 216

  
218
  public boolean belongs(int number)
217
  PruningTable(byte[] data)
218
    {
219
    mData = data;
220

  
221
    mLevel       = ((int)mData[0])&0xff;
222
    mBucketBytes = ((int)mData[1])&0xff;
223
    mNumBits     = ((int)mData[2])&0xff;
224
    mNumBuckets  =(((int)mData[3])&0xff)*256 + ((int)mData[4])&0xff;
225
    }
226

  
227
///////////////////////////////////////////////////////////////////////////////////////////////////
228

  
229
  byte[] getPacked()
230
    {
231
    return mData;
232
    }
233

  
234
///////////////////////////////////////////////////////////////////////////////////////////////////
235

  
236
  int getLevel()
237
    {
238
    return mLevel;
239
    }
240

  
241
///////////////////////////////////////////////////////////////////////////////////////////////////
242

  
243
  boolean belongs(int number)
219 244
    {
220 245
    int bucket = (number>>mNumBits);
221 246
    int offset1 = getBucketOffset(bucket);

Also available in: Unified diff