DATAKIT API  V2025.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 <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  Dtk_tab(const Dtk_tab<T>& t)
248  {
249 //#ifdef DTK_DEBUG_STL_TRACE
250 // FILE* F = fopen("/stltrace.txt","a");
251 // fprintf(F,"Dtk_tab copy constructor size : %d ; elemsize : %d\n",t.size(),sizeof(T));
252 // fclose(F);
253 //#endif
254  nb=t.nb;
255  rsv=t.nb; // shrink_to_fit while copy
256  if (rsv>0)
257  {
258  Pdtk_Assert(nb > 0);
259  v=new T[nb];
260  for(Dtk_Size_t i=0;i<nb;i++)
261  v[i] = t.v[i];
262  }
263  else
264  v=NULL;
265  }
267  {
268  if (&t!=this)
269  {
270  if (v!=NULL)
271  {
272  Pdtk_Assert(rsv>0);
273  delete [] v;
274  }
275  v=NULL;
276  nb=t.nb;
277  rsv=t.nb;
278  if (t.v!=NULL && nb > 0)
279  {
280  v=new T[nb];
281  for(Dtk_Size_t i=0;i<nb;i++)
282  v[i] = t.v[i];
283  }
284  }
285  return *this;
286  }
287  int operator==(const Dtk_tab<T>& t) const
288  {
289  if (t<*this || *this<t)
290  return 0;
291  return 1;
292  }
293 
294 #ifndef DTK_NO_CXX11_RVALUE_REFERENCES
295  Dtk_tab(Dtk_tab<T> && t) DTK_NOEXCEPT : v(t.v), nb(t.nb), rsv(t.rsv)
298  {
299  t.v = 0;
300  t.nb = 0;
301  t.rsv = 0;
302  }
303 
307  {
308  if(this != &t)
309  {
310  delete [] v;
311  v = t.v;
312  nb = t.nb;
313  rsv = t.rsv;
314  t.v = 0;
315  t.nb = 0;
316  t.rsv = 0;
317  }
318 
319  return *this;
320  }
321 #endif
322 
323  int operator<(const Dtk_tab<T>& t) const
324  {
325  Dtk_Size_t i;
326  if (size()<t.size())
327  return 1;
328  if (t.size()<size())
329  return 0;
330  for(i=0;i<size();i++)
331  {
332  if ((v[i]<t.v[i]))
333  return 1;
334  if ((t.v[i]<v[i]))
335  return 0;
336  }
337  return 0;
338  }
351  void clear(int no_delete=0)
352  {
353  if (v==NULL)
354  return;
355  if (no_delete)
356  {
357  nb=0;
358  return;
359  }
360  delete [] v;
361  nb=0;
362  rsv=0;
363  v=NULL;
364  }
380  inline T& operator[](Dtk_Size_t k)
381  {
382 #ifdef _DEBUG_DTK
383  if (k>=nb)
385 #endif
386  return v[k];
387  }
388  inline const T& operator[](Dtk_Size_t k) const
389  {
390 #ifdef _DEBUG_DTK
391  if (k>=nb)
393 #endif
394  return v[k];
395  }
396  inline T& at(Dtk_Size_t k)
397  {
398  return operator[](k);
399  }
400  inline const T& at(Dtk_Size_t k) const
401  {
402  return operator[](k);
403  }
415  void push_back(const T& x)
416  {
417  if (nb==rsv)
418  {
419  if (nb==0)
420  {
421  rsv=1;
422  v = new T[1];
423  v[nb++]=x;
424  }
425  else
426  {
427  rsv*=2;
428  T to_add;
429  to_add = x;
430  T* ex = _dtk_doublerealloc(rsv);
431  //v[nb++]=x;
432  v[ nb++ ] = to_add;
433  delete [] ex;
434  }
435  }
436  else
437  v[nb++]=x;
438  }
439 
440 #ifndef DTK_NO_CXX11_RVALUE_REFERENCES
441  void push_back(T&& x)
453  {
454  if (nb==rsv)
455  {
456  if (nb==0)
457  {
458  rsv=1;
459  v = new T[1];
460  v[nb++]=std::move(x);
461  }
462  else
463  {
464  rsv*=2;
465  T* ex = _dtk_doublerealloc(rsv);
466  v[nb++]= std::move(x);
467  delete [] ex;
468  }
469  }
470  else
471  v[nb++]=std::move(x);
472  }
473 #endif
474 
485  void pop_back()
486  {
487  Pdtk_Assert(nb!=0);
488  if( nb == 0 ) { Dtk_ThrowOverflowException(); }
489  nb--;
490  } // extent : liberation a 1/3.
491 
502  Dtk_Size_t size() const
503  {
504  return nb;
505  }
506 
523  {
524  return rsv;
525  }
526 
537  T& back()
538  {
539  Pdtk_Assert(nb!=0);
540  return v[nb - 1];
541  }
552  const T& back() const
553  {
554  Pdtk_Assert(nb!=0);
555  return v[nb - 1];
556  }
567  T& front()
568  {
569  Pdtk_Assert(nb!=0);
570  return v[0];
571  }
582  const T& front() const
583  {
584  Pdtk_Assert(nb!=0);
585  return v[0];
586  }
587 
603  void resize(Dtk_Size_t n, const T& t)
604  {
605  if (n<=nb)
606  {
607  nb=n;
608  return;
609  }
610  if (n<=0)
611  {
612  clear();
613  return;
614  }
615  if (v==NULL)
616  {
617  Pdtk_Assert(rsv==0 && n>0);
618  v = new T[n];
619  }
620  else
621  delete [] _dtk_doublerealloc(n);
622  for(Dtk_Size_t i=nb;i<n;i++)
623  v[i]=t;
624  nb=rsv=n;
625  }
627  {
628  if (n<=nb)
629  {
630  nb=n;
631  return;
632  }
633  if (n<=0)
634  {
635  clear();
636  return;
637  }
638  if (n<rsv) // cas ou n>nb && n<rsv
639  {
640  nb = n;
641  return;
642  }
643  if (v==NULL)
644  {
645  Pdtk_Assert(rsv==0);
646  v = new T[n];
647  }
648  else
649  delete [] _dtk_doublerealloc(n);
650 
651  nb=rsv=n;
652  }
665  void swap(const Dtk_Size_t inA, const Dtk_Size_t inB)
666  {
667 #ifdef _DEBUG_DTK
668  if ( inA >= nb || inB >= nb )
670 #endif
671  const T Tmp = v[ inA ];
672  v[ inA ] = v[ inB ];
673  v[ inB ] = Tmp;
674  }
675 
690  void remove( const T& a)
691  {
692  int pos = find( a );
693  if( pos >= 0)
694  {
695  swap( pos, nb - 1 );
696  pop_back();
697  }
698  }
711  void sort()
712  {
713  sort(Dtk_less<T>());
714  }
730  template <typename comp>
731  void sort(const comp& C)
732  {
733  if(nb > 0 )
734  {
735  //_quicksort((int)0,(int)(nb-1),C);
736  T* tmp = new T[nb];
737  _mergesort(tmp,(int)0,(int)(nb-1),C);
738  delete [] tmp;
739  }
740  }
741 
742  int find(const T& e) const
743  {
744  for(Dtk_Size_t i=0;i<nb;i++)
745  if (v[i]==e)
746  return (int)i;
747  return -1;
748  }
749  template <typename comp>
750  int find(const T& e,const comp& C) const
751  {
752  for(Dtk_Size_t i=0;i<nb;i++)
753  if (!C(v[i],e) && !C(e,v[i]))
754  return (int)i;
755  return -1;
756  }
757  //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;}
759  {
760  if (t.nb==0) // empty 2nd
761  return *this;
762  rsv=nb+t.nb;
763  if (v==NULL)
764  v = new T[rsv];
765  else
766  delete [] _dtk_doublerealloc(rsv);
767  for(Dtk_Size_t i=0;i<t.nb;i++)
768  v[i+nb] = t.v[i];
769  nb=nb+t.nb;
770  return *this;
771  }
772 
774  {
775  if( t.nb == 0 )
776  return *this;
777  rsv = nb + t.nb;
778  if( v == nullptr )
779  v = new T[ rsv ];
780  else
781  delete[] _dtk_doublerealloc( rsv );
782  for( Dtk_Size_t i = 0; i < t.nb; i++ )
783  v[ i + nb ] = std::move( t.v[ i ] );
784  nb = nb + t.nb;
785  return *this;
786  }
787 
789  {
790  Pdtk_Assert(a<nb && b<nb && b>=a);
791  Dtk_tab<T> res;
792  res.resize(b-a+1);
793  for(Dtk_Size_t i=0;i<res.rsv;i++)
794  res.v[i] = v[a+i];
795  return res;
796  }
798  {
799  if (n<=rsv)
800  return;
801  if (v==NULL)
802  {
803  Pdtk_Assert(rsv==0);
804  v = new T[n];
805  rsv = n;
806  return;
807  }
808  rsv = n;
809  delete [] _dtk_doublerealloc(rsv);
810  }
811  T min_element() const
812  {
813  if (nb==0)
814  return T();
815  T min = v[0];
816  for(Dtk_Size_t i=0;i<nb;i++)
817  if (v[i]<min)
818  min=v[i];
819  return min;
820  }
821  T max_element() const
822  {
823  if (nb==0)
824  return T();
825  T max = v[0];
826  for(Dtk_Size_t i=0;i<nb;i++)
827  if (v[i]>max)
828  max=v[i];
829  return max;
830  }
832  {
833  if (nb==0)
834  return 0;
835  Dtk_Size_t imin = 0;
836  T min = v[0];
837  for(Dtk_Size_t i=0;i<nb;i++)
838  if (v[i]<min)
839  {
840  min=v[i];
841  imin = i;
842  }
843  return imin;
844  }
846  {
847  if (nb==0)
848  return 0;
849  Dtk_Size_t imax = 0;
850  T max = v[0];
851  for(Dtk_Size_t i=0;i<nb;i++)
852  if (v[i]>max)
853  {
854  max=v[i];
855  imax = i;
856  }
857  return imax;
858  }
859 
860  friend std::ostream& operator<<(std::ostream& o,const Dtk_tab& d)
861  {
862  o<<"<Tab><Size>"<<d.size()<<"</Size>"<<std::endl;
863  Dtk_Size_t i;
864  for(i=0;i<d.size();i++)
865  {
866  o<<"<Elem_"<<i<<">"<< d[i] <<"</Elem_"<<i<<">"<<std::endl;
867  }
868  o << "</Tab>"<<std::endl;
869  return o;
870  }
872  {
873  return 2*sizeof(Dtk_Size_t) + sizeof(T*) + rsv * sizeof(T);
874  }
875  void reduce()
876  {
877  if (rsv>nb)
878  {
879  rsv = nb;
880  if (rsv==0)
881  rsv = 1;
882  delete [] _dtk_doublerealloc(rsv);
883  }
884  }
885  void reverse(){Dtk_Size_t i;for(i=0;i<nb/2;i++) Dtk_swap(v[i],v[nb-i-1]);}
886 
888  {
889  return v;
890  }
892  {
893  return v;
894  }
896  {
897  return v;
898  }
900  {
901  return v + nb;
902  }
904  {
905  return v + nb;
906  }
908  {
909  return v + nb;
910  }
911 };
912 
913 
914 
915 template <typename T1,typename T2>
916 class Dtk_pair
917 {
918 public:
919  T1 first;
920  T2 second;
921  Dtk_pair() {}
922  Dtk_pair(const T1& a,const T2& b) {first = a; second = b;}
923 
924  template <typename Arg, typename Arg2> Dtk_pair( Arg&& a, Arg2&& b ) : first( std::forward<Arg>( a ) ), second( std::forward<Arg2>( b ) )
925  {
926  }
927 
928  template <typename Pair> Dtk_pair( Pair&& p )
929  : first(std::forward<Pair>(p).first), second(std::forward<Pair>(p).second)
930  {
931  }
932 
933  friend std::ostream& operator<<(std::ostream& o,const Dtk_pair& d)
934  {
935  o<<"<Pair><First>" << d.first <<"</First><Second>" << d.second << "</Second></Pair>" <<std::endl;
936  return o;
937  }
938  int operator<(const Dtk_pair<T1,T2>& t) const
939  {
940  if (first<t.first)
941  return 1;
942  if (first>t.first)
943  return 0;
944  return second<t.second;
945  }
946  int operator==(const Dtk_pair<T1,T2>& t) const
947  {
948  return (first == t.first) && (second == t.second);
949  }
950 };
951 
952 
972 template <typename T1, typename T2>
974 {
975  return Dtk_pair<T1, T2>( std::forward<T1>( x ), std::forward<T2>( y ) );
976 }
977 
978 
979 
980 
981 namespace dtk
982 {
988  template<class InputIterator, class Predicate>
989  bool all_of(InputIterator first, InputIterator last, Predicate Pred)
990  { // test if all elements satisfy _Pred
991  for (; first != last; ++first)
992  if (!Pred(*first))
993  return false;
994  return true;
995  }
996 
1003  template<typename T, class Predicate>
1004  bool all_of(const Dtk_tab<T> & tab, Predicate Pred)
1005  {
1006  for(Dtk_Size_t i = 0; i < tab.size(); ++i)
1007  if(!Pred(tab[i]))
1008  return false;
1009  return true;
1010  }
1011 
1017  template<class InputIterator, class Predicate>
1018  bool any_of(InputIterator first, InputIterator last, Predicate Pred)
1019  {
1020  for(; first != last; ++first)
1021  if(Pred(*first))
1022  return true;
1023  return false;
1024  }
1025 
1032  template<typename T, class Predicate>
1033  bool any_of(const Dtk_tab<T> & tab, Predicate Pred)
1034  {
1035  for(Dtk_Size_t i = 0; i < tab.size(); ++i)
1036  if(Pred(tab[i]))
1037  return true;
1038  return false;
1039  }
1040 
1046  template<class InputIterator, class Predicate>
1047  bool none_of(InputIterator first, InputIterator last, Predicate Pred)
1048  {
1049  for (; first != last; ++first)
1050  if (Pred(*first))
1051  return false;
1052  return true;
1053  }
1054 
1061  template<typename T, class Predicate>
1062  bool none_of(const Dtk_tab<T> & tab, Predicate Pred)
1063  {
1064  for(Dtk_Size_t i = 0; i < tab.size(); ++i)
1065  if(Pred(tab[i]))
1066  return false;
1067  return true;
1068  }
1069 } // end of namespace dtk
1070 
1071 
1072 
1073 #endif // of ifndef UTIL_STL_DTK_HPP_
Dtk_pair
Definition: util_stl_dtk.hpp:917
Dtk_greater
Functor comparison object.
Definition: util_stl_dtk.hpp:27
Dtk_tab::reduce
void reduce()
Definition: util_stl_dtk.hpp:875
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:522
Dtk_tab::begin
const_iterator begin() const
Definition: util_stl_dtk.hpp:891
Dtk_tab::max_element
T max_element() const
Definition: util_stl_dtk.hpp:821
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:1018
Dtk_tab::GetSize
Dtk_Size_t GetSize() const
Definition: util_stl_dtk.hpp:871
Dtk_tab::back
const T & back() const
Return the elements at the end of the array.
Definition: util_stl_dtk.hpp:552
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:485
Dtk_pair::Dtk_pair
Dtk_pair(Pair &&p)
Definition: util_stl_dtk.hpp:928
Dtk_tab::pointer
T * pointer
Definition: util_stl_dtk.hpp:208
Dtk_tab::end
iterator end()
Definition: util_stl_dtk.hpp:899
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:323
Dtk_tab::sort
void sort()
Swap two elements.
Definition: util_stl_dtk.hpp:711
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:287
Dtk_tab::back
T & back()
Return the elements at the end of the array.
Definition: util_stl_dtk.hpp:537
Dtk_pair::operator<
int operator<(const Dtk_pair< T1, T2 > &t) const
Definition: util_stl_dtk.hpp:938
Dtk_tab::const_iterator
const_pointer const_iterator
Definition: util_stl_dtk.hpp:211
Dtk_pair::Dtk_pair
Dtk_pair(const T1 &a, const T2 &b)
Definition: util_stl_dtk.hpp:922
Dtk_tab::remove
void remove(const T &a)
Removes the first element with the value a.
Definition: util_stl_dtk.hpp:690
Dtk_pair::first
T1 first
Definition: util_stl_dtk.hpp:919
Dtk_tab::operator[]
T & operator[](Dtk_Size_t k)
Accesses the ith element - like a classic array -.
Definition: util_stl_dtk.hpp:380
Dtk_tab::at
const T & at(Dtk_Size_t k) const
Definition: util_stl_dtk.hpp:400
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:742
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:933
Dtk_tab::sort
void sort(const comp &C)
Sorts the array with custom sorting.
Definition: util_stl_dtk.hpp:731
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:567
Dtk_tab::resize
void resize(Dtk_Size_t n, const T &t)
Resizes the array.
Definition: util_stl_dtk.hpp:603
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:989
Dtk_tab::max_ithelement
Dtk_Size_t max_ithelement()
Definition: util_stl_dtk.hpp:845
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:973
Dtk_tab::operator=
Dtk_tab< T > & operator=(Dtk_tab< T > &&t) DTK_NOEXCEPT
Move assignment operator.
Definition: util_stl_dtk.hpp:306
Dtk_pair::second
T2 second
Definition: util_stl_dtk.hpp:920
Dtk_tab::cend
const_iterator cend() const
Definition: util_stl_dtk.hpp:907
Dtk_tab::reserve
void reserve(Dtk_Size_t n)
Definition: util_stl_dtk.hpp:797
Dtk_tab::end
const_iterator end() const
Definition: util_stl_dtk.hpp:903
Dtk_tab::find
int find(const T &e, const comp &C) const
Definition: util_stl_dtk.hpp:750
Dtk_ThrowOverflowException
void Dtk_ThrowOverflowException()
Dtk_tab::min_ithelement
Dtk_Size_t min_ithelement()
Definition: util_stl_dtk.hpp:831
Dtk_tab::reverse
void reverse()
Definition: util_stl_dtk.hpp:885
Dtk_tab::min_element
T min_element() const
Definition: util_stl_dtk.hpp:811
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:626
Dtk_tab::operator[]
const T & operator[](Dtk_Size_t k) const
Definition: util_stl_dtk.hpp:388
dtk
Definition: util_stl_dtk.hpp:982
define.h
Dtk_tab::subtab
Dtk_tab subtab(Dtk_Size_t a, Dtk_Size_t b)
Definition: util_stl_dtk.hpp:788
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:502
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:1047
Dtk_tab::operator+=
Dtk_tab & operator+=(const Dtk_tab &t)
Definition: util_stl_dtk.hpp:758
Dtk_tab::swap
void swap(const Dtk_Size_t inA, const Dtk_Size_t inB)
Sorts the array.
Definition: util_stl_dtk.hpp:665
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:860
Dtk_tab::operator+=
Dtk_tab & operator+=(Dtk_tab &&t)
Definition: util_stl_dtk.hpp:773
Dtk_tab::cbegin
const_iterator cbegin() const
Definition: util_stl_dtk.hpp:895
Dtk_tab::at
T & at(Dtk_Size_t k)
Definition: util_stl_dtk.hpp:396
Dtk_tab::push_back
void push_back(const T &x)
Inserts an element at the end of the array.
Definition: util_stl_dtk.hpp:415
Dtk_tab::clear
void clear(int no_delete=0)
Resets the Dtk_tab content.
Definition: util_stl_dtk.hpp:351
Dtk_tab::Dtk_tab
Dtk_tab(const Dtk_tab< T > &t)
Definition: util_stl_dtk.hpp:247
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:582
Dtk_tab::const_pointer
T const * const_pointer
Definition: util_stl_dtk.hpp:209
Dtk_tab::begin
iterator begin()
Definition: util_stl_dtk.hpp:887
Dtk_tab::operator=
Dtk_tab & operator=(const Dtk_tab< T > &t)
Definition: util_stl_dtk.hpp:266
Dtk_pair::operator==
int operator==(const Dtk_pair< T1, T2 > &t) const
Definition: util_stl_dtk.hpp:946
Dtk_pair::Dtk_pair
Dtk_pair(Arg &&a, Arg2 &&b)
Definition: util_stl_dtk.hpp:924
Dtk_pair::Dtk_pair
Dtk_pair()
Definition: util_stl_dtk.hpp:921
DTK_NOEXCEPT
#define DTK_NOEXCEPT
Definition: config.hpp:26