1*14675a02SAndroid Build Coastguard Worker #include "fcp/base/string_stream.h"
2*14675a02SAndroid Build Coastguard Worker
3*14675a02SAndroid Build Coastguard Worker #include <stdio.h>
4*14675a02SAndroid Build Coastguard Worker
5*14675a02SAndroid Build Coastguard Worker #include <string>
6*14675a02SAndroid Build Coastguard Worker
7*14675a02SAndroid Build Coastguard Worker namespace fcp {
8*14675a02SAndroid Build Coastguard Worker namespace internal {
9*14675a02SAndroid Build Coastguard Worker
operator <<(bool x)10*14675a02SAndroid Build Coastguard Worker StringStream& StringStream::operator<<(bool x) {
11*14675a02SAndroid Build Coastguard Worker return *this << (x ? "true" : "false");
12*14675a02SAndroid Build Coastguard Worker }
13*14675a02SAndroid Build Coastguard Worker
14*14675a02SAndroid Build Coastguard Worker template <typename T>
AppendWithFormat(StringStream & string_buffer,const char * format,T value)15*14675a02SAndroid Build Coastguard Worker StringStream& AppendWithFormat(StringStream& string_buffer, const char* format,
16*14675a02SAndroid Build Coastguard Worker T value) {
17*14675a02SAndroid Build Coastguard Worker char buf[64];
18*14675a02SAndroid Build Coastguard Worker // The buffer is large enough for any possible value.
19*14675a02SAndroid Build Coastguard Worker sprintf(buf, format, value); // NOLINT
20*14675a02SAndroid Build Coastguard Worker return string_buffer << buf;
21*14675a02SAndroid Build Coastguard Worker }
22*14675a02SAndroid Build Coastguard Worker
operator <<(int32_t x)23*14675a02SAndroid Build Coastguard Worker StringStream& StringStream::operator<<(int32_t x) {
24*14675a02SAndroid Build Coastguard Worker return AppendWithFormat(*this, "%d", x);
25*14675a02SAndroid Build Coastguard Worker }
26*14675a02SAndroid Build Coastguard Worker
operator <<(uint32_t x)27*14675a02SAndroid Build Coastguard Worker StringStream& StringStream::operator<<(uint32_t x) {
28*14675a02SAndroid Build Coastguard Worker return AppendWithFormat(*this, "%u", x);
29*14675a02SAndroid Build Coastguard Worker }
30*14675a02SAndroid Build Coastguard Worker
operator <<(int64_t x)31*14675a02SAndroid Build Coastguard Worker StringStream& StringStream::operator<<(int64_t x) {
32*14675a02SAndroid Build Coastguard Worker return AppendWithFormat(*this, "%ld", x);
33*14675a02SAndroid Build Coastguard Worker }
34*14675a02SAndroid Build Coastguard Worker
operator <<(uint64_t x)35*14675a02SAndroid Build Coastguard Worker StringStream& StringStream::operator<<(uint64_t x) {
36*14675a02SAndroid Build Coastguard Worker return AppendWithFormat(*this, "%lu", x);
37*14675a02SAndroid Build Coastguard Worker }
38*14675a02SAndroid Build Coastguard Worker
operator <<(double x)39*14675a02SAndroid Build Coastguard Worker StringStream& StringStream::operator<<(double x) {
40*14675a02SAndroid Build Coastguard Worker return AppendWithFormat(*this, "%f", x);
41*14675a02SAndroid Build Coastguard Worker }
42*14675a02SAndroid Build Coastguard Worker
operator <<(const char * x)43*14675a02SAndroid Build Coastguard Worker StringStream& StringStream::operator<<(const char* x) {
44*14675a02SAndroid Build Coastguard Worker str_.append(x);
45*14675a02SAndroid Build Coastguard Worker return *this;
46*14675a02SAndroid Build Coastguard Worker }
47*14675a02SAndroid Build Coastguard Worker
operator <<(const std::string & x)48*14675a02SAndroid Build Coastguard Worker StringStream& StringStream::operator<<(const std::string& x) {
49*14675a02SAndroid Build Coastguard Worker str_.append(x);
50*14675a02SAndroid Build Coastguard Worker return *this;
51*14675a02SAndroid Build Coastguard Worker }
52*14675a02SAndroid Build Coastguard Worker
53*14675a02SAndroid Build Coastguard Worker } // namespace internal
54*14675a02SAndroid Build Coastguard Worker } // namespace fcp
55