102 lines
3.0 KiB
C++
102 lines
3.0 KiB
C++
|
//
|
||
|
// 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 <boost/gil/io/detail/filesystem.hpp>
|
||
|
|
||
|
#include <cstdlib>
|
||
|
#include <string>
|
||
|
#include <type_traits>
|
||
|
|
||
|
namespace boost { namespace gil { namespace detail {
|
||
|
|
||
|
template<typename P> 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<int i> struct is_supported_path_spec<const char [i]> : std::true_type {};
|
||
|
template<int i> struct is_supported_path_spec<char [i]> : std::true_type {};
|
||
|
template<int i> struct is_supported_path_spec<const wchar_t [i]> : std::true_type {};
|
||
|
template<int i> struct is_supported_path_spec<wchar_t [i]> : std::true_type {};
|
||
|
|
||
|
template<> struct is_supported_path_spec<filesystem::path> : std::true_type {};
|
||
|
template<> struct is_supported_path_spec<filesystem::path const> : 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<char*>( 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
|