back_insert_range<internal::buffer> -> buffer_range

This commit is contained in:
Victor Zverovich
2019-06-19 14:12:29 -07:00
parent 22ddd4b989
commit f13906f408
9 changed files with 39 additions and 39 deletions
+27 -25
View File
@@ -191,10 +191,6 @@ FMT_END_NAMESPACE
FMT_BEGIN_NAMESPACE
namespace internal {
#ifndef FMT_USE_GRISU
# define FMT_USE_GRISU 1
#endif
// A fallback implementation of uintptr_t for systems that lack it.
struct fallback_uintptr {
unsigned char value[sizeof(void*)];
@@ -205,11 +201,6 @@ using uintptr_t = ::uintptr_t;
using uintptr_t = fallback_uintptr;
#endif
template <typename T> inline bool use_grisu() {
return FMT_USE_GRISU && std::numeric_limits<double>::is_iec559 &&
sizeof(T) <= sizeof(double);
}
// An equivalent of `*reinterpret_cast<Dest*>(&source)` that doesn't produce
// undefined behavior (e.g. due to type aliasing).
// Example: uint64_t d = bit_cast<uint64_t>(2.718);
@@ -224,6 +215,30 @@ inline Dest bit_cast(const Source& source) {
// An implementation of iterator_t for pre-C++20 systems.
template <typename T>
using iterator_t = decltype(std::begin(std::declval<T&>()));
#ifndef FMT_USE_GRISU
# define FMT_USE_GRISU 1
#endif
template <typename T> inline bool use_grisu() {
return FMT_USE_GRISU && std::numeric_limits<double>::is_iec559 &&
sizeof(T) <= sizeof(double);
}
// A range whose output iterator appends to a buffer.
template <typename T> class buffer_range {
public:
using value_type = T;
using iterator = std::back_insert_iterator<internal::buffer<T>>;
private:
iterator begin_;
public:
buffer_range(internal::buffer<T>& buf) : begin_(std::back_inserter(buf)) {}
explicit buffer_range(iterator it) : begin_(it) {}
iterator begin() const { return begin_; }
};
} // namespace internal
template <typename OutputIt, typename T = typename OutputIt::value_type>
@@ -243,22 +258,9 @@ class output_range {
OutputIt begin() const { return it_; }
};
// A range where begin() returns back_insert_iterator.
template <typename Container>
class back_insert_range
: public output_range<std::back_insert_iterator<Container>> {
using base = output_range<std::back_insert_iterator<Container>>;
public:
using value_type = typename Container::value_type;
back_insert_range(Container& c) : base(std::back_inserter(c)) {}
back_insert_range(typename base::iterator it) : base(it) {}
};
template <typename Range> class basic_writer;
using writer = basic_writer<back_insert_range<internal::buffer<char>>>;
using wwriter = basic_writer<back_insert_range<internal::buffer<wchar_t>>>;
using writer = basic_writer<internal::buffer_range<char>>;
using wwriter = basic_writer<internal::buffer_range<wchar_t>>;
/** A formatting error such as invalid format string. */
class format_error : public std::runtime_error {
@@ -3284,7 +3286,7 @@ template <typename Char>
typename buffer_context<Char>::iterator internal::vformat_to(
internal::buffer<Char>& buf, basic_string_view<Char> format_str,
basic_format_args<buffer_context<Char>> args) {
typedef back_insert_range<internal::buffer<Char>> range;
using range = buffer_range<Char>;
return vformat_to<arg_formatter<range>>(buf, to_string_view(format_str),
args);
}
+1 -1
View File
@@ -19,7 +19,7 @@ typename buffer_context<Char>::iterator vformat_to(
const std::locale& loc, buffer<Char>& buf,
basic_string_view<Char> format_str,
basic_format_args<buffer_context<Char>> args) {
typedef back_insert_range<buffer<Char>> range;
using range = buffer_range<Char>;
return vformat_to<arg_formatter<range>>(buf, to_string_view(format_str), args,
internal::locale_ref(loc));
}
+3 -3
View File
@@ -214,7 +214,7 @@ class prepared_format {
std::basic_string<char_type> format(const Args&... args) const {
basic_memory_buffer<char_type> buffer;
typedef back_insert_range<internal::buffer<char_type>> range;
using range = buffer_range<char_type>;
this->vformat_to(range(buffer), basic_format_args<context>{
make_args_checked(format_, args...)});
return to_string(buffer);
@@ -224,7 +224,7 @@ class prepared_format {
inline std::back_insert_iterator<Container> format_to(
std::back_insert_iterator<Container> out, const Args&... args) const {
internal::container_buffer<Container> buffer(internal::get_container(out));
typedef back_insert_range<internal::buffer<char_type>> range;
using range = buffer_range<char_type>;
this->vformat_to(range(buffer), basic_format_args<context>{
make_args_checked(format_, args...)});
return out;
@@ -241,7 +241,7 @@ class prepared_format {
template <std::size_t SIZE = inline_buffer_size>
inline typename buffer_context<char_type>::iterator format_to(
basic_memory_buffer<char_type, SIZE>& buf, const Args&... args) const {
typedef back_insert_range<internal::buffer<char_type>> range;
using range = buffer_range<char_type>;
return this->vformat_to(
range(buf),
basic_format_args<context>{make_args_checked(format_, args...)});
+1 -1
View File
@@ -368,7 +368,7 @@ template <typename OutputIt, typename Char> class basic_printf_context {
/** Formats stored arguments and writes the output to the range. */
template <typename ArgFormatter =
printf_arg_formatter<back_insert_range<internal::buffer<Char>>>>
printf_arg_formatter<internal::buffer_range<Char>>>
OutputIt format();
};