My Project
Loading...
Searching...
No Matches
StdValueTraits.h
Go to the documentation of this file.
1#ifndef __cxxtest_StdValueTraits_h__
2#define __cxxtest_StdValueTraits_h__
3
4//
5// This file defines ValueTraits for std:: stuff.
6// It is #included by <cxxtest/ValueTraits.h> if you
7// define CXXTEST_HAVE_STD
8//
9
10#include <cxxtest/ValueTraits.h>
11#include <cxxtest/StdHeaders.h>
12
13#ifdef _CXXTEST_OLD_STD
14# define CXXTEST_STD(x) x
15#else // !_CXXTEST_OLD_STD
16# define CXXTEST_STD(x) std::x
17#endif // _CXXTEST_OLD_STD
18
19#ifndef CXXTEST_USER_VALUE_TRAITS
20
21namespace CxxTest
22{
23 //
24 // NOTE: This should have been
25 // template<class Char, class Traits, class Allocator>
26 // class ValueTraits< std::basic_string<Char, Traits, Allocator> > {};
27 // But MSVC doesn't support it (yet).
28 //
29
30 //
31 // If we have std::string, we might as well use it
32 //
34 {
35 public:
36 StdTraitsBase &operator<<( const CXXTEST_STD(string) &s ) { _s += s; return *this; }
37 const char *asString() const { return _s.c_str(); }
38
39 private:
40 CXXTEST_STD(string) _s;
41 };
42
43 //
44 // std::string
45 //
48 {
49 public:
50 ValueTraits( const CXXTEST_STD(string) &s )
51 {
52 *this << "\"";
53 for ( unsigned i = 0; i < s.length(); ++ i ) {
54 char c[sizeof("\\xXX")];
55 charToString( s[i], c );
56 *this << c;
57 }
58 *this << "\"";
59 }
60 };
61
63
64#ifndef _CXXTEST_OLD_STD
65 //
66 // std::wstring
67 //
69 class ValueTraits<const CXXTEST_STD(basic_string<wchar_t>)> : public StdTraitsBase
70 {
71 public:
72 ValueTraits( const CXXTEST_STD(basic_string<wchar_t>) &s )
73 {
74 *this << "L\"";
75 for ( unsigned i = 0; i < s.length(); ++ i ) {
76 char c[sizeof("\\x12345678")];
77 charToString( (unsigned long)s[i], c );
78 *this << c;
79 }
80 *this << "\"";
81 }
82 };
83
84 CXXTEST_COPY_CONST_TRAITS( CXXTEST_STD(basic_string<wchar_t>) );
85#endif // _CXXTEST_OLD_STD
86
87 //
88 // Convert a range defined by iterators to a string
89 // This is useful for almost all STL containers
90 //
91 template<class Stream, class Iterator>
92 void dumpRange( Stream &s, Iterator first, Iterator last )
93 {
94 s << "{ ";
95 while ( first != last ) {
96 s << TS_AS_STRING(*first);
97 ++ first;
98 s << ((first == last) ? " }" : ", ");
99 }
100 }
101
102#ifdef _CXXTEST_PARTIAL_TEMPLATE_SPECIALIZATION
103 //
104 // std::pair
105 //
106 template<class First, class Second>
107 class ValueTraits< CXXTEST_STD(pair)<First, Second> > : public StdTraitsBase
108 {
109 public:
110 ValueTraits( const CXXTEST_STD(pair)<First, Second> &p )
111 {
112 *this << "<" << TS_AS_STRING( p.first ) << ", " << TS_AS_STRING( p.second ) << ">";
113 }
114 };
115
116 //
117 // std::vector
118 //
119 template<class Element>
120 class ValueTraits< CXXTEST_STD(vector)<Element> > : public StdTraitsBase
121 {
122 public:
123 ValueTraits( const CXXTEST_STD(vector)<Element> &v )
124 {
125 dumpRange( *this, v.begin(), v.end() );
126 }
127 };
128
129 //
130 // std::list
131 //
132 template<class Element>
133 class ValueTraits< CXXTEST_STD(list)<Element> > : public StdTraitsBase
134 {
135 public:
136 ValueTraits( const CXXTEST_STD(list)<Element> &l )
137 {
138 dumpRange( *this, l.begin(), l.end() );
139 }
140 };
141
142 //
143 // std::set
144 //
145 template<class Element>
146 class ValueTraits< CXXTEST_STD(set)<Element> > : public StdTraitsBase
147 {
148 public:
149 ValueTraits( const CXXTEST_STD(set)<Element> &s )
150 {
151 dumpRange( *this, s.begin(), s.end() );
152 }
153 };
154
155 //
156 // std::map
157 //
158 template<class Key, class Value>
159 class ValueTraits< CXXTEST_STD(map)<Key, Value> > : public StdTraitsBase
160 {
161 public:
162 ValueTraits( const CXXTEST_STD(map)<Key, Value> &m )
163 {
164 dumpRange( *this, m.begin(), m.end() );
165 }
166 };
167
168 //
169 // std::deque
170 //
171 template<class Element>
172 class ValueTraits< CXXTEST_STD(deque)<Element> > : public StdTraitsBase
173 {
174 public:
175 ValueTraits( const CXXTEST_STD(deque)<Element> &d )
176 {
177 dumpRange( *this, d.begin(), d.end() );
178 }
179 };
180
181 //
182 // std::multiset
183 //
184 template<class Element>
185 class ValueTraits< CXXTEST_STD(multiset)<Element> > : public StdTraitsBase
186 {
187 public:
188 ValueTraits( const CXXTEST_STD(multiset)<Element> &ms )
189 {
190 dumpRange( *this, ms.begin(), ms.end() );
191 }
192 };
193
194 //
195 // std::multimap
196 //
197 template<class Key, class Value>
198 class ValueTraits< CXXTEST_STD(multimap)<Key, Value> > : public StdTraitsBase
199 {
200 public:
201 ValueTraits( const CXXTEST_STD(multimap)<Key, Value> &mm )
202 {
203 dumpRange( *this, mm.begin(), mm.end() );
204 }
205 };
206
207 //
208 // std::complex
209 //
210 template<class Number>
211 class ValueTraits< CXXTEST_STD(complex)<Number> > : public StdTraitsBase
212 {
213 public:
214 ValueTraits( const CXXTEST_STD(complex)<Number> &c )
215 {
216 if ( !c.imag() )
217 *this << TS_AS_STRING(c.real());
218 else if ( !c.real() )
219 *this << "(" << TS_AS_STRING(c.imag()) << " * i)";
220 else
221 *this << "(" << TS_AS_STRING(c.real()) << " + " << TS_AS_STRING(c.imag()) << " * i)";
222 }
223 };
224#endif // _CXXTEST_PARTIAL_TEMPLATE_SPECIALIZATION
225};
226
227#endif // CXXTEST_USER_VALUE_TRAITS
228
229#endif // __cxxtest_StdValueTraits_h__
#define CXXTEST_STD(x)
#define CXXTEST_TEMPLATE_INSTANTIATION
Definition: ValueTraits.h:18
#define CXXTEST_COPY_CONST_TRAITS(CXXTEST_CLASS)
Definition: ValueTraits.h:113
#define TS_AS_STRING(x)
Definition: ValueTraits.h:26
int l
Definition: cfEzgcd.cc:100
int m
Definition: cfEzgcd.cc:128
int i
Definition: cfEzgcd.cc:132
int p
Definition: cfModGcd.cc:4078
CanonicalForm map(const CanonicalForm &primElem, const Variable &alpha, const CanonicalForm &F, const Variable &beta)
map from to such that is mapped onto
Definition: cf_map_ext.cc:504
const char * asString() const
StdTraitsBase & operator<<(const CXXTEST_STD(string) &s)
ValueTraits(const CXXTEST_STD(basic_string< wchar_t >) &s)
ValueTraits(const T &t)
Definition: ValueTraits.h:80
Definition: Number.h:34
const Variable & v
< [in] a sqrfree bivariate poly
Definition: facBivar.h:39
#define const
Definition: fegetopt.c:39
STATIC_VAR poly last
Definition: hdegree.cc:1173
#define string
Definition: libparse.cc:1252
void dumpRange(Stream &s, Iterator first, Iterator last)
char * charToString(unsigned long c, char *s)
Definition: ValueTraits.cpp:48
char * s
Definition: ValueTraits.h:143