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