diff --git a/tdutils/td/utils/StringBuilder.h b/tdutils/td/utils/StringBuilder.h index 2339ef71c..3431a01ab 100644 --- a/tdutils/td/utils/StringBuilder.h +++ b/tdutils/td/utils/StringBuilder.h @@ -13,12 +13,14 @@ #include #include #include +#include namespace td { class StringBuilder { public: explicit StringBuilder(MutableSlice slice, bool use_buffer = false); + StringBuilder() : StringBuilder({}, true) { } @@ -126,6 +128,36 @@ class StringBuilder { StringBuilder &operator<<(const void *ptr); + template + StringBuilder &operator<<(const std::pair &p) { + return *this << '[' << p.first << ';' << p.second << ']'; + } + + template + StringBuilder &operator<<(const vector &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 &v) { + *this << '{'; + if (!v.empty()) { + *this << v[0]; + size_t len = v.size(); + for (size_t i = 1; i < len; i++) { + *this << ", " << static_cast(v[i]); + } + } + return *this << '}'; + } + private: char *begin_ptr_; char *current_ptr_; diff --git a/tdutils/td/utils/format.h b/tdutils/td/utils/format.h index 6a2aacf1f..16a4cf471 100644 --- a/tdutils/td/utils/format.h +++ b/tdutils/td/utils/format.h @@ -325,14 +325,4 @@ Lambda lambda(const LambdaT &lambda) { using format::tag; -template -StringBuilder &operator<<(StringBuilder &sb, const std::pair &p) { - return sb << '[' << p.first << ';' << p.second << ']'; -} - -template -StringBuilder &operator<<(StringBuilder &stream, const vector &vec) { - return stream << format::as_array(vec); -} - } // namespace td