tesseract  4.1.1
protos.cpp File Reference
#include "protos.h"
#include <cmath>
#include <cstdio>
#include "emalloc.h"
#include "callcpp.h"
#include "tprintf.h"
#include "classify.h"
#include "params.h"
#include "intproto.h"

Go to the source code of this file.

Macros

#define _USE_MATH_DEFINES
 
#define PROTO_INCREMENT   32
 
#define CONFIG_INCREMENT   16
 

Functions

AddConfigToClass

Add a new config to this class. Malloc new space and copy the old configs if necessary. Return the config id for the new config.

Parameters
ClassThe class to add to
int AddConfigToClass (CLASS_TYPE Class)
 
AddProtoToClass

Add a new proto to this class. Malloc new space and copy the old protos if necessary. Return the proto id for the new proto.

Parameters
ClassThe class to add to
int AddProtoToClass (CLASS_TYPE Class)
 
void FillABC (PROTO Proto)
 
void FreeClass (CLASS_TYPE Class)
 
void FreeClassFields (CLASS_TYPE Class)
 
CLASS_TYPE NewClass (int NumProtos, int NumConfigs)
 

Macro Definition Documentation

◆ _USE_MATH_DEFINES

#define _USE_MATH_DEFINES

Definition at line 22 of file protos.cpp.

◆ CONFIG_INCREMENT

#define CONFIG_INCREMENT   16

Definition at line 34 of file protos.cpp.

◆ PROTO_INCREMENT

#define PROTO_INCREMENT   32

Definition at line 33 of file protos.cpp.

Function Documentation

◆ AddConfigToClass()

int AddConfigToClass ( CLASS_TYPE  Class)

Definition at line 47 of file protos.cpp.

47  {
48  int NewNumConfigs;
49  int NewConfig;
50  int MaxNumProtos;
52 
53  MaxNumProtos = Class->MaxNumProtos;
54  ASSERT_HOST(MaxNumProtos <= MAX_NUM_PROTOS);
55 
56  if (Class->NumConfigs >= Class->MaxNumConfigs) {
57  /* add configs in CONFIG_INCREMENT chunks at a time */
58  NewNumConfigs = (((Class->MaxNumConfigs + CONFIG_INCREMENT) /
60 
61  Class->Configurations =
62  static_cast<CONFIGS>(Erealloc (Class->Configurations,
63  sizeof (BIT_VECTOR) * NewNumConfigs));
64 
65  Class->MaxNumConfigs = NewNumConfigs;
66  }
67  NewConfig = Class->NumConfigs++;
68  Config = NewBitVector(MAX_NUM_PROTOS);
69  Class->Configurations[NewConfig] = Config;
70  zero_all_bits (Config, WordsInVectorOfSize(MAX_NUM_PROTOS));
71 
72  return (NewConfig);
73 }
#define ASSERT_HOST(x)
Definition: errcode.h:88
#define MAX_NUM_PROTOS
Definition: intproto.h:48
#define CONFIG_INCREMENT
Definition: protos.cpp:34
BIT_VECTOR * CONFIGS
Definition: protos.h:34
uint32_t * BIT_VECTOR
Definition: bitvec.h:28
void * Erealloc(void *ptr, int size)
Definition: emalloc.cpp:38
CLUSTERCONFIG Config
int16_t NumConfigs
Definition: protos.h:58
CONFIGS Configurations
Definition: protos.h:60
int16_t MaxNumProtos
Definition: protos.h:56
int16_t MaxNumConfigs
Definition: protos.h:59

◆ AddProtoToClass()

int AddProtoToClass ( CLASS_TYPE  Class)

Definition at line 84 of file protos.cpp.

84  {
85  if (Class->NumProtos >= Class->MaxNumProtos) {
86  /* add protos in PROTO_INCREMENT chunks at a time */
87  int NewNumProtos = (((Class->MaxNumProtos + PROTO_INCREMENT) /
89 
90  Class->Prototypes = static_cast<PROTO>(Erealloc (Class->Prototypes,
91  sizeof (PROTO_STRUCT) *
92  NewNumProtos));
93 
94  Class->MaxNumProtos = NewNumProtos;
95  ASSERT_HOST(NewNumProtos <= MAX_NUM_PROTOS);
96  }
97  int NewProto = Class->NumProtos++;
99  return (NewProto);
100 }
#define PROTO_INCREMENT
Definition: protos.cpp:33
int16_t NumProtos
Definition: protos.h:55
PROTO Prototypes
Definition: protos.h:57

◆ FillABC()

void FillABC ( PROTO  Proto)

Definition at line 108 of file protos.cpp.

108  {
109  float Slope, Intercept, Normalizer;
110 
111  Slope = tan(Proto->Angle * 2.0 * M_PI);
112  Intercept = Proto->Y - Slope * Proto->X;
113  Normalizer = 1.0 / sqrt (Slope * Slope + 1.0);
114  Proto->A = Slope * Normalizer;
115  Proto->B = -Normalizer;
116  Proto->C = Intercept * Normalizer;
117 }
float Angle
Definition: protos.h:42
float Y
Definition: protos.h:41
float B
Definition: protos.h:38
float A
Definition: protos.h:37
float C
Definition: protos.h:39
float X
Definition: protos.h:40

◆ FreeClass()

void FreeClass ( CLASS_TYPE  Class)

Definition at line 125 of file protos.cpp.

125  {
126  if (Class) {
127  FreeClassFields(Class);
128  delete Class;
129  }
130 }
void FreeClassFields(CLASS_TYPE Class)
Definition: protos.cpp:138

◆ FreeClassFields()

void FreeClassFields ( CLASS_TYPE  Class)

Definition at line 138 of file protos.cpp.

138  {
139  int i;
140 
141  if (Class) {
142  if (Class->MaxNumProtos > 0) free(Class->Prototypes);
143  if (Class->MaxNumConfigs > 0) {
144  for (i = 0; i < Class->NumConfigs; i++)
145  FreeBitVector (Class->Configurations[i]);
146  free(Class->Configurations);
147  }
148  }
149 }

◆ NewClass()

CLASS_TYPE NewClass ( int  NumProtos,
int  NumConfigs 
)

Definition at line 157 of file protos.cpp.

157  {
158  CLASS_TYPE Class;
159 
160  Class = new CLASS_STRUCT;
161 
162  if (NumProtos > 0)
163  Class->Prototypes = static_cast<PROTO>(Emalloc (NumProtos * sizeof (PROTO_STRUCT)));
164 
165  if (NumConfigs > 0)
166  Class->Configurations = static_cast<CONFIGS>(Emalloc (NumConfigs *
167  sizeof (BIT_VECTOR)));
168  Class->MaxNumProtos = NumProtos;
169  Class->MaxNumConfigs = NumConfigs;
170  Class->NumProtos = 0;
171  Class->NumConfigs = 0;
172  return (Class);
173 
174 }
void * Emalloc(int Size)
Definition: emalloc.cpp:31