Implement minimal iterator_range in Balsa. absl::iterator_range is not part of upstream Abseil, therefore should not be used. Add a minimal implementation to BalsaHeader so that this dependency can be removed. PiperOrigin-RevId: 443244200
diff --git a/quiche/common/balsa/balsa_headers.h b/quiche/common/balsa/balsa_headers.h index b605331..ca25470 100644 --- a/quiche/common/balsa/balsa_headers.h +++ b/quiche/common/balsa/balsa_headers.h
@@ -17,7 +17,6 @@ #include <utility> #include <vector> -#include "absl/iterator/range.h" #include "absl/memory/memory.h" #include "absl/strings/ascii.h" #include "absl/strings/match.h" @@ -387,6 +386,25 @@ // finished. lines().end() will also work. class const_header_lines_key_iterator; + // A simple class that can be used in a range-based for loop. + template <typename IteratorType> + class QUICHE_EXPORT_PRIVATE iterator_range { + public: + using iterator = IteratorType; + using const_iterator = IteratorType; + using value_type = typename std::iterator_traits<IteratorType>::value_type; + + iterator_range(IteratorType begin_iterator, IteratorType end_iterator) + : begin_iterator_(std::move(begin_iterator)), + end_iterator_(std::move(end_iterator)) {} + + IteratorType begin() const { return begin_iterator_; } + IteratorType end() const { return end_iterator_; } + + private: + IteratorType begin_iterator_, end_iterator_; + }; + // Set of names of headers that might have multiple values. The GFE2 and // Envoy/GFE3 use different sets, and CoalesceOption::kCoalesce can be used // to match Envoy behavior in WriteToBuffer(). @@ -440,11 +458,11 @@ BalsaHeaders& operator=(BalsaHeaders&&) = default; // Returns a range that represents all of the header lines. - absl::iterator_range<const_header_lines_iterator> lines() const; + iterator_range<const_header_lines_iterator> lines() const; // Returns an iterator range consisting of the header lines matching key. // String backing 'key' must remain valid for lifetime of range. - absl::iterator_range<const_header_lines_key_iterator> lines( + iterator_range<const_header_lines_key_iterator> lines( absl::string_view key) const; // Returns a forward-only iterator that only stops at lines matching key. @@ -1310,13 +1328,14 @@ absl::string_view key_; }; -inline absl::iterator_range<BalsaHeaders::const_header_lines_iterator> +inline BalsaHeaders::iterator_range<BalsaHeaders::const_header_lines_iterator> BalsaHeaders::lines() const { return {HeaderLinesBeginHelper<const_header_lines_iterator>(), HeaderLinesEndHelper<const_header_lines_iterator>()}; } -inline absl::iterator_range<BalsaHeaders::const_header_lines_key_iterator> +inline BalsaHeaders::iterator_range< + BalsaHeaders::const_header_lines_key_iterator> BalsaHeaders::lines(absl::string_view key) const { return {GetIteratorForKey(key), header_lines_key_end()}; }