22#ifndef TESSERACT_CLASSIFY_SHAPETABLE_H_
23#define TESSERACT_CLASSIFY_SHAPETABLE_H_
45 "Unichar-id=%d, rating=%g, adapted=%d, config=%d, misses=%u,"
164 return destination_index_;
167 destination_index_ = index;
170 return unichars_.size();
175 return unichars_[index];
179 unichars_[index].unichar_id = unichar_id;
183 void AddToShape(
int unichar_id,
int font_id);
185 void AddShape(
const Shape &other);
187 bool ContainsUnicharAndFont(
int unichar_id,
int font_id)
const;
189 bool ContainsUnichar(
int unichar_id)
const;
191 bool ContainsFont(
int font_id)
const;
194 bool ContainsFontProperties(
const FontInfoTable &font_table, uint32_t properties)
const;
197 bool ContainsMultipleFontProperties(
const FontInfoTable &font_table)
const;
202 bool IsSubsetOf(
const Shape &other)
const;
206 bool IsEqualUnichars(
Shape *other);
214 bool unichars_sorted_ =
false;
217 int destination_index_ = 0;
220 std::vector<UnicharAndFonts> unichars_;
237 for (
auto data : shape_table_) {
249 return shape_table_.size();
256 int NumFonts()
const;
260 unicharset_ = &unicharset;
264 void ReMapClassIds(
const std::vector<int> &unicharset_map);
266 std::string DebugStr(
unsigned shape_id)
const;
268 std::string SummaryStr()
const;
272 unsigned AddShape(
int unichar_id,
int font_id);
275 unsigned AddShape(
const Shape &other);
277 void DeleteShape(
unsigned shape_id);
280 void AddToShape(
unsigned shape_id,
int unichar_id,
int font_id);
282 void AddShapeToShape(
unsigned shape_id,
const Shape &other);
287 int FindShape(
int unichar_id,
int font_id)
const;
289 void GetFirstUnicharAndFont(
unsigned shape_id,
int *unichar_id,
int *font_id)
const;
293 return *shape_table_[shape_id];
296 return shape_table_[shape_id];
301 int BuildFromShape(
const Shape &shape,
const ShapeTable &master_shapes);
304 bool AlreadyMerged(
unsigned shape_id1,
unsigned shape_id2)
const;
306 bool AnyMultipleUnichars()
const;
308 int MaxNumUnichars()
const;
311 void ForceFontMerges(
unsigned start,
unsigned end);
313 unsigned MasterUnicharCount(
unsigned shape_id)
const;
315 int MasterFontCount(
unsigned shape_id)
const;
317 int MergedUnicharCount(
unsigned shape_id1,
unsigned shape_id2)
const;
319 void MergeShapes(
unsigned shape_id1,
unsigned shape_id2);
321 void SwapShapes(
unsigned shape_id1,
unsigned shape_id2);
327 void AppendMasterShapes(
const ShapeTable &other, std::vector<int> *shape_map);
329 int NumMasterShapes()
const;
333 unsigned MasterDestinationIndex(
unsigned shape_id)
const;
336 bool SubsetUnichar(
unsigned shape_id1,
unsigned shape_id2)
const;
338 bool MergeSubsetUnichar(
int merge_id1,
int merge_id2,
unsigned shape_id)
const;
340 bool EqualUnichars(
unsigned shape_id1,
unsigned shape_id2)
const;
341 bool MergeEqualUnichars(
int merge_id1,
int merge_id2,
unsigned shape_id)
const;
343 bool CommonUnichars(
unsigned shape_id1,
unsigned shape_id2)
const;
345 bool CommonFont(
unsigned shape_id1,
unsigned shape_id2)
const;
354 void AddShapeToResults(
const ShapeRating &shape_rating, std::vector<int> *unichar_map,
355 std::vector<UnicharRating> *results)
const;
360 int AddUnicharToResults(
int unichar_id,
float rating, std::vector<int> *unichar_map,
361 std::vector<UnicharRating> *results)
const;
366 std::vector<Shape *> shape_table_;
369 mutable int num_fonts_;
void tprintf(const char *format,...)
bool DeSerialize(bool swap, FILE *fp, std::vector< T > &data)
bool Serialize(FILE *fp, const std::vector< T > &data)
bool operator==(faketype, faketype)
std::vector< ScoredFont > fonts
UnicharRating(int u, float r)
static int FirstResultWithUnichar(const std::vector< UnicharRating > &results, UNICHAR_ID unichar_id)
ShapeRating(int s, float r)
static int FirstResultWithUnichar(const std::vector< ShapeRating > &results, const ShapeTable &shape_table, UNICHAR_ID unichar_id)
ShapeQueueEntry(const ShapeRating &rating, int level0)
bool operator<(const ShapeQueueEntry &other) const
static bool StdSortByUnicharId(const UnicharAndFonts &v1, const UnicharAndFonts &v2)
std::vector< int32_t > font_ids
static int SortByUnicharId(const void *v1, const void *v2)
UnicharAndFonts(int uni_id, int font_id)
bool DeSerialize(TFile *fp)
bool Serialize(FILE *fp) const
const UnicharAndFonts & operator[](int index) const
int destination_index() const
void set_destination_index(int index)
void SetUnicharId(int index, int unichar_id)
Shape * MutableShape(unsigned shape_id)
unsigned NumShapes() const
const Shape & GetShape(unsigned shape_id) const
void set_unicharset(const UNICHARSET &unicharset)
const UNICHARSET & unicharset() const