Move vector and pair formatting functions to StringBuilder.
This commit is contained in:
parent
f64268c50d
commit
ed00732cd2
@ -13,12 +13,14 @@
|
|||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
class StringBuilder {
|
class StringBuilder {
|
||||||
public:
|
public:
|
||||||
explicit StringBuilder(MutableSlice slice, bool use_buffer = false);
|
explicit StringBuilder(MutableSlice slice, bool use_buffer = false);
|
||||||
|
|
||||||
StringBuilder() : StringBuilder({}, true) {
|
StringBuilder() : StringBuilder({}, true) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,6 +128,36 @@ class StringBuilder {
|
|||||||
|
|
||||||
StringBuilder &operator<<(const void *ptr);
|
StringBuilder &operator<<(const void *ptr);
|
||||||
|
|
||||||
|
template <class A, class B>
|
||||||
|
StringBuilder &operator<<(const std::pair<A, B> &p) {
|
||||||
|
return *this << '[' << p.first << ';' << p.second << ']';
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
StringBuilder &operator<<(const vector<T> &v) {
|
||||||
|
*this << '{';
|
||||||
|
if (!v.empty()) {
|
||||||
|
*this << v[0];
|
||||||
|
size_t len = v.size();
|
||||||
|
for (size_t i = 1; i < len; i++) {
|
||||||
|
*this << ", " << v[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return *this << '}';
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder &operator<<(const vector<bool> &v) {
|
||||||
|
*this << '{';
|
||||||
|
if (!v.empty()) {
|
||||||
|
*this << v[0];
|
||||||
|
size_t len = v.size();
|
||||||
|
for (size_t i = 1; i < len; i++) {
|
||||||
|
*this << ", " << static_cast<bool>(v[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return *this << '}';
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
char *begin_ptr_;
|
char *begin_ptr_;
|
||||||
char *current_ptr_;
|
char *current_ptr_;
|
||||||
|
@ -325,14 +325,4 @@ Lambda<LambdaT> lambda(const LambdaT &lambda) {
|
|||||||
|
|
||||||
using format::tag;
|
using format::tag;
|
||||||
|
|
||||||
template <class A, class B>
|
|
||||||
StringBuilder &operator<<(StringBuilder &sb, const std::pair<A, B> &p) {
|
|
||||||
return sb << '[' << p.first << ';' << p.second << ']';
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
StringBuilder &operator<<(StringBuilder &stream, const vector<T> &vec) {
|
|
||||||
return stream << format::as_array(vec);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
Loading…
Reference in New Issue
Block a user