16#include "utils/Likely.h"
17#include "utils/Portability.h"
34struct IsCharPointer {};
37struct IsCharPointer<char*> {
42struct IsCharPointer<
const char*> {
43 typedef int const_type;
49template <
typename Iter>
58 using value_type =
typename std::remove_reference<
59 typename std::iterator_traits<Iter>::reference>::type;
60 using reference =
typename std::iterator_traits<Iter>::reference;
62 constexpr Range() : b_(), e_() {}
67 template <class T = Iter, typename detail::IsCharPointer<T>::type = 0>
70 template <class T = Iter, typename detail::IsCharPointer<T>::const_type = 0>
78 typename std::enable_if<
79 (!std::is_same<Iter, OtherIter>::value &&
80 std::is_convertible<OtherIter, Iter>::value),
83 : b_(other.
begin()), e_(other.
end()) {}
109 throw std::out_of_range(
"index out of range");
116 throw std::out_of_range(
"index out of range");
123 throw std::out_of_range(
"index out of range");
126 return Range(b_ + first, std::min(length,
size() - first));
130using ByteRange = Range<const unsigned char*>;
constexpr Range(Iter begin, size_type size)
Definition Range.h:65
Iter iterator
Definition Range.h:54
Range(const std::string &str)
Definition Range.h:71
void advance(size_type n)
Definition Range.h:107
constexpr size_type size() const
Definition Range.h:89
Range(Iter str)
Definition Range.h:68
Iter begin() const
Definition Range.h:98
Range(const Range &)=default
Range & operator=(const Range &)=default
bool empty() const
Definition Range.h:94
void subtract(size_type n)
Definition Range.h:114
Range subpiece(size_type first, size_type length=std::string::npos) const
Definition Range.h:121
std::size_t size_type
Definition Range.h:53
Iter const_iterator
Definition Range.h:55
constexpr Range(Iter begin, Iter end)
Definition Range.h:63
Range & operator=(Range &&)=default
Iter data() const
Definition Range.h:97
constexpr Range()
Definition Range.h:62
typename std::iterator_traits< Iter >::reference reference
Definition Range.h:58
constexpr Range(const Range< OtherIter > &other)
Definition Range.h:82
typename std::remove_reference< typename std::iterator_traits< Iter >::reference >::type value_type
Definition Range.h:56
Iter end() const
Definition Range.h:101
Definition ErrorHolder.h:16
Range< const char * > StringPiece
Definition Range.h:130
Range< const unsigned char * > ByteRange
Definition Range.h:128
Range< unsigned char * > MutableByteRange
Definition Range.h:129
type
Definition test-lz4-speed.py:247
Definition poolTests.c:28
#define const
Definition zconf.h:230
const char * str
Table column heading string.
Definition list.c:109
#define UNLIKELY(x)
Definition Likely.h:27