DATAKIT API  V2025.2
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
util_stl_dtk.hpp
Go to the documentation of this file.
1 #ifndef UTIL_STL_DTK_HPP_
2 #define UTIL_STL_DTK_HPP_
3 
4 #include "def/define.h"
5 #include "dtk/config.hpp"
6 #include <iosfwd>
7 #include <iostream>
8 #include <type_traits>
9 #include <utility>
10 
11 template <typename T1,typename T2>
12 class Dtk_pair;
13 
15 
16 // #ifdef _DEBUG
17 // #define _DEBUG_DTK
18 // #endif
19 
25 template<typename T>
27 {
30  int operator()(const T& t1,const T& t2) const {return t1>t2;}
31 };
32 
39 template<typename T>
40 struct Dtk_less
41 {
44  int operator()(const T& t1,const T& t2) const {return t1<t2;}
45 };
46 
47 
48 
70 template<typename T>
71 void Dtk_swap( T& a, T& b )
72 {
73  T tmp = std::move( a );
74  a = std::move( b );
75  b = std::move( tmp );
76 }
77 
83 template <typename T>
84 class Dtk_tab
85 {
86  struct allocator_from_t
87  {
88  T * operator()( std::pair<T *, Dtk_Size_t> src, Dtk_Size_t n )
89  {
90  T * out = new T[ n ];
91 #if !defined( _MSC_VER ) || _MSC_VER >= 1700 // at least vs12
92  do_move_if( src.first, src.first + src.second, out, std::integral_constant<bool, std::is_move_assignable<T>::value>() );
93 #else
94  do_move_if( src.first, src.first + src.second, out, std::integral_constant<bool, false>() );
95 #endif
96  return out;
97  }
98  private:
99  void do_move_if( T * begin, T * end, T * dst, std::true_type )
100  {
101  for( ; begin != end; ( void )( ++begin ), ( void )( ++dst ) )
102  *dst = std::move( *begin );
103  }
104  void do_move_if( T * begin, T * end, T * dst, std::false_type )
105  {
106  for( ; begin != end; ( void )( ++begin ), ( void )( ++dst ) )
107  *dst = *begin;
108  }
109  };
110 private:
111  T* v;
112  Dtk_Size_t nb;
113  Dtk_Size_t rsv;
114  T* _dtk_doublerealloc(Dtk_Size_t s)
115  {
116 #if 0
117  T* ex = v;
118  v=new T[s];
119  Pdtk_Assert(s>=nb);
120  Pdtk_Assert(v!=NULL);
121  if (s >= nb)
122  {
123  for (Dtk_Size_t i = 0; i < nb; i++)
124  v[i] = ex[i];
125  }
126  return ex;
127 #else
128  Pdtk_Assert( s >= nb );
129  auto old = v;
130  if( s >= nb )
131  v = allocator_from_t()( std::make_pair( old, nb ), s );
132  else
133  v = new T[ s ];
134  return old;
135 #endif
136  }
137 private:
138  /*template <typename comp>
139  int _partition(int top, int bottom,const comp& C)
140  {//http://mathbits.com/mathbits/compsci/Arrays/Quick.htm
141  //T x = v[top]; //crash pour des tableaux de 30000+ elts
142  assert((top + bottom) / 2 < (int) nb);
143  T x = v[ (top + bottom) / 2];
144  int i = top - 1;
145  int j = bottom + 1;
146  T temp;
147  do
148  {
149  do
150  {
151  j --;
152  assert(j<(int)nb);
153  }while (C(x,v[j]));//while (C(v[j],x));// //chngt car le tri etait inverse CT le 09-01-07
154 
155  do
156  {
157  i++;
158  assert(i<(int)nb);
159  } while (C(v[i],x));//while (C(x,v[i]));// //chngt car le tri etait inverse CT le 09-01-07
160 
161  if (i < j)
162  {
163  assert(i<(int)nb);
164  assert(j<(int)nb);
165  temp = v[i]; // switch elements at positions i and j
166  v[i] = v[j];
167  v[j] = temp;
168  }
169  }while (i < j);
170  return j; // returns middle index
171  }
172  template <typename comp>
173  void _quicksort(int top, int bottom,const comp& C)
174  {
175  if (top < bottom)
176  {
177  int middle = _partition(top, bottom,C);
178  assert(middle<bottom);
179  _quicksort(top, middle,C); // sort top partition
180  assert(middle+1>top);
181  _quicksort(middle+1, bottom,C); // sort bottom partition
182  }
183  return;
184  }*/
185 
186  template <typename comp>
187  void _mergesort(T* temp, int left, int right,const comp& C)
188  {
189  int i, j, k, mid = (left+right)/2;
190  if (left == right) return;
191  _mergesort(temp, left, mid,C); // la premiere moitie
192  _mergesort(temp, mid+1, right,C);// Sort 2nd half
193  // operation de fusion. Premierement, copier les deux moities dans temp.
194  for (i=left; i<=mid; i++)
195  temp[i] = v[i];
196  for (j=1; j<=right-mid; j++)
197  temp[right-j+1] = v[j+mid];
198  // fusionner les deux moities dans array
199  for (i=left,j=right,k=left; k<=right; k++)
200  if (C(temp[i],temp[j]))
201  v[k] = temp[i++];
202  else
203  v[k] = temp[j--];
204  }
205 
206 public:
207  typedef T value_type;
208  typedef T * pointer;
209  typedef T const * const_pointer;
210  typedef pointer iterator;
212 
216  {
217  nb=0;
218  rsv=0;
219  v=NULL;
220  }
221  Dtk_tab(Dtk_Size_t initreservesize,int resize=0)
222  {
223  Pdtk_Assert(initreservesize>0); // forbidden : at least one element on reserve.
224  rsv=initreservesize;
225  nb=0;
226  if (resize)
227  nb = rsv;
228  if (rsv>0)
229  v=new T[rsv];
230  else
231  v=NULL;
232  }
234  {
235  if (v!=NULL)
236  {
237  delete [] v;
238  v=NULL;
239  }
240  }
243  const T* GetArray () const
244  {
245  return this->v;
246  }
247  T * data() { return v; }
248  T const * data() const { return v; }
249  Dtk_tab(const Dtk_tab<T>& t)
250  {
251 //#ifdef DTK_DEBUG_STL_TRACE
252 // FILE* F = fopen("/stltrace.txt","a");
253 // fprintf(F,"Dtk_tab copy constructor size : %d ; elemsize : %d\n",t.size(),sizeof(T));
254 // fclose(F);
255 //#endif
256  nb=t.nb;
257  rsv=t.nb; // shrink_to_fit while copy
258  if (rsv>0)
259  {
260  Pdtk_Assert(nb > 0);
261  v=new T[nb];
262  for(Dtk_Size_t i=0;i<nb;i++)
263  v[i] = t.v[i];
264  }
265  else
266  v=NULL;
267  }
269  {
270  if (&t!=this)
271  {
272  if (v!=NULL)
273  {
274  Pdtk_Assert(rsv>0);
275  delete [] v;
276  }
277  v=NULL;
278  nb=t.nb;
279  rsv=t.nb;
280  if (t.v!=NULL && nb > 0)
281  {
282  v=new T[nb];
283  for(Dtk_Size_t i=0;i<nb;i++)
284  v[i] = t.v[i];
285  }
286  }
287  return *this;
288  }
289  int operator==(const Dtk_tab<T>& t) const
290  {
291  if (t<*this || *this<t)
292  return 0;
293  return 1;
294  }
295 
296 #ifndef DTK_NO_CXX11_RVALUE_REFERENCES
297  Dtk_tab(Dtk_tab<T> && t) DTK_NOEXCEPT : v(t.v), nb(t.nb), rsv(t.rsv)
300  {
301  t.v = 0;
302  t.nb = 0;
303  t.rsv = 0;
304  }
305 
309  {
310  if(this != &t)
311  {
312  delete [] v;
313  v = t.v;
314  nb = t.nb;
315  rsv = t.rsv;
316  t.v = 0;
317  t.nb = 0;
318  t.rsv = 0;
319  }
320 
321  return *this;
322  }
323 #endif
324 
325  int operator<(const Dtk_tab<T>& t) const
326  {
327  Dtk_Size_t i;
328  if (size()<t.size())
329  return 1;
330  if (t.size()<size())
331  return 0;
332  for(i=0;i<size();i++)
333  {
334  if ((v[i]<t.v[i]))
335  return 1;
336  if ((t.v[i]<v[i]))
337  return 0;
338  }
339  return 0;
340  }
353  void clear(int no_delete=0)
354  {
355  if (v==NULL)
356  return;
357  if (no_delete)
358  {
359  nb=0;
360  return;
361  }
362  delete [] v;
363  nb=0;
364  rsv=0;
365  v=NULL;
366  }
382  inline T& operator[](Dtk_Size_t k)
383  {
384 #ifdef _DEBUG_DTK
385  if (k>=nb)
387 #endif
388  return v[k];
389  }
390  inline const T& operator[](Dtk_Size_t k) const
391  {
392 #ifdef _DEBUG_DTK
393  if (k>=nb)
395 #endif
396  return v[k];
397  }
398  inline T& at(Dtk_Size_t k)
399  {
400  return operator[](k);
401  }
402  inline const T& at(Dtk_Size_t k) const
403  {
404  return operator[](k);
405  }
417  void push_back(const T& x)
418  {
419  if (nb==rsv)
420  {
421  if (nb==0)
422  {
423  rsv=1;
424  v = new T[1];
425  v[nb++]=x;
426  }
427  else
428  {
429  rsv*=2;
430  T to_add;
431  to_add = x;
432  T* ex = _dtk_doublerealloc(rsv);
433  //v[nb++]=x;
434  v[ nb++ ] = to_add;
435  delete [] ex;
436  }
437  }
438  else
439  v[nb++]=x;
440  }
441 
442 #ifndef DTK_NO_CXX11_RVALUE_REFERENCES
443  void push_back(T&& x)
455  {
456  if (nb==rsv)
457  {
458  if (nb==0)
459  {
460  rsv=1;
461  v = new T[1];
462  v[nb++]=std::move(x);
463  }
464  else
465  {
466  rsv*=2;
467  T* ex = _dtk_doublerealloc(rsv);
468  v[nb++]= std::move(x);
469  delete [] ex;
470  }
471  }
472  else
473  v[nb++]=std::move(x);
474  }
475 #endif
476 
487  void pop_back()
488  {
489  Pdtk_Assert(nb!=0);
490  if( nb == 0 ) { Dtk_ThrowOverflowException(); }
491  nb--;
492  } // extent : liberation a 1/3.
493 
504  Dtk_Size_t size() const
505  {
506  return nb;
507  }
508 
525  {
526  return rsv;
527  }
528 
539  T& back()
540  {
541  Pdtk_Assert(nb!=0);
542  return v[nb - 1];
543  }
554  const T& back() const
555  {
556  Pdtk_Assert(nb!=0);
557  return v[nb - 1];
558  }
569  T& front()
570  {
571  Pdtk_Assert(nb!=0);
572  return v[0];
573  }
584  const T& front() const
585  {
586  Pdtk_Assert(nb!=0);
587  return v[0];
588  }
589 
605  void resize(Dtk_Size_t n, const T& t)
606  {
607  if (n<=nb)
608  {
609  nb=n;
610  return;
611  }
612  if (n<=0)
613  {
614  clear();
615  return;
616  }
617  if (v==NULL)
618  {
619  Pdtk_Assert(rsv==0 && n>0);
620  v = new T[n];
621  }
622  else
623  delete [] _dtk_doublerealloc(n);
624  for(Dtk_Size_t i=nb;i<n;i++)
625  v[i]=t;
626  nb=rsv=n;
627  }
629  {
630  if (n<=nb)
631  {
632  nb=n;
633  return;
634  }
635  if (n<=0)
636  {
637  clear();
638  return;
639  }
640  if (n<rsv) // cas ou n>nb && n<rsv
641  {
642  nb = n;
643  return;
644  }
645  if (v==NULL)
646  {
647  Pdtk_Assert(rsv==0);
648  v = new T[n];
649  }
650  else
651  delete [] _dtk_doublerealloc(n);
652 
653  nb=rsv=n;
654  }
667  void swap(const Dtk_Size_t inA, const Dtk_Size_t inB)
668  {
669 #ifdef _DEBUG_DTK
670  if ( inA >= nb || inB >= nb )
672 #endif
673  const T Tmp = v[ inA ];
674  v[ inA ] = v[ inB ];
675  v[ inB ] = Tmp;
676  }
677 
692  void remove( const T& a)
693  {
694  int pos = find( a );
695  if( pos >= 0)
696  {
697  swap( pos, nb - 1 );
698  pop_back();
699  }
700  }
713  void sort()
714  {
715  sort(Dtk_less<T>());
716  }
732  template <typename comp>
733  void sort(const comp& C)
734  {
735  if(nb > 0 )
736  {
737  //_quicksort((int)0,(int)(nb-1),C);
738  T* tmp = new T[nb];
739  _mergesort(tmp,(int)0,(int)(nb-1),C);
740  delete [] tmp;
741  }
742  }
743 
744  int find(const T& e) const
745  {
746  for(Dtk_Size_t i=0;i<nb;i++)
747  if (v[i]==e)
748  return (int)i;
749  return -1;
750  }
751  template <typename comp>
752  int find(const T& e,const comp& C) const
753  {
754  for(Dtk_Size_t i=0;i<nb;i++)
755  if (!C(v[i],e) && !C(e,v[i]))
756  return (int)i;
757  return -1;
758  }
759  //Dtk_tab& operator+=(const Dtk_tab& T) {V.resize(V.size()+T.V.size());V.insert(V.end(),T.V.begin(),T.V.end());return *this;}
761  {
762  if (t.nb==0) // empty 2nd
763  return *this;
764  rsv=nb+t.nb;
765  if (v==NULL)
766  v = new T[rsv];
767  else
768  delete [] _dtk_doublerealloc(rsv);
769  for(Dtk_Size_t i=0;i<t.nb;i++)
770  v[i+nb] = t.v[i];
771  nb=nb+t.nb;
772  return *this;
773  }
774 
776  {
777  if( t.nb == 0 )
778  return *this;
779  rsv = nb + t.nb;
780  if( v == nullptr )
781  v = new T[ rsv ];
782  else
783  delete[] _dtk_doublerealloc( rsv );
784  for( Dtk_Size_t i = 0; i < t.nb; i++ )
785  v[ i + nb ] = std::move( t.v[ i ] );
786  nb = nb + t.nb;
787  return *this;
788  }
789 
791  {
792  Pdtk_Assert(a<nb && b<nb && b>=a);
793  Dtk_tab<T> res;
794  res.resize(b-a+1);
795  for(Dtk_Size_t i=0;i<res.rsv;i++)
796  res.v[i] = v[a+i];
797  return res;
798  }
800  {
801  if (n<=rsv)
802  return;
803  if (v==NULL)
804  {
805  Pdtk_Assert(rsv==0);
806  v = new T[n];
807  rsv = n;
808  return;
809  }
810  rsv = n;
811  delete [] _dtk_doublerealloc(rsv);
812  }
813  T min_element() const
814  {
815  if (nb==0)
816  return T();
817  T min = v[0];
818  for(Dtk_Size_t i=0;i<nb;i++)
819  if (v[i]<min)
820  min=v[i];
821  return min;
822  }
823  T max_element() const
824  {
825  if (nb==0)
826  return T();
827  T max = v[0];
828  for(Dtk_Size_t i=0;i<nb;i++)
829  if (v[i]>max)
830  max=v[i];
831  return max;
832  }
834  {
835  if (nb==0)
836  return 0;
837  Dtk_Size_t imin = 0;
838  T min = v[0];
839  for(Dtk_Size_t i=0;i<nb;i++)
840  if (v[i]<min)
841  {
842  min=v[i];
843  imin = i;
844  }
845  return imin;
846  }
848  {
849  if (nb==0)
850  return 0;
851  Dtk_Size_t imax = 0;
852  T max = v[0];
853  for(Dtk_Size_t i=0;i<nb;i++)
854  if (v[i]>max)
855  {
856  max=v[i];
857  imax = i;
858  }
859  return imax;
860  }
861 
862  friend std::ostream& operator<<(std::ostream& o,const Dtk_tab& d)
863  {
864  o<<"<Tab><Size>"<<d.size()<<"</Size>"<<std::endl;
865  Dtk_Size_t i;
866  for(i=0;i<d.size();i++)
867  {
868  o<<"<Elem_"<<i<<">"<< d[i] <<"</Elem_"<<i<<">"<<std::endl;
869  }
870  o << "</Tab>"<<std::endl;
871  return o;
872  }
874  {
875  return 2*sizeof(Dtk_Size_t) + sizeof(T*) + rsv * sizeof(T);
876  }
877  void reduce()
878  {
879  if (rsv>nb)
880  {
881  rsv = nb;
882  if (rsv==0)
883  rsv = 1;
884  delete [] _dtk_doublerealloc(rsv);
885  }
886  }
887  void reverse(){Dtk_Size_t i;for(i=0;i<nb/2;i++) Dtk_swap(v[i],v[nb-i-1]);}
888 
890  {
891  return v;
892  }
894  {
895  return v;
896  }
898  {
899  return v;
900  }
902  {
903  return v + nb;
904  }
906  {
907  return v + nb;
908  }
910  {
911  return v + nb;
912  }
913 };
914 
915 
916 
917 template <typename T1,typename T2>
918 class Dtk_pair
919 {
920 public:
921  T1 first;
922  T2 second;
923  Dtk_pair() {}
924  Dtk_pair(const T1& a,const T2& b) {first = a; second = b;}
925 
926  template <typename Arg, typename Arg2> Dtk_pair( Arg&& a, Arg2&& b ) : first( std::forward<Arg>( a ) ), second( std::forward<Arg2>( b ) )
927  {
928  }
929 
930  template <typename Pair> Dtk_pair( Pair&& p )
931  : first(std::forward<Pair>(p).first), second(std::forward<Pair>(p).second)
932  {
933  }
934 
935  friend std::ostream& operator<<(std::ostream& o,const Dtk_pair& d)
936  {
937  o<<"<Pair><First>" << d.first <<"</First><Second>" << d.second << "</Second></Pair>" <<std::endl;
938  return o;
939  }
940  int operator<(const Dtk_pair<T1,T2>& t) const
941  {
942  if (first<t.first)
943  return 1;
944  if (first>t.first)
945  return 0;
946  return second<t.second;
947  }
948  int operator==(const Dtk_pair<T1,T2>& t) const
949  {
950  return (first == t.first) && (second == t.second);
951  }
952 };
953 
954 
974 template <typename T1, typename T2>
976 {
977  return Dtk_pair<T1, T2>( std::forward<T1>( x ), std::forward<T2>( y ) );
978 }
979 
980 
981 
982 
983 namespace dtk
984 {
990  template<class InputIterator, class Predicate>
991  bool all_of(InputIterator first, InputIterator last, Predicate Pred)
992  { // test if all elements satisfy _Pred
993  for (; first != last; ++first)
994  if (!Pred(*first))
995  return false;
996  return true;
997  }
998 
1005  template<typename T, class Predicate>
1006  bool all_of(const Dtk_tab<T> & tab, Predicate Pred)
1007  {
1008  for(Dtk_Size_t i = 0; i < tab.size(); ++i)
1009  if(!Pred(tab[i]))
1010  return false;
1011  return true;
1012  }
1013 
1019  template<class InputIterator, class Predicate>
1020  bool any_of(InputIterator first, InputIterator last, Predicate Pred)
1021  {
1022  for(; first != last; ++first)
1023  if(Pred(*first))
1024  return true;
1025  return false;
1026  }
1027 
1034  template<typename T, class Predicate>
1035  bool any_of(const Dtk_tab<T> & tab, Predicate Pred)
1036  {
1037  for(Dtk_Size_t i = 0; i < tab.size(); ++i)
1038  if(Pred(tab[i]))
1039  return true;
1040  return false;
1041  }
1042 
1048  template<class InputIterator, class Predicate>
1049  bool none_of(InputIterator first, InputIterator last, Predicate Pred)
1050  {
1051  for (; first != last; ++first)
1052  if (Pred(*first))
1053  return false;
1054  return true;
1055  }
1056 
1063  template<typename T, class Predicate>
1064  bool none_of(const Dtk_tab<T> & tab, Predicate Pred)
1065  {
1066  for(Dtk_Size_t i = 0; i < tab.size(); ++i)
1067  if(Pred(tab[i]))
1068  return false;
1069  return true;
1070  }
1071 } // end of namespace dtk
1072 
1073 
1074 
1075 #endif // of ifndef UTIL_STL_DTK_HPP_
Dtk_pair
Definition: util_stl_dtk.hpp:919
Dtk_greater
Functor comparison object.
Definition: util_stl_dtk.hpp:27
Dtk_tab::reduce
void reduce()
Definition: util_stl_dtk.hpp:877
Dtk_tab::capacity
Dtk_Size_t capacity() const
Returns the size of the storage space currently allocated for the array, expressed in terms of elemen...
Definition: util_stl_dtk.hpp:524
Dtk_tab::begin
const_iterator begin() const
Definition: util_stl_dtk.hpp:893
Dtk_tab::max_element
T max_element() const
Definition: util_stl_dtk.hpp:823
config.hpp
dtk::any_of
bool any_of(InputIterator first, InputIterator last, Predicate Pred)
Test if any element in range fulfills condition, returns true if pred returns true for any of the ele...
Definition: util_stl_dtk.hpp:1020
Dtk_tab::GetSize
Dtk_Size_t GetSize() const
Definition: util_stl_dtk.hpp:873
Dtk_tab::back
const T & back() const
Return the elements at the end of the array.
Definition: util_stl_dtk.hpp:554
Dtk_tab::value_type
T value_type
Definition: util_stl_dtk.hpp:207
Dtk_tab::pop_back
void pop_back()
Removes the last element.
Definition: util_stl_dtk.hpp:487
Dtk_pair::Dtk_pair
Dtk_pair(Pair &&p)
Definition: util_stl_dtk.hpp:930
Dtk_tab::pointer
T * pointer
Definition: util_stl_dtk.hpp:208
Dtk_tab::end
iterator end()
Definition: util_stl_dtk.hpp:901
Dtk_Size_t
size_t Dtk_Size_t
Definition: define.h:712
Dtk_tab::~Dtk_tab
~Dtk_tab()
Definition: util_stl_dtk.hpp:233
Dtk_tab::operator<
int operator<(const Dtk_tab< T > &t) const
Definition: util_stl_dtk.hpp:325
Dtk_tab::sort
void sort()
Swap two elements.
Definition: util_stl_dtk.hpp:713
Dtk_less
Functor comparison object.
Definition: util_stl_dtk.hpp:41
Dtk_tab::operator==
int operator==(const Dtk_tab< T > &t) const
Definition: util_stl_dtk.hpp:289
Dtk_tab::back
T & back()
Return the elements at the end of the array.
Definition: util_stl_dtk.hpp:539
Dtk_pair::operator<
int operator<(const Dtk_pair< T1, T2 > &t) const
Definition: util_stl_dtk.hpp:940
Dtk_tab::const_iterator
const_pointer const_iterator
Definition: util_stl_dtk.hpp:211
Dtk_tab::data
T * data()
Definition: util_stl_dtk.hpp:247
Dtk_pair::Dtk_pair
Dtk_pair(const T1 &a, const T2 &b)
Definition: util_stl_dtk.hpp:924
Dtk_tab::remove
void remove(const T &a)
Removes the first element with the value a.
Definition: util_stl_dtk.hpp:692
Dtk_pair::first
T1 first
Definition: util_stl_dtk.hpp:921
Dtk_tab::operator[]
T & operator[](Dtk_Size_t k)
Accesses the ith element - like a classic array -.
Definition: util_stl_dtk.hpp:382
Dtk_tab::at
const T & at(Dtk_Size_t k) const
Definition: util_stl_dtk.hpp:402
Dtk_tab::GetArray
const T * GetArray() const
Returns array of T elements.
Definition: util_stl_dtk.hpp:243
Dtk_tab::find
int find(const T &e) const
Definition: util_stl_dtk.hpp:744
Pdtk_Assert
#define Pdtk_Assert(X)
Definition: define.h:742
Dtk_tab::Dtk_tab
Dtk_tab()
Default constructor.
Definition: util_stl_dtk.hpp:215
Dtk_pair::operator<<
friend std::ostream & operator<<(std::ostream &o, const Dtk_pair &d)
Definition: util_stl_dtk.hpp:935
Dtk_tab::sort
void sort(const comp &C)
Sorts the array with custom sorting.
Definition: util_stl_dtk.hpp:733
Dtk_tab::data
T const * data() const
Definition: util_stl_dtk.hpp:248
Dtk_tab::Dtk_tab
Dtk_tab(Dtk_Size_t initreservesize, int resize=0)
Definition: util_stl_dtk.hpp:221
Dtk_tab::front
T & front()
Return the elements at the beginning of the array.
Definition: util_stl_dtk.hpp:569
Dtk_tab::resize
void resize(Dtk_Size_t n, const T &t)
Resizes the array.
Definition: util_stl_dtk.hpp:605
dtk::all_of
bool all_of(InputIterator first, InputIterator last, Predicate Pred)
Test condition on all elements in range, and returns true if pred returns true for all the elements i...
Definition: util_stl_dtk.hpp:991
Dtk_tab::max_ithelement
Dtk_Size_t max_ithelement()
Definition: util_stl_dtk.hpp:847
make_Dtkpair
Dtk_pair< T1, T2 > make_Dtkpair(T1 &&x, T2 &&y)
Constructs a pair object with its first element set to x and its second element set to y.
Definition: util_stl_dtk.hpp:975
Dtk_tab::operator=
Dtk_tab< T > & operator=(Dtk_tab< T > &&t) DTK_NOEXCEPT
Move assignment operator.
Definition: util_stl_dtk.hpp:308
Dtk_pair::second
T2 second
Definition: util_stl_dtk.hpp:922
Dtk_tab::cend
const_iterator cend() const
Definition: util_stl_dtk.hpp:909
Dtk_tab::reserve
void reserve(Dtk_Size_t n)
Definition: util_stl_dtk.hpp:799
Dtk_tab::end
const_iterator end() const
Definition: util_stl_dtk.hpp:905
Dtk_tab::find
int find(const T &e, const comp &C) const
Definition: util_stl_dtk.hpp:752
Dtk_ThrowOverflowException
void Dtk_ThrowOverflowException()
Dtk_tab::min_ithelement
Dtk_Size_t min_ithelement()
Definition: util_stl_dtk.hpp:833
Dtk_tab::reverse
void reverse()
Definition: util_stl_dtk.hpp:887
Dtk_tab::min_element
T min_element() const
Definition: util_stl_dtk.hpp:813
Dtk_less::operator()
int operator()(const T &t1, const T &t2) const
Overloaded method comparison.
Definition: util_stl_dtk.hpp:44
Dtk_tab::resize
void resize(Dtk_Size_t n)
Definition: util_stl_dtk.hpp:628
Dtk_tab::operator[]
const T & operator[](Dtk_Size_t k) const
Definition: util_stl_dtk.hpp:390
dtk
Definition: util_stl_dtk.hpp:984
define.h
Dtk_tab::subtab
Dtk_tab subtab(Dtk_Size_t a, Dtk_Size_t b)
Definition: util_stl_dtk.hpp:790
Dtk_greater::operator()
int operator()(const T &t1, const T &t2) const
Overloaded method comparison.
Definition: util_stl_dtk.hpp:30
Dtk_tab
This is a high level array class.
Definition: util_stl_dtk.hpp:85
Dtk_tab::size
Dtk_Size_t size() const
Returns the size of the array.
Definition: util_stl_dtk.hpp:504
dtk::none_of
bool none_of(InputIterator first, InputIterator last, Predicate Pred)
Test if no elements fulfill condition, returns true if pred returns false for all the elements in the...
Definition: util_stl_dtk.hpp:1049
Dtk_tab::operator+=
Dtk_tab & operator+=(const Dtk_tab &t)
Definition: util_stl_dtk.hpp:760
Dtk_tab::swap
void swap(const Dtk_Size_t inA, const Dtk_Size_t inB)
Sorts the array.
Definition: util_stl_dtk.hpp:667
Dtk_swap
void Dtk_swap(T &a, T &b)
Swap any type of data.
Definition: util_stl_dtk.hpp:71
Dtk_tab::operator<<
friend std::ostream & operator<<(std::ostream &o, const Dtk_tab &d)
Definition: util_stl_dtk.hpp:862
Dtk_tab::operator+=
Dtk_tab & operator+=(Dtk_tab &&t)
Definition: util_stl_dtk.hpp:775
Dtk_tab::cbegin
const_iterator cbegin() const
Definition: util_stl_dtk.hpp:897
Dtk_tab::at
T & at(Dtk_Size_t k)
Definition: util_stl_dtk.hpp:398
Dtk_tab::push_back
void push_back(const T &x)
Inserts an element at the end of the array.
Definition: util_stl_dtk.hpp:417
Dtk_tab::clear
void clear(int no_delete=0)
Resets the Dtk_tab content.
Definition: util_stl_dtk.hpp:353
Dtk_tab::Dtk_tab
Dtk_tab(const Dtk_tab< T > &t)
Definition: util_stl_dtk.hpp:249
Dtk_tab::iterator
pointer iterator
Definition: util_stl_dtk.hpp:210
Dtk_tab::front
const T & front() const
Return the elements at the beginning of the array.
Definition: util_stl_dtk.hpp:584
Dtk_tab::const_pointer
T const * const_pointer
Definition: util_stl_dtk.hpp:209
Dtk_tab::begin
iterator begin()
Definition: util_stl_dtk.hpp:889
Dtk_tab::operator=
Dtk_tab & operator=(const Dtk_tab< T > &t)
Definition: util_stl_dtk.hpp:268
Dtk_pair::operator==
int operator==(const Dtk_pair< T1, T2 > &t) const
Definition: util_stl_dtk.hpp:948
Dtk_pair::Dtk_pair
Dtk_pair(Arg &&a, Arg2 &&b)
Definition: util_stl_dtk.hpp:926
Dtk_pair::Dtk_pair
Dtk_pair()
Definition: util_stl_dtk.hpp:923
DTK_NOEXCEPT
#define DTK_NOEXCEPT
Definition: config.hpp:26