mirror of
https://github.com/tesseract-ocr/tesseract.git
synced 2024-12-01 07:59:05 +08:00
425d593ebe
git-svn-id: https://tesseract-ocr.googlecode.com/svn/trunk/trunk@2 d0cd1f9f-072b-0410-8dd7-cf729c803f20
179 lines
4.8 KiB
C++
179 lines
4.8 KiB
C++
/**********************************************************************
|
|
* File: strngs.h (Formerly strings.h)
|
|
* Description: STRING class definition.
|
|
* Author: Ray Smith
|
|
* Created: Fri Feb 15 09:15:01 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 STRNGS_H
|
|
#define STRNGS_H
|
|
|
|
#include <string.h>
|
|
#include "memry.h"
|
|
#include "serialis.h"
|
|
|
|
class DLLSYM STRING
|
|
{
|
|
char *ptr; //ptr to the chars
|
|
|
|
public:
|
|
STRING() { //constructor
|
|
ptr = NULL; //empty string
|
|
}
|
|
|
|
STRING( //classwise copy
|
|
const STRING &string) {
|
|
if (string.ptr != NULL) {
|
|
//length of source
|
|
INT32 length = strlen (string.ptr) + 1;
|
|
|
|
//get space
|
|
ptr = alloc_string (length);
|
|
strcpy (ptr, string.ptr);//and copy it
|
|
}
|
|
else {
|
|
ptr = alloc_string (1);
|
|
if (ptr != NULL)
|
|
*ptr = '\0';
|
|
}
|
|
}
|
|
|
|
STRING( //contruct from char*
|
|
const char *string) {
|
|
if (string != NULL) {
|
|
//length of source
|
|
INT32 length = strlen (string) + 1;
|
|
|
|
//get space
|
|
ptr = alloc_string (length);
|
|
if (ptr != NULL)
|
|
strcpy(ptr, string); //and copy it
|
|
}
|
|
else {
|
|
ptr = alloc_string (1);
|
|
if (ptr != NULL)
|
|
*ptr = '\0';
|
|
}
|
|
}
|
|
|
|
~STRING () { //destructor
|
|
if (ptr != NULL)
|
|
free_string(ptr); //give it back
|
|
}
|
|
|
|
char &operator[] ( //access function
|
|
INT32 index) const //string index
|
|
{
|
|
return ptr[index]; //no bounds checks
|
|
}
|
|
|
|
BOOL8 contains( //char in string?
|
|
const char c) const {
|
|
if ((ptr == NULL) || ((c != '\0') && strchr (ptr, c) == NULL))
|
|
return FALSE;
|
|
else
|
|
return TRUE;
|
|
}
|
|
|
|
INT32 length() const { //string length
|
|
if (ptr != NULL)
|
|
return strlen (ptr);
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
const char *string() const { //ptr to string
|
|
return ptr;
|
|
}
|
|
|
|
BOOL8 operator== ( //string equality
|
|
const STRING & string) const
|
|
{
|
|
if (ptr != NULL && string.ptr != NULL)
|
|
return strcmp (ptr, string.ptr) == 0;
|
|
else
|
|
return (ptr == NULL || *ptr == '\0')
|
|
&& (string.ptr == NULL || *(string.ptr) == '\0');
|
|
}
|
|
|
|
BOOL8 operator!= ( //string equality
|
|
const STRING & string) const
|
|
{
|
|
if (ptr != NULL && string.ptr != NULL)
|
|
return strcmp (ptr, string.ptr) != 0;
|
|
else
|
|
return !((ptr == NULL || *ptr == '\0')
|
|
&& (string.ptr == NULL || *(string.ptr) == '\0'));
|
|
}
|
|
|
|
BOOL8 operator!= ( //string equality
|
|
const char *string) const
|
|
{
|
|
if (ptr != NULL && string != NULL)
|
|
return strcmp (ptr, string) != 0;
|
|
else
|
|
return !((ptr == NULL || *ptr == '\0')
|
|
&& (string == NULL || *string == '\0'));
|
|
}
|
|
|
|
STRING & operator= ( //assignment
|
|
const char *string); //of char*
|
|
|
|
STRING & operator= ( //assignment
|
|
const STRING & string) { //of string
|
|
*this = string.ptr; //as for char*
|
|
return *this;
|
|
}
|
|
|
|
STRING operator+ ( //concatenation
|
|
const STRING & string) const;
|
|
|
|
STRING operator+ ( //char concatenation
|
|
const char ch) const;
|
|
|
|
STRING & operator+= ( //inplace cat
|
|
const char *string);
|
|
STRING & operator+= ( //inplace cat
|
|
const STRING & string) {
|
|
*this += string.ptr;
|
|
return *this;
|
|
}
|
|
|
|
STRING & operator+= ( //inplace char cat
|
|
const char ch);
|
|
|
|
void prep_serialise() { //set ptrs to counts
|
|
ptr = (char *) (length () + 1);
|
|
}
|
|
|
|
void dump( //write external bits
|
|
FILE *f) {
|
|
serialise_bytes (f, (void *) ptr, (int) (length () + 1));
|
|
}
|
|
|
|
void de_dump( //read external bits
|
|
FILE *f) {
|
|
char *instring; //input from read
|
|
|
|
instring = (char *) de_serialise_bytes (f, (ptrdiff_t) ptr);
|
|
ptr = NULL;
|
|
*this = instring;
|
|
free_mem(instring);
|
|
}
|
|
|
|
make_serialise (STRING)
|
|
};
|
|
#endif
|