tesseract  4.00.00dev
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, 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, 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 (T object) const
 
bool contains (T object) const
 
contains_index (int index) const
 
int push_back (T object)
 
void operator+= (T t)
 
int push_back_new (T object)
 
int push_front (T object)
 
void set (T t, int index)
 
void insert (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 size_used_
 
inT32 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

◆ GenericVector() [1/3]

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

Definition at line 40 of file genericvector.h.

40  {
42  }
static const int kDefaultVectorSize
void init(int size)

◆ GenericVector() [2/3]

template<typename T>
GenericVector< T >::GenericVector ( int  size,
init_val 
)
inline

Definition at line 43 of file genericvector.h.

43  {
44  init(size);
45  init_to_size(size, init_val);
46  }
int size() const
Definition: genericvector.h:72
void init_to_size(int size, T t)
void init(int size)

◆ GenericVector() [3/3]

template<typename T>
GenericVector< T >::GenericVector ( const GenericVector< T > &  other)
inline

Definition at line 49 of file genericvector.h.

49  {
50  this->init(other.size());
51  this->operator+=(other);
52  }
int size() const
Definition: genericvector.h:72
GenericVector< T > & operator+=(const GenericVector &other)
void init(int size)

◆ ~GenericVector()

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

Definition at line 666 of file genericvector.h.

666  {
667  clear();
668 }

Member Function Documentation

◆ back()

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

Definition at line 719 of file genericvector.h.

719  {
720  ASSERT_HOST(size_used_ > 0);
721  return data_[size_used_ - 1];
722 }
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ binary_search()

template<typename T>
int GenericVector< T >::binary_search ( const T &  target) const
inline

Definition at line 251 of file genericvector.h.

251  {
252  int bottom = 0;
253  int top = size_used_;
254  while (top - bottom > 1) {
255  int middle = (bottom + top) / 2;
256  if (data_[middle] > target)
257  top = middle;
258  else
259  bottom = middle;
260  }
261  return bottom;
262  }

◆ bool_binary_search()

template<typename T>
bool GenericVector< T >::bool_binary_search ( const T &  target) const
inline

Definition at line 239 of file genericvector.h.

239  {
240  int index = binary_search(target);
241  if (index >= size_used_)
242  return false;
243  return data_[index] == target;
244  }
int binary_search(const T &target) const

◆ choose_nth_item() [1/2]

template<typename T>
int GenericVector< T >::choose_nth_item ( int  target_index)
inline

Definition at line 310 of file genericvector.h.

310  {
311  // Make sure target_index is legal.
312  if (target_index < 0)
313  target_index = 0; // ensure legal
314  else if (target_index >= size_used_)
315  target_index = size_used_ - 1;
316  unsigned int seed = 1;
317  return choose_nth_item(target_index, 0, size_used_, &seed);
318  }
int choose_nth_item(int target_index)

◆ choose_nth_item() [2/2]

template<typename T >
int GenericVector< T >::choose_nth_item ( int  target_index,
int  start,
int  end,
unsigned int *  seed 
)
protected

Definition at line 1071 of file genericvector.h.

1072  {
1073  // Number of elements to process.
1074  int num_elements = end - start;
1075  // Trivial cases.
1076  if (num_elements <= 1)
1077  return start;
1078  if (num_elements == 2) {
1079  if (data_[start] < data_[start + 1]) {
1080  return target_index > start ? start + 1 : start;
1081  } else {
1082  return target_index > start ? start : start + 1;
1083  }
1084  }
1085  // Place the pivot at start.
1086  #ifndef rand_r // _MSC_VER, ANDROID
1087  srand(*seed);
1088  #define rand_r(seed) rand()
1089  #endif // _MSC_VER
1090  int pivot = rand_r(seed) % num_elements + start;
1091  swap(pivot, start);
1092  // The invariant condition here is that items [start, next_lesser) are less
1093  // than the pivot (which is at index next_lesser) and items
1094  // [prev_greater, end) are greater than the pivot, with items
1095  // [next_lesser, prev_greater) being equal to the pivot.
1096  int next_lesser = start;
1097  int prev_greater = end;
1098  for (int next_sample = start + 1; next_sample < prev_greater;) {
1099  if (data_[next_sample] < data_[next_lesser]) {
1100  swap(next_lesser++, next_sample++);
1101  } else if (data_[next_sample] == data_[next_lesser]) {
1102  ++next_sample;
1103  } else {
1104  swap(--prev_greater, next_sample);
1105  }
1106  }
1107  // Now the invariant is set up, we recurse on just the section that contains
1108  // the desired index.
1109  if (target_index < next_lesser)
1110  return choose_nth_item(target_index, start, next_lesser, seed);
1111  else if (target_index < prev_greater)
1112  return next_lesser; // In equal bracket.
1113  else
1114  return choose_nth_item(target_index, prev_greater, end, seed);
1115 }
#define rand_r(seed)
int choose_nth_item(int target_index)
void swap(int index1, int index2)

◆ clear()

template<typename T >
void GenericVector< T >::clear ( )

Definition at line 857 of file genericvector.h.

857  {
858  if (size_reserved_ > 0) {
859  if (clear_cb_ != NULL)
860  for (int i = 0; i < size_used_; ++i)
861  clear_cb_->Run(data_[i]);
862  delete[] data_;
863  data_ = NULL;
864  size_used_ = 0;
865  size_reserved_ = 0;
866  }
867  if (clear_cb_ != NULL) {
868  delete clear_cb_;
869  clear_cb_ = NULL;
870  }
871  if (compare_cb_ != NULL) {
872  delete compare_cb_;
873  compare_cb_ = NULL;
874  }
875 }
inT32 size_reserved_
TessCallback1< T > * clear_cb_
TessResultCallback2< bool, T const &, T const & > * compare_cb_
virtual void Run(A1)=0

◆ compact()

template<typename T>
void GenericVector< T >::compact ( TessResultCallback1< bool, int > *  delete_cb)
inline

Definition at line 283 of file genericvector.h.

283  {
284  int new_size = 0;
285  int old_index = 0;
286  // Until the callback returns true, the elements stay the same.
287  while (old_index < size_used_ && !delete_cb->Run(old_index++))
288  ++new_size;
289  // Now just copy anything else that gets false from delete_cb.
290  for (; old_index < size_used_; ++old_index) {
291  if (!delete_cb->Run(old_index)) {
292  data_[new_size++] = data_[old_index];
293  }
294  }
295  size_used_ = new_size;
296  delete delete_cb;
297  }
virtual R Run(A1)=0

◆ compact_sorted()

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

Definition at line 266 of file genericvector.h.

266  {
267  if (size_used_ == 0)
268  return;
269 
270  // First element is in no matter what, hence the i = 1.
271  int last_write = 0;
272  for (int i = 1; i < size_used_; ++i) {
273  // Finds next unique item and writes it.
274  if (data_[last_write] != data_[i])
275  data_[++last_write] = data_[i];
276  }
277  // last_write is the index of a valid data cell, so add 1.
278  size_used_ = last_write + 1;
279  }

◆ contains()

template<typename T>
bool GenericVector< T >::contains ( object) const

Definition at line 782 of file genericvector.h.

782  {
783  return get_index(object) != -1;
784 }
int get_index(T object) const

◆ contains_index()

template<typename T >
T GenericVector< T >::contains_index ( int  index) const

Definition at line 765 of file genericvector.h.

765  {
766  return index >= 0 && index < size_used_;
767 }

◆ delete_data_pointers()

template<typename T >
void GenericVector< T >::delete_data_pointers ( )

Definition at line 878 of file genericvector.h.

878  {
879  for (int i = 0; i < size_used_; ++i)
880  if (data_[i]) {
881  delete data_[i];
882  }
883 }

◆ DeSerialize() [1/2]

template<typename T >
bool GenericVector< T >::DeSerialize ( bool  swap,
FILE *  fp 
)

Definition at line 949 of file genericvector.h.

949  {
950  inT32 reserved;
951  if (fread(&reserved, sizeof(reserved), 1, fp) != 1) return false;
952  if (swap) Reverse32(&reserved);
953  reserve(reserved);
954  size_used_ = reserved;
955  if (fread(data_, sizeof(T), size_used_, fp) != unsigned_size()) return false;
956  if (swap) {
957  for (int i = 0; i < size_used_; ++i)
958  ReverseN(&data_[i], sizeof(data_[i]));
959  }
960  return true;
961 }
void reserve(int size)
void Reverse32(void *ptr)
Definition: helpers.h:200
size_t unsigned_size() const
Definition: genericvector.h:76
int32_t inT32
Definition: host.h:38
void ReverseN(void *ptr, int num_bytes)
Definition: helpers.h:184
void swap(int index1, int index2)

◆ DeSerialize() [2/2]

template<typename T >
bool GenericVector< T >::DeSerialize ( tesseract::TFile fp)

Definition at line 963 of file genericvector.h.

963  {
964  inT32 reserved;
965  if (fp->FReadEndian(&reserved, sizeof(reserved), 1) != 1) return false;
966  reserve(reserved);
967  size_used_ = reserved;
968  return fp->FReadEndian(data_, sizeof(T), size_used_) == size_used_;
969 }
void reserve(int size)
int32_t inT32
Definition: host.h:38
int FReadEndian(void *buffer, int size, int count)
Definition: serialis.cpp:97

◆ DeSerializeClasses() [1/2]

template<typename T >
bool GenericVector< T >::DeSerializeClasses ( bool  swap,
FILE *  fp 
)

Definition at line 1003 of file genericvector.h.

1003  {
1004  inT32 reserved;
1005  if (fread(&reserved, sizeof(reserved), 1, fp) != 1) return false;
1006  if (swap) Reverse32(&reserved);
1007  T empty;
1008  init_to_size(reserved, empty);
1009  for (int i = 0; i < reserved; ++i) {
1010  if (!data_[i].DeSerialize(swap, fp)) return false;
1011  }
1012  return true;
1013 }
bool empty() const
Definition: genericvector.h:91
void Reverse32(void *ptr)
Definition: helpers.h:200
int32_t inT32
Definition: host.h:38
bool DeSerialize(bool swap, FILE *fp)
void swap(int index1, int index2)
void init_to_size(int size, T t)

◆ DeSerializeClasses() [2/2]

template<typename T >
bool GenericVector< T >::DeSerializeClasses ( tesseract::TFile fp)

Definition at line 1015 of file genericvector.h.

1015  {
1016  inT32 reserved;
1017  if (fp->FReadEndian(&reserved, sizeof(reserved), 1) != 1) return false;
1018  T empty;
1019  init_to_size(reserved, empty);
1020  for (int i = 0; i < reserved; ++i) {
1021  if (!data_[i].DeSerialize(fp)) return false;
1022  }
1023  return true;
1024 }
bool empty() const
Definition: genericvector.h:91
int32_t inT32
Definition: host.h:38
bool DeSerialize(bool swap, FILE *fp)
int FReadEndian(void *buffer, int size, int count)
Definition: serialis.cpp:97
void init_to_size(int size, T t)

◆ dot_product()

template<typename T>
T GenericVector< T >::dot_product ( const GenericVector< T > &  other) const
inline

Definition at line 299 of file genericvector.h.

299  {
300  T result = static_cast<T>(0);
301  for (int i = MIN(size_used_, other.size_used_) - 1; i >= 0; --i)
302  result += data_[i] * other.data_[i];
303  return result;
304  }
#define MIN(x, y)
Definition: ndminx.h:28

◆ double_the_size()

template<typename T >
void GenericVector< T >::double_the_size ( )

Definition at line 686 of file genericvector.h.

686  {
687  if (size_reserved_ == 0) {
689  }
690  else {
691  reserve(2 * size_reserved_);
692  }
693 }
void reserve(int size)
inT32 size_reserved_
static const int kDefaultVectorSize

◆ double_the_size_memcpy()

template<typename T>
static T* GenericVector< T >::double_the_size_memcpy ( int  current_size,
T *  data 
)
inlinestatic

Definition at line 208 of file genericvector.h.

208  {
209  T *data_new = new T[current_size * 2];
210  memcpy(data_new, data, sizeof(T) * current_size);
211  delete[] data;
212  return data_new;
213  }

◆ empty()

template<typename T>
bool GenericVector< T >::empty ( ) const
inline

Definition at line 91 of file genericvector.h.

91  {
92  return size_used_ == 0;
93  }

◆ get()

template<typename T >
T & GenericVector< T >::get ( int  index) const

Definition at line 707 of file genericvector.h.

707  {
708  ASSERT_HOST(index >= 0 && index < size_used_);
709  return data_[index];
710 }
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ get_index()

template<typename T>
int GenericVector< T >::get_index ( object) const

Definition at line 771 of file genericvector.h.

771  {
772  for (int i = 0; i < size_used_; ++i) {
773  ASSERT_HOST(compare_cb_ != NULL);
774  if (compare_cb_->Run(object, data_[i]))
775  return i;
776  }
777  return -1;
778 }
virtual R Run(A1, A2)=0
TessResultCallback2< bool, T const &, T const & > * compare_cb_
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ init()

template<typename T >
void GenericVector< T >::init ( int  size)
protected

Definition at line 656 of file genericvector.h.

656  {
657  size_used_ = 0;
658  size_reserved_ = 0;
659  data_ = 0;
660  clear_cb_ = 0;
661  compare_cb_ = 0;
662  reserve(size);
663 }
void reserve(int size)
inT32 size_reserved_
TessCallback1< T > * clear_cb_
int size() const
Definition: genericvector.h:72
TessResultCallback2< bool, T const &, T const & > * compare_cb_

◆ init_to_size()

template<typename T>
void GenericVector< T >::init_to_size ( int  size,
t 
)

Definition at line 697 of file genericvector.h.

697  {
698  reserve(size);
699  size_used_ = size;
700  for (int i = 0; i < size; ++i)
701  data_[i] = t;
702 }
void reserve(int size)
int size() const
Definition: genericvector.h:72

◆ insert()

template<typename T>
void GenericVector< T >::insert ( t,
int  index 
)

Definition at line 741 of file genericvector.h.

741  {
742  ASSERT_HOST(index >= 0 && index <= size_used_);
743  if (size_reserved_ == size_used_)
744  double_the_size();
745  for (int i = size_used_; i > index; --i) {
746  data_[i] = data_[i-1];
747  }
748  data_[index] = t;
749  size_used_++;
750 }
inT32 size_reserved_
void double_the_size()
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ length()

template<typename T>
int GenericVector< T >::length ( ) const
inline

Definition at line 86 of file genericvector.h.

86  {
87  return size_used_;
88  }

◆ move()

template<typename T>
void GenericVector< T >::move ( GenericVector< T > *  from)

Definition at line 1038 of file genericvector.h.

1038  {
1039  this->clear();
1040  this->data_ = from->data_;
1041  this->size_reserved_ = from->size_reserved_;
1042  this->size_used_ = from->size_used_;
1043  this->compare_cb_ = from->compare_cb_;
1044  this->clear_cb_ = from->clear_cb_;
1045  from->data_ = NULL;
1046  from->clear_cb_ = NULL;
1047  from->compare_cb_ = NULL;
1048  from->size_used_ = 0;
1049  from->size_reserved_ = 0;
1050 }
inT32 size_reserved_
TessCallback1< T > * clear_cb_
TessResultCallback2< bool, T const &, T const & > * compare_cb_

◆ operator+=() [1/2]

template<typename T >
GenericVector< T > & GenericVector< T >::operator+= ( const GenericVector< T > &  other)

Definition at line 823 of file genericvector.h.

823  {
824  this->reserve(size_used_ + other.size_used_);
825  for (int i = 0; i < other.size(); ++i) {
826  this->operator+=(other.data_[i]);
827  }
828  return *this;
829 }
void reserve(int size)
int size() const
Definition: genericvector.h:72
GenericVector< T > & operator+=(const GenericVector &other)

◆ operator+=() [2/2]

template<typename T>
void GenericVector< T >::operator+= ( t)

Definition at line 818 of file genericvector.h.

818  {
819  push_back(t);
820 }
int push_back(T object)

◆ operator=()

template<typename T >
GenericVector< T > & GenericVector< T >::operator= ( const GenericVector< T > &  other)

Definition at line 832 of file genericvector.h.

832  {
833  if (&other != this) {
834  this->truncate(0);
835  this->operator+=(other);
836  }
837  return *this;
838 }
void truncate(int size)
GenericVector< T > & operator+=(const GenericVector &other)

◆ operator[]()

template<typename T >
T & GenericVector< T >::operator[] ( int  index) const

Definition at line 713 of file genericvector.h.

713  {
714  assert(index >= 0 && index < size_used_);
715  return data_[index];
716 }

◆ pop_back()

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

Definition at line 725 of file genericvector.h.

725  {
726  ASSERT_HOST(size_used_ > 0);
727  return data_[--size_used_];
728 }
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ push_back()

template<typename T>
int GenericVector< T >::push_back ( object)

Definition at line 788 of file genericvector.h.

788  {
789  int index = 0;
790  if (size_used_ == size_reserved_)
791  double_the_size();
792  index = size_used_++;
793  data_[index] = object;
794  return index;
795 }
inT32 size_reserved_
void double_the_size()

◆ push_back_new()

template<typename T>
int GenericVector< T >::push_back_new ( object)

Definition at line 798 of file genericvector.h.

798  {
799  int index = get_index(object);
800  if (index >= 0)
801  return index;
802  return push_back(object);
803 }
int get_index(T object) const
int push_back(T object)

◆ push_front()

template<typename T>
int GenericVector< T >::push_front ( object)

Definition at line 807 of file genericvector.h.

807  {
808  if (size_used_ == size_reserved_)
809  double_the_size();
810  for (int i = size_used_; i > 0; --i)
811  data_[i] = data_[i-1];
812  data_[0] = object;
813  ++size_used_;
814  return 0;
815 }
inT32 size_reserved_
void double_the_size()

◆ read()

template<typename T>
bool GenericVector< T >::read ( tesseract::TFile f,
TessResultCallback2< bool, tesseract::TFile *, T *> *  cb 
)

Definition at line 907 of file genericvector.h.

908  {
909  inT32 reserved;
910  if (f->FReadEndian(&reserved, sizeof(reserved), 1) != 1) return false;
911  reserve(reserved);
912  if (f->FReadEndian(&size_used_, sizeof(size_used_), 1) != 1) return false;
913  if (cb != NULL) {
914  for (int i = 0; i < size_used_; ++i) {
915  if (!cb->Run(f, data_ + i)) {
916  delete cb;
917  return false;
918  }
919  }
920  delete cb;
921  } else {
922  if (f->FReadEndian(data_, sizeof(T), size_used_) != size_used_)
923  return false;
924  }
925  return true;
926 }
void reserve(int size)
virtual R Run(A1, A2)=0
int32_t inT32
Definition: host.h:38
int FReadEndian(void *buffer, int size, int count)
Definition: serialis.cpp:97

◆ remove()

template<typename T >
void GenericVector< T >::remove ( int  index)

Definition at line 755 of file genericvector.h.

755  {
756  ASSERT_HOST(index >= 0 && index < size_used_);
757  for (int i = index; i < size_used_ - 1; ++i) {
758  data_[i] = data_[i+1];
759  }
760  size_used_--;
761 }
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ reserve()

template<typename T >
void GenericVector< T >::reserve ( int  size)

Definition at line 673 of file genericvector.h.

673  {
674  if (size_reserved_ >= size || size <= 0)
675  return;
677  T* new_array = new T[size];
678  for (int i = 0; i < size_used_; ++i)
679  new_array[i] = data_[i];
680  delete[] data_;
681  data_ = new_array;
683 }
inT32 size_reserved_
int size() const
Definition: genericvector.h:72
static const int kDefaultVectorSize

◆ resize_no_init()

template<typename T>
void GenericVector< T >::resize_no_init ( int  size)
inline

Definition at line 66 of file genericvector.h.

66  {
67  reserve(size);
68  size_used_ = size;
69  }
void reserve(int size)
int size() const
Definition: genericvector.h:72

◆ reverse()

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

Definition at line 216 of file genericvector.h.

216  {
217  for (int i = 0; i < size_used_ / 2; ++i)
218  Swap(&data_[i], &data_[size_used_ - 1 - i]);
219  }
void Swap(T *p1, T *p2)
Definition: helpers.h:97

◆ Serialize() [1/2]

template<typename T >
bool GenericVector< T >::Serialize ( FILE *  fp) const

Definition at line 931 of file genericvector.h.

931  {
932  if (fwrite(&size_used_, sizeof(size_used_), 1, fp) != 1) return false;
933  if (fwrite(data_, sizeof(*data_), size_used_, fp) != unsigned_size())
934  return false;
935  return true;
936 }
size_t unsigned_size() const
Definition: genericvector.h:76

◆ Serialize() [2/2]

template<typename T >
bool GenericVector< T >::Serialize ( tesseract::TFile fp) const

Definition at line 938 of file genericvector.h.

938  {
939  if (fp->FWrite(&size_used_, sizeof(size_used_), 1) != 1) return false;
940  if (fp->FWrite(data_, sizeof(*data_), size_used_) != size_used_) return false;
941  return true;
942 }
int FWrite(const void *buffer, int size, int count)
Definition: serialis.cpp:148

◆ SerializeClasses() [1/2]

template<typename T >
bool GenericVector< T >::SerializeClasses ( FILE *  fp) const

Definition at line 981 of file genericvector.h.

981  {
982  if (fwrite(&size_used_, sizeof(size_used_), 1, fp) != 1) return false;
983  for (int i = 0; i < size_used_; ++i) {
984  if (!data_[i].Serialize(fp)) return false;
985  }
986  return true;
987 }
bool Serialize(FILE *fp) const

◆ SerializeClasses() [2/2]

template<typename T >
bool GenericVector< T >::SerializeClasses ( tesseract::TFile fp) const

Definition at line 989 of file genericvector.h.

989  {
990  if (fp->FWrite(&size_used_, sizeof(size_used_), 1) != 1) return false;
991  for (int i = 0; i < size_used_; ++i) {
992  if (!data_[i].Serialize(fp)) return false;
993  }
994  return true;
995 }
int FWrite(const void *buffer, int size, int count)
Definition: serialis.cpp:148
bool Serialize(FILE *fp) const

◆ set()

template<typename T>
void GenericVector< T >::set ( t,
int  index 
)

Definition at line 732 of file genericvector.h.

732  {
733  ASSERT_HOST(index >= 0 && index < size_used_);
734  data_[index] = t;
735 }
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ set_clear_callback()

template<typename T>
void GenericVector< T >::set_clear_callback ( TessCallback1< T > *  cb)

Definition at line 843 of file genericvector.h.

843  {
844  clear_cb_ = cb;
845 }
TessCallback1< T > * clear_cb_

◆ set_compare_callback()

template<typename T>
void GenericVector< T >::set_compare_callback ( TessResultCallback2< bool, T const &, T const &> *  cb)

Definition at line 850 of file genericvector.h.

851  {
852  compare_cb_ = cb;
853 }
TessResultCallback2< bool, T const &, T const & > * compare_cb_

◆ size()

template<typename T>
int GenericVector< T >::size ( ) const
inline

Definition at line 72 of file genericvector.h.

72  {
73  return size_used_;
74  }

◆ size_reserved()

template<typename T>
int GenericVector< T >::size_reserved ( ) const
inline

Definition at line 82 of file genericvector.h.

82  {
83  return size_reserved_;
84  }
inT32 size_reserved_

◆ SkipDeSerialize()

template<typename T >
bool GenericVector< T >::SkipDeSerialize ( tesseract::TFile fp)
static

Definition at line 971 of file genericvector.h.

971  {
972  inT32 reserved;
973  if (fp->FReadEndian(&reserved, sizeof(reserved), 1) != 1) return false;
974  return fp->FRead(NULL, sizeof(T), reserved) == reserved;
975 }
int32_t inT32
Definition: host.h:38
int FReadEndian(void *buffer, int size, int count)
Definition: serialis.cpp:97
int FRead(void *buffer, int size, int count)
Definition: serialis.cpp:108

◆ SkipDeSerializeClasses()

template<typename T >
bool GenericVector< T >::SkipDeSerializeClasses ( tesseract::TFile fp)
static

Definition at line 1026 of file genericvector.h.

1026  {
1027  inT32 reserved;
1028  if (fp->FReadEndian(&reserved, sizeof(reserved), 1) != 1) return false;
1029  for (int i = 0; i < reserved; ++i) {
1030  if (!T::SkipDeSerialize(fp)) return false;
1031  }
1032  return true;
1033 }
int32_t inT32
Definition: host.h:38
int FReadEndian(void *buffer, int size, int count)
Definition: serialis.cpp:97

◆ sort() [1/2]

template<typename T >
void GenericVector< T >::sort ( )

Definition at line 1053 of file genericvector.h.

1053  {
1054  sort(&tesseract::sort_cmp<T>);
1055 }

◆ sort() [2/2]

template<typename T>
void GenericVector< T >::sort ( int(*)(const void *, const void *)  comparator)
inline

Definition at line 232 of file genericvector.h.

232  {
233  qsort(data_, size_used_, sizeof(*data_), comparator);
234  }

◆ swap()

template<typename T>
void GenericVector< T >::swap ( int  index1,
int  index2 
)
inline

Definition at line 321 of file genericvector.h.

321  {
322  if (index1 != index2) {
323  T tmp = data_[index1];
324  data_[index1] = data_[index2];
325  data_[index2] = tmp;
326  }
327  }

◆ truncate()

template<typename T>
void GenericVector< T >::truncate ( int  size)
inline

Definition at line 137 of file genericvector.h.

137  {
138  if (size < size_used_)
139  size_used_ = size;
140  }
int size() const
Definition: genericvector.h:72

◆ unsigned_size()

template<typename T>
size_t GenericVector< T >::unsigned_size ( ) const
inline

Definition at line 76 of file genericvector.h.

76  {
77  static_assert(sizeof(size_used_) <= sizeof(size_t),
78  "Wow! sizeof(size_t) < sizeof(int32_t)!!");
79  assert(0 <= size_used_);
80  return static_cast<size_t>(size_used_);
81  }

◆ WithinBounds()

template<typename T>
bool GenericVector< T >::WithinBounds ( const T &  rangemin,
const T &  rangemax 
) const
inline

Definition at line 330 of file genericvector.h.

330  {
331  for (int i = 0; i < size_used_; ++i) {
332  if (data_[i] < rangemin || rangemax < data_[i])
333  return false;
334  }
335  return true;
336  }

◆ write()

template<typename T>
bool GenericVector< T >::write ( FILE *  f,
TessResultCallback2< bool, FILE *, T const &> *  cb 
) const

Definition at line 887 of file genericvector.h.

888  {
889  if (fwrite(&size_reserved_, sizeof(size_reserved_), 1, f) != 1) return false;
890  if (fwrite(&size_used_, sizeof(size_used_), 1, f) != 1) return false;
891  if (cb != NULL) {
892  for (int i = 0; i < size_used_; ++i) {
893  if (!cb->Run(f, data_[i])) {
894  delete cb;
895  return false;
896  }
897  }
898  delete cb;
899  } else {
900  if (fwrite(data_, sizeof(T), size_used_, f) != unsigned_size())
901  return false;
902  }
903  return true;
904 }
inT32 size_reserved_
virtual R Run(A1, A2)=0
size_t unsigned_size() const
Definition: genericvector.h:76

Member Data Documentation

◆ clear_cb_

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

Definition at line 352 of file genericvector.h.

◆ compare_cb_

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

Definition at line 354 of file genericvector.h.

◆ data_

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

Definition at line 351 of file genericvector.h.

◆ kDefaultVectorSize

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

Definition at line 348 of file genericvector.h.

◆ size_reserved_

template<typename T>
inT32 GenericVector< T >::size_reserved_
protected

Definition at line 350 of file genericvector.h.

◆ size_used_

template<typename T>
inT32 GenericVector< T >::size_used_
protected

Definition at line 349 of file genericvector.h.


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