Project

General

Profile

Download (3.61 KB) Statistics
| Branch: | Revision:

distorted-objectlib / src / main / java / org / distorted / objectlib / tablebases / TablebasesMITM.java @ 7363eaa6

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2023 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8
///////////////////////////////////////////////////////////////////////////////////////////////////
9

    
10
package org.distorted.objectlib.tablebases;
11

    
12
import android.content.res.Resources;
13

    
14
import java.io.ByteArrayOutputStream;
15
import java.io.IOException;
16
import java.io.InputStream;
17

    
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19

    
20
public abstract class TablebasesMITM extends TablebasesAbstract
21
{
22
  private PruningTable[] mTables;
23
  private boolean mInitialized;
24
  private int[] mLevels;
25

    
26
///////////////////////////////////////////////////////////////////////////////////////////////////
27

    
28
  abstract int[] getPruningLevels();
29

    
30
///////////////////////////////////////////////////////////////////////////////////////////////////
31

    
32
  private void createPruningTable(Resources res, int id, int index)
33
    {
34
    InputStream stream = res.openRawResource(id);
35
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
36

    
37
    int nRead;
38
    byte[] tmp = new byte[16384];
39

    
40
    try
41
      {
42
      while ((nRead = stream.read(tmp, 0, tmp.length)) != -1)
43
        {
44
        buffer.write(tmp, 0, nRead);
45
        }
46
      stream.close();
47
      byte[] data = buffer.toByteArray();
48
      buffer.close();
49
      mTables[index] = new PruningTable(data);
50
      mLevels[index] = mTables[index].getLevel();
51
      }
52
    catch(IOException ex)
53
      {
54
      mInitialized = false;
55
      }
56
    }
57

    
58
///////////////////////////////////////////////////////////////////////////////////////////////////
59

    
60
  public TablebasesMITM()
61
    {
62
    super();
63
    mInitialized = false;
64
    }
65

    
66
///////////////////////////////////////////////////////////////////////////////////////////////////
67

    
68
  public TablebasesMITM(Resources res, int[] resourceIDs)
69
    {
70
    super();
71

    
72
    int numOfIDs = resourceIDs.length;
73
    mTables = new PruningTable[numOfIDs];
74
    mLevels = new int[numOfIDs];
75
    mInitialized = true;
76

    
77
    for(int i=0; i<numOfIDs; i++) createPruningTable(res,resourceIDs[i],i);
78
    }
79

    
80
///////////////////////////////////////////////////////////////////////////////////////////////////
81

    
82
  public byte[][] getPacked()
83
    {
84
    if( !mInitialized )
85
      {
86
      int[] levels = getPruningLevels();
87
      int numLevels= levels.length;
88
      int maxLevel = 0;
89

    
90
      for( int l : levels )
91
        if( l>maxLevel ) maxLevel = l;
92

    
93
      createTablebase(maxLevel);
94
      mTables = new PruningTable[numLevels];
95
      mLevels = new int[numLevels];
96

    
97
      for(int i=0; i<numLevels; i++)
98
        {
99
        mTables[i] = new PruningTable(mTablebase,levels[i]);
100
        mLevels[i] = mTables[i].getLevel();
101
        }
102

    
103
      mInitialized = true;
104
      }
105

    
106
    int num = mTables.length;
107
    byte[][] data = new byte[num][];
108
    for(int i=0; i<num; i++) data[i] = mTables[i].getPacked();
109

    
110
    return data;
111
    }
112

    
113
///////////////////////////////////////////////////////////////////////////////////////////////////
114

    
115
  public int[][] solution(int index, int[] extra)
116
    {
117
    return null;
118
    }
119
}
(9-9/12)