43 #include "rsc/rscexports.h"
58 pair_style(
const string& open_brace =
"(",
const string& separator =
", ",
59 const string& close_brace =
")");
69 template<
typename Ch,
typename Tr,
typename T>
70 basic_ostream<Ch, Tr>&
71 operator<<(basic_ostream<Ch, Tr>& stream,
75 delete reinterpret_cast<detail::pair_style*> (stream.pword(
86 RSC_EXPORT
extern const detail::set_pair_style<detail::pair_style> pair_default;
87 RSC_EXPORT
extern const detail::set_pair_style<detail::pair_style>
90 template<
typename Ch,
typename Tr,
typename R,
typename S>
91 basic_ostream<Ch, Tr>&
92 operator<<(basic_ostream<Ch, Tr>& stream,
const pair<R, S>& pair) {
96 stream << pair_default;
98 detail::pair_style& style =
99 *
reinterpret_cast<detail::pair_style*
> (stream.pword(
102 stream << style.open_brace << pair.first << style.separator << pair.second
103 << style.close_brace;
107 template<
typename Ch,
typename Tr,
typename T>
108 basic_ostream<Ch, Tr>&
109 operator<<(basic_ostream<Ch, Tr>& stream,
const vector<T>& container) {
110 typedef vector<T> container_type;
111 typedef typename container_type::value_type value_type;
114 if (container.size() >= 1) {
115 copy(container.begin(), container.end() - 1,
116 ostream_iterator<value_type> (stream,
", "));
117 stream << container.back();
123 template<
typename Ch,
typename Tr,
typename T>
124 basic_ostream<Ch, Tr>&
125 operator<<(basic_ostream<Ch, Tr>& stream,
const deque<T>& container) {
126 typedef vector<T> container_type;
127 typedef typename container_type::value_type value_type;
130 if (container.size() >= 1) {
131 copy(container.begin(), container.end() - 1,
132 ostream_iterator<value_type> (stream,
", "));
133 stream << container.back();
139 template<
typename Ch,
typename Tr,
typename T>
140 basic_ostream<Ch, Tr>&
141 operator<<(basic_ostream<Ch, Tr>& stream,
const list<T>& container) {
142 typedef list<T> container_type;
143 typedef typename container_type::value_type value_type;
146 if (container.size() >= 1) {
147 copy(container.begin(), --container.end(),
148 ostream_iterator<value_type> (stream,
", "));
149 stream << container.back();
155 template<
typename Ch,
typename Tr,
typename T>
156 basic_ostream<Ch, Tr>&
157 operator<<(basic_ostream<Ch, Tr>& stream,
const set<T>& container) {
158 typedef set<T> container_type;
159 typedef typename container_type::value_type value_type;
162 if (container.size() >= 1) {
163 copy(++container.begin(), container.end(),
164 ostream_iterator<value_type> (stream,
", "));
165 stream << *container.begin();
171 template<
typename Ch,
typename Tr,
typename R,
typename S>
172 basic_ostream<Ch, Tr>&
173 operator<<(basic_ostream<Ch, Tr>& stream,
const map<R, S>& container) {
174 typedef map<R, S> container_type;
177 for (
typename container_type::const_iterator it = container.begin(); it
178 != container.end();) {
179 stream << it->first <<
": " << it->second;
180 if (++it != container.end())
187 template<
typename Ch,
typename Tr,
typename R,
typename S>
188 basic_ostream<Ch, Tr>&
189 operator<<(basic_ostream<Ch, Tr>& stream,
const multimap<R, S>& container) {
190 typedef multimap<R, S> container_type;
193 for (
typename container_type::const_iterator it = container.begin(); it
194 != container.end();) {
195 stream << it->first <<
": " << it->second;
196 if (++it != container.end())
203 template<
typename Ch,
typename Tr,
typename T>
204 basic_ostream<Ch, Tr>&
205 operator<<(basic_ostream<Ch, Tr>& stream,
const valarray<T>& container) {
206 typedef valarray<T> container_type;
207 typedef typename container_type::value_type value_type;
210 for (
unsigned int i = 0; i != container.size(); ++i) {
211 stream << container[i];
212 if (i != container.size() - 1)
219 template<
typename Ch,
typename Tr,
typename T>
220 basic_ostream<Ch, Tr>&
221 operator<<(basic_ostream<Ch, Tr>& stream,
const slice_array<T>& container) {
222 typedef slice_array<T> container_type;
223 typedef typename container_type::value_type value_type;
void pair_style_delete(ios_base::event event_, ios_base &stream, int)
static const int stream_storage