Merge 4f14318128 into 4d35f94133
This commit is contained in:
commit
1b656472df
@ -683,7 +683,8 @@ class basic_arg {
|
||||
template <typename Char, typename ErrorHandler = internal::error_handler>
|
||||
class basic_parse_context : private ErrorHandler {
|
||||
private:
|
||||
basic_string_view<Char> format_str_;
|
||||
typename basic_string_view<Char>::iterator begin_;
|
||||
typename basic_string_view<Char>::iterator end_;
|
||||
int next_arg_id_;
|
||||
|
||||
public:
|
||||
@ -692,20 +693,21 @@ class basic_parse_context : private ErrorHandler {
|
||||
|
||||
explicit FMT_CONSTEXPR basic_parse_context(
|
||||
basic_string_view<Char> format_str, ErrorHandler eh = ErrorHandler())
|
||||
: ErrorHandler(eh), format_str_(format_str), next_arg_id_(0) {}
|
||||
: ErrorHandler(eh), begin_(format_str.begin()), end_(format_str.end()),
|
||||
next_arg_id_(0) {}
|
||||
|
||||
// Returns an iterator to the beginning of the format string range being
|
||||
// parsed.
|
||||
FMT_CONSTEXPR iterator begin() const FMT_NOEXCEPT {
|
||||
return format_str_.begin();
|
||||
return begin_;
|
||||
}
|
||||
|
||||
// Returns an iterator past the end of the format string range being parsed.
|
||||
FMT_CONSTEXPR iterator end() const FMT_NOEXCEPT { return format_str_.end(); }
|
||||
FMT_CONSTEXPR iterator end() const FMT_NOEXCEPT { return end_; }
|
||||
|
||||
// Advances the begin iterator to ``it``.
|
||||
FMT_CONSTEXPR void advance_to(iterator it) {
|
||||
format_str_.remove_prefix(it - begin());
|
||||
begin_ = it;
|
||||
}
|
||||
|
||||
// Returns the next argument index.
|
||||
|
||||
@ -571,7 +571,7 @@ template <typename Char>
|
||||
class null_terminating_iterator;
|
||||
|
||||
template <typename Char>
|
||||
FMT_CONSTEXPR_DECL const Char *pointer_from(null_terminating_iterator<Char> it);
|
||||
FMT_CONSTEXPR_DECL typename null_terminating_iterator<Char>::pointer pointer_from(null_terminating_iterator<Char> it);
|
||||
|
||||
// An iterator that produces a null terminator on *end. This simplifies parsing
|
||||
// and allows comparing the performance of processing a null-terminated string
|
||||
@ -581,20 +581,20 @@ class null_terminating_iterator {
|
||||
public:
|
||||
typedef std::ptrdiff_t difference_type;
|
||||
typedef Char value_type;
|
||||
typedef const Char* pointer;
|
||||
typedef typename basic_string_view<Char>::iterator pointer;
|
||||
typedef const Char& reference;
|
||||
typedef std::random_access_iterator_tag iterator_category;
|
||||
|
||||
null_terminating_iterator() : ptr_(0), end_(0) {}
|
||||
|
||||
FMT_CONSTEXPR null_terminating_iterator(const Char *ptr, const Char *end)
|
||||
FMT_CONSTEXPR null_terminating_iterator(pointer ptr, pointer end)
|
||||
: ptr_(ptr), end_(end) {}
|
||||
|
||||
template <typename Range>
|
||||
FMT_CONSTEXPR explicit null_terminating_iterator(const Range &r)
|
||||
: ptr_(r.begin()), end_(r.end()) {}
|
||||
|
||||
null_terminating_iterator &operator=(const Char *ptr) {
|
||||
null_terminating_iterator &operator=(pointer ptr) {
|
||||
assert(ptr <= end_);
|
||||
ptr_ = ptr;
|
||||
return *this;
|
||||
@ -646,19 +646,19 @@ class null_terminating_iterator {
|
||||
return ptr_ >= other.ptr_;
|
||||
}
|
||||
|
||||
friend FMT_CONSTEXPR_DECL const Char *pointer_from<Char>(
|
||||
friend FMT_CONSTEXPR_DECL typename null_terminating_iterator<Char>::pointer pointer_from<Char>(
|
||||
null_terminating_iterator it);
|
||||
|
||||
private:
|
||||
const Char *ptr_;
|
||||
const Char *end_;
|
||||
pointer ptr_;
|
||||
pointer end_;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
FMT_CONSTEXPR const T *pointer_from(const T *p) { return p; }
|
||||
|
||||
template <typename Char>
|
||||
FMT_CONSTEXPR const Char *pointer_from(null_terminating_iterator<Char> it) {
|
||||
FMT_CONSTEXPR typename null_terminating_iterator<Char>::pointer pointer_from(null_terminating_iterator<Char> it) {
|
||||
return it.ptr_;
|
||||
}
|
||||
|
||||
@ -1787,7 +1787,7 @@ FMT_CONSTEXPR Iterator parse_arg_id(Iterator it, IDHandler &&handler) {
|
||||
do {
|
||||
c = *++it;
|
||||
} while (is_name_start(c) || ('0' <= c && c <= '9'));
|
||||
handler(basic_string_view<char_type>(pointer_from(start), it - start));
|
||||
handler(basic_string_view<char_type>(&*pointer_from(start), it - start));
|
||||
return it;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user