// Debugging unordered_map/unordered_multimap implementation -*- C++ -*-

// Copyright (C) 2003, 2004, 2005, 2006, 2007
// 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
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.

// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING.  If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.

// As a special exception, you may use this file as part of a free software
// library without restriction.  Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License.  This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.

/** @file debug/unordered_map
 *  This file is a GNU debug extension to the Standard C++ Library.
 */

#ifndef _GLIBCXX_DEBUG_UNORDERED_MAP
#define _GLIBCXX_DEBUG_UNORDERED_MAP 1

#ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <unordered_map>
#else
# include <c++0x_warning.h>
#endif
#include <debug/safe_association.h>
#include <debug/safe_iterator.h>

#define _GLIBCXX_BASE unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>
#define _GLIBCXX_STD_BASE _GLIBCXX_STD_D::_GLIBCXX_BASE

namespace std
{
namespace __debug
{
  template<typename _Key, typename _Tp,
	   typename _Hash  = std::hash<_Key>,
	   typename _Pred = std::equal_to<_Key>,
	   typename _Alloc =  std::allocator<_Key> >
    class unordered_map
    : public __gnu_debug::_Safe_association<_GLIBCXX_STD_BASE>,
      public __gnu_debug::_Safe_sequence<_GLIBCXX_BASE>
    {
      typedef typename _GLIBCXX_STD_BASE _Base;
      typedef __gnu_debug::_Safe_association<_Base> _Safe_assoc;
      typedef __gnu_debug::_Safe_sequence<unordered_map> _Safe_base;

    public:
      typedef typename _Safe_assoc::size_type       size_type;
      typedef typename _Safe_assoc::hasher          hasher;
      typedef typename _Safe_assoc::key_equal       key_equal;
      typedef typename _Safe_assoc::allocator_type allocator_type;

      explicit
      unordered_map(size_type __n = 10,
		    const hasher& __hf = hasher(),
		    const key_equal& __eql = key_equal(),
		    const allocator_type& __a = allocator_type())
      : _Safe_assoc(__n, __hf, __eql, __a)
      { }

      template<typename _InputIterator>
        unordered_map(_InputIterator __f, _InputIterator __l, 
		      size_type __n = 10,
		      const hasher& __hf = hasher(), 
		      const key_equal& __eql = key_equal(), 
		      const allocator_type& __a = allocator_type())
	: _Safe_assoc(__f, __l, __n, __hf, __eql, __a)
        { }

      unordered_map(const _Safe_assoc& __x) 
      : _Safe_assoc(__x), _Safe_base() { }

      unordered_map(unordered_map&& __x) 
      : _Safe_assoc(std::forward<_Safe_assoc>(__x)), _Safe_base() { }

      unordered_map&
      operator=(unordered_map&& __x)
      {
        // NB: DR 675.
	clear();
	swap(__x);
	return *this;
      }

      void
      swap(unordered_map&& __x)
      {
	_Safe_assoc::swap(__x);
	_Safe_base::_M_swap(__x);
      }

      void
      clear()
      {
	_Base::clear();
	this->_M_invalidate_all();
      }

    private:
      void
      _M_invalidate_all()
      {
	typedef typename _Base::const_iterator _Base_const_iterator;
	typedef __gnu_debug::_Not_equal_to<_Base_const_iterator> _Not_equal;
	this->_M_invalidate_if(_Not_equal(this->_M_base().end()));
      }
    };

  template<typename _Key, typename _Tp, typename _Hash,
	   typename _Pred, typename _Alloc>
    inline void
    swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
	 unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
    { __x.swap(__y); }

  template<typename _Key, typename _Tp, typename _Hash,
	   typename _Pred, typename _Alloc>
    inline void
    swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>&& __x,
	 unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
    { __x.swap(__y); }

  template<typename _Key, typename _Tp, typename _Hash,
	   typename _Pred, typename _Alloc>
    inline void
    swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
	 unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>&& __y)
    { __x.swap(__y); }

#undef _GLIBCXX_BASE
#undef _GLIBCXX_STD_BASE
#define _GLIBCXX_STD_BASE _GLIBCXX_STD_D::_GLIBCXX_BASE
#define _GLIBCXX_BASE unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>

  template<typename _Key, typename _Tp,
	   typename _Hash  = std::hash<_Key>,
	   typename _Pred = std::equal_to<_Key>,
	   typename _Alloc =  std::allocator<_Key> >
    class unordered_multimap
    : public __gnu_debug::_Safe_association<_GLIBCXX_STD_BASE>,
      public __gnu_debug::_Safe_sequence<_GLIBCXX_BASE>
    {
      typedef typename _GLIBCXX_STD_BASE _Base;
      typedef __gnu_debug::_Safe_association<_Base> _Safe_assoc;
      typedef __gnu_debug::_Safe_sequence<unordered_multimap> _Safe_base;

    public:
      typedef typename _Safe_assoc::size_type       size_type;
      typedef typename _Safe_assoc::hasher          hasher;
      typedef typename _Safe_assoc::key_equal       key_equal;
      typedef typename _Safe_assoc::allocator_type allocator_type;

      explicit
      unordered_multimap(size_type __n = 10,
		    const hasher& __hf = hasher(),
		    const key_equal& __eql = key_equal(),
		    const allocator_type& __a = allocator_type())
      : _Safe_assoc(__n, __hf, __eql, __a)
      { }

      template<typename _InputIterator>
        unordered_multimap(_InputIterator __f, _InputIterator __l, 
		      size_type __n = 10,
		      const hasher& __hf = hasher(), 
		      const key_equal& __eql = key_equal(), 
		      const allocator_type& __a = allocator_type())
	: _Safe_assoc(__f, __l, __n, __hf, __eql, __a)
        { }

      unordered_multimap(const _Safe_assoc& __x) 
      : _Safe_assoc(__x), _Safe_base() { }

      unordered_multimap(unordered_multimap&& __x) 
      : _Safe_assoc(std::forward<_Safe_assoc>(__x)), _Safe_base() { }

      unordered_multimap&
      operator=(unordered_multimap&& __x)
      {
        // NB: DR 675.
	clear();
	swap(__x);
	return *this;
      }

      void
      swap(unordered_multimap&& __x)
      {
	_Safe_assoc::swap(__x);
	_Safe_base::_M_swap(__x);
      }

      void
      clear()
      {
	_Base::clear();
	this->_M_invalidate_all();
      }

    private:
      void
      _M_invalidate_all()
      {
	typedef typename _Base::const_iterator _Base_const_iterator;
	typedef __gnu_debug::_Not_equal_to<_Base_const_iterator> _Not_equal;
	this->_M_invalidate_if(_Not_equal(this->_M_base().end()));
      }
    };

  template<typename _Key, typename _Tp, typename _Hash,
	   typename _Pred, typename _Alloc>
    inline void
    swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
	 unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
    { __x.swap(__y); }

  template<typename _Key, typename _Tp, typename _Hash,
	   typename _Pred, typename _Alloc>
    inline void
    swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>&& __x,
	 unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
    { __x.swap(__y); }

  template<typename _Key, typename _Tp, typename _Hash,
	   typename _Pred, typename _Alloc>
    inline void
    swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
	 unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>&& __y)
    { __x.swap(__y); }

} // namespace __debug
} // namespace std

#undef _GLIBCXX_BASE
#undef _GLIBCXX_STD_BASE

#endif
