PCL
SortedArray.h
Go to the documentation of this file.
1 // ____ ______ __
2 // / __ \ / ____// /
3 // / /_/ // / / /
4 // / ____// /___ / /___ PixInsight Class Library
5 // /_/ \____//_____/ PCL 2.9.3
6 // ----------------------------------------------------------------------------
7 // pcl/SortedArray.h - Released 2025-02-21T12:13:32Z
8 // ----------------------------------------------------------------------------
9 // This file is part of the PixInsight Class Library (PCL).
10 // PCL is a multiplatform C++ framework for development of PixInsight modules.
11 //
12 // Copyright (c) 2003-2025 Pleiades Astrophoto S.L. All Rights Reserved.
13 //
14 // Redistribution and use in both source and binary forms, with or without
15 // modification, is permitted provided that the following conditions are met:
16 //
17 // 1. All redistributions of source code must retain the above copyright
18 // notice, this list of conditions and the following disclaimer.
19 //
20 // 2. All redistributions in binary form must reproduce the above copyright
21 // notice, this list of conditions and the following disclaimer in the
22 // documentation and/or other materials provided with the distribution.
23 //
24 // 3. Neither the names "PixInsight" and "Pleiades Astrophoto", nor the names
25 // of their contributors, may be used to endorse or promote products derived
26 // from this software without specific prior written permission. For written
27 // permission, please contact info@pixinsight.com.
28 //
29 // 4. All products derived from this software, in any form whatsoever, must
30 // reproduce the following acknowledgment in the end-user documentation
31 // and/or other materials provided with the product:
32 //
33 // "This product is based on software from the PixInsight project, developed
34 // by Pleiades Astrophoto and its contributors (https://pixinsight.com/)."
35 //
36 // Alternatively, if that is where third-party acknowledgments normally
37 // appear, this acknowledgment must be reproduced in the product itself.
38 //
39 // THIS SOFTWARE IS PROVIDED BY PLEIADES ASTROPHOTO AND ITS CONTRIBUTORS
40 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
41 // TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL PLEIADES ASTROPHOTO OR ITS
43 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
44 // EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, BUSINESS
45 // INTERRUPTION; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; AND LOSS OF USE,
46 // DATA OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
47 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
48 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
49 // POSSIBILITY OF SUCH DAMAGE.
50 // ----------------------------------------------------------------------------
51 
52 #ifndef __PCL_SortedArray_h
53 #define __PCL_SortedArray_h
54 
56 
57 #include <pcl/Defs.h>
58 #include <pcl/Diagnostics.h>
59 
60 #include <pcl/Array.h>
61 
62 namespace pcl
63 {
64 
65 // ----------------------------------------------------------------------------
66 
81 template <class T, class A = StandardAllocator>
82 class PCL_CLASS SortedArray : public DirectSortedContainer<T>
83 {
84 public:
85 
89 
93 
97 
101 
105 
109 
113 
117 
121 
125 
126  // -------------------------------------------------------------------------
127 
131  SortedArray() = default;
132 
136  explicit
138  : m_array( n )
139  {
140  }
141 
145  SortedArray( size_type n, const T& v )
146  : m_array( n, v )
147  {
148  }
149 
154  template <class FI>
155  SortedArray( FI i, FI j )
156  : m_array( i, j )
157  {
158  Sort();
159  }
160 
169  template <typename T1>
170  SortedArray( std::initializer_list<T1> l )
171  : SortedArray( l.begin(), l.end() )
172  {
173  }
174 
178  SortedArray( const SortedArray& ) = default;
179 
183  SortedArray( SortedArray&& ) = default;
184 
190  {
191  }
192 
196  bool IsUnique() const
197  {
198  return m_array.IsUnique();
199  }
200 
206  bool IsAliasOf( const SortedArray& x ) const
207  {
208  return m_array.IsAliasOf( x.m_array );
209  }
210 
219  {
220  m_array.EnsureUnique();
221  }
222 
227  size_type Size() const
228  {
229  return m_array.Size();
230  }
231 
236  {
237  return m_array.Length();
238  }
239 
243  {
244  return m_array.Capacity();
245  }
246 
250  {
251  return m_array.Available();
252  }
253 
256  bool IsValid() const
257  {
258  return m_array.IsValid();
259  }
260 
263  bool IsEmpty() const
264  {
265  return m_array.IsEmpty();
266  }
267 
271  {
272  return m_array.LowerBound();
273  }
274 
278  {
279  return m_array.UpperBound();
280  }
281 
284  const allocator& Allocator() const
285  {
286  return m_array.Allocator();
287  }
288 
291  void SetAllocator( const allocator& a )
292  {
293  m_array.SetAllocator( a );
294  }
295 
299  {
300  return m_array.At( i );
301  }
302 
306  {
307  return m_array.At( i );
308  }
309 
313  {
314  return m_array.MutableIterator( i );
315  }
316 
319  const T& operator []( size_type i ) const
320  {
321  return m_array[i];
322  }
323 
326  const T& operator *() const
327  {
328  return *Begin();
329  }
330 
334  {
335  return m_array.ConstBegin();
336  }
337 
341  {
342  return m_array.Begin();
343  }
344 
348  {
349  return m_array.ConstEnd();
350  }
351 
355  {
356  return m_array.End();
357  }
358 
362  {
363  return m_array.ConstReverseBegin();
364  }
365 
369  {
370  return m_array.ReverseBegin();
371  }
372 
376  {
377  return m_array.ConstReverseEnd();
378  }
379 
383  {
384  return m_array.ReverseEnd();
385  }
386 
396  {
397  return m_array.UniquifyIterator( i );
398  }
399 
410  {
411  return m_array.UniquifyIterators( i, j );
412  }
413 
414 #ifndef __PCL_NO_STL_COMPATIBLE_ITERATORS
419  {
420  return Begin();
421  }
422 
427  {
428  return End();
429  }
430 #endif // !__PCL_NO_STL_COMPATIBLE_ITERATORS
431 
438  SortedArray& operator =( const SortedArray& x )
439  {
440  Assign( x );
441  return *this;
442  }
443 
446  void Assign( const SortedArray& x )
447  {
448  m_array.Assign( x.m_array );
449  }
450 
454  SortedArray& operator =( SortedArray&& x )
455  {
456  Transfer( x );
457  return *this;
458  }
459 
463  {
464  m_array.Transfer( x.m_array );
465  }
466 
469  void Transfer( SortedArray&& x )
470  {
471  m_array.Transfer( x.m_array );
472  }
473 
476  SortedArray& operator =( const array_implementation& x )
477  {
478  Assign( x );
479  return *this;
480  }
481 
484  void Assign( const array_implementation& x )
485  {
486  m_array.Assign( x );
487  Sort();
488  }
489 
493  {
494  Transfer( x );
495  return *this;
496  }
497 
501  {
502  m_array.Transfer( x );
503  Sort();
504  }
505 
509  {
510  m_array.Transfer( x );
511  Sort();
512  }
513 
516  void Assign( const T& v, size_type n = 1 )
517  {
518  m_array.Assign( v, n );
519  }
520 
523  template <class FI>
524  void Assign( FI i, FI j )
525  {
526  m_array.Assign( i, j );
527  Sort();
528  }
529 
532  void Import( iterator i, iterator j )
533  {
534  m_array.Import( i, j );
535  Sort();
536  }
537 
541  {
542  return m_array.Release();
543  }
544 
549  {
550  return m_array;
551  }
552 
555  void Add( const SortedArray& x )
556  {
557  const_iterator p = x.Begin(), q = x.End();
558  for ( iterator i = m_array.Begin(); i < m_array.End() && p < q; ++i )
559  if ( *p < *i )
560  i = m_array.Insert( i, *p++ );
561  if ( p < q )
562  m_array.Append( p, q );
563  }
564 
567  void Add( const Array<T,A>& x )
568  {
569  Add( x.Begin(), x.End() );
570  }
571 
574  const_iterator Add( const T& v, size_type n = 1 )
575  {
576  return m_array.Insert( pcl::InsertionPoint( m_array.Begin(), m_array.End(), v ), v, n );
577  }
578 
581  template <class FI>
582  void Add( FI i, FI j )
583  {
584  if ( i != j )
585  {
586  m_array.EnsureUnique();
587  for ( iterator l = m_array.Begin(), r = m_array.End(); ; )
588  {
589  FI h = i;
590  iterator m = m_array.Insert( pcl::InsertionPoint( l, r, *i ), *i );
591 
592  if ( ++i == j )
593  break;
594 
595  if ( *i < *h )
596  {
597  l = m_array.Begin();
598  r = m;
599  }
600  else
601  {
602  l = m + 1;
603  r = m_array.End();
604  }
605  }
606  }
607  }
608 
611  void Remove( const_iterator i, size_type n = 1 )
612  {
613  m_array.Remove( const_cast<iterator>( i ), n );
614  }
615 
619  {
620  m_array.Remove( const_cast<iterator>( i ), const_cast<iterator>( j ) );
621  }
622 
632  void RemoveFirst( size_type n = 1 )
633  {
634  m_array.RemoveFirst( n );
635  }
636 
646  void RemoveLast( size_type n = 1 )
647  {
648  m_array.RemoveLast( n );
649  }
650 
662  {
663  m_array.Truncate( const_cast<iterator>( i ) );
664  }
665 
670  void Shrink( size_type n = 1 )
671  {
672  m_array.Shrink( n );
673  }
674 
677  void Remove( const T& v )
678  {
679  const_iterator i = pcl::BinarySearch( Begin(), End(), v );
680  if ( i != End() )
681  Remove( i, pcl::InsertionPoint( i+1, End(), v ) );
682  }
683 
686  void Clear()
687  {
688  m_array.Clear();
689  }
690 
693  void Reserve( size_type n )
694  {
695  m_array.Reserve( n );
696  }
697 
700  void Squeeze()
701  {
702  m_array.Squeeze();
703  }
704 
708  void Fill( const T& v )
709  {
710  m_array.Fill( v );
711  }
712 
715  template <class F>
716  void Apply( F f ) const
717  {
718  pcl::Apply( Begin(), End(), f );
719  }
720 
723  template <class F>
725  {
726  return pcl::FirstThat( Begin(), End(), f );
727  }
728 
731  template <class F>
733  {
734  return pcl::LastThat( Begin(), End(), f );
735  }
736 
739  size_type Count( const T& v ) const
740  {
741  const_iterator i = pcl::BinarySearch( Begin(), End(), v );
742  return (i != End()) ? pcl::InsertionPoint( i+1, End(), v ) - i : 0;
743  }
744 
747  template <class BP>
748  size_type Count( const T& v, BP p ) const
749  {
750  return m_array.Count( v, p );
751  }
752 
755  template <class UP>
756  size_type CountIf( UP p ) const
757  {
758  return m_array.CountIf( p );
759  }
760 
764  {
765  return Begin();
766  }
767 
770  template <class BP>
771  const_iterator MinItem( BP p ) const
772  {
773  return pcl::MinItem( Begin(), End(), p );
774  }
775 
779  {
780  return IsEmpty() ? End() : End()-1;
781  }
782 
785  template <class BP>
786  const_iterator MaxItem( BP p ) const
787  {
788  return pcl::MaxItem( Begin(), End(), p );
789  }
790 
793  const_iterator Search( const T& v ) const
794  {
795  return pcl::BinarySearch( Begin(), End(), v );
796  }
797 
800  template <class BP>
801  const_iterator Search( const T& v, BP p ) const
802  {
803  return m_array.Search( v, p );
804  }
805 
808  const_iterator SearchLast( const T& v ) const
809  {
810  return pcl::BinarySearchLast( Begin(), End(), v );
811  }
812 
815  template <class BP>
816  const_iterator SearchLast( const T& v, BP p ) const
817  {
818  return m_array.SearchLast( v, p );
819  }
820 
823  bool Contains( const T& v ) const
824  {
825  return Search( v ) != End();
826  }
827 
830  template <class BP>
831  bool Contains( const T& v, BP p ) const
832  {
833  return Search( v, p ) != End();
834  }
835 
838  void Sort()
839  {
840  m_array.Sort();
841  }
842 
846  friend void Swap( SortedArray& x1, SortedArray& x2 )
847  {
848  pcl::Swap( x1.m_array, x2.m_array );
849  }
850 
855  friend bool operator ==( const SortedArray& x1, const SortedArray& x2 )
856  {
857  return x1.m_array == x2.m_array;
858  }
859 
864  friend bool operator ==( const SortedArray& x1, const array_implementation& x2 )
865  {
866  return x1.m_array == x2;
867  }
868 
873  friend bool operator ==( const array_implementation& x1, const SortedArray& x2 )
874  {
875  return x1 == x2.m_array;
876  }
877 
883  friend bool operator <( const SortedArray& x1, const SortedArray& x2 )
884  {
885  return x1.m_array < x2.m_array;
886  }
887 
892  friend bool operator <( const SortedArray& x1, const array_implementation& x2 )
893  {
894  return x1.m_array < x2;
895  }
896 
901  friend bool operator <( const array_implementation& x1, const SortedArray& x2 )
902  {
903  return x1 < x2.m_array;
904  }
905 
922  template <class S, typename SP>
923  S& ToSeparated( S& s, SP separator ) const
924  {
925  return m_array.ToSeparated( s, separator );
926  }
927 
950  template <class S, typename SP, class AF>
951  S& ToSeparated( S& s, SP separator, AF append ) const
952  {
953  return m_array.ToSeparated( s, separator, append );
954  }
955 
964  template <class S>
965  S& ToCommaSeparated( S& s ) const
966  {
967  return m_array.ToCommaSeparated( s );
968  }
969 
978  template <class S>
979  S& ToSpaceSeparated( S& s ) const
980  {
981  return m_array.ToSpaceSeparated( s );
982  }
983 
992  template <class S>
993  S& ToTabSeparated( S& s ) const
994  {
995  return m_array.ToTabSeparated( s );
996  }
997 
1006  template <class S>
1007  S& ToNewLineSeparated( S& s ) const
1008  {
1009  return m_array.ToNewLineSeparated( s );
1010  }
1011 
1020  uint64 Hash64( uint64 seed = 0 ) const
1021  {
1022  return m_array.Hash64( seed );
1023  }
1024 
1033  uint32 Hash32( uint32 seed = 0 ) const
1034  {
1035  return m_array.Hash32( seed );
1036  }
1037 
1042  uint64 Hash( uint64 seed = 0 ) const
1043  {
1044  return Hash64( seed );
1045  }
1046 
1047  // -------------------------------------------------------------------------
1048 
1049 private:
1050 
1051  array_implementation m_array;
1052 };
1053 
1054 // ----------------------------------------------------------------------------
1055 
1064 template <class T, class A, class V> inline
1065 SortedArray<T,A>& operator <<( SortedArray<T,A>& x, const V& v )
1066 {
1067  x.Add( T( v ) );
1068  return x;
1069 }
1070 
1079 template <class T, class A, class V> inline
1080 SortedArray<T,A>& operator <<( SortedArray<T,A>&& x, const V& v )
1081 {
1082  x.Add( T( v ) );
1083  return x;
1084 }
1085 
1091 template <class T, class A> inline
1092 SortedArray<T,A>& operator <<( SortedArray<T,A>& x1, const SortedArray<T,A>& x2 )
1093 {
1094  x1.Add( x2 );
1095  return x1;
1096 }
1097 
1103 template <class T, class A> inline
1104 SortedArray<T,A>& operator <<( SortedArray<T,A>&& x1, const SortedArray<T,A>& x2 )
1105 {
1106  x1.Add( x2 );
1107  return x1;
1108 }
1109 
1115 template <class T, class A> inline
1116 SortedArray<T,A>& operator <<( SortedArray<T,A>& x1, const Array<T,A>& x2 )
1117 {
1118  x1.Add( x2 );
1119  return x1;
1120 }
1121 
1127 template <class T, class A> inline
1128 SortedArray<T,A>& operator <<( SortedArray<T,A>&& x1, const Array<T,A>& x2 )
1129 {
1130  x1.Add( x2 );
1131  return x1;
1132 }
1133 
1134 // ----------------------------------------------------------------------------
1135 
1136 } // pcl
1137 
1138 #endif // __PCL_SortedArray_h
1139 
1140 // ----------------------------------------------------------------------------
1141 // EOF pcl/SortedArray.h - Released 2025-02-21T12:13:32Z
Provides memory allocation for PCL containers.
Definition: Allocator.h:132
Generic dynamic array.
Definition: Array.h:100
iterator Begin()
Definition: Array.h:438
iterator End()
Definition: Array.h:463
A block_allocator
Definition: Array.h:117
T * iterator
Definition: Array.h:125
const T * const_iterator
Definition: Array.h:129
const T const_item_type
Definition: Container.h:89
Root base class of all PCL sorted containers of objects.
Definition: Container.h:118
typename DirectContainer< T >::item_type item_type
Definition: Container.h:124
typename DirectContainer< T >::const_item_type const_item_type
Definition: Container.h:129
Reverse random access iterator.
Definition: Iterator.h:420
Generic dynamic sorted array.
Definition: SortedArray.h:83
array_implementation ToUnsorted() const
Definition: SortedArray.h:548
void Shrink(size_type n=1)
Definition: SortedArray.h:670
SortedArray(const SortedArray &)=default
SortedArray(size_type n, const T &v)
Definition: SortedArray.h:145
bool IsValid() const
Definition: SortedArray.h:256
size_type Size() const
Definition: SortedArray.h:227
const_reverse_iterator ReverseBegin() const
Definition: SortedArray.h:361
typename array_implementation::block_allocator block_allocator
Definition: SortedArray.h:104
void UniquifyIterator(iterator &i)
Definition: SortedArray.h:395
SortedArray(SortedArray &&)=default
const allocator & Allocator() const
Definition: SortedArray.h:284
const_iterator SearchLast(const T &v, BP p) const
Definition: SortedArray.h:816
bool IsUnique() const
Definition: SortedArray.h:196
bool IsEmpty() const
Definition: SortedArray.h:263
friend void Swap(SortedArray &x1, SortedArray &x2)
Definition: SortedArray.h:846
void Remove(const T &v)
Definition: SortedArray.h:677
iterator MutableEnd()
Definition: SortedArray.h:354
typename array_implementation::allocator allocator
Definition: SortedArray.h:108
const_reverse_iterator ReverseEnd() const
Definition: SortedArray.h:375
bool Contains(const T &v, BP p) const
Definition: SortedArray.h:831
size_type Length() const
Definition: SortedArray.h:235
SortedArray(size_type n)
Definition: SortedArray.h:137
uint32 Hash32(uint32 seed=0) const
Definition: SortedArray.h:1033
void Assign(const SortedArray &x)
Definition: SortedArray.h:446
const_iterator End() const
Definition: SortedArray.h:347
void Transfer(array_implementation &&x)
Definition: SortedArray.h:508
void UniquifyIterators(iterator &i, iterator &j)
Definition: SortedArray.h:409
const_iterator begin() const
Definition: SortedArray.h:418
typename array_implementation::const_iterator const_iterator
Definition: SortedArray.h:116
size_type UpperBound() const
Definition: SortedArray.h:277
const_iterator At(size_type i) const
Definition: SortedArray.h:298
size_type LowerBound() const
Definition: SortedArray.h:270
void Assign(const array_implementation &x)
Definition: SortedArray.h:484
void Transfer(SortedArray &&x)
Definition: SortedArray.h:469
void Add(const SortedArray &x)
Definition: SortedArray.h:555
const_iterator Search(const T &v) const
Definition: SortedArray.h:793
iterator MutableAt(size_type i)
Definition: SortedArray.h:305
void SetAllocator(const allocator &a)
Definition: SortedArray.h:291
void Truncate(const_iterator i)
Definition: SortedArray.h:661
void Fill(const T &v)
Definition: SortedArray.h:708
size_type Available() const
Definition: SortedArray.h:249
typename array_implementation::reverse_iterator reverse_iterator
Definition: SortedArray.h:120
const_iterator MaxItem() const
Definition: SortedArray.h:778
void Apply(F f) const
Definition: SortedArray.h:716
void Remove(const_iterator i, size_type n=1)
Definition: SortedArray.h:611
const_iterator Search(const T &v, BP p) const
Definition: SortedArray.h:801
reverse_iterator MutableReverseBegin()
Definition: SortedArray.h:368
iterator Release()
Definition: SortedArray.h:540
void RemoveFirst(size_type n=1)
Definition: SortedArray.h:632
const_iterator FirstThat(F f) const
Definition: SortedArray.h:724
void Assign(FI i, FI j)
Definition: SortedArray.h:524
SortedArray(FI i, FI j)
Definition: SortedArray.h:155
SortedArray()=default
size_type CountIf(UP p) const
Definition: SortedArray.h:756
typename array_implementation::const_reverse_iterator const_reverse_iterator
Definition: SortedArray.h:124
const_iterator SearchLast(const T &v) const
Definition: SortedArray.h:808
void Assign(const T &v, size_type n=1)
Definition: SortedArray.h:516
bool IsAliasOf(const SortedArray &x) const
Definition: SortedArray.h:206
void Add(const Array< T, A > &x)
Definition: SortedArray.h:567
const_iterator Begin() const
Definition: SortedArray.h:333
void Transfer(SortedArray &x)
Definition: SortedArray.h:462
size_type Count(const T &v) const
Definition: SortedArray.h:739
const_iterator Add(const T &v, size_type n=1)
Definition: SortedArray.h:574
uint64 Hash(uint64 seed=0) const
Definition: SortedArray.h:1042
void Transfer(array_implementation &x)
Definition: SortedArray.h:500
reverse_iterator MutableReverseEnd()
Definition: SortedArray.h:382
void Reserve(size_type n)
Definition: SortedArray.h:693
const_iterator LastThat(F f) const
Definition: SortedArray.h:732
const_iterator end() const
Definition: SortedArray.h:426
uint64 Hash64(uint64 seed=0) const
Definition: SortedArray.h:1020
const_iterator MinItem() const
Definition: SortedArray.h:763
void Import(iterator i, iterator j)
Definition: SortedArray.h:532
const_iterator MaxItem(BP p) const
Definition: SortedArray.h:786
iterator MutableIterator(const_iterator i)
Definition: SortedArray.h:312
typename array_implementation::iterator iterator
Definition: SortedArray.h:112
iterator MutableBegin()
Definition: SortedArray.h:340
bool Contains(const T &v) const
Definition: SortedArray.h:823
void Remove(const_iterator i, const_iterator j)
Definition: SortedArray.h:618
void RemoveLast(size_type n=1)
Definition: SortedArray.h:646
size_type Count(const T &v, BP p) const
Definition: SortedArray.h:748
const_iterator MinItem(BP p) const
Definition: SortedArray.h:771
void Add(FI i, FI j)
Definition: SortedArray.h:582
size_type Capacity() const
Definition: SortedArray.h:242
SortedArray(std::initializer_list< T1 > l)
Definition: SortedArray.h:170
Array< T, A > & operator<<(Array< T, A > &x, const V &v)
Definition: Array.h:2313
bool operator==(const Array< T, A > &x1, const Array< T, A > &x2) noexcept
Definition: Array.h:2285
bool operator<(const Array< T, A > &x1, const Array< T, A > &x2) noexcept
Definition: Array.h:2296
Complex< T1 > operator*(const Complex< T1 > &c1, const Complex< T2 > &c2) noexcept
Definition: Complex.h:562
uint64 Hash64(const void *data, size_type size, uint64 seed=0) noexcept
Definition: Math.h:4830
void Swap(GenericPoint< T > &p1, GenericPoint< T > &p2) noexcept
Definition: Point.h:1459
unsigned long long uint64
Definition: Defs.h:682
unsigned int uint32
Definition: Defs.h:666
FI BinarySearch(FI i, FI j, const T &v) noexcept
Definition: Search.h:170
FI BinarySearchLast(FI i, FI j, const T &v) noexcept
Definition: Search.h:238
FI1 Search(FI1 i1, FI1 j1, FI2 i2, FI2 j2) noexcept
Definition: Search.h:397
FI InsertionPoint(FI i, FI j, const T &v) noexcept
Definition: Search.h:326
size_t size_type
Definition: Defs.h:609
void Sort(BI i, BI j)
Definition: Sort.h:520
BI LastThat(BI i, BI j, UP p) noexcept(noexcept(p))
Definition: Utility.h:350
FI MinItem(FI i, FI j) noexcept
Definition: Utility.h:441
FI MaxItem(FI i, FI j) noexcept
Definition: Utility.h:479
void Apply(FI i, FI j, F f) noexcept(noexcept(f))
Definition: Utility.h:249
FI FirstThat(FI i, FI j, UP p) noexcept(noexcept(p))
Definition: Utility.h:316
PCL root namespace.
Definition: AbstractImage.h:77