25 #ifndef TESSERACT_CCSTRUCT_MATRIX_H__
26 #define TESSERACT_CCSTRUCT_MATRIX_H__
31 #define NOT_CLASSIFIED reinterpret_cast<BLOB_CHOICE_LIST*>(NULL)
41 : empty_(empty), dim1_(dim1), dim2_(dim2) {
42 array_ =
new T[dim1_ * dim2_];
43 for (
int x = 0; x < dim1_; x++)
44 for (
int y = 0; y < dim2_; y++)
45 this->
put(x, y, empty_);
52 if (!SerializeSize(fp))
return false;
53 if (fwrite(&empty_,
sizeof(empty_), 1, fp) != 1)
return false;
54 int size = dim1_ * dim2_;
55 if (fwrite(array_,
sizeof(*array_), size, fp) != size)
return false;
63 if (!DeSerializeSize(swap, fp))
return false;
64 if (fread(&empty_,
sizeof(empty_), 1, fp) != 1)
return false;
65 if (swap)
ReverseN(&empty_,
sizeof(empty_));
66 int size = dim1_ * dim2_;
67 if (fread(array_,
sizeof(*array_), size, fp) != size)
return false;
69 for (
int i = 0; i < size; ++i)
70 ReverseN(&array_[i],
sizeof(array_[i]));
78 if (!SerializeSize(fp))
return false;
79 if (!empty_.Serialize(fp))
return false;
80 int size = dim1_ * dim2_;
81 for (
int i = 0; i < size; ++i) {
82 if (!array_[i].
Serialize(fp))
return false;
91 if (!DeSerializeSize(swap, fp))
return false;
92 if (!empty_.DeSerialize(swap, fp))
return false;
93 int size = dim1_ * dim2_;
94 for (
int i = 0; i < size; ++i) {
101 int dim1()
const {
return dim1_; }
102 int dim2()
const {
return dim2_; }
107 int index(
int column,
int row)
const {
108 return (column * dim2_ + row);
112 void put(
int column,
int row,
const T& thing) {
113 array_[this->
index(column, row)] = thing;
117 T
get(
int column,
int row)
const {
118 return array_[this->
index(column, row)];
122 return array_[this->
index(column, row)];
125 return array_[this->
index(column, row)];
130 return &array_[this->
index(column, 0)];
135 for (
int x = 0; x < dim1_; x++) {
136 for (
int y = 0; y < dim2_; y++) {
137 T matrix_cell = this->
get(x, y);
138 if (matrix_cell != empty_)
146 bool SerializeSize(FILE* fp)
const {
148 if (fwrite(&size,
sizeof(size), 1, fp) != 1)
return false;
150 if (fwrite(&size,
sizeof(size), 1, fp) != 1)
return false;
155 bool DeSerializeSize(
bool swap, FILE* fp) {
157 if (fread(&size1,
sizeof(size1), 1, fp) != 1)
return false;
158 if (fread(&size2,
sizeof(size2), 1, fp) != 1)
return false;
163 if (size1 != dim1_ || size2 != dim2_) {
167 array_ =
new T[dim1_ * dim2_];
209 return (
col >= 0 &&
row >= 0 &&
216 #endif // TESSERACT_CCSTRUCT_MATRIX_H__