~vcs-imports/tesseract-ocr/trunk

« back to all changes in this revision

Viewing changes to ccutil/serialis.cpp

  • Committer: theraysmith at gmail
  • Date: 2013-10-10 02:07:26 UTC
  • Revision ID: svn-v4:d0cd1f9f-072b-0410-8dd7-cf729c803f20:trunk:890
Fixed fmemopen portability problem

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 **********************************************************************/
19
19
 
20
20
#include "serialis.h"
21
 
#include "scanutils.h"
22
 
 
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));
27
 
}
28
 
 
29
 
/**********************************************************************
30
 
 * reverse32
31
 
 *
32
 
 * Byte swap an inT32 or uinT32.
33
 
 **********************************************************************/
34
 
 
35
 
DLLSYM uinT32 reverse32(            //switch endian
36
 
                        uinT32 num  //number to fix
37
 
                       ) {
38
 
  return (reverse16 ((uinT16) (num & 0xffff)) << 16)
39
 
    | reverse16 ((uinT16) ((num >> 16) & 0xffff));
40
 
}
41
 
 
42
 
 
43
 
/**********************************************************************
44
 
 * reverse16
45
 
 *
46
 
 * Byte swap an inT16 or uinT16.
47
 
 **********************************************************************/
48
 
 
49
 
DLLSYM uinT16 reverse16(            //switch endian
50
 
                        uinT16 num  //number to fix
51
 
                       ) {
52
 
  return ((num & 0xff) << 8) | ((num >> 8) & 0xff);
53
 
}
 
21
#include <stdio.h>
 
22
 
 
23
namespace tesseract {
 
24
 
 
25
TFile::TFile() : offset_(0) {
 
26
}
 
27
 
 
28
bool TFile::Open(const STRING& filename, FileReader reader) {
 
29
  offset_ = 0;
 
30
  if (reader == NULL)
 
31
    return LoadDataFromFile(filename, &data_);
 
32
  else
 
33
    return (*reader)(filename, &data_);
 
34
}
 
35
 
 
36
bool TFile::Open(const char* data, int size) {
 
37
  offset_ = 0;
 
38
  data_.init_to_size(size, 0);
 
39
  memcpy(&data_[0], data, size);
 
40
  return true;
 
41
}
 
42
 
 
43
bool TFile::Open(FILE* fp, inT64 end_offset) {
 
44
  offset_ = 0;
 
45
  inT64 current_pos = ftell(fp);
 
46
  if (end_offset < 0) {
 
47
    fseek(fp, 0, SEEK_END);
 
48
    end_offset = ftell(fp);
 
49
    fseek(fp, current_pos, SEEK_SET);
 
50
  }
 
51
  int size = end_offset - current_pos;
 
52
  data_.init_to_size(size, 0);
 
53
  return fread(&data_[0], 1, size, fp) == size;
 
54
}
 
55
 
 
56
char* TFile::FGets(char* buffer, int buffer_size) {
 
57
  int size = 0;
 
58
  while (size + 1 < buffer_size && offset_ < data_.size()) {
 
59
    buffer[size++] = data_[offset_++];
 
60
    if (data_[offset_ - 1] == '\n') break;
 
61
  }
 
62
  if (size < buffer_size) buffer[size] = '\0';
 
63
  return size > 0 ? buffer : NULL;
 
64
}
 
65
 
 
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;
 
74
}
 
75
 
 
76
 
 
77
}  // namespace tesseract.
 
78