summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '3rdParty/Boost/src/boost/property_tree/detail/ptree_utils.hpp')
-rw-r--r--3rdParty/Boost/src/boost/property_tree/detail/ptree_utils.hpp106
1 files changed, 106 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/property_tree/detail/ptree_utils.hpp b/3rdParty/Boost/src/boost/property_tree/detail/ptree_utils.hpp
new file mode 100644
index 0000000..7e56c8f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/property_tree/detail/ptree_utils.hpp
@@ -0,0 +1,106 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// 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)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_PTREE_UTILS_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_PTREE_UTILS_HPP_INCLUDED
+
+#include <boost/limits.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/and.hpp>
+#include <string>
+#include <algorithm>
+#include <locale>
+
+namespace boost { namespace property_tree { namespace detail
+{
+
+ template<class T>
+ struct less_nocase
+ {
+ typedef typename T::value_type Ch;
+ std::locale m_locale;
+ inline bool operator()(Ch c1, Ch c2) const
+ {
+ return std::toupper(c1, m_locale) < std::toupper(c2, m_locale);
+ }
+ inline bool operator()(const T &t1, const T &t2) const
+ {
+ return std::lexicographical_compare(t1.begin(), t1.end(),
+ t2.begin(), t2.end(), *this);
+ }
+ };
+
+ template <typename Ch>
+ struct is_character : public boost::false_type {};
+ template <>
+ struct is_character<char> : public boost::true_type {};
+ template <>
+ struct is_character<wchar_t> : public boost::true_type {};
+
+
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(internal_type)
+ BOOST_MPL_HAS_XXX_TRAIT_DEF(external_type)
+ template <typename T>
+ struct is_translator : public boost::mpl::and_<
+ has_internal_type<T>, has_external_type<T> > {};
+
+
+
+ // Naively convert narrow string to another character type
+ template<class Ch>
+ std::basic_string<Ch> widen(const char *text)
+ {
+ std::basic_string<Ch> result;
+ while (*text)
+ {
+ result += Ch(*text);
+ ++text;
+ }
+ return result;
+ }
+
+ // Naively convert string to narrow character type
+ template<class Ch>
+ std::string narrow(const Ch *text)
+ {
+ std::string result;
+ while (*text)
+ {
+ if (*text < 0 || *text > (std::numeric_limits<char>::max)())
+ result += '*';
+ else
+ result += char(*text);
+ ++text;
+ }
+ return result;
+ }
+
+ // Remove trailing and leading spaces
+ template<class Ch>
+ std::basic_string<Ch> trim(const std::basic_string<Ch> &s,
+ const std::locale &loc = std::locale())
+ {
+ typename std::basic_string<Ch>::const_iterator first = s.begin();
+ typename std::basic_string<Ch>::const_iterator end = s.end();
+ while (first != end && std::isspace(*first, loc))
+ ++first;
+ if (first == end)
+ return std::basic_string<Ch>();
+ typename std::basic_string<Ch>::const_iterator last = end;
+ do --last; while (std::isspace(*last, loc));
+ if (first != s.begin() || last + 1 != end)
+ return std::basic_string<Ch>(first, last + 1);
+ else
+ return s;
+ }
+
+} } }
+
+#endif