All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
GenericVector< T > Singleton Reference

#include <baseapi.h>

Inheritance diagram for GenericVector< T >:
GenericVectorEqEq< T > tesseract::PointerVector< tesseract::BaselineBlock > tesseract::PointerVector< tesseract::BaselineRow > tesseract::PointerVector< tesseract::DocumentData > tesseract::PointerVector< tesseract::ImageData > tesseract::PointerVector< tesseract::LanguageModelState > tesseract::PointerVector< tesseract::Shape > tesseract::PointerVector< tesseract::TrainingSample > 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
 
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 (FILE *f, TessResultCallback3< bool, FILE *, T *, bool > *cb, bool swap)
 
bool Serialize (FILE *fp) const
 
bool Serialize (tesseract::TFile *fp) const
 
bool DeSerialize (bool swap, FILE *fp)
 
bool DeSerialize (bool swap, tesseract::TFile *fp)
 
bool SerializeClasses (FILE *fp) const
 
bool SerializeClasses (tesseract::TFile *fp) const
 
bool DeSerializeClasses (bool swap, FILE *fp)
 
bool DeSerializeClasses (bool swap, 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 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>
singleton GenericVector< T >

Definition at line 41 of file baseapi.h.

Constructor & Destructor Documentation

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

Definition at line 40 of file genericvector.h.

40  {
42  }
void init(int size)
static const int kDefaultVectorSize
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(int size)
void init_to_size(int size, T t)
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  }
GenericVector< T > & operator+=(const GenericVector &other)
int size() const
Definition: genericvector.h:72
void init(int size)
template<typename T >
GenericVector< T >::~GenericVector ( )

Definition at line 616 of file genericvector.h.

616  {
617  clear();
618 }

Member Function Documentation

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

Definition at line 668 of file genericvector.h.

668  {
669  ASSERT_HOST(size_used_ > 0);
670  return data_[size_used_ - 1];
671 }
#define ASSERT_HOST(x)
Definition: errcode.h:84
template<typename T>
int GenericVector< T >::binary_search ( const T &  target) const
inline

Definition at line 238 of file genericvector.h.

238  {
239  int bottom = 0;
240  int top = size_used_;
241  do {
242  int middle = (bottom + top) / 2;
243  if (data_[middle] > target)
244  top = middle;
245  else
246  bottom = middle;
247  }
248  while (top - bottom > 1);
249  return bottom;
250  }
template<typename T>
bool GenericVector< T >::bool_binary_search ( const T &  target) const
inline

Definition at line 226 of file genericvector.h.

226  {
227  int index = binary_search(target);
228  if (index >= size_used_)
229  return false;
230  return data_[index] == target;
231  }
int binary_search(const T &target) const
template<typename T>
int GenericVector< T >::choose_nth_item ( int  target_index)
inline

Definition at line 298 of file genericvector.h.

298  {
299  // Make sure target_index is legal.
300  if (target_index < 0)
301  target_index = 0; // ensure legal
302  else if (target_index >= size_used_)
303  target_index = size_used_ - 1;
304  unsigned int seed = 1;
305  return choose_nth_item(target_index, 0, size_used_, &seed);
306  }
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 1016 of file genericvector.h.

1017  {
1018  // Number of elements to process.
1019  int num_elements = end - start;
1020  // Trivial cases.
1021  if (num_elements <= 1)
1022  return start;
1023  if (num_elements == 2) {
1024  if (data_[start] < data_[start + 1]) {
1025  return target_index > start ? start + 1 : start;
1026  } else {
1027  return target_index > start ? start : start + 1;
1028  }
1029  }
1030  // Place the pivot at start.
1031  #ifndef rand_r // _MSC_VER, ANDROID
1032  srand(*seed);
1033  #define rand_r(seed) rand()
1034  #endif // _MSC_VER
1035  int pivot = rand_r(seed) % num_elements + start;
1036  swap(pivot, start);
1037  // The invariant condition here is that items [start, next_lesser) are less
1038  // than the pivot (which is at index next_lesser) and items
1039  // [prev_greater, end) are greater than the pivot, with items
1040  // [next_lesser, prev_greater) being equal to the pivot.
1041  int next_lesser = start;
1042  int prev_greater = end;
1043  for (int next_sample = start + 1; next_sample < prev_greater;) {
1044  if (data_[next_sample] < data_[next_lesser]) {
1045  swap(next_lesser++, next_sample++);
1046  } else if (data_[next_sample] == data_[next_lesser]) {
1047  ++next_sample;
1048  } else {
1049  swap(--prev_greater, next_sample);
1050  }
1051  }
1052  // Now the invariant is set up, we recurse on just the section that contains
1053  // the desired index.
1054  if (target_index < next_lesser)
1055  return choose_nth_item(target_index, start, next_lesser, seed);
1056  else if (target_index < prev_greater)
1057  return next_lesser; // In equal bracket.
1058  else
1059  return choose_nth_item(target_index, prev_greater, end, seed);
1060 }
int choose_nth_item(int target_index)
#define rand_r(seed)
void swap(int index1, int index2)
template<typename T >
void GenericVector< T >::clear ( )

Definition at line 806 of file genericvector.h.

806  {
807  if (size_reserved_ > 0) {
808  if (clear_cb_ != NULL)
809  for (int i = 0; i < size_used_; ++i)
810  clear_cb_->Run(data_[i]);
811  delete[] data_;
812  data_ = NULL;
813  size_used_ = 0;
814  size_reserved_ = 0;
815  }
816  if (clear_cb_ != NULL) {
817  delete clear_cb_;
818  clear_cb_ = NULL;
819  }
820  if (compare_cb_ != NULL) {
821  delete compare_cb_;
822  compare_cb_ = NULL;
823  }
824 }
virtual void Run(A1)=0
inT32 size_reserved_
TessCallback1< T > * clear_cb_
TessResultCallback2< bool, T const &, T const & > * compare_cb_
#define NULL
Definition: host.h:144
template<typename T>
void GenericVector< T >::compact ( TessResultCallback1< bool, int > *  delete_cb)
inline

Definition at line 271 of file genericvector.h.

271  {
272  int new_size = 0;
273  int old_index = 0;
274  // Until the callback returns true, the elements stay the same.
275  while (old_index < size_used_ && !delete_cb->Run(old_index++))
276  ++new_size;
277  // Now just copy anything else that gets false from delete_cb.
278  for (; old_index < size_used_; ++old_index) {
279  if (!delete_cb->Run(old_index)) {
280  data_[new_size++] = data_[old_index];
281  }
282  }
283  size_used_ = new_size;
284  delete delete_cb;
285  }
virtual R Run(A1)=0
template<typename T>
void GenericVector< T >::compact_sorted ( )
inline

Definition at line 254 of file genericvector.h.

254  {
255  if (size_used_ == 0)
256  return;
257 
258  // First element is in no matter what, hence the i = 1.
259  int last_write = 0;
260  for (int i = 1; i < size_used_; ++i) {
261  // Finds next unique item and writes it.
262  if (data_[last_write] != data_[i])
263  data_[++last_write] = data_[i];
264  }
265  // last_write is the index of a valid data cell, so add 1.
266  size_used_ = last_write + 1;
267  }
template<typename T>
bool GenericVector< T >::contains ( object) const

Definition at line 731 of file genericvector.h.

731  {
732  return get_index(object) != -1;
733 }
int get_index(T object) const
template<typename T >
T GenericVector< T >::contains_index ( int  index) const

Definition at line 714 of file genericvector.h.

714  {
715  return index >= 0 && index < size_used_;
716 }
template<typename T >
void GenericVector< T >::delete_data_pointers ( )

Definition at line 827 of file genericvector.h.

827  {
828  for (int i = 0; i < size_used_; ++i)
829  if (data_[i]) {
830  delete data_[i];
831  }
832 }
template<typename T >
bool GenericVector< T >::DeSerialize ( bool  swap,
FILE *  fp 
)

Definition at line 902 of file genericvector.h.

902  {
903  inT32 reserved;
904  if (fread(&reserved, sizeof(reserved), 1, fp) != 1) return false;
905  if (swap) Reverse32(&reserved);
906  reserve(reserved);
907  size_used_ = reserved;
908  if (fread(data_, sizeof(T), size_used_, fp) != size_used_) return false;
909  if (swap) {
910  for (int i = 0; i < size_used_; ++i)
911  ReverseN(&data_[i], sizeof(data_[i]));
912  }
913  return true;
914 }
void Reverse32(void *ptr)
Definition: helpers.h:193
void swap(int index1, int index2)
void ReverseN(void *ptr, int num_bytes)
Definition: helpers.h:177
void reserve(int size)
int inT32
Definition: host.h:102
template<typename T >
bool GenericVector< T >::DeSerialize ( bool  swap,
tesseract::TFile fp 
)

Definition at line 916 of file genericvector.h.

916  {
917  inT32 reserved;
918  if (fp->FRead(&reserved, sizeof(reserved), 1) != 1) return false;
919  if (swap) Reverse32(&reserved);
920  reserve(reserved);
921  size_used_ = reserved;
922  if (fp->FRead(data_, sizeof(T), size_used_) != size_used_) return false;
923  if (swap) {
924  for (int i = 0; i < size_used_; ++i)
925  ReverseN(&data_[i], sizeof(data_[i]));
926  }
927  return true;
928 }
void Reverse32(void *ptr)
Definition: helpers.h:193
void swap(int index1, int index2)
void ReverseN(void *ptr, int num_bytes)
Definition: helpers.h:177
void reserve(int size)
int FRead(void *buffer, int size, int count)
Definition: serialis.cpp:91
int inT32
Definition: host.h:102
template<typename T >
bool GenericVector< T >::DeSerializeClasses ( bool  swap,
FILE *  fp 
)

Definition at line 956 of file genericvector.h.

956  {
957  uinT32 reserved;
958  if (fread(&reserved, sizeof(reserved), 1, fp) != 1) return false;
959  if (swap) Reverse32(&reserved);
960  T empty;
961  init_to_size(reserved, empty);
962  for (int i = 0; i < reserved; ++i) {
963  if (!data_[i].DeSerialize(swap, fp)) return false;
964  }
965  return true;
966 }
void Reverse32(void *ptr)
Definition: helpers.h:193
unsigned int uinT32
Definition: host.h:103
void init_to_size(int size, T t)
bool DeSerialize(bool swap, FILE *fp)
bool empty() const
Definition: genericvector.h:84
void swap(int index1, int index2)
template<typename T >
bool GenericVector< T >::DeSerializeClasses ( bool  swap,
tesseract::TFile fp 
)

Definition at line 968 of file genericvector.h.

968  {
969  uinT32 reserved;
970  if (fp->FRead(&reserved, sizeof(reserved), 1) != 1) return false;
971  if (swap) Reverse32(&reserved);
972  T empty;
973  init_to_size(reserved, empty);
974  for (int i = 0; i < reserved; ++i) {
975  if (!data_[i].DeSerialize(swap, fp)) return false;
976  }
977  return true;
978 }
void Reverse32(void *ptr)
Definition: helpers.h:193
unsigned int uinT32
Definition: host.h:103
void init_to_size(int size, T t)
bool DeSerialize(bool swap, FILE *fp)
bool empty() const
Definition: genericvector.h:84
void swap(int index1, int index2)
int FRead(void *buffer, int size, int count)
Definition: serialis.cpp:91
template<typename T>
T GenericVector< T >::dot_product ( const GenericVector< T > &  other) const
inline

Definition at line 287 of file genericvector.h.

287  {
288  T result = static_cast<T>(0);
289  for (int i = MIN(size_used_, other.size_used_) - 1; i >= 0; --i)
290  result += data_[i] * other.data_[i];
291  return result;
292  }
#define MIN(x, y)
Definition: ndminx.h:28
template<typename T >
void GenericVector< T >::double_the_size ( )

Definition at line 635 of file genericvector.h.

635  {
636  if (size_reserved_ == 0) {
638  }
639  else {
640  reserve(2 * size_reserved_);
641  }
642 }
inT32 size_reserved_
static const int kDefaultVectorSize
void reserve(int size)
template<typename T>
static T* GenericVector< T >::double_the_size_memcpy ( int  current_size,
T *  data 
)
inlinestatic

Definition at line 195 of file genericvector.h.

195  {
196  T *data_new = new T[current_size * 2];
197  memcpy(data_new, data, sizeof(T) * current_size);
198  delete[] data;
199  return data_new;
200  }
template<typename T>
bool GenericVector< T >::empty ( ) const
inline

Definition at line 84 of file genericvector.h.

84  {
85  return size_used_ == 0;
86  }
template<typename T >
T & GenericVector< T >::get ( int  index) const

Definition at line 656 of file genericvector.h.

656  {
657  ASSERT_HOST(index >= 0 && index < size_used_);
658  return data_[index];
659 }
#define ASSERT_HOST(x)
Definition: errcode.h:84
template<typename T>
int GenericVector< T >::get_index ( object) const

Definition at line 720 of file genericvector.h.

720  {
721  for (int i = 0; i < size_used_; ++i) {
723  if (compare_cb_->Run(object, data_[i]))
724  return i;
725  }
726  return -1;
727 }
virtual R Run(A1, A2)=0
#define ASSERT_HOST(x)
Definition: errcode.h:84
TessResultCallback2< bool, T const &, T const & > * compare_cb_
#define NULL
Definition: host.h:144
template<typename T >
void GenericVector< T >::init ( int  size)
protected

Definition at line 606 of file genericvector.h.

606  {
607  size_used_ = 0;
608  size_reserved_ = 0;
609  data_ = 0;
610  clear_cb_ = 0;
611  compare_cb_ = 0;
612  reserve(size);
613 }
int size() const
Definition: genericvector.h:72
inT32 size_reserved_
TessCallback1< T > * clear_cb_
void reserve(int size)
TessResultCallback2< bool, T const &, T const & > * compare_cb_
template<typename T>
void GenericVector< T >::init_to_size ( int  size,
t 
)

Definition at line 646 of file genericvector.h.

646  {
647  reserve(size);
648  size_used_ = size;
649  for (int i = 0; i < size; ++i)
650  data_[i] = t;
651 }
int size() const
Definition: genericvector.h:72
void reserve(int size)
template<typename T>
void GenericVector< T >::insert ( t,
int  index 
)

Definition at line 690 of file genericvector.h.

690  {
691  ASSERT_HOST(index >= 0 && index <= size_used_);
692  if (size_reserved_ == size_used_)
693  double_the_size();
694  for (int i = size_used_; i > index; --i) {
695  data_[i] = data_[i-1];
696  }
697  data_[index] = t;
698  size_used_++;
699 }
#define ASSERT_HOST(x)
Definition: errcode.h:84
inT32 size_reserved_
void double_the_size()
template<typename T>
int GenericVector< T >::length ( ) const
inline

Definition at line 79 of file genericvector.h.

79  {
80  return size_used_;
81  }
template<typename T>
void GenericVector< T >::move ( GenericVector< T > *  from)

Definition at line 983 of file genericvector.h.

983  {
984  this->clear();
985  this->data_ = from->data_;
986  this->size_reserved_ = from->size_reserved_;
987  this->size_used_ = from->size_used_;
988  this->compare_cb_ = from->compare_cb_;
989  this->clear_cb_ = from->clear_cb_;
990  from->data_ = NULL;
991  from->clear_cb_ = NULL;
992  from->compare_cb_ = NULL;
993  from->size_used_ = 0;
994  from->size_reserved_ = 0;
995 }
inT32 size_reserved_
TessCallback1< T > * clear_cb_
TessResultCallback2< bool, T const &, T const & > * compare_cb_
#define NULL
Definition: host.h:144
template<typename T >
GenericVector< T > & GenericVector< T >::operator+= ( const GenericVector< T > &  other)

Definition at line 772 of file genericvector.h.

772  {
773  this->reserve(size_used_ + other.size_used_);
774  for (int i = 0; i < other.size(); ++i) {
775  this->operator+=(other.data_[i]);
776  }
777  return *this;
778 }
GenericVector< T > & operator+=(const GenericVector &other)
int size() const
Definition: genericvector.h:72
void reserve(int size)
template<typename T>
void GenericVector< T >::operator+= ( t)

Definition at line 767 of file genericvector.h.

767  {
768  push_back(t);
769 }
int push_back(T object)
template<typename T >
GenericVector< T > & GenericVector< T >::operator= ( const GenericVector< T > &  other)

Definition at line 781 of file genericvector.h.

781  {
782  if (&other != this) {
783  this->truncate(0);
784  this->operator+=(other);
785  }
786  return *this;
787 }
GenericVector< T > & operator+=(const GenericVector &other)
void truncate(int size)
template<typename T >
T & GenericVector< T >::operator[] ( int  index) const

Definition at line 662 of file genericvector.h.

662  {
663  assert(index >= 0 && index < size_used_);
664  return data_[index];
665 }
template<typename T >
T GenericVector< T >::pop_back ( )

Definition at line 674 of file genericvector.h.

674  {
675  ASSERT_HOST(size_used_ > 0);
676  return data_[--size_used_];
677 }
#define ASSERT_HOST(x)
Definition: errcode.h:84
template<typename T>
int GenericVector< T >::push_back ( object)

Definition at line 737 of file genericvector.h.

737  {
738  int index = 0;
739  if (size_used_ == size_reserved_)
740  double_the_size();
741  index = size_used_++;
742  data_[index] = object;
743  return index;
744 }
inT32 size_reserved_
void double_the_size()
template<typename T>
int GenericVector< T >::push_back_new ( object)

Definition at line 747 of file genericvector.h.

747  {
748  int index = get_index(object);
749  if (index >= 0)
750  return index;
751  return push_back(object);
752 }
int push_back(T object)
int get_index(T object) const
template<typename T>
int GenericVector< T >::push_front ( object)

Definition at line 756 of file genericvector.h.

756  {
757  if (size_used_ == size_reserved_)
758  double_the_size();
759  for (int i = size_used_; i > 0; --i)
760  data_[i] = data_[i-1];
761  data_[0] = object;
762  ++size_used_;
763  return 0;
764 }
inT32 size_reserved_
void double_the_size()
template<typename T>
bool GenericVector< T >::read ( FILE *  f,
TessResultCallback3< bool, FILE *, T *, bool > *  cb,
bool  swap 
)

Definition at line 855 of file genericvector.h.

857  {
858  inT32 reserved;
859  if (fread(&reserved, sizeof(reserved), 1, f) != 1) return false;
860  if (swap) Reverse32(&reserved);
861  reserve(reserved);
862  if (fread(&size_used_, sizeof(size_used_), 1, f) != 1) return false;
863  if (swap) Reverse32(&size_used_);
864  if (cb != NULL) {
865  for (int i = 0; i < size_used_; ++i) {
866  if (!cb->Run(f, data_ + i, swap)) {
867  delete cb;
868  return false;
869  }
870  }
871  delete cb;
872  } else {
873  if (fread(data_, sizeof(T), size_used_, f) != size_used_) return false;
874  if (swap) {
875  for (int i = 0; i < size_used_; ++i)
876  ReverseN(&data_[i], sizeof(T));
877  }
878  }
879  return true;
880 }
void Reverse32(void *ptr)
Definition: helpers.h:193
void swap(int index1, int index2)
void ReverseN(void *ptr, int num_bytes)
Definition: helpers.h:177
void reserve(int size)
#define NULL
Definition: host.h:144
int inT32
Definition: host.h:102
virtual R Run(A1, A2, A3)=0
template<typename T >
void GenericVector< T >::remove ( int  index)

Definition at line 704 of file genericvector.h.

704  {
705  ASSERT_HOST(index >= 0 && index < size_used_);
706  for (int i = index; i < size_used_ - 1; ++i) {
707  data_[i] = data_[i+1];
708  }
709  size_used_--;
710 }
#define ASSERT_HOST(x)
Definition: errcode.h:84
template<typename T >
void GenericVector< T >::reserve ( int  size)

Definition at line 623 of file genericvector.h.

623  {
624  if (size_reserved_ >= size || size <= 0)
625  return;
626  T* new_array = new T[size];
627  for (int i = 0; i < size_used_; ++i)
628  new_array[i] = data_[i];
629  if (data_ != NULL) delete[] data_;
630  data_ = new_array;
632 }
int size() const
Definition: genericvector.h:72
inT32 size_reserved_
#define NULL
Definition: host.h:144
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  }
int size() const
Definition: genericvector.h:72
void reserve(int size)
template<typename T>
void GenericVector< T >::reverse ( )
inline

Definition at line 203 of file genericvector.h.

203  {
204  for (int i = 0; i < size_used_ / 2; ++i)
205  Swap(&data_[i], &data_[size_used_ - 1 - i]);
206  }
void Swap(T *p1, T *p2)
Definition: helpers.h:90
template<typename T >
bool GenericVector< T >::Serialize ( FILE *  fp) const

Definition at line 885 of file genericvector.h.

885  {
886  if (fwrite(&size_used_, sizeof(size_used_), 1, fp) != 1) return false;
887  if (fwrite(data_, sizeof(*data_), size_used_, fp) != size_used_) return false;
888  return true;
889 }
template<typename T >
bool GenericVector< T >::Serialize ( tesseract::TFile fp) const

Definition at line 891 of file genericvector.h.

891  {
892  if (fp->FWrite(&size_used_, sizeof(size_used_), 1) != 1) return false;
893  if (fp->FWrite(data_, sizeof(*data_), size_used_) != size_used_) return false;
894  return true;
895 }
int FWrite(const void *buffer, int size, int count)
Definition: serialis.cpp:131
template<typename T >
bool GenericVector< T >::SerializeClasses ( FILE *  fp) const

Definition at line 934 of file genericvector.h.

934  {
935  if (fwrite(&size_used_, sizeof(size_used_), 1, fp) != 1) return false;
936  for (int i = 0; i < size_used_; ++i) {
937  if (!data_[i].Serialize(fp)) return false;
938  }
939  return true;
940 }
bool Serialize(FILE *fp) const
template<typename T >
bool GenericVector< T >::SerializeClasses ( tesseract::TFile fp) const

Definition at line 942 of file genericvector.h.

942  {
943  if (fp->FWrite(&size_used_, sizeof(size_used_), 1) != 1) return false;
944  for (int i = 0; i < size_used_; ++i) {
945  if (!data_[i].Serialize(fp)) return false;
946  }
947  return true;
948 }
bool Serialize(FILE *fp) const
int FWrite(const void *buffer, int size, int count)
Definition: serialis.cpp:131
template<typename T>
void GenericVector< T >::set ( t,
int  index 
)

Definition at line 681 of file genericvector.h.

681  {
682  ASSERT_HOST(index >= 0 && index < size_used_);
683  data_[index] = t;
684 }
#define ASSERT_HOST(x)
Definition: errcode.h:84
template<typename T>
void GenericVector< T >::set_clear_callback ( TessCallback1< T > *  cb)

Definition at line 792 of file genericvector.h.

792  {
793  clear_cb_ = cb;
794 }
TessCallback1< T > * clear_cb_
template<typename T>
void GenericVector< T >::set_compare_callback ( TessResultCallback2< bool, T const &, T const & > *  cb)

Definition at line 799 of file genericvector.h.

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

Definition at line 72 of file genericvector.h.

72  {
73  return size_used_;
74  }
template<typename T>
int GenericVector< T >::size_reserved ( ) const
inline

Definition at line 75 of file genericvector.h.

75  {
76  return size_reserved_;
77  }
inT32 size_reserved_
template<typename T >
void GenericVector< T >::sort ( )

Definition at line 998 of file genericvector.h.

998  {
999  sort(&tesseract::sort_cmp<T>);
1000 }
template<typename T>
void GenericVector< T >::sort ( int(*)(const void *, const void *)  comparator)
inline

Definition at line 219 of file genericvector.h.

219  {
220  qsort(data_, size_used_, sizeof(*data_), comparator);
221  }
template<typename T>
void GenericVector< T >::swap ( int  index1,
int  index2 
)
inline

Definition at line 309 of file genericvector.h.

309  {
310  if (index1 != index2) {
311  T tmp = data_[index1];
312  data_[index1] = data_[index2];
313  data_[index2] = tmp;
314  }
315  }
template<typename T>
void GenericVector< T >::truncate ( int  size)
inline

Definition at line 130 of file genericvector.h.

130  {
131  if (size < size_used_)
132  size_used_ = size;
133  }
int size() const
Definition: genericvector.h:72
template<typename T>
bool GenericVector< T >::WithinBounds ( const T &  rangemin,
const T &  rangemax 
) const
inline

Definition at line 318 of file genericvector.h.

318  {
319  for (int i = 0; i < size_used_; ++i) {
320  if (data_[i] < rangemin || rangemax < data_[i])
321  return false;
322  }
323  return true;
324  }
template<typename T>
bool GenericVector< T >::write ( FILE *  f,
TessResultCallback2< bool, FILE *, T const & > *  cb 
) const

Definition at line 836 of file genericvector.h.

837  {
838  if (fwrite(&size_reserved_, sizeof(size_reserved_), 1, f) != 1) return false;
839  if (fwrite(&size_used_, sizeof(size_used_), 1, f) != 1) return false;
840  if (cb != NULL) {
841  for (int i = 0; i < size_used_; ++i) {
842  if (!cb->Run(f, data_[i])) {
843  delete cb;
844  return false;
845  }
846  }
847  delete cb;
848  } else {
849  if (fwrite(data_, sizeof(T), size_used_, f) != size_used_) return false;
850  }
851  return true;
852 }
virtual R Run(A1, A2)=0
inT32 size_reserved_
#define NULL
Definition: host.h:144

Member Data Documentation

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

Definition at line 340 of file genericvector.h.

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

Definition at line 342 of file genericvector.h.

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

Definition at line 339 of file genericvector.h.

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

Definition at line 336 of file genericvector.h.

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

Definition at line 338 of file genericvector.h.

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

Definition at line 337 of file genericvector.h.


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