Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorPhil Nash2013-09-25 10:43:31 -0700
committerPhil Nash2013-09-25 10:43:31 -0700
commit22ded1f2bb3caf96d90c2f1981ede29d3aeb1c74 (patch)
tree1940b8a789b6975c6a84135f4488332e8af71a29
parent1e2f1d160336be07411775c476bfed3c7673263f (diff)
parent7974e1cb557e75e81f85bf3160b30d312f59089f (diff)
downloadcatch3-22ded1f2bb3caf96d90c2f1981ede29d3aeb1c74.tar.gz
Merge pull request #198 from PureAbstract/vector_to_string
Add allocator support to StringMaker<vector>
-rw-r--r--include/internal/catch_tostring.hpp37
-rw-r--r--single_include/catch.hpp39
2 files changed, 51 insertions, 25 deletions
diff --git a/include/internal/catch_tostring.hpp b/include/internal/catch_tostring.hpp
index 78c725ec..d5714e8d 100644
--- a/include/internal/catch_tostring.hpp
+++ b/include/internal/catch_tostring.hpp
@@ -99,18 +99,15 @@ struct StringMaker<T*> {
}
};
-template<typename T>
-struct StringMaker<std::vector<T> > {
- static std::string convert( std::vector<T> const& v ) {
- std::ostringstream oss;
- oss << "{ ";
- for( std::size_t i = 0; i < v.size(); ++ i ) {
- oss << toString( v[i] );
- if( i < v.size() - 1 )
- oss << ", ";
- }
- oss << " }";
- return oss.str();
+namespace Detail {
+ template<typename InputIterator>
+ std::string rangeToString( InputIterator first, InputIterator last );
+}
+
+template<typename T, typename Allocator>
+struct StringMaker<std::vector<T, Allocator> > {
+ static std::string convert( std::vector<T,Allocator> const& v ) {
+ return Detail::rangeToString( v.begin(), v.end() );
}
};
@@ -230,6 +227,22 @@ inline std::string toString( std::nullptr_t ) {
}
#endif
+ namespace Detail {
+ template<typename InputIterator>
+ std::string rangeToString( InputIterator first, InputIterator last ) {
+ std::ostringstream oss;
+ oss << "{ ";
+ if( first != last ) {
+ oss << toString( *first );
+ for( ++first ; first != last ; ++first ) {
+ oss << ", " << toString( *first );
+ }
+ }
+ oss << " }";
+ return oss.str();
+ }
+}
+
} // end namespace Catch
#endif // TWOBLUECUBES_CATCH_TOSTRING_HPP_INCLUDED
diff --git a/single_include/catch.hpp b/single_include/catch.hpp
index 523fa088..dba2e304 100644
--- a/single_include/catch.hpp
+++ b/single_include/catch.hpp
@@ -1,6 +1,6 @@
/*
* CATCH v1.0 build 10 (master branch)
- * Generated: 2013-09-14 19:56:34.776409
+ * Generated: 2013-09-21 19:07:52.759646
* ----------------------------------------------------------
* This file has been merged from multiple headers. Please don't edit it directly
* Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved.
@@ -722,18 +722,15 @@ struct StringMaker<T*> {
}
};
-template<typename T>
-struct StringMaker<std::vector<T> > {
- static std::string convert( std::vector<T> const& v ) {
- std::ostringstream oss;
- oss << "{ ";
- for( std::size_t i = 0; i < v.size(); ++ i ) {
- oss << toString( v[i] );
- if( i < v.size() - 1 )
- oss << ", ";
- }
- oss << " }";
- return oss.str();
+namespace Detail {
+ template<typename InputIterator>
+ std::string rangeToString( InputIterator first, InputIterator last );
+}
+
+template<typename T, typename Allocator>
+struct StringMaker<std::vector<T, Allocator> > {
+ static std::string convert( std::vector<T,Allocator> const& v ) {
+ return Detail::rangeToString( v.begin(), v.end() );
}
};
@@ -853,6 +850,22 @@ inline std::string toString( std::nullptr_t ) {
}
#endif
+ namespace Detail {
+ template<typename InputIterator>
+ std::string rangeToString( InputIterator first, InputIterator last ) {
+ std::ostringstream oss;
+ oss << "{ ";
+ if( first != last ) {
+ oss << toString( *first );
+ for( ++first ; first != last ; ++first ) {
+ oss << ", " << toString( *first );
+ }
+ }
+ oss << " }";
+ return oss.str();
+ }
+}
+
} // end namespace Catch
// #included from: catch_assertionresult.h