Tesseract  3.02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GenericVector< T > Class Template Reference

#include <baseapi.h>

Inheritance diagram for GenericVector< T >:
GenericVectorEqEq< T >

Public Member Functions

 GenericVector ()
 
 GenericVector (int size)
 
 GenericVector (const GenericVector &other)
 
GenericVector< T > & operator+= (const GenericVector &other)
 
GenericVector< T > & operator= (const GenericVector &other)
 
virtual ~GenericVector ()
 
void reserve (int size)
 
void double_the_size ()
 
void init_to_size (int size, T t)
 
int size () const
 
int length () const
 
bool empty () const
 
T & get (int index) const
 
T & back () const
 
T & operator[] (int index) const
 
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)
 
virtual void remove (int index)
 
virtual void truncate (int size)
 
void set_clear_callback (TessCallback1< T > *cb)
 
void set_compare_callback (TessResultCallback2< bool, T const &, T const & > *cb)
 
virtual 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)
 
virtual bool Serialize (FILE *fp) const
 
virtual bool DeSerialize (bool swap, FILE *fp)
 
bool SerializeClasses (FILE *fp) const
 
bool DeSerializeClasses (bool swap, FILE *fp)
 
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
 

Static Public Member Functions

static T * double_the_size_memcpy (int current_size, T *data)
 

Protected Member Functions

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 36 of file baseapi.h.

Constructor & Destructor Documentation

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

Definition at line 37 of file genericvector.h.

37 { this->init(kDefaultVectorSize); }
static const int kDefaultVectorSize
void init(int size)
template<typename T>
GenericVector< T >::GenericVector ( int  size)
inlineexplicit

Definition at line 38 of file genericvector.h.

38 { this->init(size); }
void init(int size)
int size() const
Definition: genericvector.h:59
template<typename T>
GenericVector< T >::GenericVector ( const GenericVector< T > &  other)
inline

Definition at line 41 of file genericvector.h.

41  {
42  this->init(other.size());
43  this->operator+=(other);
44  }
GenericVector< T > & operator+=(const GenericVector &other)
void init(int size)
int size() const
Definition: genericvector.h:59
template<typename T >
GenericVector< T >::~GenericVector ( )
virtual

Definition at line 471 of file genericvector.h.

471  {
472  clear();
473 }
virtual void clear()

Member Function Documentation

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

Definition at line 522 of file genericvector.h.

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

Definition at line 209 of file genericvector.h.

209  {
210  int bottom = 0;
211  int top = size_used_;
212  do {
213  int middle = (bottom + top) / 2;
214  if (data_[middle] > target)
215  top = middle;
216  else
217  bottom = middle;
218  }
219  while (top - bottom > 1);
220  return bottom;
221  }
template<typename T>
bool GenericVector< T >::bool_binary_search ( const T &  target) const
inline

Definition at line 197 of file genericvector.h.

197  {
198  int index = binary_search(target);
199  if (index >= size_used_)
200  return false;
201  return data_[index] == target;
202  }
int binary_search(const T &target) const
template<typename T >
void GenericVector< T >::clear ( )
virtual

Reimplemented in tesseract::PointerVector< T >, tesseract::PointerVector< tesseract::TrainingSample >, tesseract::PointerVector< tesseract::Shape >, and tesseract::DawgInfoVector.

Definition at line 651 of file genericvector.h.

651  {
652  if (size_reserved_ > 0) {
653  if (clear_cb_ != NULL)
654  for (int i = 0; i < size_used_; ++i)
655  clear_cb_->Run(data_[i]);
656  delete[] data_;
657  data_ = NULL;
658  size_used_ = 0;
659  size_reserved_ = 0;
660  }
661  if (clear_cb_ != NULL) {
662  delete clear_cb_;
663  clear_cb_ = NULL;
664  }
665  if (compare_cb_ != NULL) {
666  delete compare_cb_;
667  compare_cb_ = NULL;
668  }
669 }
#define NULL
Definition: host.h:144
inT32 size_reserved_
TessResultCallback2< bool, T const &, T const & > * compare_cb_
virtual void Run(A1)=0
TessCallback1< T > * clear_cb_
template<typename T>
void GenericVector< T >::compact ( TessResultCallback1< bool, int > *  delete_cb)
inline

Definition at line 242 of file genericvector.h.

242  {
243  int new_size = 0;
244  int old_index = 0;
245  // Until the callback returns true, the elements stay the same.
246  while (old_index < size_used_ && !delete_cb->Run(old_index++))
247  ++new_size;
248  // Now just copy anything else that gets false from delete_cb.
249  for (; old_index < size_used_; ++old_index) {
250  if (!delete_cb->Run(old_index)) {
251  data_[new_size++] = data_[old_index];
252  }
253  }
254  size_used_ = new_size;
255  delete delete_cb;
256  }
virtual R Run(A1)=0
template<typename T>
void GenericVector< T >::compact_sorted ( )
inline

Definition at line 225 of file genericvector.h.

225  {
226  if (size_used_ == 0)
227  return;
228 
229  // First element is in no matter what, hence the i = 1.
230  int last_write = 0;
231  for (int i = 1; i < size_used_; ++i) {
232  // Finds next unique item and writes it.
233  if (data_[last_write] != data_[i])
234  data_[++last_write] = data_[i];
235  }
236  // last_write is the index of a valid data cell, so add 1.
237  size_used_ = last_write + 1;
238  }
template<typename T>
bool GenericVector< T >::contains ( object) const

Definition at line 579 of file genericvector.h.

579  {
580  return get_index(object) != -1;
581 }
int get_index(T object) const
template<typename T >
T GenericVector< T >::contains_index ( int  index) const

Definition at line 562 of file genericvector.h.

562  {
563  return index >= 0 && index < size_used_;
564 }
template<typename T >
void GenericVector< T >::delete_data_pointers ( )

Definition at line 672 of file genericvector.h.

672  {
673  for (int i = 0; i < size_used_; ++i)
674  if (data_[i]) {
675  delete data_[i];
676  }
677 }
template<typename T >
bool GenericVector< T >::DeSerialize ( bool  swap,
FILE *  fp 
)
virtual

Reimplemented in tesseract::PointerVector< T >, tesseract::PointerVector< tesseract::TrainingSample >, and tesseract::PointerVector< tesseract::Shape >.

Definition at line 741 of file genericvector.h.

741  {
742  inT32 reserved;
743  if (fread(&reserved, sizeof(reserved), 1, fp) != 1) return false;
744  if (swap) Reverse32(&reserved);
745  reserve(reserved);
746  size_used_ = reserved;
747  if (fread(data_, sizeof(T), size_used_, fp) != size_used_) return false;
748  if (swap) {
749  for (int i = 0; i < size_used_; ++i)
750  ReverseN(&data_[i], sizeof(data_[i]));
751  }
752  return true;
753 }
void Reverse32(void *ptr)
Definition: helpers.h:142
void ReverseN(void *ptr, int num_bytes)
Definition: helpers.h:126
int inT32
Definition: host.h:102
void reserve(int size)
template<typename T >
bool GenericVector< T >::DeSerializeClasses ( bool  swap,
FILE *  fp 
)

Definition at line 773 of file genericvector.h.

773  {
774  uinT32 reserved;
775  if (fread(&reserved, sizeof(reserved), 1, fp) != 1) return false;
776  if (swap) Reverse32(&reserved);
777  T empty;
778  init_to_size(reserved, empty);
779  for (int i = 0; i < reserved; ++i) {
780  if (!data_[i].DeSerialize(swap, fp)) return false;
781  }
782  return true;
783 }
void Reverse32(void *ptr)
Definition: helpers.h:142
virtual bool DeSerialize(bool swap, FILE *fp)
bool empty() const
Definition: genericvector.h:68
unsigned int uinT32
Definition: host.h:103
void init_to_size(int size, T t)
template<typename T>
T GenericVector< T >::dot_product ( const GenericVector< T > &  other) const
inline

Definition at line 258 of file genericvector.h.

258  {
259  T result = static_cast<T>(0);
260  for (int i = MIN(size_used_, other.size_used_) - 1; i >= 0; --i)
261  result += data_[i] * other.data_[i];
262  return result;
263  }
#define MIN(x, y)
Definition: ndminx.h:28
template<typename T >
void GenericVector< T >::double_the_size ( )

Definition at line 490 of file genericvector.h.

490  {
491  if (size_reserved_ == 0) {
493  }
494  else {
495  reserve(2 * size_reserved_);
496  }
497 }
static const int kDefaultVectorSize
void reserve(int size)
inT32 size_reserved_
template<typename T>
static T* GenericVector< T >::double_the_size_memcpy ( int  current_size,
T *  data 
)
inlinestatic

Definition at line 172 of file genericvector.h.

172  {
173  T *data_new = new T[current_size * 2];
174  memcpy(data_new, data, sizeof(T) * current_size);
175  delete[] data;
176  return data_new;
177  }
template<typename T>
bool GenericVector< T >::empty ( ) const
inline

Definition at line 68 of file genericvector.h.

68  {
69  return size_used_ == 0;
70  }
template<typename T >
T & GenericVector< T >::get ( int  index) const

Definition at line 511 of file genericvector.h.

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

Definition at line 568 of file genericvector.h.

568  {
569  for (int i = 0; i < size_used_; ++i) {
571  if (compare_cb_->Run(object, data_[i]))
572  return i;
573  }
574  return -1;
575 }
#define NULL
Definition: host.h:144
virtual R Run(A1, A2)=0
TessResultCallback2< bool, T const &, T const & > * compare_cb_
#define ASSERT_HOST(x)
Definition: errcode.h:84
template<typename T >
void GenericVector< T >::init ( int  size)
protected

Definition at line 461 of file genericvector.h.

461  {
462  size_used_ = 0;
463  size_reserved_ = 0;
464  data_ = 0;
465  clear_cb_ = 0;
466  compare_cb_ = 0;
467  reserve(size);
468 }
void reserve(int size)
inT32 size_reserved_
TessResultCallback2< bool, T const &, T const & > * compare_cb_
int size() const
Definition: genericvector.h:59
TessCallback1< T > * clear_cb_
template<typename T>
void GenericVector< T >::init_to_size ( int  size,
t 
)

Definition at line 501 of file genericvector.h.

501  {
502  reserve(size);
503  size_used_ = size;
504  for (int i = 0; i < size; ++i)
505  data_[i] = t;
506 }
void reserve(int size)
int size() const
Definition: genericvector.h:59
template<typename T>
void GenericVector< T >::insert ( t,
int  index 
)

Definition at line 538 of file genericvector.h.

538  {
539  ASSERT_HOST(index >= 0 && index < size_used_);
540  if (size_reserved_ == size_used_)
541  double_the_size();
542  for (int i = size_used_; i > index; --i) {
543  data_[i] = data_[i-1];
544  }
545  data_[index] = t;
546  size_used_++;
547 }
inT32 size_reserved_
#define ASSERT_HOST(x)
Definition: errcode.h:84
void double_the_size()
template<typename T>
int GenericVector< T >::length ( ) const
inline

Definition at line 63 of file genericvector.h.

63  {
64  return size_used_;
65  }
template<typename T>
void GenericVector< T >::move ( GenericVector< T > *  from)

Definition at line 788 of file genericvector.h.

788  {
789  this->clear();
790  this->data_ = from->data_;
791  this->size_reserved_ = from->size_reserved_;
792  this->size_used_ = from->size_used_;
793  this->compare_cb_ = from->compare_cb_;
794  this->clear_cb_ = from->clear_cb_;
795  from->data_ = NULL;
796  from->clear_cb_ = NULL;
797  from->compare_cb_ = NULL;
798  from->size_used_ = 0;
799  from->size_reserved_ = 0;
800 }
virtual void clear()
#define NULL
Definition: host.h:144
inT32 size_reserved_
TessResultCallback2< bool, T const &, T const & > * compare_cb_
TessCallback1< T > * clear_cb_
template<typename T >
GenericVector< T > & GenericVector< T >::operator+= ( const GenericVector< T > &  other)

Definition at line 620 of file genericvector.h.

620  {
621  this->reserve(size_used_ + other.size_used_);
622  for (int i = 0; i < other.size(); ++i) {
623  this->operator+=(other.data_[i]);
624  }
625  return *this;
626 }
void reserve(int size)
GenericVector< T > & operator+=(const GenericVector &other)
int size() const
Definition: genericvector.h:59
template<typename T>
void GenericVector< T >::operator+= ( t)

Definition at line 615 of file genericvector.h.

615  {
616  push_back(t);
617 }
int push_back(T object)
template<typename T >
GenericVector< T > & GenericVector< T >::operator= ( const GenericVector< T > &  other)

Definition at line 629 of file genericvector.h.

629  {
630  this->truncate(0);
631  this->operator+=(other);
632  return *this;
633 }
GenericVector< T > & operator+=(const GenericVector &other)
virtual void truncate(int size)
template<typename T >
T & GenericVector< T >::operator[] ( int  index) const

Definition at line 517 of file genericvector.h.

517  {
518  return data_[index];
519 }
template<typename T>
int GenericVector< T >::push_back ( object)

Definition at line 585 of file genericvector.h.

585  {
586  int index = 0;
587  if (size_used_ == size_reserved_)
588  double_the_size();
589  index = size_used_++;
590  data_[index] = object;
591  return index;
592 }
inT32 size_reserved_
void double_the_size()
template<typename T>
int GenericVector< T >::push_back_new ( object)

Definition at line 595 of file genericvector.h.

595  {
596  int index = get_index(object);
597  if (index >= 0)
598  return index;
599  return push_back(object);
600 }
int push_back(T object)
int get_index(T object) const
template<typename T>
int GenericVector< T >::push_front ( object)

Definition at line 604 of file genericvector.h.

604  {
605  if (size_used_ == size_reserved_)
606  double_the_size();
607  for (int i = size_used_; i > 0; --i)
608  data_[i] = data_[i-1];
609  data_[0] = object;
610  ++size_used_;
611  return 0;
612 }
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 700 of file genericvector.h.

702  {
703  inT32 reserved;
704  if (fread(&reserved, sizeof(reserved), 1, f) != 1) return false;
705  if (swap) Reverse32(&reserved);
706  reserve(reserved);
707  if (fread(&size_used_, sizeof(size_used_), 1, f) != 1) return false;
708  if (swap) Reverse32(&size_used_);
709  if (cb != NULL) {
710  for (int i = 0; i < size_used_; ++i) {
711  if (!cb->Run(f, data_ + i, swap)) {
712  delete cb;
713  return false;
714  }
715  }
716  delete cb;
717  } else {
718  if (fread(data_, sizeof(T), size_used_, f) != size_used_) return false;
719  if (swap) {
720  for (int i = 0; i < size_used_; ++i)
721  ReverseN(&data_[i], sizeof(T));
722  }
723  }
724  return true;
725 }
void Reverse32(void *ptr)
Definition: helpers.h:142
void ReverseN(void *ptr, int num_bytes)
Definition: helpers.h:126
#define NULL
Definition: host.h:144
int inT32
Definition: host.h:102
#define f(xc, yc)
Definition: imgscale.cpp:39
void reserve(int size)
virtual R Run(A1, A2, A3)=0
template<typename T >
void GenericVector< T >::remove ( int  index)
virtual

Reimplemented in tesseract::PointerVector< T >, tesseract::PointerVector< tesseract::TrainingSample >, and tesseract::PointerVector< tesseract::Shape >.

Definition at line 552 of file genericvector.h.

552  {
553  ASSERT_HOST(index >= 0 && index < size_used_);
554  for (int i = index; i < size_used_ - 1; ++i) {
555  data_[i] = data_[i+1];
556  }
557  size_used_--;
558 }
#define ASSERT_HOST(x)
Definition: errcode.h:84
template<typename T >
void GenericVector< T >::reserve ( int  size)

Definition at line 478 of file genericvector.h.

478  {
479  if (size_reserved_ >= size || size <= 0)
480  return;
481  T* new_array = new T[size];
482  for (int i = 0; i < size_used_; ++i)
483  new_array[i] = data_[i];
484  if (data_ != NULL) delete[] data_;
485  data_ = new_array;
487 }
#define NULL
Definition: host.h:144
inT32 size_reserved_
int size() const
Definition: genericvector.h:59
template<typename T >
bool GenericVector< T >::Serialize ( FILE *  fp) const
virtual

Reimplemented in tesseract::PointerVector< T >, tesseract::PointerVector< tesseract::TrainingSample >, and tesseract::PointerVector< tesseract::Shape >.

Definition at line 730 of file genericvector.h.

730  {
731  if (fwrite(&size_used_, sizeof(size_used_), 1, fp) != 1) return false;
732  if (fwrite(data_, sizeof(*data_), size_used_, fp) != size_used_) return false;
733  return true;
734 }
template<typename T >
bool GenericVector< T >::SerializeClasses ( FILE *  fp) const

Definition at line 759 of file genericvector.h.

759  {
760  if (fwrite(&size_used_, sizeof(size_used_), 1, fp) != 1) return false;
761  for (int i = 0; i < size_used_; ++i) {
762  if (!data_[i].Serialize(fp)) return false;
763  }
764  return true;
765 }
virtual bool Serialize(FILE *fp) const
template<typename T>
void GenericVector< T >::set ( t,
int  index 
)

Definition at line 529 of file genericvector.h.

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

Definition at line 638 of file genericvector.h.

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

Definition at line 645 of file genericvector.h.

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

Definition at line 59 of file genericvector.h.

59  {
60  return size_used_;
61  }
template<typename T >
void GenericVector< T >::sort ( )

Definition at line 803 of file genericvector.h.

803  {
804  sort(&tesseract::sort_cmp<T>);
805 }
template<typename T>
void GenericVector< T >::sort ( int(*)(const void *, const void *)  comparator)
inline

Definition at line 190 of file genericvector.h.

190  {
191  qsort(data_, size_used_, sizeof(*data_), comparator);
192  }
template<typename T>
virtual void GenericVector< T >::truncate ( int  size)
inlinevirtual
template<typename T>
bool GenericVector< T >::write ( FILE *  f,
TessResultCallback2< bool, FILE *, T const & > *  cb 
) const

Definition at line 681 of file genericvector.h.

682  {
683  if (fwrite(&size_reserved_, sizeof(size_reserved_), 1, f) != 1) return false;
684  if (fwrite(&size_used_, sizeof(size_used_), 1, f) != 1) return false;
685  if (cb != NULL) {
686  for (int i = 0; i < size_used_; ++i) {
687  if (!cb->Run(f, data_[i])) {
688  delete cb;
689  return false;
690  }
691  }
692  delete cb;
693  } else {
694  if (fwrite(data_, sizeof(T), size_used_, f) != size_used_) return false;
695  }
696  return true;
697 }
#define NULL
Definition: host.h:144
virtual R Run(A1, A2)=0
#define f(xc, yc)
Definition: imgscale.cpp:39
inT32 size_reserved_

Member Data Documentation

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

Definition at line 277 of file genericvector.h.

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

Definition at line 279 of file genericvector.h.

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

Definition at line 276 of file genericvector.h.

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

Definition at line 273 of file genericvector.h.

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

Definition at line 275 of file genericvector.h.

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

Definition at line 274 of file genericvector.h.


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