123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #ifndef BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP
- #define BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP
- #if defined(_MSC_VER) && (_MSC_VER >= 1020)
- # pragma once
- #endif
- #include <cassert>
- #include <cstddef>
- #include <boost/config.hpp>
- #if defined(BOOST_NO_STDC_NAMESPACE)
- namespace std{
- using ::size_t;
- }
- #endif
- #include <boost/serialization/pfto.hpp>
- #include <boost/iterator/transform_iterator.hpp>
- #include <boost/archive/iterators/dataflow_exception.hpp>
- namespace boost {
- namespace archive {
- namespace iterators {
- namespace detail {
- template<class CharType>
- struct from_6_bit {
- typedef CharType result_type;
- CharType operator()(CharType t) const{
- const char * lookup_table =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz"
- "0123456789"
- "+/";
- assert(t < 64);
- return lookup_table[static_cast<size_t>(t)];
- }
- };
- }
- template<
- class Base,
- class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
- >
- class base64_from_binary :
- public transform_iterator<
- detail::from_6_bit<CharType>,
- Base
- >
- {
- friend class boost::iterator_core_access;
- typedef transform_iterator<
- BOOST_DEDUCED_TYPENAME detail::from_6_bit<CharType>,
- Base
- > super_t;
- public:
-
- template<class T>
- base64_from_binary(BOOST_PFTO_WRAPPER(T) start) :
- super_t(
- Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start))),
- detail::from_6_bit<CharType>()
- )
- {}
-
- base64_from_binary(const base64_from_binary & rhs) :
- super_t(
- Base(rhs.base_reference()),
- detail::from_6_bit<CharType>()
- )
- {}
- };
- }
- }
- }
- #endif
|