mirror of
https://github.com/tesseract-ocr/tesseract.git
synced 2024-12-01 07:59:05 +08:00
d8b1456dd5
git-svn-id: https://tesseract-ocr.googlecode.com/svn/trunk@305 d0cd1f9f-072b-0410-8dd7-cf729c803f20
429 lines
12 KiB
C++
429 lines
12 KiB
C++
/**********************************************************************
|
|
* File: varable.h (Formerly variable.h)
|
|
* Description: Class definitions of the *_VAR classes for tunable constants.
|
|
* Author: Ray Smith
|
|
* Created: Fri Feb 22 11:26:25 GMT 1991
|
|
*
|
|
* (C) Copyright 1991, Hewlett-Packard Ltd.
|
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
** you may not use this file except in compliance with the License.
|
|
** You may obtain a copy of the License at
|
|
** http://www.apache.org/licenses/LICENSE-2.0
|
|
** Unless required by applicable law or agreed to in writing, software
|
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
** See the License for the specific language governing permissions and
|
|
** limitations under the License.
|
|
*
|
|
**********************************************************************/
|
|
|
|
#ifndef VARABLE_H
|
|
#define VARABLE_H
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "clst.h"
|
|
#include "strngs.h"
|
|
|
|
class DLLSYM INT_VARIABLE;
|
|
|
|
// Read config file.
|
|
extern DLLSYM BOOL8 read_variables_file(
|
|
const char *file, // filename to read
|
|
bool global_only); // only set variables starting with "global_"
|
|
|
|
// Read variables from the given file pointer (stop at end_offset).
|
|
bool read_variables_from_fp(FILE *fp, inT64 end_offset, bool global_only);
|
|
|
|
// Set a variable to have the given value.
|
|
bool set_variable(const char *variable, const char* value);
|
|
|
|
// Print variables to a file.
|
|
extern DLLSYM void print_variables(FILE *fp);
|
|
|
|
const char kGlobalVariablePrefix[] = "global_";
|
|
|
|
CLISTIZEH (INT_VARIABLE)
|
|
class DLLSYM INT_VAR_FROM
|
|
{
|
|
friend class INT_VAR_TO;
|
|
public:
|
|
INT_VAR_FROM(); //constructor
|
|
private:
|
|
INT_VARIABLE_CLIST list; //copy of list
|
|
};
|
|
|
|
class DLLSYM INT_VAR_TO
|
|
{
|
|
public:
|
|
INT_VAR_TO(); //constructor
|
|
private:
|
|
INT_VARIABLE_CLIST dummy;
|
|
};
|
|
|
|
class DLLSYM INT_VARIABLE
|
|
{
|
|
friend class INT_VAR_TO;
|
|
friend class INT_VAR_FROM;
|
|
//for setting values
|
|
friend bool set_variable(const char *variable, const char* value);
|
|
|
|
public:
|
|
INT_VARIABLE(inT32 v, // initial value
|
|
const char *vname, // name of variable
|
|
const char *comment); // info on variable
|
|
|
|
INT_VARIABLE() { // for elist only
|
|
value = 0;
|
|
name = "NONAME";
|
|
info = "Uninitialized";
|
|
}
|
|
~INT_VARIABLE(); // for elist only
|
|
|
|
operator inT32() { // conversion
|
|
return value; // access as int
|
|
}
|
|
|
|
void set_value(inT32 v) { // value to set
|
|
value = v;
|
|
}
|
|
|
|
const char *name_str() { // access name
|
|
return name;
|
|
}
|
|
|
|
const char *info_str() { // access name
|
|
return info;
|
|
}
|
|
|
|
// access list head
|
|
static INT_VARIABLE_CLIST *get_head();
|
|
|
|
static void print(FILE *fp); // file to print on
|
|
|
|
private:
|
|
inT32 value; // the variable
|
|
const char *name; // name of variable
|
|
const char *info; // for menus
|
|
static INT_VAR_FROM copy; // pre constructor
|
|
// start of list
|
|
static INT_VARIABLE_CLIST head;
|
|
static INT_VAR_TO replace; // post constructor
|
|
};
|
|
|
|
class DLLSYM BOOL_VARIABLE;
|
|
|
|
CLISTIZEH(BOOL_VARIABLE)
|
|
class DLLSYM BOOL_VAR_FROM {
|
|
friend class BOOL_VAR_TO;
|
|
public:
|
|
BOOL_VAR_FROM(); // constructor
|
|
private:
|
|
BOOL_VARIABLE_CLIST list; // copy of list
|
|
};
|
|
|
|
class DLLSYM BOOL_VAR_TO {
|
|
public:
|
|
BOOL_VAR_TO(); // constructor
|
|
private:
|
|
BOOL_VARIABLE_CLIST dummy;
|
|
};
|
|
|
|
class DLLSYM BOOL_VARIABLE {
|
|
friend class BOOL_VAR_FROM;
|
|
friend class BOOL_VAR_TO;
|
|
//for setting values
|
|
friend bool set_variable(const char *variable, const char* value);
|
|
|
|
public:
|
|
BOOL_VARIABLE( //constructor
|
|
BOOL8 v, //initial value
|
|
const char *vname, //name of variable
|
|
const char *comment); //info on variable
|
|
|
|
BOOL_VARIABLE() { //for elist only
|
|
value = FALSE;
|
|
name = "NONAME";
|
|
info = "Uninitialized";
|
|
}
|
|
~BOOL_VARIABLE (); //for elist only
|
|
|
|
operator BOOL8() { //conversion
|
|
return value; //access as int
|
|
}
|
|
|
|
void set_value( //assign to value
|
|
BOOL8 v) { //value to set
|
|
value = v;
|
|
}
|
|
|
|
const char *name_str() { //access name
|
|
return name;
|
|
}
|
|
|
|
const char *info_str() { //access name
|
|
return info;
|
|
}
|
|
|
|
//access list head
|
|
static BOOL_VARIABLE_CLIST *get_head();
|
|
|
|
static void print( //print whole list
|
|
FILE *fp); //file to print on
|
|
|
|
private:
|
|
BOOL8 value; //the variable
|
|
const char *name; //name of variable
|
|
const char *info; //for menus
|
|
static BOOL_VAR_FROM copy; //pre constructor
|
|
//start of list
|
|
static BOOL_VARIABLE_CLIST head;
|
|
static BOOL_VAR_TO replace; //post constructor
|
|
};
|
|
|
|
class DLLSYM STRING_VARIABLE;
|
|
|
|
CLISTIZEH (STRING_VARIABLE)
|
|
class DLLSYM STRING_VAR_FROM
|
|
{
|
|
friend class STRING_VAR_TO;
|
|
public:
|
|
STRING_VAR_FROM(); //constructor
|
|
private:
|
|
STRING_VARIABLE_CLIST list; //copy of list
|
|
};
|
|
|
|
class DLLSYM STRING_VAR_TO
|
|
{
|
|
public:
|
|
STRING_VAR_TO(); //constructor
|
|
private:
|
|
STRING_VARIABLE_CLIST dummy;
|
|
};
|
|
|
|
class DLLSYM STRING_VARIABLE
|
|
{
|
|
friend class STRING_VAR_TO;
|
|
friend class STRING_VAR_FROM;
|
|
//for setting values
|
|
friend bool set_variable(const char *variable, const char* value);
|
|
|
|
public:
|
|
STRING_VARIABLE( //constructor
|
|
const char *v, //initial value
|
|
const char *vname, //name of variable
|
|
const char *comment); //info on variable
|
|
|
|
STRING_VARIABLE() { //for elist only
|
|
name = "NONAME";
|
|
info = "Uninitialized";
|
|
}
|
|
~STRING_VARIABLE (); //for elist only
|
|
|
|
//conversion
|
|
operator const STRING &() {
|
|
return value; //access as int
|
|
}
|
|
|
|
void set_value( //assign to value
|
|
STRING v) { //value to set
|
|
value = v;
|
|
}
|
|
|
|
const char *string() const { //get string
|
|
return value.string ();
|
|
}
|
|
|
|
const char *name_str() { //access name
|
|
return name;
|
|
}
|
|
|
|
const char *info_str() { //access name
|
|
return info;
|
|
}
|
|
|
|
//access list head
|
|
static STRING_VARIABLE_CLIST *get_head();
|
|
|
|
static void print( //print whole list
|
|
FILE *fp); //file to print on
|
|
|
|
private:
|
|
STRING value; //the variable
|
|
const char *name; //name of variable
|
|
const char *info; //for menus
|
|
static STRING_VAR_FROM copy; //pre constructor
|
|
//start of list
|
|
static STRING_VARIABLE_CLIST head;
|
|
static STRING_VAR_TO replace;//post constructor
|
|
};
|
|
|
|
class DLLSYM double_VARIABLE;
|
|
|
|
CLISTIZEH (double_VARIABLE)
|
|
class DLLSYM double_VAR_FROM
|
|
{
|
|
friend class double_VAR_TO;
|
|
public:
|
|
double_VAR_FROM(); //constructor
|
|
private:
|
|
double_VARIABLE_CLIST list; //copy of list
|
|
};
|
|
|
|
class DLLSYM double_VAR_TO
|
|
{
|
|
public:
|
|
double_VAR_TO(); //constructor
|
|
private:
|
|
double_VARIABLE_CLIST dummy;
|
|
};
|
|
|
|
class DLLSYM double_VARIABLE
|
|
{
|
|
friend class double_VAR_TO;
|
|
friend class double_VAR_FROM;
|
|
//for setting values
|
|
friend bool set_variable(const char *variable, const char* value);
|
|
|
|
public:
|
|
double_VARIABLE( //constructor
|
|
double v, //initial value
|
|
const char *vname, //name of variable
|
|
const char *comment); //info on variable
|
|
|
|
double_VARIABLE() { //for elist only
|
|
value = 0.0;
|
|
name = "NONAME";
|
|
info = "Uninitialized";
|
|
}
|
|
~double_VARIABLE (); //for elist only
|
|
|
|
operator double() { //conversion
|
|
return value; //access as int
|
|
}
|
|
|
|
void set_value( //assign to value
|
|
double v) { //value to set
|
|
value = v;
|
|
}
|
|
|
|
const char *name_str() { //access name
|
|
return name;
|
|
}
|
|
|
|
const char *info_str() { //access name
|
|
return info;
|
|
}
|
|
|
|
//access list head
|
|
static double_VARIABLE_CLIST *get_head();
|
|
|
|
static void print( //print whole list
|
|
FILE *fp); //file to print on
|
|
|
|
private:
|
|
double value; //the variable
|
|
const char *name; //name of variable
|
|
const char *info; //for menus
|
|
static double_VAR_FROM copy; //pre constructor
|
|
//start of list
|
|
static double_VARIABLE_CLIST head;
|
|
static double_VAR_TO replace;//post constructor
|
|
};
|
|
|
|
/*************************************************************************
|
|
* NOTE ON DEFINING VARIABLES
|
|
*
|
|
* For our normal code, the ***_VAR and ***_EVAR macros for variable
|
|
* definitions are identical. HOWEVER, for the code version to ship to NEVADA
|
|
* (or anywhere else where we want to hide the majority of variables) the
|
|
* **_VAR macros are changed so that the "#name" and "comment" parameters
|
|
* to the variable constructor are changed to empty strings. This prevents the
|
|
* variable name or comment string appearing in the object code file (after it
|
|
* has gone through strip).
|
|
*
|
|
* Certain variables can remain EXPOSED and hence be used in config files given
|
|
* to UNLV. These are variable which have been declared with the ***_EVAR
|
|
* macros.
|
|
*
|
|
*************************************************************************/
|
|
|
|
/* SECURE_NAMES is defined in senames.h when necessary */
|
|
#ifdef SECURE_NAMES
|
|
|
|
#define INT_VAR(name,val,comment) /*make INT_VARIABLE*/\
|
|
INT_VARIABLE name(val,"","")
|
|
|
|
#define BOOL_VAR(name,val,comment) /*make BOOL_VARIABLE*/\
|
|
BOOL_VARIABLE name(val,"","")
|
|
|
|
#define STRING_VAR(name,val,comment) /*make STRING_VARIABLE*/\
|
|
STRING_VARIABLE name(val,"","")
|
|
|
|
#define double_VAR(name,val,comment) /*make double_VARIABLE*/\
|
|
double_VARIABLE name(val,"","")
|
|
|
|
#else
|
|
|
|
#define INT_VAR(name,val,comment) /*make INT_VARIABLE*/\
|
|
INT_VARIABLE name(val,#name,comment)
|
|
|
|
#define BOOL_VAR(name,val,comment) /*make BOOL_VARIABLE*/\
|
|
BOOL_VARIABLE name(val,#name,comment)
|
|
|
|
#define STRING_VAR(name,val,comment) /*make STRING_VARIABLE*/\
|
|
STRING_VARIABLE name(val,#name,comment)
|
|
|
|
#define double_VAR(name,val,comment) /*make double_VARIABLE*/\
|
|
double_VARIABLE name(val,#name,comment)
|
|
#endif
|
|
|
|
#define INT_VAR_H(name,val,comment) /*declare one*/\
|
|
INT_VARIABLE name
|
|
|
|
#define BOOL_VAR_H(name,val,comment) /*declare one*/\
|
|
BOOL_VARIABLE name
|
|
|
|
#define STRING_VAR_H(name,val,comment) /*declare one*/\
|
|
STRING_VARIABLE name
|
|
|
|
#define double_VAR_H(name,val,comment) /*declare one*/\
|
|
double_VARIABLE name
|
|
|
|
#define INT_MEMBER(name, val, comment) /*make INT_VARIABLE*/\
|
|
name(val, #name, comment)
|
|
|
|
#define BOOL_MEMBER(name, val, comment) /*make BOOL_VARIABLE*/\
|
|
name(val, #name, comment)
|
|
|
|
#define STRING_MEMBER(name, val, comment) /*make STRING_VARIABLE*/\
|
|
name(val, #name, comment)
|
|
|
|
#define double_MEMBER(name, val, comment) /*make double_VARIABLE*/\
|
|
name(val, #name, comment)
|
|
|
|
#define INT_EVAR(name,val,comment) /*make INT_VARIABLE*/\
|
|
INT_VARIABLE name(val,#name,comment)
|
|
|
|
#define INT_EVAR_H(name,val,comment) /*declare one*/\
|
|
INT_VARIABLE name
|
|
|
|
#define BOOL_EVAR(name,val,comment) /*make BOOL_VARIABLE*/\
|
|
BOOL_VARIABLE name(val,#name,comment)
|
|
|
|
#define BOOL_EVAR_H(name,val,comment) /*declare one*/\
|
|
BOOL_VARIABLE name
|
|
|
|
#define STRING_EVAR(name,val,comment) /*make STRING_VARIABLE*/\
|
|
STRING_VARIABLE name(val,#name,comment)
|
|
|
|
#define STRING_EVAR_H(name,val,comment) /*declare one*/\
|
|
STRING_VARIABLE name
|
|
|
|
#define double_EVAR(name,val,comment) /*make double_VARIABLE*/\
|
|
double_VARIABLE name(val,#name,comment)
|
|
|
|
#define double_EVAR_H(name,val,comment) /*declare one*/\
|
|
double_VARIABLE name
|
|
#endif
|