// // Copyright 2007-2008 Andreas Pokorny, Christian Henning // // Distributed under 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 // #ifndef BOOST_GIL_IO_PATH_SPEC_HPP #define BOOST_GIL_IO_PATH_SPEC_HPP #include #include #include #include namespace boost { namespace gil { namespace detail { template struct is_supported_path_spec : std::false_type {}; template<> struct is_supported_path_spec< std::string > : std::true_type {}; template<> struct is_supported_path_spec< const std::string > : std::true_type {}; template<> struct is_supported_path_spec< std::wstring > : std::true_type {}; template<> struct is_supported_path_spec< const std::wstring > : std::true_type {}; template<> struct is_supported_path_spec< char const* > : std::true_type {}; template<> struct is_supported_path_spec< char* > : std::true_type {}; template<> struct is_supported_path_spec< const wchar_t* > : std::true_type {}; template<> struct is_supported_path_spec< wchar_t* > : std::true_type {}; template struct is_supported_path_spec : std::true_type {}; template struct is_supported_path_spec : std::true_type {}; template struct is_supported_path_spec : std::true_type {}; template struct is_supported_path_spec : std::true_type {}; template<> struct is_supported_path_spec : std::true_type {}; template<> struct is_supported_path_spec : std::true_type {}; inline std::string convert_to_string( std::string const& obj) { return obj; } inline std::string convert_to_string( std::wstring const& s ) { std::size_t len = wcslen( s.c_str() ); char* c = reinterpret_cast( alloca( len )); wcstombs( c, s.c_str(), len ); return std::string( c, c + len ); } inline std::string convert_to_string( char const* str ) { return std::string( str ); } inline std::string convert_to_string( char* str ) { return std::string( str ); } inline std::string convert_to_string(filesystem::path const& path) { return convert_to_string(path.string()); } inline char const* convert_to_native_string( char* str ) { return str; } inline char const* convert_to_native_string( char const* str ) { return str; } inline char const* convert_to_native_string( const std::string& str ) { return str.c_str(); } inline char const* convert_to_native_string( const wchar_t* str ) { std::size_t len = wcslen( str ) + 1; char* c = new char[len]; wcstombs( c, str, len ); return c; } inline char const* convert_to_native_string( std::wstring const& str ) { std::size_t len = wcslen( str.c_str() ) + 1; char* c = new char[len]; wcstombs( c, str.c_str(), len ); return c; } }}} // namespace boost::gil::detail #endif