#ifndef BOOST_FILESYSTEM_TEST_CODECVT_HPP
#define BOOST_FILESYSTEM_TEST_CODECVT_HPP
#include <boost/filesystem/config.hpp>
#include <locale>
#include <cwchar>
class test_codecvt :
public std::codecvt< wchar_t, char, std::mbstate_t >
{
public:
explicit test_codecvt() :
std::codecvt< wchar_t, char, std::mbstate_t >()
{
}
protected:
virtual bool do_always_noconv() const throw() { return false; }
virtual int do_encoding() const throw() { return 0; }
virtual std::codecvt_base::result do_in(std::mbstate_t&, const char* from, const char* from_end, const char*& from_next, wchar_t* to, wchar_t* to_end, wchar_t*& to_next) const
{
for (; from != from_end && to != to_end; ++from, ++to)
*to = wchar_t(*from + 1);
if (to == to_end)
return error;
*to = L'\0';
from_next = from;
to_next = to;
return ok;
}
virtual std::codecvt_base::result do_out(std::mbstate_t&, const wchar_t* from, const wchar_t* from_end, const wchar_t*& from_next, char* to, char* to_end, char*& to_next) const
{
for (; from != from_end && to != to_end; ++from, ++to)
*to = static_cast< char >(*from - 1);
if (to == to_end)
return error;
*to = '\0';
from_next = from;
to_next = to;
return ok;
}
virtual std::codecvt_base::result do_unshift(std::mbstate_t&, char* , char* , char*& ) const { return ok; }
virtual int do_length(std::mbstate_t&, const char* , const char* , std::size_t ) const { return 0; }
virtual int do_max_length() const throw() { return 0; }
};
#endif