diff options
Diffstat (limited to 'libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp')
-rw-r--r-- | libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp | 68 |
1 files changed, 30 insertions, 38 deletions
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp index b0a9b5b0d92..42e799fc8bd 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2009, 2011 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 @@ -34,7 +34,7 @@ // warranty. /** - * @file entry_cmp.hpp + * @file binary_heap_/entry_cmp.hpp * Contains an implementation class for a binary_heap. */ @@ -45,48 +45,40 @@ namespace __gnu_pbds { namespace detail { + /// Entry compare, primary template. + template<typename _VTp, typename Cmp_Fn, typename _Alloc, bool No_Throw> + struct entry_cmp; - template<typename Value_Type, - class Cmp_Fn, - bool No_Throw, - class Allocator> - struct entry_cmp - { - typedef Cmp_Fn type; - }; - - template<typename Value_Type, class Cmp_Fn, class Allocator> - struct entry_cmp< - Value_Type, - Cmp_Fn, - false, - Allocator> - { - public: - typedef - typename Allocator::template rebind< - Value_Type>::other::const_pointer - entry; - - struct type : public Cmp_Fn + /// Specialization, true. + template<typename _VTp, typename Cmp_Fn, typename _Alloc> + struct entry_cmp<_VTp, Cmp_Fn, _Alloc, true> { - public: - inline - type() - { } + /// Compare. + typedef Cmp_Fn type; + }; + + /// Specialization, false. + template<typename _VTp, typename Cmp_Fn, typename _Alloc> + struct entry_cmp<_VTp, Cmp_Fn, _Alloc, false> + { + private: + typedef typename _Alloc::template rebind<_VTp> __rebind_v; - inline - type(const Cmp_Fn& other) : Cmp_Fn(other) - { } + public: + typedef typename __rebind_v::other::const_pointer entry; - inline bool - operator()(entry p_lhs, entry p_rhs) const + /// Compare plus entry. + struct type : public Cmp_Fn { - return Cmp_Fn::operator()(*p_lhs, * p_rhs); - } - }; - }; + type() { } + type(const Cmp_Fn& other) : Cmp_Fn(other) { } + + bool + operator()(entry lhs, entry rhs) const + { return Cmp_Fn::operator()(*lhs, *rhs); } + }; + }; } // namespace detail } // namespace __gnu_pbds |