tesseract  4.0.0-beta.1-59-g2cc4
tesseract::TFile Class Reference

#include <serialis.h>

Public Member Functions

 TFile ()
 
 ~TFile ()
 
bool Open (const STRING &filename, FileReader reader)
 
bool Open (const char *data, int size)
 
bool Open (FILE *fp, int64_t end_offset)
 
void set_swap (bool value)
 
char * FGets (char *buffer, int buffer_size)
 
int FReadEndian (void *buffer, int size, int count)
 
int FRead (void *buffer, int size, int count)
 
void Rewind ()
 
void OpenWrite (GenericVector< char > *data)
 
bool CloseWrite (const STRING &filename, FileWriter writer)
 
int FWrite (const void *buffer, int size, int count)
 

Detailed Description

Definition at line 51 of file serialis.h.

Constructor & Destructor Documentation

◆ TFile()

tesseract::TFile::TFile ( )

Definition at line 26 of file serialis.cpp.

27  : offset_(0),
28  data_(NULL),
29  data_is_owned_(false),
30  is_writing_(false),
31  swap_(false) {}

◆ ~TFile()

tesseract::TFile::~TFile ( )

Definition at line 33 of file serialis.cpp.

33  {
34  if (data_is_owned_)
35  delete data_;
36 }

Member Function Documentation

◆ CloseWrite()

bool tesseract::TFile::CloseWrite ( const STRING filename,
FileWriter  writer 
)

Definition at line 144 of file serialis.cpp.

144  {
145  ASSERT_HOST(is_writing_);
146  if (writer == NULL)
147  return SaveDataToFile(*data_, filename);
148  else
149  return (*writer)(*data_, filename);
150 }
#define ASSERT_HOST(x)
Definition: errcode.h:84
bool SaveDataToFile(const GenericVector< char > &data, const STRING &filename)

◆ FGets()

char * tesseract::TFile::FGets ( char *  buffer,
int  buffer_size 
)

Definition at line 90 of file serialis.cpp.

90  {
91  ASSERT_HOST(!is_writing_);
92  int size = 0;
93  while (size + 1 < buffer_size && offset_ < data_->size()) {
94  buffer[size++] = (*data_)[offset_++];
95  if ((*data_)[offset_ - 1] == '\n') break;
96  }
97  if (size < buffer_size) buffer[size] = '\0';
98  return size > 0 ? buffer : NULL;
99 }
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ FRead()

int tesseract::TFile::FRead ( void *  buffer,
int  size,
int  count 
)

Definition at line 112 of file serialis.cpp.

112  {
113  ASSERT_HOST(!is_writing_);
114  int required_size = size * count;
115  if (required_size <= 0) return 0;
116  if (data_->size() - offset_ < required_size)
117  required_size = data_->size() - offset_;
118  if (required_size > 0 && buffer != NULL)
119  memcpy(buffer, &(*data_)[offset_], required_size);
120  offset_ += required_size;
121  return required_size / size;
122 }
int size() const
Definition: genericvector.h:72
#define ASSERT_HOST(x)
Definition: errcode.h:84
int count(LIST var_list)
Definition: oldlist.cpp:103

◆ FReadEndian()

int tesseract::TFile::FReadEndian ( void *  buffer,
int  size,
int  count 
)

Definition at line 101 of file serialis.cpp.

101  {
102  int num_read = FRead(buffer, size, count);
103  if (swap_) {
104  char* char_buffer = static_cast<char*>(buffer);
105  for (int i = 0; i < num_read; ++i, char_buffer += size) {
106  ReverseN(char_buffer, size);
107  }
108  }
109  return num_read;
110 }
int FRead(void *buffer, int size, int count)
Definition: serialis.cpp:112
void ReverseN(void *ptr, int num_bytes)
Definition: helpers.h:189
int count(LIST var_list)
Definition: oldlist.cpp:103

◆ FWrite()

int tesseract::TFile::FWrite ( const void *  buffer,
int  size,
int  count 
)

Definition at line 152 of file serialis.cpp.

152  {
153  ASSERT_HOST(is_writing_);
154  int total = size * count;
155  if (total <= 0) return 0;
156  const char* buf = static_cast<const char*>(buffer);
157  // This isn't very efficient, but memory is so fast compared to disk
158  // that it is relatively unimportant, and very simple.
159  for (int i = 0; i < total; ++i)
160  data_->push_back(buf[i]);
161  return count;
162 }
int push_back(T object)
#define ASSERT_HOST(x)
Definition: errcode.h:84
int count(LIST var_list)
Definition: oldlist.cpp:103

◆ Open() [1/3]

bool tesseract::TFile::Open ( const STRING filename,
FileReader  reader 
)

Definition at line 38 of file serialis.cpp.

38  {
39  if (!data_is_owned_) {
40  data_ = new GenericVector<char>;
41  data_is_owned_ = true;
42  }
43  offset_ = 0;
44  is_writing_ = false;
45  swap_ = false;
46  if (reader == NULL)
47  return LoadDataFromFile(filename, data_);
48  else
49  return (*reader)(filename, data_);
50 }
bool LoadDataFromFile(const char *filename, GenericVector< char > *data)

◆ Open() [2/3]

bool tesseract::TFile::Open ( const char *  data,
int  size 
)

Definition at line 52 of file serialis.cpp.

52  {
53  offset_ = 0;
54  if (!data_is_owned_) {
55  data_ = new GenericVector<char>;
56  data_is_owned_ = true;
57  }
58  is_writing_ = false;
59  swap_ = false;
60  data_->resize_no_init(size);
61  memcpy(&(*data_)[0], data, size);
62  return true;
63 }
void resize_no_init(int size)
Definition: genericvector.h:66

◆ Open() [3/3]

bool tesseract::TFile::Open ( FILE *  fp,
int64_t  end_offset 
)

Definition at line 65 of file serialis.cpp.

65  {
66  offset_ = 0;
67  long current_pos = ftell(fp);
68  if (current_pos < 0) {
69  // ftell failed.
70  return false;
71  }
72  if (end_offset < 0) {
73  if (fseek(fp, 0, SEEK_END))
74  return false;
75  end_offset = ftell(fp);
76  if (fseek(fp, current_pos, SEEK_SET))
77  return false;
78  }
79  int size = end_offset - current_pos;
80  is_writing_ = false;
81  swap_ = false;
82  if (!data_is_owned_) {
83  data_ = new GenericVector<char>;
84  data_is_owned_ = true;
85  }
86  data_->resize_no_init(size);
87  return static_cast<int>(fread(&(*data_)[0], 1, size, fp)) == size;
88 }
void resize_no_init(int size)
Definition: genericvector.h:66

◆ OpenWrite()

void tesseract::TFile::OpenWrite ( GenericVector< char > *  data)

Definition at line 129 of file serialis.cpp.

129  {
130  offset_ = 0;
131  if (data != NULL) {
132  if (data_is_owned_) delete data_;
133  data_ = data;
134  data_is_owned_ = false;
135  } else if (!data_is_owned_) {
136  data_ = new GenericVector<char>;
137  data_is_owned_ = true;
138  }
139  is_writing_ = true;
140  swap_ = false;
141  data_->truncate(0);
142 }
void truncate(int size)

◆ Rewind()

void tesseract::TFile::Rewind ( )

Definition at line 124 of file serialis.cpp.

124  {
125  ASSERT_HOST(!is_writing_);
126  offset_ = 0;
127 }
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ set_swap()

void tesseract::TFile::set_swap ( bool  value)
inline

Definition at line 65 of file serialis.h.

65 { swap_ = value; }

The documentation for this class was generated from the following files: