… | |
… | |
94 | } |
94 | } |
95 | |
95 | |
96 | return first->data; |
96 | return first->data; |
97 | } |
97 | } |
98 | |
98 | |
|
|
99 | dynbuf::operator std::string () |
|
|
100 | { |
|
|
101 | // could optimise |
|
|
102 | return std::string (linearise (), size ()); |
|
|
103 | } |
|
|
104 | |
99 | void |
105 | void |
|
|
106 | dynbuf_text::printf (const char *format, ...) |
|
|
107 | { |
|
|
108 | int len; |
|
|
109 | |
|
|
110 | { |
|
|
111 | force (128); |
|
|
112 | |
|
|
113 | va_list ap; |
|
|
114 | va_start (ap, format); |
|
|
115 | len = vsnprintf (ptr, room, format, ap); |
|
|
116 | va_end (ap); |
|
|
117 | |
|
|
118 | assert (len >= 0); // shield against broken vsnprintf's |
|
|
119 | |
|
|
120 | // was enough room available |
|
|
121 | if (len < room) |
|
|
122 | { |
|
|
123 | alloc (len); |
|
|
124 | return; |
|
|
125 | } |
|
|
126 | } |
|
|
127 | |
|
|
128 | // longer, try harder |
|
|
129 | va_list ap; |
|
|
130 | va_start (ap, format); |
|
|
131 | vsnprintf (force (len + 1), len + 1, format, ap); |
|
|
132 | va_end (ap); |
|
|
133 | |
|
|
134 | alloc (len); |
|
|
135 | } |
|
|
136 | |
|
|
137 | void |
100 | dynbuf::add (sint32 i) |
138 | dynbuf_text::add (sint32 i) |
101 | { |
139 | { |
102 | char buf[max_sint32_size]; |
140 | char buf[max_sint32_size]; |
103 | char *p = buf + sizeof (buf); |
141 | char *p = buf + sizeof (buf); |
104 | char neg; |
142 | char neg; |
105 | |
143 | |
… | |
… | |
130 | |
168 | |
131 | add ((void *) p, buf + sizeof (buf) - p); |
169 | add ((void *) p, buf + sizeof (buf) - p); |
132 | } |
170 | } |
133 | |
171 | |
134 | void |
172 | void |
135 | dynbuf::add (sint64 i) |
173 | dynbuf_text::add (sint64 i) |
136 | { |
174 | { |
137 | if (i > -10000000 && i < 10000000) |
175 | if (i > -10000000 && i < 10000000) |
138 | { |
176 | { |
139 | add (sint32 (i)); |
177 | add (sint32 (i)); |
140 | return; |
178 | return; |