]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libstdc++-v3/include/profile/multimap.h
Update copyright years in libstdc++-v3/
[thirdparty/gcc.git] / libstdc++-v3 / include / profile / multimap.h
index 2897614050cbc231f8e94d9b4de2832d10b31ce0..adb5473c070ef9bcc5a3d0699edc3df6f049452f 100644 (file)
@@ -1,6 +1,6 @@
 // Profiling multimap implementation -*- C++ -*-
 
-// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2009-2014 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -31,7 +31,7 @@
 
 #include <utility>
 
-namespace std
+namespace std _GLIBCXX_VISIBILITY(default)
 {
 namespace __profile
 {
@@ -39,9 +39,9 @@ namespace __profile
   template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
           typename _Allocator = std::allocator<std::pair<const _Key, _Tp> > >
     class multimap
-    : public _GLIBCXX_STD_D::multimap<_Key, _Tp, _Compare, _Allocator>
+    : public _GLIBCXX_STD_C::multimap<_Key, _Tp, _Compare, _Allocator>
     {
-      typedef _GLIBCXX_STD_D::multimap<_Key, _Tp, _Compare, _Allocator> _Base;
+      typedef _GLIBCXX_STD_C::multimap<_Key, _Tp, _Compare, _Allocator> _Base;
 
     public:
       // types:
@@ -63,14 +63,17 @@ namespace __profile
       typedef typename _Base::pointer                pointer;
       typedef typename _Base::const_pointer          const_pointer;
 
-      using _Base::value_compare;
-
       // 23.3.1.1 construct/copy/destroy:
       explicit multimap(const _Compare& __comp = _Compare(),
                        const _Allocator& __a = _Allocator())
       : _Base(__comp, __a) { }
 
+#if __cplusplus >= 201103L
+      template<typename _InputIterator,
+              typename = std::_RequireInputIter<_InputIterator>>
+#else
       template<typename _InputIterator>
+#endif
       multimap(_InputIterator __first, _InputIterator __last,
               const _Compare& __comp = _Compare(),
               const _Allocator& __a = _Allocator())
@@ -82,8 +85,9 @@ namespace __profile
       multimap(const _Base& __x)
       : _Base(__x) { }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#if __cplusplus >= 201103L
       multimap(multimap&& __x)
+      noexcept(is_nothrow_copy_constructible<_Compare>::value)
       : _Base(std::move(__x))
       { }
 
@@ -93,7 +97,7 @@ namespace __profile
       : _Base(__l, __c, __a) { }
 #endif
 
-      ~multimap() { }
+      ~multimap() _GLIBCXX_NOEXCEPT { }
 
       multimap&
       operator=(const multimap& __x)
@@ -102,7 +106,7 @@ namespace __profile
        return *this;
       }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#if __cplusplus >= 201103L
       multimap&
       operator=(multimap&& __x)
       {
@@ -126,52 +130,52 @@ namespace __profile
 
       // iterators:
       iterator
-      begin()
+      begin() _GLIBCXX_NOEXCEPT
       { return iterator(_Base::begin()); }
 
       const_iterator
-      begin() const
+      begin() const _GLIBCXX_NOEXCEPT
       { return const_iterator(_Base::begin()); }
 
       iterator
-      end()
+      end() _GLIBCXX_NOEXCEPT
       { return iterator(_Base::end()); }
 
       const_iterator
-      end() const
+      end() const _GLIBCXX_NOEXCEPT
       { return const_iterator(_Base::end()); }
 
       reverse_iterator
-      rbegin()
+      rbegin() _GLIBCXX_NOEXCEPT
       { return reverse_iterator(end()); }
 
       const_reverse_iterator
-      rbegin() const
+      rbegin() const _GLIBCXX_NOEXCEPT
       { return const_reverse_iterator(end()); }
 
       reverse_iterator
-      rend()
+      rend() _GLIBCXX_NOEXCEPT
       { return reverse_iterator(begin()); }
 
       const_reverse_iterator
-      rend() const
+      rend() const _GLIBCXX_NOEXCEPT
       { return const_reverse_iterator(begin()); }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#if __cplusplus >= 201103L
       const_iterator
-      cbegin() const
+      cbegin() const noexcept
       { return const_iterator(_Base::begin()); }
 
       const_iterator
-      cend() const
+      cend() const noexcept
       { return const_iterator(_Base::end()); }
 
       const_reverse_iterator
-      crbegin() const
+      crbegin() const noexcept
       { return const_reverse_iterator(end()); }
 
       const_reverse_iterator
-      crend() const
+      crend() const noexcept
       { return const_reverse_iterator(begin()); }
 #endif
 
@@ -181,33 +185,78 @@ namespace __profile
       using _Base::max_size;
 
       // modifiers:
+#if __cplusplus >= 201103L
+      template<typename... _Args>
+       iterator
+       emplace(_Args&&... __args)
+       {
+         return iterator(_Base::emplace(std::forward<_Args>(__args)...));
+       }
+
+      template<typename... _Args>
+       iterator
+       emplace_hint(const_iterator __pos, _Args&&... __args)
+       {
+         return iterator(_Base::emplace_hint(__pos,
+                                             std::forward<_Args>(__args)...));
+       }
+#endif
+      
       iterator
       insert(const value_type& __x)
       { return iterator(_Base::insert(__x)); }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#if __cplusplus >= 201103L
+      template<typename _Pair, typename = typename
+              std::enable_if<std::is_constructible<value_type,
+                                                   _Pair&&>::value>::type>
+        iterator
+        insert(_Pair&& __x)
+        { return iterator(_Base::insert(std::forward<_Pair>(__x))); }
+#endif
+
+#if __cplusplus >= 201103L
       void
       insert(std::initializer_list<value_type> __list)
       { _Base::insert(__list); }
 #endif
 
       iterator
+#if __cplusplus >= 201103L
+      insert(const_iterator __position, const value_type& __x)
+#else
       insert(iterator __position, const value_type& __x)
-      {
-       return iterator(_Base::insert(__position, __x));
-      }
+#endif
+      { return iterator(_Base::insert(__position, __x)); }
+
+#if __cplusplus >= 201103L
+      template<typename _Pair, typename = typename
+              std::enable_if<std::is_constructible<value_type,
+                                                   _Pair&&>::value>::type>
+        iterator
+        insert(const_iterator __position, _Pair&& __x)
+        { return iterator(_Base::insert(__position,
+                                       std::forward<_Pair>(__x))); }
+#endif
 
+#if __cplusplus >= 201103L
+      template<typename _InputIterator,
+              typename = std::_RequireInputIter<_InputIterator>>
+#else
       template<typename _InputIterator>
+#endif
         void
         insert(_InputIterator __first, _InputIterator __last)
-        {
-         _Base::insert(__first, __last);
-       }
+        { _Base::insert(__first, __last); }
+
+#if __cplusplus >= 201103L
+      iterator
+      erase(const_iterator __position)
+      { return iterator(_Base::erase(__position)); }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
       iterator
       erase(iterator __position)
-      { return _Base::erase(__position); }
+      { return iterator(_Base::erase(__position)); }
 #else
       void
       erase(iterator __position)
@@ -228,35 +277,22 @@ namespace __profile
        return __count;
       }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#if __cplusplus >= 201103L
       iterator
-      erase(iterator __first, iterator __last)
-      {
-       // _GLIBCXX_RESOLVE_LIB_DEFECTS
-       // 151. can't currently clear() empty container
-       while (__first != __last)
-         this->erase(__first++);
-       return __last;
-      }
+      erase(const_iterator __first, const_iterator __last)
+      { return iterator(_Base::erase(__first, __last)); }
 #else
       void
       erase(iterator __first, iterator __last)
-      {
-       // _GLIBCXX_RESOLVE_LIB_DEFECTS
-       // 151. can't currently clear() empty container
-       while (__first != __last)
-         this->erase(__first++);
-      }
+      { _Base::erase(__first, __last); }
 #endif
 
       void
       swap(multimap& __x)
-      {
-       _Base::swap(__x);
-      }
+      { _Base::swap(__x); }
 
       void
-      clear()
+      clear() _GLIBCXX_NOEXCEPT
       { this->erase(begin(), end()); }
 
       // observers:
@@ -311,10 +347,10 @@ namespace __profile
       }
 
       _Base&
-      _M_base() { return *this; }
+      _M_base() _GLIBCXX_NOEXCEPT       { return *this; }
 
       const _Base&
-      _M_base() const { return *this; }
+      _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
     };
 
   template<typename _Key, typename _Tp,