| Boost.Locale

- Main Page
- Modules
- Namespaces
- Classes
- Files
- Examples

- File List

boost/locale/encoding_utf.hpp

    00001 //
    00002 //  Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
    00003 //
    00004 //  Distributed under the Boost Software License, Version 1.0. (See
    00005 //  accompanying file LICENSE_1_0.txt or copy at
    00006 //  http://www.boost.org/LICENSE_1_0.txt)
    00007 //
    00008 #ifndef BOOST_LOCALE_ENCODING_UTF_HPP_INCLUDED
    00009 #define BOOST_LOCALE_ENCODING_UTF_HPP_INCLUDED
    00010
    00011 #include <boost/locale/utf.hpp>
    00012 #include <boost/locale/encoding_errors.hpp>
    00013 #include <iterator>
    00014 #ifdef BOOST_MSVC
    00015 #  pragma warning(push)
    00016 #  pragma warning(disable : 4275 4251 4231 4660)
    00017 #endif
    00018
    00019
    00020
    00021 namespace boost {
    00022     namespace locale {
    00023         namespace conv {
    00028
    00032             template<typename CharOut,typename CharIn>
    00033             std::basic_string<CharOut>
    00034             utf_to_utf(CharIn const *begin,CharIn const *end,method_type how = default_method)
    00035             {
    00036                 std::basic_string<CharOut> result;
    00037                 result.reserve(end-begin);
    00038                 typedef std::back_insert_iterator<std::basic_string<CharOut> > inserter_type;
    00039                 inserter_type inserter(result);
    00040                 utf::code_point c;
    00041                 while(begin!=end) {
    00042                     c=utf::utf_traits<CharIn>::template decode<CharIn const *>(begin,end);
    00043                     if(c==utf::illegal || c==utf::incomplete) {
    00044                         if(how==stop)
    00045                             throw conversion_error();
    00046                     }
    00047                     else {
    00048                         utf::utf_traits<CharOut>::template encode<inserter_type>(c,inserter);
    00049                     }
    00050                 }
    00051                 return result;
    00052             }
    00053
    00057             template<typename CharOut,typename CharIn>
    00058             std::basic_string<CharOut>
    00059             utf_to_utf(CharIn const *str,method_type how = default_method)
    00060             {
    00061                 CharIn const *end = str;
    00062                 while(*end)
    00063                     end++;
    00064                 return utf_to_utf<CharOut,CharIn>(str,end,how);
    00065             }
    00066
    00067
    00071             template<typename CharOut,typename CharIn>
    00072             std::basic_string<CharOut>
    00073             utf_to_utf(std::basic_string<CharIn> const &str,method_type how = default_method)
    00074             {
    00075                 return utf_to_utf<CharOut,CharIn>(str.c_str(),str.c_str()+str.size(),how);
    00076             }
    00077
    00078
    00080
    00081         } // conv
    00082
    00083     } // locale
    00084 } // boost
    00085
    00086 #ifdef BOOST_MSVC
    00087 #pragma warning(pop)
    00088 #endif
    00089
    00090 #endif
    00091
    00092 // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
    00093