7 #include <boost/filesystem.hpp>
9 # include <boost/filesystem/fstream.hpp>
11 #include <boost/static_assert.hpp>
29 template class PiecePairEvalTableBase<PiecePairRawTable>;
30 template class PiecePairEval<PiecePairRawEval,PiecePairRawTable>;
48 std::ofstream os(filename);
50 for(
int i=0;i<82;i++){
51 Square pos0=SquareCompressor::melt(i);
52 for(
int j=0;j<82;j++){
53 Square pos1=SquareCompressor::melt(j);
56 int index0=PiecePairIndex::indexOf(pos0,static_cast<PtypeO>(k+
PTYPEO_MIN));
57 int index1=PiecePairIndex::indexOf(pos1,static_cast<PtypeO>(l+
PTYPEO_MIN));
58 int index=PiecePairIndex::indexOf(index0,index1);
60 buffer[(i*32+k)*82*32+(j*32+l)]=values[index];
65 os.write(reinterpret_cast<const char*>(&*buffer.begin()),buffer.size());
73 std::cerr <<
"PiecePairRawTable loading... " << filename <<
"\n";
76 namespace bf = boost::filesystem;
77 bf::path filename_path(filename);
78 bf::ifstream is(filename_path, std::ios_base::in | std::ios_base::binary);
80 is.exceptions(std::ios_base::badbit | std::ios_base::failbit);
83 is.rdbuf()->pubsetbuf(reinterpret_cast<char*>(&*temp_buffer.begin()), temp_buffer.size());
85 std::ifstream is(filename);
88 is.read(reinterpret_cast<char*>(&*buffer.begin()), buffer.size());
89 for(
int i=0;i<82;i++){
90 Square pos0=SquareCompressor::melt(i);
91 for(
int j=0;j<82;j++){
92 Square pos1=SquareCompressor::melt(j);
95 int index0=PiecePairIndex::indexOf(pos0,static_cast<PtypeO>(k+
PTYPEO_MIN));
96 int index1=PiecePairIndex::indexOf(pos1,static_cast<PtypeO>(l+
PTYPEO_MIN));
97 int index=PiecePairIndex::indexOf(index0,index1);
99 values[index]=buffer[(i*32+k)*82*32+(j*32+l)];
110 std::cerr <<
"done.\n";
118 static std::string filename_memory;
119 if (! filename_memory.empty())
121 if (filename_memory != filename)
123 std::cerr <<
"PiecePairRawTable: don't load " << filename
124 <<
", since " << filename_memory
125 <<
" already loaded \n";
130 filename_memory = filename;
131 return loadFromBinaryFile(filename);