All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
adaptive.cpp File Reference
#include "adaptive.h"
#include "emalloc.h"
#include "freelist.h"
#include "globals.h"
#include "classify.h"
#include <stdio.h>

Go to the source code of this file.

Namespaces

 tesseract
 

Functions

void AddAdaptedClass (ADAPT_TEMPLATES Templates, ADAPT_CLASS Class, CLASS_ID ClassId)
 
void FreeTempConfig (TEMP_CONFIG Config)
 
void FreeTempProto (void *arg)
 
void FreePermConfig (PERM_CONFIG Config)
 
ADAPT_CLASS NewAdaptedClass ()
 
void free_adapted_class (ADAPT_CLASS adapt_class)
 
void free_adapted_templates (ADAPT_TEMPLATES templates)
 
TEMP_CONFIG NewTempConfig (int MaxProtoId, int FontinfoId)
 
TEMP_PROTO NewTempProto ()
 
ADAPT_CLASS ReadAdaptedClass (FILE *File)
 
PERM_CONFIG ReadPermConfig (FILE *File)
 
TEMP_CONFIG ReadTempConfig (FILE *File)
 
void WriteAdaptedClass (FILE *File, ADAPT_CLASS Class, int NumConfigs)
 
void WritePermConfig (FILE *File, PERM_CONFIG Config)
 
void WriteTempConfig (FILE *File, TEMP_CONFIG Config)
 

Function Documentation

void AddAdaptedClass ( ADAPT_TEMPLATES  Templates,
ADAPT_CLASS  Class,
CLASS_ID  ClassId 
)

This routine adds a new adapted class to an existing set of adapted templates.

Parameters
Templatesset of templates to add new class to
Classnew class to add to templates
ClassIdclass id to associate with new class
Note
Globals: none
Exceptions: none
History: Thu Mar 14 13:06:09 1991, DSJ, Created.

Definition at line 49 of file adaptive.cpp.

51  {
52  INT_CLASS IntClass;
53 
54  assert (Templates != NULL);
55  assert (Class != NULL);
56  assert (LegalClassId (ClassId));
57  assert (UnusedClassIdIn (Templates->Templates, ClassId));
58  assert (Class->NumPermConfigs == 0);
59 
60  IntClass = NewIntClass (1, 1);
61  AddIntClass (Templates->Templates, ClassId, IntClass);
62 
63  assert (Templates->Class[ClassId] == NULL);
64  Templates->Class[ClassId] = Class;
65 
66 } /* AddAdaptedClass */
INT_CLASS NewIntClass(int MaxNumProtos, int MaxNumConfigs)
Definition: intproto.cpp:672
ADAPT_CLASS Class[MAX_NUM_CLASSES]
Definition: adaptive.h:81
uinT8 NumPermConfigs
Definition: adaptive.h:65
#define LegalClassId(c)
Definition: intproto.h:179
void AddIntClass(INT_TEMPLATES Templates, CLASS_ID ClassId, INT_CLASS Class)
Definition: intproto.cpp:240
#define UnusedClassIdIn(T, c)
Definition: intproto.h:180
INT_TEMPLATES Templates
Definition: adaptive.h:77
#define NULL
Definition: host.h:144
void free_adapted_class ( ADAPT_CLASS  adapt_class)

Definition at line 136 of file adaptive.cpp.

136  {
137  int i;
138 
139  for (i = 0; i < MAX_NUM_CONFIGS; i++) {
140  if (ConfigIsPermanent (adapt_class, i)
141  && PermConfigFor (adapt_class, i) != NULL)
142  FreePermConfig (PermConfigFor (adapt_class, i));
143  else if (!ConfigIsPermanent (adapt_class, i)
144  && TempConfigFor (adapt_class, i) != NULL)
145  FreeTempConfig (TempConfigFor (adapt_class, i));
146  }
147  FreeBitVector (adapt_class->PermProtos);
148  FreeBitVector (adapt_class->PermConfigs);
149  destroy_nodes (adapt_class->TempProtos, FreeTempProto);
150  Efree(adapt_class);
151 }
void FreeBitVector(BIT_VECTOR BitVector)
Definition: bitvec.cpp:55
#define PermConfigFor(Class, ConfigId)
Definition: adaptive.h:105
BIT_VECTOR PermConfigs
Definition: adaptive.h:69
#define MAX_NUM_CONFIGS
Definition: intproto.h:46
#define ConfigIsPermanent(Class, ConfigId)
Definition: adaptive.h:93
#define TempConfigFor(Class, ConfigId)
Definition: adaptive.h:102
void FreePermConfig(PERM_CONFIG Config)
Definition: adaptive.cpp:96
void destroy_nodes(LIST list, void_dest destructor)
Definition: oldlist.cpp:204
void Efree(void *ptr)
Definition: emalloc.cpp:79
void FreeTempProto(void *arg)
Definition: adaptive.cpp:90
#define NULL
Definition: host.h:144
BIT_VECTOR PermProtos
Definition: adaptive.h:68
void FreeTempConfig(TEMP_CONFIG Config)
Definition: adaptive.cpp:80
void free_adapted_templates ( ADAPT_TEMPLATES  templates)

Definition at line 199 of file adaptive.cpp.

199  {
200 
201  if (templates != NULL) {
202  int i;
203  for (i = 0; i < (templates->Templates)->NumClasses; i++)
204  free_adapted_class (templates->Class[i]);
205  free_int_templates (templates->Templates);
206  Efree(templates);
207  }
208 }
void free_adapted_class(ADAPT_CLASS adapt_class)
Definition: adaptive.cpp:136
ADAPT_CLASS Class[MAX_NUM_CLASSES]
Definition: adaptive.h:81
INT_TEMPLATES Templates
Definition: adaptive.h:77
void free_int_templates(INT_TEMPLATES templates)
Definition: intproto.cpp:748
void Efree(void *ptr)
Definition: emalloc.cpp:79
#define NULL
Definition: host.h:144
void FreePermConfig ( PERM_CONFIG  Config)

Definition at line 96 of file adaptive.cpp.

96  {
97  assert(Config != NULL);
98  delete [] Config->Ambigs;
99  free_struct(Config, sizeof(PERM_CONFIG_STRUCT), "PERM_CONFIG_STRUCT");
100 }
UNICHAR_ID * Ambigs
Definition: adaptive.h:52
#define NULL
Definition: host.h:144
void free_struct(void *deadstruct, inT32, const char *)
Definition: memry.cpp:43
void FreeTempConfig ( TEMP_CONFIG  Config)

This routine frees all memory consumed by a temporary configuration.

Parameters
Configconfig to be freed
Note
Globals: none
Exceptions: none
History: Thu Mar 14 13:34:23 1991, DSJ, Created.

Definition at line 80 of file adaptive.cpp.

80  {
81  assert (Config != NULL);
82 
84  FreeBitVector (Config->Protos);
85  free_struct (Config, sizeof (TEMP_CONFIG_STRUCT), "TEMP_CONFIG_STRUCT");
86 
87 } /* FreeTempConfig */
void memfree(void *element)
Definition: freelist.cpp:30
void FreeBitVector(BIT_VECTOR BitVector)
Definition: bitvec.cpp:55
void destroy_nodes(LIST list, void_dest destructor)
Definition: oldlist.cpp:204
#define NULL
Definition: host.h:144
BIT_VECTOR Protos
Definition: adaptive.h:45
void free_struct(void *deadstruct, inT32, const char *)
Definition: memry.cpp:43
void FreeTempProto ( void *  arg)

Definition at line 90 of file adaptive.cpp.

90  {
91  PROTO proto = (PROTO) arg;
92 
93  free_struct (proto, sizeof (TEMP_PROTO_STRUCT), "TEMP_PROTO_STRUCT");
94 }
PROTO_STRUCT * PROTO
Definition: protos.h:52
void free_struct(void *deadstruct, inT32, const char *)
Definition: memry.cpp:43
ADAPT_CLASS NewAdaptedClass ( )

This operation allocates and initializes a new adapted class data structure and returns a ptr to it.

Returns
Ptr to new class data structure.
Note
Globals: none
Exceptions: none
History: Thu Mar 14 12:58:13 1991, DSJ, Created.

Definition at line 113 of file adaptive.cpp.

113  {
114  ADAPT_CLASS Class;
115  int i;
116 
117  Class = (ADAPT_CLASS) Emalloc (sizeof (ADAPT_CLASS_STRUCT));
118  Class->NumPermConfigs = 0;
119  Class->MaxNumTimesSeen = 0;
120  Class->TempProtos = NIL_LIST;
121 
126 
127  for (i = 0; i < MAX_NUM_CONFIGS; i++)
128  TempConfigFor (Class, i) = NULL;
129 
130  return (Class);
131 
132 } /* NewAdaptedClass */
#define zero_all_bits(array, length)
Definition: bitvec.h:33
#define WordsInVectorOfSize(NumBits)
Definition: bitvec.h:63
#define NIL_LIST
Definition: oldlist.h:126
BIT_VECTOR PermConfigs
Definition: adaptive.h:69
#define MAX_NUM_CONFIGS
Definition: intproto.h:46
BIT_VECTOR NewBitVector(int NumBits)
Definition: bitvec.cpp:90
uinT8 NumPermConfigs
Definition: adaptive.h:65
ADAPT_CLASS_STRUCT * ADAPT_CLASS
Definition: adaptive.h:73
uinT8 MaxNumTimesSeen
Definition: adaptive.h:66
#define TempConfigFor(Class, ConfigId)
Definition: adaptive.h:102
void * Emalloc(int Size)
Definition: emalloc.cpp:47
#define NULL
Definition: host.h:144
#define MAX_NUM_PROTOS
Definition: intproto.h:47
BIT_VECTOR PermProtos
Definition: adaptive.h:68
TEMP_CONFIG NewTempConfig ( int  MaxProtoId,
int  FontinfoId 
)

This routine allocates and returns a new temporary config.

Parameters
MaxProtoIdmax id of any proto in new config
FontinfoIdfont information from pre-trained templates
Returns
Ptr to new temp config.
Note
Globals: none
Exceptions: none
History: Thu Mar 14 13:28:21 1991, DSJ, Created.

Definition at line 223 of file adaptive.cpp.

223  {
225  int NumProtos = MaxProtoId + 1;
226 
227  Config =
229  "TEMP_CONFIG_STRUCT");
230  Config->Protos = NewBitVector (NumProtos);
231 
232  Config->NumTimesSeen = 1;
233  Config->MaxProtoId = MaxProtoId;
234  Config->ProtoVectorSize = WordsInVectorOfSize (NumProtos);
235  Config->ContextsSeen = NIL_LIST;
236  zero_all_bits (Config->Protos, Config->ProtoVectorSize);
237  Config->FontinfoId = FontinfoId;
238 
239  return (Config);
240 
241 } /* NewTempConfig */
#define zero_all_bits(array, length)
Definition: bitvec.h:33
#define WordsInVectorOfSize(NumBits)
Definition: bitvec.h:63
#define NIL_LIST
Definition: oldlist.h:126
BIT_VECTOR NewBitVector(int NumBits)
Definition: bitvec.cpp:90
uinT8 ProtoVectorSize
Definition: adaptive.h:42
uinT8 NumTimesSeen
Definition: adaptive.h:41
CLUSTERCONFIG Config
void * alloc_struct(inT32 count, const char *)
Definition: memry.cpp:39
PROTO_ID MaxProtoId
Definition: adaptive.h:43
BIT_VECTOR Protos
Definition: adaptive.h:45
TEMP_CONFIG_STRUCT * TEMP_CONFIG
Definition: adaptive.h:48
TEMP_PROTO NewTempProto ( )

This routine allocates and returns a new temporary proto.

Returns
Ptr to new temporary proto.
Note
Globals: none
Exceptions: none
History: Thu Mar 14 13:31:31 1991, DSJ, Created.

Definition at line 254 of file adaptive.cpp.

254  {
255  return ((TEMP_PROTO)
256  alloc_struct (sizeof (TEMP_PROTO_STRUCT), "TEMP_PROTO_STRUCT"));
257 } /* NewTempProto */
void * alloc_struct(inT32 count, const char *)
Definition: memry.cpp:39
ADAPT_CLASS ReadAdaptedClass ( FILE *  File)

Read an adapted class description from File and return a ptr to the adapted class.

Parameters
Fileopen file to read adapted class from
Returns
Ptr to new adapted class.
Note
Globals: none
Exceptions: none
History: Tue Mar 19 14:11:01 1991, DSJ, Created.

Definition at line 313 of file adaptive.cpp.

313  {
314  int NumTempProtos;
315  int NumConfigs;
316  int i;
317  ADAPT_CLASS Class;
318  TEMP_PROTO TempProto;
319 
320  /* first read high level adapted class structure */
321  Class = (ADAPT_CLASS) Emalloc (sizeof (ADAPT_CLASS_STRUCT));
322  fread ((char *) Class, sizeof (ADAPT_CLASS_STRUCT), 1, File);
323 
324  /* then read in the definitions of the permanent protos and configs */
327  fread ((char *) Class->PermProtos, sizeof (uinT32),
329  fread ((char *) Class->PermConfigs, sizeof (uinT32),
331 
332  /* then read in the list of temporary protos */
333  fread ((char *) &NumTempProtos, sizeof (int), 1, File);
334  Class->TempProtos = NIL_LIST;
335  for (i = 0; i < NumTempProtos; i++) {
336  TempProto =
338  "TEMP_PROTO_STRUCT");
339  fread ((char *) TempProto, sizeof (TEMP_PROTO_STRUCT), 1, File);
340  Class->TempProtos = push_last (Class->TempProtos, TempProto);
341  }
342 
343  /* then read in the adapted configs */
344  fread ((char *) &NumConfigs, sizeof (int), 1, File);
345  for (i = 0; i < NumConfigs; i++)
346  if (test_bit (Class->PermConfigs, i))
347  Class->Config[i].Perm = ReadPermConfig (File);
348  else
349  Class->Config[i].Temp = ReadTempConfig (File);
350 
351  return (Class);
352 
353 } /* ReadAdaptedClass */
#define WordsInVectorOfSize(NumBits)
Definition: bitvec.h:63
TEMP_CONFIG Temp
Definition: adaptive.h:59
#define NIL_LIST
Definition: oldlist.h:126
BIT_VECTOR PermConfigs
Definition: adaptive.h:69
#define MAX_NUM_CONFIGS
Definition: intproto.h:46
TEMP_CONFIG ReadTempConfig(FILE *File)
Definition: adaptive.cpp:429
BIT_VECTOR NewBitVector(int NumBits)
Definition: bitvec.cpp:90
#define test_bit(array, bit)
Definition: bitvec.h:61
ADAPTED_CONFIG Config[MAX_NUM_CONFIGS]
Definition: adaptive.h:71
ADAPT_CLASS_STRUCT * ADAPT_CLASS
Definition: adaptive.h:73
unsigned int uinT32
Definition: host.h:103
PERM_CONFIG ReadPermConfig(FILE *File)
Definition: adaptive.cpp:402
TEMP_PROTO_STRUCT * TEMP_PROTO
Definition: adaptive.h:37
LIST push_last(LIST list, void *item)
Definition: oldlist.cpp:338
void * Emalloc(int Size)
Definition: emalloc.cpp:47
void * alloc_struct(inT32 count, const char *)
Definition: memry.cpp:39
PERM_CONFIG Perm
Definition: adaptive.h:60
#define MAX_NUM_PROTOS
Definition: intproto.h:47
BIT_VECTOR PermProtos
Definition: adaptive.h:68
PERM_CONFIG ReadPermConfig ( FILE *  File)

Read a permanent configuration description from File and return a ptr to it.

Parameters
Fileopen file to read permanent config from
Returns
Ptr to new permanent configuration description.
Note
Globals: none
Exceptions: none
History: Tue Mar 19 14:25:26 1991, DSJ, Created.

Definition at line 402 of file adaptive.cpp.

402  {
404  "PERM_CONFIG_STRUCT");
405  uinT8 NumAmbigs;
406  fread ((char *) &NumAmbigs, sizeof(uinT8), 1, File);
407  Config->Ambigs = new UNICHAR_ID[NumAmbigs + 1];
408  fread(Config->Ambigs, sizeof(UNICHAR_ID), NumAmbigs, File);
409  Config->Ambigs[NumAmbigs] = -1;
410  fread(&(Config->FontinfoId), sizeof(int), 1, File);
411 
412  return (Config);
413 
414 } /* ReadPermConfig */
PERM_CONFIG_STRUCT * PERM_CONFIG
Definition: adaptive.h:55
int UNICHAR_ID
Definition: unichar.h:33
CLUSTERCONFIG Config
void * alloc_struct(inT32 count, const char *)
Definition: memry.cpp:39
UNICHAR_ID * Ambigs
Definition: adaptive.h:52
unsigned char uinT8
Definition: host.h:99
TEMP_CONFIG ReadTempConfig ( FILE *  File)

Read a temporary configuration description from File and return a ptr to it.

Parameters
Fileopen file to read temporary config from
Returns
Ptr to new temporary configuration description.
Note
Globals: none
Exceptions: none
History: Tue Mar 19 14:29:59 1991, DSJ, Created.

Definition at line 429 of file adaptive.cpp.

429  {
431 
432  Config =
434  "TEMP_CONFIG_STRUCT");
435  fread ((char *) Config, sizeof (TEMP_CONFIG_STRUCT), 1, File);
436 
437  Config->Protos = NewBitVector (Config->ProtoVectorSize * BITSINLONG);
438  fread ((char *) Config->Protos, sizeof (uinT32),
439  Config->ProtoVectorSize, File);
440 
441  return (Config);
442 
443 } /* ReadTempConfig */
#define BITSINLONG
Definition: bitvec.h:27
BIT_VECTOR NewBitVector(int NumBits)
Definition: bitvec.cpp:90
uinT8 ProtoVectorSize
Definition: adaptive.h:42
unsigned int uinT32
Definition: host.h:103
CLUSTERCONFIG Config
void * alloc_struct(inT32 count, const char *)
Definition: memry.cpp:39
BIT_VECTOR Protos
Definition: adaptive.h:45
TEMP_CONFIG_STRUCT * TEMP_CONFIG
Definition: adaptive.h:48
void WriteAdaptedClass ( FILE *  File,
ADAPT_CLASS  Class,
int  NumConfigs 
)

This routine writes a binary representation of Class to File.

Parameters
Fileopen file to write Class to
Classadapted class to write to File
NumConfigsnumber of configs in Class
Note
Globals: none
Exceptions: none
History: Tue Mar 19 13:33:51 1991, DSJ, Created.

Definition at line 459 of file adaptive.cpp.

459  {
460  int NumTempProtos;
461  LIST TempProtos;
462  int i;
463 
464  /* first write high level adapted class structure */
465  fwrite ((char *) Class, sizeof (ADAPT_CLASS_STRUCT), 1, File);
466 
467  /* then write out the definitions of the permanent protos and configs */
468  fwrite ((char *) Class->PermProtos, sizeof (uinT32),
470  fwrite ((char *) Class->PermConfigs, sizeof (uinT32),
472 
473  /* then write out the list of temporary protos */
474  NumTempProtos = count (Class->TempProtos);
475  fwrite ((char *) &NumTempProtos, sizeof (int), 1, File);
476  TempProtos = Class->TempProtos;
477  iterate (TempProtos) {
478  void* proto = first_node(TempProtos);
479  fwrite ((char *) proto, sizeof (TEMP_PROTO_STRUCT), 1, File);
480  }
481 
482  /* then write out the adapted configs */
483  fwrite ((char *) &NumConfigs, sizeof (int), 1, File);
484  for (i = 0; i < NumConfigs; i++)
485  if (test_bit (Class->PermConfigs, i))
486  WritePermConfig (File, Class->Config[i].Perm);
487  else
488  WriteTempConfig (File, Class->Config[i].Temp);
489 
490 } /* WriteAdaptedClass */
#define WordsInVectorOfSize(NumBits)
Definition: bitvec.h:63
TEMP_CONFIG Temp
Definition: adaptive.h:59
BIT_VECTOR PermConfigs
Definition: adaptive.h:69
#define MAX_NUM_CONFIGS
Definition: intproto.h:46
#define test_bit(array, bit)
Definition: bitvec.h:61
void WritePermConfig(FILE *File, PERM_CONFIG Config)
Definition: adaptive.cpp:535
ADAPTED_CONFIG Config[MAX_NUM_CONFIGS]
Definition: adaptive.h:71
unsigned int uinT32
Definition: host.h:103
void WriteTempConfig(FILE *File, TEMP_CONFIG Config)
Definition: adaptive.cpp:559
#define first_node(l)
Definition: oldlist.h:139
#define iterate(l)
Definition: oldlist.h:159
int count(LIST var_list)
Definition: oldlist.cpp:108
PERM_CONFIG Perm
Definition: adaptive.h:60
#define MAX_NUM_PROTOS
Definition: intproto.h:47
BIT_VECTOR PermProtos
Definition: adaptive.h:68
void WritePermConfig ( FILE *  File,
PERM_CONFIG  Config 
)

This routine writes a binary representation of a permanent configuration to File.

Parameters
Fileopen file to write Config to
Configpermanent config to write to File
Note
Globals: none
Exceptions: none
History: Tue Mar 19 13:55:44 1991, DSJ, Created.

Definition at line 535 of file adaptive.cpp.

535  {
536  uinT8 NumAmbigs = 0;
537 
538  assert (Config != NULL);
539  while (Config->Ambigs[NumAmbigs] > 0) ++NumAmbigs;
540 
541  fwrite((char *) &NumAmbigs, sizeof(uinT8), 1, File);
542  fwrite(Config->Ambigs, sizeof(UNICHAR_ID), NumAmbigs, File);
543  fwrite(&(Config->FontinfoId), sizeof(int), 1, File);
544 } /* WritePermConfig */
int UNICHAR_ID
Definition: unichar.h:33
UNICHAR_ID * Ambigs
Definition: adaptive.h:52
#define NULL
Definition: host.h:144
unsigned char uinT8
Definition: host.h:99
void WriteTempConfig ( FILE *  File,
TEMP_CONFIG  Config 
)

This routine writes a binary representation of a temporary configuration to File.

Parameters
Fileopen file to write Config to
Configtemporary config to write to File
Note
Globals: none
Exceptions: none
History: Tue Mar 19 14:00:28 1991, DSJ, Created.

Definition at line 559 of file adaptive.cpp.

559  {
560  assert (Config != NULL);
561  /* contexts not yet implemented */
562  assert (Config->ContextsSeen == NULL);
563 
564  fwrite ((char *) Config, sizeof (TEMP_CONFIG_STRUCT), 1, File);
565  fwrite ((char *) Config->Protos, sizeof (uinT32),
566  Config->ProtoVectorSize, File);
567 
568 } /* WriteTempConfig */
uinT8 ProtoVectorSize
Definition: adaptive.h:42
unsigned int uinT32
Definition: host.h:103
#define NULL
Definition: host.h:144
BIT_VECTOR Protos
Definition: adaptive.h:45