| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | //// 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_SUPPORTtemplate<> 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_SUPPORTinline 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
 |