18
18
**********************************************************************/
20
20
#include "serialis.h"
21
#include "scanutils.h"
23
// Byte swap an inT64 or uinT64.
24
DLLSYM uinT64 reverse64(uinT64 num) {
25
return ((uinT64)reverse32((uinT32)(num & 0xffffffff)) << 32)
26
| reverse32((uinT32)((num >> 32) & 0xffffffff));
29
/**********************************************************************
32
* Byte swap an inT32 or uinT32.
33
**********************************************************************/
35
DLLSYM uinT32 reverse32( //switch endian
36
uinT32 num //number to fix
38
return (reverse16 ((uinT16) (num & 0xffff)) << 16)
39
| reverse16 ((uinT16) ((num >> 16) & 0xffff));
43
/**********************************************************************
46
* Byte swap an inT16 or uinT16.
47
**********************************************************************/
49
DLLSYM uinT16 reverse16( //switch endian
50
uinT16 num //number to fix
52
return ((num & 0xff) << 8) | ((num >> 8) & 0xff);
25
TFile::TFile() : offset_(0) {
28
bool TFile::Open(const STRING& filename, FileReader reader) {
31
return LoadDataFromFile(filename, &data_);
33
return (*reader)(filename, &data_);
36
bool TFile::Open(const char* data, int size) {
38
data_.init_to_size(size, 0);
39
memcpy(&data_[0], data, size);
43
bool TFile::Open(FILE* fp, inT64 end_offset) {
45
inT64 current_pos = ftell(fp);
47
fseek(fp, 0, SEEK_END);
48
end_offset = ftell(fp);
49
fseek(fp, current_pos, SEEK_SET);
51
int size = end_offset - current_pos;
52
data_.init_to_size(size, 0);
53
return fread(&data_[0], 1, size, fp) == size;
56
char* TFile::FGets(char* buffer, int buffer_size) {
58
while (size + 1 < buffer_size && offset_ < data_.size()) {
59
buffer[size++] = data_[offset_++];
60
if (data_[offset_ - 1] == '\n') break;
62
if (size < buffer_size) buffer[size] = '\0';
63
return size > 0 ? buffer : NULL;
66
int TFile::FRead(void* buffer, int size, int count) {
67
char* char_buffer = reinterpret_cast<char*>(buffer);
68
int required_size = size * count;
69
if (data_.size() - offset_ < required_size)
70
required_size = data_.size() - offset_;
71
memcpy(char_buffer, &data_[offset_], required_size);
72
offset_ += required_size;
73
return required_size / size;
77
} // namespace tesseract.