139 lines
3.8 KiB
C++
139 lines
3.8 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
|
|
|
|
#ifdef BOOST_GIL_IO_ADD_FS_PATH_SUPPORT
|
|
// Disable warning: conversion to 'std::atomic<int>::__integral_type {aka int}' from 'long int' may alter its value
|
|
#if defined(BOOST_CLANG)
|
|
#pragma clang diagnostic push
|
|
#pragma clang diagnostic ignored "-Wshorten-64-to-32"
|
|
#endif
|
|
|
|
#if defined(BOOST_GCC) && (BOOST_GCC >= 40900)
|
|
#pragma GCC diagnostic push
|
|
#pragma GCC diagnostic ignored "-Wconversion"
|
|
#endif
|
|
|
|
#define BOOST_FILESYSTEM_VERSION 3
|
|
#include <boost/filesystem/path.hpp>
|
|
|
|
#if defined(BOOST_CLANG)
|
|
#pragma clang diagnostic pop
|
|
#endif
|
|
|
|
#if defined(BOOST_GCC) && (BOOST_GCC >= 40900)
|
|
#pragma GCC diagnostic pop
|
|
#endif
|
|
#endif // BOOST_GIL_IO_ADD_FS_PATH_SUPPORT
|
|
|
|
#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< const char* > : 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 {};
|
|
|
|
#ifdef BOOST_GIL_IO_ADD_FS_PATH_SUPPORT
|
|
template<> struct is_supported_path_spec< filesystem::path > : std::true_type {};
|
|
template<> struct is_supported_path_spec< const filesystem::path > : std::true_type {};
|
|
#endif // BOOST_GIL_IO_ADD_FS_PATH_SUPPORT
|
|
|
|
|
|
///
|
|
/// convert_to_string
|
|
///
|
|
|
|
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( const char* str )
|
|
{
|
|
return std::string( str );
|
|
}
|
|
|
|
inline std::string convert_to_string( char* str )
|
|
{
|
|
return std::string( str );
|
|
}
|
|
|
|
#ifdef BOOST_GIL_IO_ADD_FS_PATH_SUPPORT
|
|
inline std::string convert_to_string( const filesystem::path& path )
|
|
{
|
|
return convert_to_string( path.string() );
|
|
}
|
|
#endif // BOOST_GIL_IO_ADD_FS_PATH_SUPPORT
|
|
|
|
///
|
|
/// convert_to_native_string
|
|
///
|
|
|
|
inline const char* convert_to_native_string( char* str )
|
|
{
|
|
return str;
|
|
}
|
|
|
|
inline const char* convert_to_native_string( const char* str )
|
|
{
|
|
return str;
|
|
}
|
|
|
|
inline const char* convert_to_native_string( const std::string& str )
|
|
{
|
|
return str.c_str();
|
|
}
|
|
|
|
inline const char* 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 const char* convert_to_native_string( const std::wstring& str )
|
|
{
|
|
std::size_t len = wcslen( str.c_str() ) + 1;
|
|
char* c = new char[len];
|
|
wcstombs( c, str.c_str(), len );
|
|
|
|
return c;
|
|
}
|
|
|
|
} // namespace detail
|
|
} // namespace gil
|
|
} // namespace boost
|
|
|
|
#endif
|