summaryrefslogtreecommitdiffstats
path: root/Utilities/std/cm/iterator
diff options
context:
space:
mode:
Diffstat (limited to 'Utilities/std/cm/iterator')
-rw-r--r--Utilities/std/cm/iterator191
1 files changed, 2 insertions, 189 deletions
diff --git a/Utilities/std/cm/iterator b/Utilities/std/cm/iterator
index 3b38cc7..3bfd947 100644
--- a/Utilities/std/cm/iterator
+++ b/Utilities/std/cm/iterator
@@ -7,18 +7,13 @@
#include <iterator> // IWYU pragma: export
+#include <cm/bits/container_helpers.hxx> // IWYU pragma: export
+
namespace cm {
#if __cplusplus >= 201402L || defined(_MSVC_LANG) && _MSVC_LANG >= 201402L
using std::make_reverse_iterator;
-using std::cbegin;
-using std::cend;
-
-using std::rbegin;
-using std::rend;
-using std::crbegin;
-using std::crend;
#else
template <class Iter>
std::reverse_iterator<Iter> make_reverse_iterator(Iter it)
@@ -26,188 +21,6 @@ std::reverse_iterator<Iter> make_reverse_iterator(Iter it)
return std::reverse_iterator<Iter>(it);
}
-// std::c{begin,end} backport from C++14
-template <class C>
-# if defined(_MSC_VER) && _MSC_VER < 1900
-auto cbegin(C const& c)
-# else
-constexpr auto cbegin(C const& c) noexcept(noexcept(std::begin(c)))
-# endif
- -> decltype(std::begin(c))
-{
- return std::begin(c);
-}
-
-template <class C>
-# if defined(_MSC_VER) && _MSC_VER < 1900
-auto cend(C const& c)
-# else
-constexpr auto cend(C const& c) noexcept(noexcept(std::end(c)))
-# endif
- -> decltype(std::end(c))
-{
- return std::end(c);
-}
-
-// std::r{begin,end} backport from C++14
-template <class C>
-# if !defined(_MSC_VER) || _MSC_VER >= 1900
-constexpr
-# endif
- auto
- rbegin(C& c) -> decltype(c.rbegin())
-{
- return c.rbegin();
-}
-template <class C>
-# if !defined(_MSC_VER) || _MSC_VER >= 1900
-constexpr
-# endif
- auto
- rbegin(C const& c) -> decltype(c.rbegin())
-{
- return c.rbegin();
-}
-template <typename T, size_t N>
-# if !defined(_MSC_VER) || _MSC_VER >= 1900
-constexpr
-# endif
- std::reverse_iterator<T*>
- rbegin(T (&arr)[N])
-{
- return std::reverse_iterator<T*>(arr + N);
-}
-
-template <class C>
-# if !defined(_MSC_VER) || _MSC_VER >= 1900
-constexpr
-# endif
- auto
- rend(C& c) -> decltype(c.rend())
-{
- return c.rend();
-}
-template <class C>
-# if !defined(_MSC_VER) || _MSC_VER >= 1900
-constexpr
-# endif
- auto
- rend(C const& c) -> decltype(c.rend())
-{
- return c.rend();
-}
-template <typename T, size_t N>
-# if !defined(_MSC_VER) || _MSC_VER >= 1900
-constexpr
-# endif
- std::reverse_iterator<T*>
- rend(T (&arr)[N])
-{
- return std::reverse_iterator<T*>(arr);
-}
-
-// std::cr{begin,end} backport from C++14
-template <class C>
-# if !defined(_MSC_VER) || _MSC_VER >= 1900
-constexpr
-# endif
- auto
- crbegin(C const& c) -> decltype(cm::rbegin(c))
-{
- return cm::rbegin(c);
-}
-
-template <class C>
-# if !defined(_MSC_VER) || _MSC_VER >= 1900
-constexpr
-# endif
- auto
- crend(C const& c) -> decltype(cm::rend(c))
-{
- return cm::rend(c);
-}
-#endif
-
-#if __cplusplus >= 201703L || defined(_MSVC_LANG) && _MSVC_LANG >= 201703L
-using std::size;
-
-using std::empty;
-using std::data;
-#else
-
-// std::size backport from C++17.
-template <class C>
-# if !defined(_MSC_VER) || _MSC_VER >= 1900
-constexpr
-# endif
- auto
- size(C const& c) -> decltype(c.size())
-{
- return c.size();
-}
-
-template <typename T, size_t N>
-# if !defined(_MSC_VER) || _MSC_VER >= 1900
-constexpr
-# endif
- std::size_t
- size(const T (&)[N]) throw()
-{
- return N;
-}
-
-// std::empty backport from C++17.
-template <class C>
-# if defined(_MSC_VER) && _MSC_VER < 1900
-auto empty(C const& c)
-# else
-constexpr auto empty(C const& c) noexcept(noexcept(c.empty()))
-# endif
- -> decltype(c.empty())
-{
- return c.empty();
-}
-template <typename T, size_t N>
-# if defined(_MSC_VER) && _MSC_VER < 1900
-bool empty(const T (&)[N])
-# else
-constexpr bool empty(const T (&)[N]) noexcept
-# endif
-{
- return false;
-}
-
-// std::data backport from C++17.
-template <class C>
-# if defined(_MSC_VER) && _MSC_VER < 1900
-auto data(C const& c)
-# else
-constexpr auto data(C const& c) noexcept(noexcept(c.data()))
-# endif
- -> decltype(c.data())
-{
- return c.data();
-}
-template <class C>
-# if defined(_MSC_VER) && _MSC_VER < 1900
-auto data(C& c)
-# else
-constexpr auto data(C& c) noexcept(noexcept(c.data()))
-# endif
- -> decltype(c.data())
-{
- return c.data();
-}
-template <typename T, size_t N>
-# if defined(_MSC_VER) && _MSC_VER < 1900
-T* data(T (&)[N])
-# else
-constexpr T* data(T (&arr)[N]) noexcept
-# endif
-{
- return arr;
-}
-
#endif
} // namespace cm