All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
dawg_cache.cpp
Go to the documentation of this file.
1 // File: dawg_cache.h
3 // Description: A class that knows about loading and caching dawgs.
4 // Author: David Eger
5 // Created: Fri Jan 27 12:08:00 PST 2012
6 //
7 // (C) Copyright 2012, Google Inc.
8 // Licensed under the Apache License, Version 2.0 (the "License");
9 // you may not use this file except in compliance with the License.
10 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
12 // Unless required by applicable law or agreed to in writing, software
13 // distributed under the License is distributed on an "AS IS" BASIS,
14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 // See the License for the specific language governing permissions and
16 // limitations under the License.
17 //
19 
20 #include "dawg_cache.h"
21 
22 #include "dawg.h"
23 #include "object_cache.h"
24 #include "strngs.h"
25 #include "tessdatamanager.h"
26 
27 namespace tesseract {
28 
29 struct DawgLoader {
31  const char *data_file_name,
32  TessdataType tessdata_dawg_type,
33  int dawg_debug_level)
34  : lang_(lang),
35  data_file_name_(data_file_name),
36  tessdata_dawg_type_(tessdata_dawg_type),
37  dawg_debug_level_(dawg_debug_level) {}
38 
39  Dawg *Load();
40 
42  const char *data_file_name_;
45 };
46 
48  const STRING &lang,
49  const char *data_file_name,
50  TessdataType tessdata_dawg_type,
51  int debug_level) {
52  STRING data_id = data_file_name;
53  data_id += kTessdataFileSuffixes[tessdata_dawg_type];
54  DawgLoader loader(lang, data_file_name, tessdata_dawg_type, debug_level);
55  return dawgs_.Get(data_id, NewTessCallback(&loader, &DawgLoader::Load));
56 }
57 
59  TessdataManager data_loader;
60  if (!data_loader.Init(data_file_name_, dawg_debug_level_)) {
61  return NULL;
62  }
63  if (!data_loader.SeekToStart(tessdata_dawg_type_)) return NULL;
64  FILE *fp = data_loader.GetDataFilePtr();
65  DawgType dawg_type;
66  PermuterType perm_type;
67  switch (tessdata_dawg_type_) {
68  case TESSDATA_PUNC_DAWG:
69  dawg_type = DAWG_TYPE_PUNCTUATION;
70  perm_type = PUNC_PERM;
71  break;
73  dawg_type = DAWG_TYPE_WORD;
74  perm_type = SYSTEM_DAWG_PERM;
75  break;
77  dawg_type = DAWG_TYPE_NUMBER;
78  perm_type = NUMBER_PERM;
79  break;
81  dawg_type = DAWG_TYPE_WORD; // doesn't actually matter
82  perm_type = COMPOUND_PERM; // doesn't actually matter
83  break;
85  dawg_type = DAWG_TYPE_WORD;
86  perm_type = SYSTEM_DAWG_PERM;
87  break;
88  case TESSDATA_FREQ_DAWG:
89  dawg_type = DAWG_TYPE_WORD;
90  perm_type = FREQ_DAWG_PERM;
91  break;
92  default:
93  data_loader.End();
94  return NULL;
95  }
96  SquishedDawg *retval =
97  new SquishedDawg(fp, dawg_type, lang_, perm_type, dawg_debug_level_);
98  data_loader.End();
99  return retval;
100 }
101 
102 } // namespace tesseract
FILE * GetDataFilePtr() const
_ConstTessMemberResultCallback_0_0< true, R, T1 >::base * NewTessCallback(const T1 *obj, R(T2::*member)() const)
Definition: tesscallback.h:106
DawgLoader(const STRING &lang, const char *data_file_name, TessdataType tessdata_dawg_type, int dawg_debug_level)
Definition: dawg_cache.cpp:30
PermuterType
Definition: ratngs.h:240
const char * data_file_name_
Definition: dawg_cache.cpp:42
Dawg * GetSquishedDawg(const STRING &lang, const char *data_file_name, TessdataType tessdata_dawg_type, int debug_level)
Definition: dawg_cache.cpp:47
TessdataType tessdata_dawg_type_
Definition: dawg_cache.cpp:43
bool SeekToStart(TessdataType tessdata_type)
bool Init(const char *data_file_name, int debug_level)
DawgType
Definition: dawg.h:71
Definition: strngs.h:44
#define NULL
Definition: host.h:144