diff options
Diffstat (limited to '')
-rw-r--r-- | src/boost/libs/serialization/performance/performance_iterators_base64.cpp | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/src/boost/libs/serialization/performance/performance_iterators_base64.cpp b/src/boost/libs/serialization/performance/performance_iterators_base64.cpp new file mode 100644 index 000000000..662ea6cf7 --- /dev/null +++ b/src/boost/libs/serialization/performance/performance_iterators_base64.cpp @@ -0,0 +1,100 @@ +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// test_iterators.cpp + +// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include <algorithm> +#include <list> + +#if (defined _MSC_VER) && (_MSC_VER == 1200) +# pragma warning (disable : 4786) // too long name, harmless warning +#endif + +#include <cstdlib> +#include <cstddef> // size_t + +#include <boost/config.hpp> +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std{ + using ::rand; + using ::size_t; +} +#endif + +#include <boost/serialization/pfto.hpp> + +#include <boost/archive/iterators/binary_from_base64.hpp> +#include <boost/archive/iterators/base64_from_binary.hpp> +#include <boost/archive/iterators/insert_linebreaks.hpp> +#include <boost/archive/iterators/remove_whitespace.hpp> +#include <boost/archive/iterators/transform_width.hpp> + +#include "../test/test_tools.hpp" + +#include <iostream> + +template<typename CharType> +void test_base64(){ + CharType rawdata[150]; + std::size_t size = sizeof(rawdata) / sizeof(CharType); + CharType * rptr; + for(rptr = rawdata + size; rptr-- > rawdata;) + *rptr = std::rand(); + + // convert to base64 + typedef std::list<CharType> text_base64_type; + text_base64_type text_base64; + + typedef + boost::archive::iterators::insert_linebreaks< + boost::archive::iterators::base64_from_binary< + boost::archive::iterators::transform_width< + CharType * + ,6 + ,sizeof(CharType) * 8 + > + > + ,72 + > + translate_out; + + std::copy( + translate_out(BOOST_MAKE_PFTO_WRAPPER(static_cast<CharType *>(rawdata))), + translate_out(BOOST_MAKE_PFTO_WRAPPER(rawdata + size)), + std::back_inserter(text_base64) + ); + + // convert from base64 to binary and compare with the original + typedef + boost::archive::iterators::transform_width< + boost::archive::iterators::binary_from_base64< + boost::archive::iterators::remove_whitespace< + BOOST_DEDUCED_TYPENAME text_base64_type::iterator + > + >, + sizeof(CharType) * 8, + 6 + > translate_in; + + BOOST_CHECK( + std::equal( + rawdata, + rawdata + size, + translate_in(BOOST_MAKE_PFTO_WRAPPER(text_base64.begin())) + ) + ); + +} + +int +test_main( int argc, char* argv[] ) +{ + test_base64<char>(); + #ifndef BOOST_NO_CWCHAR + test_base64<wchar_t>(); + #endif + return EXIT_SUCCESS; +} |