/usr/include/boost/process/detail/traits
Edit: /usr/include/boost/process/detail/traits/wchar_t.hpp (7483B)
// Copyright (c) 2016 Klemens D. Morgenstern
//
// 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_PROCESS_DETAIL_TRAITS_WCHAR_T_HPP_
#define BOOST_PROCESS_DETAIL_TRAITS_WCHAR_T_HPP_
#include
#include
#include
#include
namespace boost { namespace process { namespace detail {
//template
template struct is_wchar_t : std::false_type {};
template<> struct is_wchar_t : std::is_same
{
};
template<> struct is_wchar_t : std::true_type {};
template<> struct is_wchar_t : std::true_type {};
template struct is_wchar_t : std::true_type {};
template struct is_wchar_t : std::true_type {};
template<> struct is_wchar_t : std::true_type {};
template<> struct is_wchar_t> : std::true_type {};
template<> struct is_wchar_t> : std::true_type {};
template<> struct is_wchar_t> : std::true_type {};
template<> struct is_wchar_t> : std::true_type {};
template
struct char_converter
{
static T& conv(T & in)
{
return in;
}
static T&& conv(T&& in)
{
return std::move(in);
}
static const T& conv(const T & in)
{
return in;
}
};
template
using char_converter_t = char_converter::type>::type>;
template<>
struct char_converter
{
static std::string conv(const wchar_t* in)
{
std::size_t size = 0;
while (in[size] != L'\0') size++;
return ::boost::process::detail::convert(in, in + size);
}
};
template<>
struct char_converter
{
static std::string conv(wchar_t* in)
{
std::size_t size = 0;
while (in[size] != L'\0') size++;
return ::boost::process::detail::convert(in, in + size);
}
};
template
struct char_converter
{
static std::string conv(const wchar_t(&in)[Size])
{
return ::boost::process::detail::convert(in, in + Size -1);
}
};
template<>
struct char_converter
{
static std::wstring conv(const char* in)
{
std::size_t size = 0;
while (in[size] != '\0') size++;
return ::boost::process::detail::convert(in, in + size);
}
};
template<>
struct char_converter
{
static std::wstring conv(char* in)
{
std::size_t size = 0;
while (in[size] != '\0') size++;
return ::boost::process::detail::convert(in, in + size);
}
};
template
struct char_converter
{
static std::wstring conv(const char(&in)[Size])
{
return ::boost::process::detail::convert(in, in + Size -1);
}
};
//all the containers.
template<>
struct char_converter
{
static std::wstring conv(const std::string & in)
{
return ::boost::process::detail::convert(in);
}
};
template<>
struct char_converter
{
static std::string conv(const std::wstring & in)
{
return ::boost::process::detail::convert(in);
}
};
template<>
struct char_converter>
{
static std::vector conv(const std::vector & in)
{
std::vector ret(in.size());
std::transform(in.begin(), in.end(), ret.begin(),
[](const std::string & st)
{
return convert(st);
});
return ret;
}
};
template<>
struct char_converter>
{
static std::vector conv(const std::initializer_list & in)
{
std::vector ret(in.size());
std::transform(in.begin(), in.end(), ret.begin(),
[](const std::string & st)
{
return convert(st);
});
return ret;
}
};
template<>
struct char_converter>
{
static std::vector conv(const std::vector & in)
{
std::vector ret(in.size());
std::transform(in.begin(), in.end(), ret.begin(),
[](const char* st)
{
std::size_t sz = 0;
while (st[sz] != '\0') sz++;
return convert(st, st + sz);
});
return ret;
}
};
template<>
struct char_converter>
{
static std::vector conv(const std::initializer_list & in)
{
std::vector ret(in.size());
std::transform(in.begin(), in.end(), ret.begin(),
[](const char* st)
{
std::size_t sz = 0;
while (st[sz] != '\0') sz++;
return convert(st, st + sz);
});
return ret;
}
};
template<>
struct char_converter>
{
static std::vector conv(const std::vector & in)
{
std::vector ret(in.size());
std::transform(in.begin(), in.end(), ret.begin(),
[](const std::wstring & st)
{
return convert(st);
});
return ret;
}
};
template<>
struct char_converter>
{
static std::vector conv(const std::initializer_list & in)
{
std::vector ret(in.size());
std::transform(in.begin(), in.end(), ret.begin(),
[](const std::wstring & st)
{
return convert(st);
});
return ret;
}
};
template<>
struct char_converter>
{
static std::vector conv(const std::vector & in)
{
std::vector ret(in.size());
std::transform(in.begin(), in.end(), ret.begin(),
[](const wchar_t* st)
{
std::size_t sz = 0;
while (st[sz] != L'\0') sz++;
return convert(st, st + sz);
});
return ret;
}
};
template<>
struct char_converter>
{
static std::vector conv(const std::initializer_list & in)
{
std::vector ret(in.size());
std::transform(in.begin(), in.end(), ret.begin(),
[](const wchar_t* st)
{
std::size_t sz = 0;
while (st[sz] != L'\0') sz++;
return convert(st, st + sz);
});
return ret;
}
};
}}}
#endif /* BOOST_PROCESS_DETAIL_TRAITS_WCHAR_T_HPP_ */