tesseract  4.1.0
GenericVector< T > Class Template Reference

#include <baseapi.h>

Inheritance diagram for GenericVector< T >:
GenericVectorEqEq< T > tesseract::PointerVector< GenericVector< double > > tesseract::PointerVector< RecodeBeam > tesseract::PointerVector< tesseract::BaselineBlock > tesseract::PointerVector< tesseract::BaselineRow > tesseract::PointerVector< tesseract::DocumentData > tesseract::PointerVector< tesseract::ImageData > tesseract::PointerVector< tesseract::LanguageModelState > tesseract::PointerVector< tesseract::Network > tesseract::PointerVector< tesseract::NetworkIO > tesseract::PointerVector< tesseract::Shape > tesseract::PointerVector< tesseract::TrainingSample > tesseract::PointerVector< tesseract::TransposedArray > tesseract::PointerVector< WERD_RES >

Public Member Functions

 GenericVector ()
 
 GenericVector (int size, const T &init_val)
 
 GenericVector (const GenericVector &other)
 
GenericVector< T > & operator+= (const GenericVector &other)
 
GenericVector< T > & operator= (const GenericVector &other)
 
 ~GenericVector ()
 
void reserve (int size)
 
void double_the_size ()
 
void init_to_size (int size, const T &t)
 
void resize_no_init (int size)
 
int size () const
 
size_t unsigned_size () const
 
int size_reserved () const
 
int length () const
 
bool empty () const
 
T & get (int index) const
 
T & back () const
 
T & operator[] (int index) const
 
pop_back ()
 
int get_index (const T &object) const
 
bool contains (const T &object) const
 
contains_index (int index) const
 
int push_back (T object)
 
void operator+= (const T &t)
 
int push_back_new (const T &object)
 
int push_front (const T &object)
 
void set (const T &t, int index)
 
void insert (const T &t, int index)
 
void remove (int index)
 
void truncate (int size)
 
void set_clear_callback (TessCallback1< T > *cb)
 
void set_compare_callback (TessResultCallback2< bool, T const &, T const & > *cb)
 
void clear ()
 
void delete_data_pointers ()
 
void move (GenericVector< T > *from)
 
bool write (FILE *f, TessResultCallback2< bool, FILE *, T const & > *cb) const
 
bool read (tesseract::TFile *f, TessResultCallback2< bool, tesseract::TFile *, T * > *cb)
 
bool Serialize (FILE *fp) const
 
bool Serialize (tesseract::TFile *fp) const
 
bool DeSerialize (bool swap, FILE *fp)
 
bool DeSerialize (tesseract::TFile *fp)
 
bool SerializeClasses (FILE *fp) const
 
bool SerializeClasses (tesseract::TFile *fp) const
 
bool DeSerializeClasses (bool swap, FILE *fp)
 
bool DeSerializeClasses (tesseract::TFile *fp)
 
void reverse ()
 
void sort ()
 
void sort (int(*comparator)(const void *, const void *))
 
bool bool_binary_search (const T &target) const
 
int binary_search (const T &target) const
 
void compact_sorted ()
 
void compact (TessResultCallback1< bool, int > *delete_cb)
 
dot_product (const GenericVector< T > &other) const
 
int choose_nth_item (int target_index)
 
void swap (int index1, int index2)
 
bool WithinBounds (const T &rangemin, const T &rangemax) const
 

Static Public Member Functions

static bool SkipDeSerialize (tesseract::TFile *fp)
 
static bool SkipDeSerializeClasses (tesseract::TFile *fp)
 
static T * double_the_size_memcpy (int current_size, T *data)
 

Protected Member Functions

int choose_nth_item (int target_index, int start, int end, unsigned int *seed)
 
void init (int size)
 

Protected Attributes

int32_t size_used_ {}
 
int32_t size_reserved_ {}
 
T * data_
 
TessCallback1< T > * clear_cb_
 
TessResultCallback2< bool, T const &, T const & > * compare_cb_
 

Static Protected Attributes

static const int kDefaultVectorSize = 4
 

Detailed Description

template<typename T>
class GenericVector< T >

Definition at line 37 of file baseapi.h.

Constructor & Destructor Documentation

template<typename T>
GenericVector< T >::GenericVector ( )
inline

Definition at line 38 of file genericvector.h.

38  {
40  }
static const int kDefaultVectorSize
void init(int size)
template<typename T>
GenericVector< T >::GenericVector ( int  size,
const T &  init_val 
)
inline

Definition at line 41 of file genericvector.h.

41  {
42  init(size);
43  init_to_size(size, init_val);
44  }
void init_to_size(int size, const T &t)
void init(int size)
int size() const
Definition: genericvector.h:70
template<typename T>
GenericVector< T >::GenericVector ( const GenericVector< T > &  other)
inline

Definition at line 47 of file genericvector.h.

47  {
48  this->init(other.size());
49  this->operator+=(other);
50  }
void init(int size)
int size() const
Definition: genericvector.h:70
GenericVector< T > & operator+=(const GenericVector &other)
template<typename T >
GenericVector< T >::~GenericVector ( )

Definition at line 719 of file genericvector.h.

719  {
720  clear();
721 }

Member Function Documentation

template<typename T >
T & GenericVector< T >::back ( ) const

Definition at line 775 of file genericvector.h.

775  {
776  assert(size_used_ > 0);
777  return data_[size_used_ - 1];
778 }
int32_t size_used_
template<typename T>
int GenericVector< T >::binary_search ( const T &  target) const
inline

Definition at line 256 of file genericvector.h.

256  {
257  int bottom = 0;
258  int top = size_used_;
259  while (top - bottom > 1) {
260  int middle = (bottom + top) / 2;
261  if (data_[middle] > target) {
262  top = middle;
263  } else {
264  bottom = middle;
265  }
266  }
267  return bottom;
268  }
int32_t size_used_
template<typename T>
bool GenericVector< T >::bool_binary_search ( const T &  target) const
inline

Definition at line 243 of file genericvector.h.

243  {
244  int index = binary_search(target);
245  if (index >= size_used_) {
246  return false;
247  }
248  return data_[index] == target;
249  }
int32_t size_used_
int binary_search(const T &target) const
template<typename T>
int GenericVector< T >::choose_nth_item ( int  target_index)
inline

Definition at line 320 of file genericvector.h.

320  {
321  // Make sure target_index is legal.
322  if (target_index < 0) {
323  target_index = 0; // ensure legal
324  } else if (target_index >= size_used_) {
325  target_index = size_used_ - 1;
326  }
327  unsigned int seed = 1;
328  return choose_nth_item(target_index, 0, size_used_, &seed);
329  }
int32_t size_used_
int choose_nth_item(int target_index)
template<typename T >
int GenericVector< T >::choose_nth_item ( int  target_index,
int  start,
int  end,
unsigned int *  seed 
)
protected

Definition at line 1173 of file genericvector.h.

1174  {
1175  // Number of elements to process.
1176  int num_elements = end - start;
1177  // Trivial cases.
1178  if (num_elements <= 1) {
1179  return start;
1180  }
1181  if (num_elements == 2) {
1182  if (data_[start] < data_[start + 1]) {
1183  return target_index > start ? start + 1 : start;
1184  }
1185  return target_index > start ? start : start + 1;
1186  }
1187 // Place the pivot at start.
1188 #ifndef rand_r // _MSC_VER, ANDROID
1189  srand(*seed);
1190 # define rand_r(seed) rand()
1191 #endif // _MSC_VER
1192  int pivot = rand_r(seed) % num_elements + start;
1193  swap(pivot, start);
1194  // The invariant condition here is that items [start, next_lesser) are less
1195  // than the pivot (which is at index next_lesser) and items
1196  // [prev_greater, end) are greater than the pivot, with items
1197  // [next_lesser, prev_greater) being equal to the pivot.
1198  int next_lesser = start;
1199  int prev_greater = end;
1200  for (int next_sample = start + 1; next_sample < prev_greater;) {
1201  if (data_[next_sample] < data_[next_lesser]) {
1202  swap(next_lesser++, next_sample++);
1203  } else if (data_[next_sample] == data_[next_lesser]) {
1204  ++next_sample;
1205  } else {
1206  swap(--prev_greater, next_sample);
1207  }
1208  }
1209  // Now the invariant is set up, we recurse on just the section that contains
1210  // the desired index.
1211  if (target_index < next_lesser) {
1212  return choose_nth_item(target_index, start, next_lesser, seed);
1213  }
1214  if (target_index < prev_greater) {
1215  return next_lesser; // In equal bracket.
1216  }
1217  return choose_nth_item(target_index, prev_greater, end, seed);
1218 }
void swap(int index1, int index2)
int choose_nth_item(int target_index)
#define rand_r(seed)
template<typename T >
void GenericVector< T >::clear ( )

Definition at line 904 of file genericvector.h.

904  {
905  if (size_reserved_ > 0 && clear_cb_ != nullptr) {
906  for (int i = 0; i < size_used_; ++i) {
907  clear_cb_->Run(data_[i]);
908  }
909  }
910  delete[] data_;
911  data_ = nullptr;
912  size_used_ = 0;
913  size_reserved_ = 0;
914  delete clear_cb_;
915  clear_cb_ = nullptr;
916  delete compare_cb_;
917  compare_cb_ = nullptr;
918 }
TessCallback1< T > * clear_cb_
TessResultCallback2< bool, T const &, T const & > * compare_cb_
int32_t size_used_
int32_t size_reserved_
virtual void Run(A1)=0
template<typename T>
void GenericVector< T >::compact ( TessResultCallback1< bool, int > *  delete_cb)
inline

Definition at line 291 of file genericvector.h.

291  {
292  int new_size = 0;
293  int old_index = 0;
294  // Until the callback returns true, the elements stay the same.
295  while (old_index < size_used_ && !delete_cb->Run(old_index++)) {
296  ++new_size;
297  }
298  // Now just copy anything else that gets false from delete_cb.
299  for (; old_index < size_used_; ++old_index) {
300  if (!delete_cb->Run(old_index)) {
301  data_[new_size++] = data_[old_index];
302  }
303  }
304  size_used_ = new_size;
305  delete delete_cb;
306  }
int32_t size_used_
virtual R Run(A1)=0
template<typename T>
void GenericVector< T >::compact_sorted ( )
inline

Definition at line 272 of file genericvector.h.

272  {
273  if (size_used_ == 0) {
274  return;
275  }
276 
277  // First element is in no matter what, hence the i = 1.
278  int last_write = 0;
279  for (int i = 1; i < size_used_; ++i) {
280  // Finds next unique item and writes it.
281  if (data_[last_write] != data_[i]) {
282  data_[++last_write] = data_[i];
283  }
284  }
285  // last_write is the index of a valid data cell, so add 1.
286  size_used_ = last_write + 1;
287  }
int32_t size_used_
template<typename T>
bool GenericVector< T >::contains ( const T &  object) const

Definition at line 840 of file genericvector.h.

840  {
841  return get_index(object) != -1;
842 }
int get_index(const T &object) const
template<typename T >
T GenericVector< T >::contains_index ( int  index) const

Definition at line 822 of file genericvector.h.

822  {
823  return index >= 0 && index < size_used_;
824 }
int32_t size_used_
template<typename T >
void GenericVector< T >::delete_data_pointers ( )

Definition at line 921 of file genericvector.h.

921  {
922  for (int i = 0; i < size_used_; ++i) {
923  delete data_[i];
924  }
925 }
int32_t size_used_
template<typename T >
bool GenericVector< T >::DeSerialize ( bool  swap,
FILE *  fp 
)

Definition at line 1007 of file genericvector.h.

1007  {
1008  uint32_t reserved;
1009  if (fread(&reserved, sizeof(reserved), 1, fp) != 1) {
1010  return false;
1011  }
1012  if (swap) {
1013  Reverse32(&reserved);
1014  }
1015  // Arbitrarily limit the number of elements to protect against bad data.
1016  assert(reserved <= UINT16_MAX);
1017  if (reserved > UINT16_MAX) {
1018  return false;
1019  }
1020  reserve(reserved);
1021  size_used_ = reserved;
1022  if (fread(data_, sizeof(T), size_used_, fp) != unsigned_size()) {
1023  return false;
1024  }
1025  if (swap) {
1026  for (int i = 0; i < size_used_; ++i) {
1027  ReverseN(&data_[i], sizeof(data_[i]));
1028  }
1029  }
1030  return true;
1031 }
void swap(int index1, int index2)
int32_t size_used_
void reserve(int size)
size_t unsigned_size() const
Definition: genericvector.h:74
void ReverseN(void *ptr, int num_bytes)
Definition: helpers.h:185
void Reverse32(void *ptr)
Definition: helpers.h:202
template<typename T >
bool GenericVector< T >::DeSerialize ( tesseract::TFile fp)

Definition at line 1033 of file genericvector.h.

1033  {
1034  uint32_t reserved;
1035  if (fp->FReadEndian(&reserved, sizeof(reserved), 1) != 1) {
1036  return false;
1037  }
1038  // Arbitrarily limit the number of elements to protect against bad data.
1039  const uint32_t limit = 50000000;
1040  assert(reserved <= limit);
1041  if (reserved > limit) {
1042  return false;
1043  }
1044  reserve(reserved);
1045  size_used_ = reserved;
1046  return fp->FReadEndian(data_, sizeof(T), size_used_) == size_used_;
1047 }
int32_t size_used_
void reserve(int size)
int FReadEndian(void *buffer, size_t size, int count)
Definition: serialis.cpp:259
template<typename T >
bool GenericVector< T >::DeSerializeClasses ( bool  swap,
FILE *  fp 
)

Definition at line 1091 of file genericvector.h.

1091  {
1092  int32_t reserved;
1093  if (fread(&reserved, sizeof(reserved), 1, fp) != 1) {
1094  return false;
1095  }
1096  if (swap) {
1097  Reverse32(&reserved);
1098  }
1099  T empty;
1100  init_to_size(reserved, empty);
1101  for (int i = 0; i < reserved; ++i) {
1102  if (!data_[i].DeSerialize(swap, fp)) {
1103  return false;
1104  }
1105  }
1106  return true;
1107 }
void swap(int index1, int index2)
void init_to_size(int size, const T &t)
bool empty() const
Definition: genericvector.h:89
bool DeSerialize(bool swap, FILE *fp)
void Reverse32(void *ptr)
Definition: helpers.h:202
template<typename T >
bool GenericVector< T >::DeSerializeClasses ( tesseract::TFile fp)

Definition at line 1109 of file genericvector.h.

1109  {
1110  int32_t reserved;
1111  if (fp->FReadEndian(&reserved, sizeof(reserved), 1) != 1) {
1112  return false;
1113  }
1114  T empty;
1115  init_to_size(reserved, empty);
1116  for (int i = 0; i < reserved; ++i) {
1117  if (!data_[i].DeSerialize(fp)) {
1118  return false;
1119  }
1120  }
1121  return true;
1122 }
void init_to_size(int size, const T &t)
bool empty() const
Definition: genericvector.h:89
bool DeSerialize(bool swap, FILE *fp)
int FReadEndian(void *buffer, size_t size, int count)
Definition: serialis.cpp:259
template<typename T>
T GenericVector< T >::dot_product ( const GenericVector< T > &  other) const
inline

Definition at line 308 of file genericvector.h.

308  {
309  T result = static_cast<T>(0);
310  for (int i = std::min(size_used_, other.size_used_) - 1; i >= 0; --i) {
311  result += data_[i] * other.data_[i];
312  }
313  return result;
314  }
int32_t size_used_
template<typename T >
void GenericVector< T >::double_the_size ( )

Definition at line 743 of file genericvector.h.

743  {
744  if (size_reserved_ == 0) {
746  } else {
747  reserve(2 * size_reserved_);
748  }
749 }
int32_t size_reserved_
void reserve(int size)
static const int kDefaultVectorSize
template<typename T>
static T* GenericVector< T >::double_the_size_memcpy ( int  current_size,
T *  data 
)
inlinestatic

Definition at line 211 of file genericvector.h.

211  {
212  T* data_new = new T[current_size * 2];
213  memcpy(data_new, data, sizeof(T) * current_size);
214  delete[] data;
215  return data_new;
216  }
template<typename T>
bool GenericVector< T >::empty ( ) const
inline

Definition at line 89 of file genericvector.h.

89  {
90  return size_used_ == 0;
91  }
int32_t size_used_
template<typename T >
T & GenericVector< T >::get ( int  index) const

Definition at line 763 of file genericvector.h.

763  {
764  assert(index >= 0 && index < size_used_);
765  return data_[index];
766 }
int32_t size_used_
template<typename T>
int GenericVector< T >::get_index ( const T &  object) const

Definition at line 828 of file genericvector.h.

828  {
829  for (int i = 0; i < size_used_; ++i) {
830  assert(compare_cb_ != nullptr);
831  if (compare_cb_->Run(object, data_[i])) {
832  return i;
833  }
834  }
835  return -1;
836 }
TessResultCallback2< bool, T const &, T const & > * compare_cb_
int32_t size_used_
virtual R Run(A1, A2)=0
template<typename T >
void GenericVector< T >::init ( int  size)
protected

Definition at line 702 of file genericvector.h.

702  {
703  size_used_ = 0;
704  if (size <= 0) {
705  data_ = nullptr;
706  size_reserved_ = 0;
707  } else {
708  if (size < kDefaultVectorSize) {
710  }
711  data_ = new T[size];
713  }
714  clear_cb_ = nullptr;
715  compare_cb_ = nullptr;
716 }
TessCallback1< T > * clear_cb_
TessResultCallback2< bool, T const &, T const & > * compare_cb_
int32_t size_used_
int32_t size_reserved_
static const int kDefaultVectorSize
int size() const
Definition: genericvector.h:70
template<typename T>
void GenericVector< T >::init_to_size ( int  size,
const T &  t 
)

Definition at line 753 of file genericvector.h.

753  {
754  reserve(size);
755  size_used_ = size;
756  for (int i = 0; i < size; ++i) {
757  data_[i] = t;
758  }
759 }
int32_t size_used_
void reserve(int size)
int size() const
Definition: genericvector.h:70
template<typename T>
void GenericVector< T >::insert ( const T &  t,
int  index 
)

Definition at line 797 of file genericvector.h.

797  {
798  assert(index >= 0 && index <= size_used_);
799  if (size_reserved_ == size_used_) {
800  double_the_size();
801  }
802  for (int i = size_used_; i > index; --i) {
803  data_[i] = data_[i - 1];
804  }
805  data_[index] = t;
806  size_used_++;
807 }
void double_the_size()
int32_t size_used_
int32_t size_reserved_
template<typename T>
int GenericVector< T >::length ( ) const
inline

Definition at line 84 of file genericvector.h.

84  {
85  return size_used_;
86  }
int32_t size_used_
template<typename T>
void GenericVector< T >::move ( GenericVector< T > *  from)

Definition at line 1140 of file genericvector.h.

1140  {
1141  this->clear();
1142  this->data_ = from->data_;
1143  this->size_reserved_ = from->size_reserved_;
1144  this->size_used_ = from->size_used_;
1145  this->compare_cb_ = from->compare_cb_;
1146  this->clear_cb_ = from->clear_cb_;
1147  from->data_ = nullptr;
1148  from->clear_cb_ = nullptr;
1149  from->compare_cb_ = nullptr;
1150  from->size_used_ = 0;
1151  from->size_reserved_ = 0;
1152 }
TessCallback1< T > * clear_cb_
TessResultCallback2< bool, T const &, T const & > * compare_cb_
int32_t size_used_
int32_t size_reserved_
template<typename T >
GenericVector< T > & GenericVector< T >::operator+= ( const GenericVector< T > &  other)

Definition at line 885 of file genericvector.h.

885  {
886  this->reserve(size_used_ + other.size_used_);
887  for (int i = 0; i < other.size(); ++i) {
888  this->operator+=(other.data_[i]);
889  }
890  return *this;
891 }
int32_t size_used_
void reserve(int size)
int size() const
Definition: genericvector.h:70
GenericVector< T > & operator+=(const GenericVector &other)
template<typename T>
void GenericVector< T >::operator+= ( const T &  t)

Definition at line 880 of file genericvector.h.

880  {
881  push_back(t);
882 }
int push_back(T object)
template<typename T >
GenericVector< T > & GenericVector< T >::operator= ( const GenericVector< T > &  other)

Definition at line 894 of file genericvector.h.

894  {
895  if (&other != this) {
896  this->truncate(0);
897  this->operator+=(other);
898  }
899  return *this;
900 }
void truncate(int size)
GenericVector< T > & operator+=(const GenericVector &other)
template<typename T >
T & GenericVector< T >::operator[] ( int  index) const

Definition at line 769 of file genericvector.h.

769  {
770  assert(index >= 0 && index < size_used_);
771  return data_[index];
772 }
int32_t size_used_
template<typename T >
T GenericVector< T >::pop_back ( )

Definition at line 781 of file genericvector.h.

781  {
782  assert(size_used_ > 0);
783  return data_[--size_used_];
784 }
int32_t size_used_
template<typename T>
int GenericVector< T >::push_back ( object)

Definition at line 846 of file genericvector.h.

846  {
847  int index = 0;
848  if (size_used_ == size_reserved_) {
849  double_the_size();
850  }
851  index = size_used_++;
852  data_[index] = object;
853  return index;
854 }
void double_the_size()
int32_t size_used_
int32_t size_reserved_
template<typename T>
int GenericVector< T >::push_back_new ( const T &  object)

Definition at line 857 of file genericvector.h.

857  {
858  int index = get_index(object);
859  if (index >= 0) {
860  return index;
861  }
862  return push_back(object);
863 }
int get_index(const T &object) const
int push_back(T object)
template<typename T>
int GenericVector< T >::push_front ( const T &  object)

Definition at line 867 of file genericvector.h.

867  {
868  if (size_used_ == size_reserved_) {
869  double_the_size();
870  }
871  for (int i = size_used_; i > 0; --i) {
872  data_[i] = data_[i - 1];
873  }
874  data_[0] = object;
875  ++size_used_;
876  return 0;
877 }
void double_the_size()
int32_t size_used_
int32_t size_reserved_
template<typename T>
bool GenericVector< T >::read ( tesseract::TFile f,
TessResultCallback2< bool, tesseract::TFile *, T * > *  cb 
)

Definition at line 953 of file genericvector.h.

954  {
955  int32_t reserved;
956  if (f->FReadEndian(&reserved, sizeof(reserved), 1) != 1) {
957  return false;
958  }
959  reserve(reserved);
960  if (f->FReadEndian(&size_used_, sizeof(size_used_), 1) != 1) {
961  return false;
962  }
963  if (cb != nullptr) {
964  for (int i = 0; i < size_used_; ++i) {
965  if (!cb->Run(f, data_ + i)) {
966  delete cb;
967  return false;
968  }
969  }
970  delete cb;
971  } else {
972  if (f->FReadEndian(data_, sizeof(T), size_used_) != size_used_) {
973  return false;
974  }
975  }
976  return true;
977 }
int32_t size_used_
void reserve(int size)
virtual R Run(A1, A2)=0
int FReadEndian(void *buffer, size_t size, int count)
Definition: serialis.cpp:259
template<typename T >
void GenericVector< T >::remove ( int  index)

Definition at line 812 of file genericvector.h.

812  {
813  assert(index >= 0 && index < size_used_);
814  for (int i = index; i < size_used_ - 1; ++i) {
815  data_[i] = data_[i + 1];
816  }
817  size_used_--;
818 }
int32_t size_used_
template<typename T >
void GenericVector< T >::reserve ( int  size)

Definition at line 726 of file genericvector.h.

726  {
727  if (size_reserved_ >= size || size <= 0) {
728  return;
729  }
730  if (size < kDefaultVectorSize) {
732  }
733  T* new_array = new T[size];
734  for (int i = 0; i < size_used_; ++i) {
735  new_array[i] = data_[i];
736  }
737  delete[] data_;
738  data_ = new_array;
740 }
int32_t size_used_
int32_t size_reserved_
static const int kDefaultVectorSize
int size() const
Definition: genericvector.h:70
template<typename T>
void GenericVector< T >::resize_no_init ( int  size)
inline

Definition at line 64 of file genericvector.h.

64  {
65  reserve(size);
66  size_used_ = size;
67  }
int32_t size_used_
void reserve(int size)
int size() const
Definition: genericvector.h:70
template<typename T>
void GenericVector< T >::reverse ( )
inline

Definition at line 219 of file genericvector.h.

219  {
220  for (int i = 0; i < size_used_ / 2; ++i) {
221  Swap(&data_[i], &data_[size_used_ - 1 - i]);
222  }
223  }
void Swap(T *p1, T *p2)
Definition: helpers.h:95
int32_t size_used_
template<typename T >
bool GenericVector< T >::Serialize ( FILE *  fp) const

Definition at line 982 of file genericvector.h.

982  {
983  if (fwrite(&size_used_, sizeof(size_used_), 1, fp) != 1) {
984  return false;
985  }
986  if (fwrite(data_, sizeof(*data_), size_used_, fp) != unsigned_size()) {
987  return false;
988  }
989  return true;
990 }
int32_t size_used_
size_t unsigned_size() const
Definition: genericvector.h:74
template<typename T >
bool GenericVector< T >::Serialize ( tesseract::TFile fp) const

Definition at line 992 of file genericvector.h.

992  {
993  if (fp->FWrite(&size_used_, sizeof(size_used_), 1) != 1) {
994  return false;
995  }
996  if (fp->FWrite(data_, sizeof(*data_), size_used_) != size_used_) {
997  return false;
998  }
999  return true;
1000 }
int32_t size_used_
int FWrite(const void *buffer, size_t size, int count)
Definition: serialis.cpp:318
template<typename T >
bool GenericVector< T >::SerializeClasses ( FILE *  fp) const

Definition at line 1061 of file genericvector.h.

1061  {
1062  if (fwrite(&size_used_, sizeof(size_used_), 1, fp) != 1) {
1063  return false;
1064  }
1065  for (int i = 0; i < size_used_; ++i) {
1066  if (!data_[i].Serialize(fp)) {
1067  return false;
1068  }
1069  }
1070  return true;
1071 }
bool Serialize(FILE *fp) const
int32_t size_used_
template<typename T >
bool GenericVector< T >::SerializeClasses ( tesseract::TFile fp) const

Definition at line 1073 of file genericvector.h.

1073  {
1074  if (fp->FWrite(&size_used_, sizeof(size_used_), 1) != 1) {
1075  return false;
1076  }
1077  for (int i = 0; i < size_used_; ++i) {
1078  if (!data_[i].Serialize(fp)) {
1079  return false;
1080  }
1081  }
1082  return true;
1083 }
bool Serialize(FILE *fp) const
int32_t size_used_
int FWrite(const void *buffer, size_t size, int count)
Definition: serialis.cpp:318
template<typename T>
void GenericVector< T >::set ( const T &  t,
int  index 
)

Definition at line 788 of file genericvector.h.

788  {
789  assert(index >= 0 && index < size_used_);
790  data_[index] = t;
791 }
int32_t size_used_
template<typename T>
void GenericVector< T >::set_clear_callback ( TessCallback1< T > *  cb)
inline

Definition at line 143 of file genericvector.h.

143  {
144  clear_cb_ = cb;
145  }
TessCallback1< T > * clear_cb_
template<typename T>
void GenericVector< T >::set_compare_callback ( TessResultCallback2< bool, T const &, T const & > *  cb)
inline

Definition at line 149 of file genericvector.h.

149  {
150  compare_cb_ = cb;
151  }
TessResultCallback2< bool, T const &, T const & > * compare_cb_
template<typename T>
int GenericVector< T >::size ( ) const
inline

Definition at line 70 of file genericvector.h.

70  {
71  return size_used_;
72  }
int32_t size_used_
template<typename T>
int GenericVector< T >::size_reserved ( ) const
inline

Definition at line 80 of file genericvector.h.

80  {
81  return size_reserved_;
82  }
int32_t size_reserved_
template<typename T >
bool GenericVector< T >::SkipDeSerialize ( tesseract::TFile fp)
static

Definition at line 1049 of file genericvector.h.

1049  {
1050  uint32_t reserved;
1051  if (fp->FReadEndian(&reserved, sizeof(reserved), 1) != 1) {
1052  return false;
1053  }
1054  return (uint32_t)fp->FRead(nullptr, sizeof(T), reserved) == reserved;
1055 }
int FRead(void *buffer, size_t size, int count)
Definition: serialis.cpp:270
int FReadEndian(void *buffer, size_t size, int count)
Definition: serialis.cpp:259
template<typename T >
bool GenericVector< T >::SkipDeSerializeClasses ( tesseract::TFile fp)
static

Definition at line 1124 of file genericvector.h.

1124  {
1125  int32_t reserved;
1126  if (fp->FReadEndian(&reserved, sizeof(reserved), 1) != 1) {
1127  return false;
1128  }
1129  for (int i = 0; i < reserved; ++i) {
1130  if (!T::SkipDeSerialize(fp)) {
1131  return false;
1132  }
1133  }
1134  return true;
1135 }
int FReadEndian(void *buffer, size_t size, int count)
Definition: serialis.cpp:259
template<typename T >
void GenericVector< T >::sort ( )

Definition at line 1155 of file genericvector.h.

1155  {
1156  sort(&tesseract::sort_cmp<T>);
1157 }
template<typename T>
void GenericVector< T >::sort ( int(*)(const void *, const void *)  comparator)
inline

Definition at line 236 of file genericvector.h.

236  {
237  qsort(data_, size_used_, sizeof(*data_), comparator);
238  }
int32_t size_used_
template<typename T>
void GenericVector< T >::swap ( int  index1,
int  index2 
)
inline

Definition at line 332 of file genericvector.h.

332  {
333  if (index1 != index2) {
334  T tmp = data_[index1];
335  data_[index1] = data_[index2];
336  data_[index2] = tmp;
337  }
338  }
template<typename T>
void GenericVector< T >::truncate ( int  size)
inline

Definition at line 135 of file genericvector.h.

135  {
136  if (size < size_used_) {
137  size_used_ = size;
138  }
139  }
int32_t size_used_
int size() const
Definition: genericvector.h:70
template<typename T>
size_t GenericVector< T >::unsigned_size ( ) const
inline

Definition at line 74 of file genericvector.h.

74  {
75  static_assert(sizeof(size_used_) <= sizeof(size_t),
76  "Wow! sizeof(size_t) < sizeof(int32_t)!!");
77  assert(0 <= size_used_);
78  return static_cast<size_t>(size_used_);
79  }
int32_t size_used_
template<typename T>
bool GenericVector< T >::WithinBounds ( const T &  rangemin,
const T &  rangemax 
) const
inline

Definition at line 341 of file genericvector.h.

341  {
342  for (int i = 0; i < size_used_; ++i) {
343  if (data_[i] < rangemin || rangemax < data_[i]) {
344  return false;
345  }
346  }
347  return true;
348  }
int32_t size_used_
template<typename T>
bool GenericVector< T >::write ( FILE *  f,
TessResultCallback2< bool, FILE *, T const & > *  cb 
) const

Definition at line 928 of file genericvector.h.

929  {
930  if (fwrite(&size_reserved_, sizeof(size_reserved_), 1, f) != 1) {
931  return false;
932  }
933  if (fwrite(&size_used_, sizeof(size_used_), 1, f) != 1) {
934  return false;
935  }
936  if (cb != nullptr) {
937  for (int i = 0; i < size_used_; ++i) {
938  if (!cb->Run(f, data_[i])) {
939  delete cb;
940  return false;
941  }
942  }
943  delete cb;
944  } else {
945  if (fwrite(data_, sizeof(T), size_used_, f) != unsigned_size()) {
946  return false;
947  }
948  }
949  return true;
950 }
int32_t size_used_
int32_t size_reserved_
size_t unsigned_size() const
Definition: genericvector.h:74
virtual R Run(A1, A2)=0

Member Data Documentation

template<typename T>
TessCallback1<T>* GenericVector< T >::clear_cb_
protected

Definition at line 364 of file genericvector.h.

template<typename T>
TessResultCallback2<bool, T const&, T const&>* GenericVector< T >::compare_cb_
mutableprotected

Definition at line 366 of file genericvector.h.

template<typename T>
T* GenericVector< T >::data_
protected

Definition at line 363 of file genericvector.h.

template<typename T>
const int GenericVector< T >::kDefaultVectorSize = 4
staticprotected

Definition at line 360 of file genericvector.h.

template<typename T>
int32_t GenericVector< T >::size_reserved_ {}
protected

Definition at line 362 of file genericvector.h.

template<typename T>
int32_t GenericVector< T >::size_used_ {}
protected

Definition at line 361 of file genericvector.h.


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