diff options
| author | Phil Nash | 2013-09-25 10:43:31 -0700 |
|---|---|---|
| committer | Phil Nash | 2013-09-25 10:43:31 -0700 |
| commit | 22ded1f2bb3caf96d90c2f1981ede29d3aeb1c74 (patch) | |
| tree | 1940b8a789b6975c6a84135f4488332e8af71a29 | |
| parent | 1e2f1d160336be07411775c476bfed3c7673263f (diff) | |
| parent | 7974e1cb557e75e81f85bf3160b30d312f59089f (diff) | |
| download | catch3-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.hpp | 37 | ||||
| -rw-r--r-- | single_include/catch.hpp | 39 |
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 |