Explorar o código

cmAlgorithms: Add a range adaptor and API for adjusting a range.

Stephen Kelly %!s(int64=10) %!d(string=hai) anos
pai
achega
0c12f1ea0d
Modificáronse 1 ficheiros con 19 adicións e 0 borrados
  1. 19 0
      Source/cmAlgorithms.h

+ 19 - 0
Source/cmAlgorithms.h

@@ -122,6 +122,17 @@ struct Range
   const_iterator begin() const { return Begin; }
   const_iterator end() const { return End; }
   bool empty() const { return std::distance(Begin, End) == 0; }
+  Range& advance(cmIML_INT_intptr_t amount)
+  {
+    std::advance(Begin, amount);
+    return *this;
+  }
+
+  Range& retreat(cmIML_INT_intptr_t amount)
+  {
+    std::advance(End, -amount);
+    return *this;
+  }
 private:
   const_iterator Begin;
   const_iterator End;
@@ -135,6 +146,14 @@ ContainerAlgorithms::Range<Iter1> cmRange(Iter1 begin, Iter2 end)
   return ContainerAlgorithms::Range<Iter1>(begin, end);
 }
 
+template<typename Range>
+ContainerAlgorithms::Range<typename Range::const_iterator>
+cmRange(Range const& range)
+{
+  return ContainerAlgorithms::Range<typename Range::const_iterator>(
+      range.begin(), range.end());
+}
+
 template<typename Container>
 void cmDeleteAll(Container const& c)
 {