Project

General

Profile

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

distorted-objectlib / src / main / java / org / distorted / objectlib / tablebases / TablebasesMITM.java @ 15d1f6ad

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
    }
64

    
65
///////////////////////////////////////////////////////////////////////////////////////////////////
66

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

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

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

    
79
///////////////////////////////////////////////////////////////////////////////////////////////////
80

    
81
  public byte[][] getPacked()
82
    {
83
    int[] levels = getPruningLevels();
84
    int numLevels = levels.length;
85
    int maxLevel = 0;
86

    
87
    for( int l : levels )
88
      if( l>maxLevel ) maxLevel = l;
89

    
90
    createTablebase(maxLevel);
91

    
92
    byte[][] data = new byte[numLevels][];
93

    
94
    for(int i=0; i<numLevels; i++)
95
      {
96
      PruningTable table = new PruningTable(mTablebase,levels[i]);
97
      data[i] = table.getPacked();
98
      }
99

    
100
    return data;
101
    }
102

    
103
///////////////////////////////////////////////////////////////////////////////////////////////////
104

    
105
  public int[][] solution(int index, int[] extra)
106
    {
107
    return null;
108
    }
109
}
(9-9/12)