summaryrefslogtreecommitdiff
path: root/graphics/asymptote/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp')
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/graphics/asymptote/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp b/graphics/asymptote/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
new file mode 100644
index 0000000000..7566c258e1
--- /dev/null
+++ b/graphics/asymptote/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
@@ -0,0 +1,89 @@
+// Copyright (c) Glyn Matthews 2012-2016.
+// 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 NETWORK_URI_DETAIL_TRANSLATE_INC
+#define NETWORK_URI_DETAIL_TRANSLATE_INC
+
+#include <string>
+
+namespace network {
+namespace detail {
+template <typename Source>
+struct translate_impl;
+
+template <>
+struct translate_impl<std::string> {
+ std::string operator()(const std::string &source) const { return source; }
+};
+
+template <int N>
+struct translate_impl<char[N]> {
+ std::string operator()(const char *source) const { return source; }
+};
+
+template <>
+struct translate_impl<char *> {
+ std::string operator()(const char *source) const { return source; }
+};
+
+template <>
+struct translate_impl<const char *> {
+ std::string operator()(const char *source) const { return source; }
+};
+
+template <int N>
+struct translate_impl<const char[N]> {
+ std::string operator()(const char *source) const { return source; }
+};
+
+template <>
+struct translate_impl<std::wstring> {
+ std::string operator()(const std::wstring &source) const {
+ return std::string(std::begin(source), std::end(source));
+ }
+};
+
+template <int N>
+struct translate_impl<const wchar_t[N]> {
+ std::string operator()(const wchar_t *source) const {
+ translate_impl<std::wstring> impl;
+ return impl(source);
+ }
+};
+
+template <int N>
+struct translate_impl<wchar_t[N]> {
+ std::string operator()(const wchar_t *source) const {
+ translate_impl<std::wstring> impl;
+ return impl(source);
+ }
+};
+
+template <>
+struct translate_impl<wchar_t *> {
+ std::string operator()(const wchar_t *source) const {
+ translate_impl<std::wstring> impl;
+ return impl(source);
+ }
+};
+
+template <>
+struct translate_impl<const wchar_t *> {
+ std::string operator()(const wchar_t *source) const {
+ translate_impl<std::wstring> impl;
+ return impl(source);
+ }
+};
+
+template <typename Source>
+inline std::string translate(const Source &source) {
+ translate_impl<Source> impl;
+ return impl(source);
+}
+
+} // namespace detail
+} // namespace network
+
+#endif // NETWORK_URI_DETAIL_TRANSLATE_INC