18
18
**********************************************************************/
20
#include "mfcpch.h" //precompiled headers
21
20
#include "serialis.h"
22
#include "scanutils.h"
24
// Byte swap an inT64 or uinT64.
25
DLLSYM uinT64 reverse64(uinT64 num) {
26
return ((uinT64)reverse32((uinT32)(num & 0xffffffff)) << 32)
27
| reverse32((uinT32)((num >> 32) & 0xffffffff));
30
/**********************************************************************
33
* Byte swap an inT32 or uinT32.
34
**********************************************************************/
36
DLLSYM uinT32 reverse32( //switch endian
37
uinT32 num //number to fix
39
return (reverse16 ((uinT16) (num & 0xffff)) << 16)
40
| reverse16 ((uinT16) ((num >> 16) & 0xffff));
44
/**********************************************************************
47
* Byte swap an inT16 or uinT16.
48
**********************************************************************/
50
DLLSYM uinT16 reverse16( //switch endian
51
uinT16 num //number to fix
53
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 static_cast<int>(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.