1*38fd1498Szrj // -*- C++ -*-
2*38fd1498Szrj 
3*38fd1498Szrj // Copyright (C) 2005-2018 Free Software Foundation, Inc.
4*38fd1498Szrj //
5*38fd1498Szrj // This file is part of the GNU ISO C++ Library.  This library is free
6*38fd1498Szrj // software; you can redistribute it and/or modify it under the terms
7*38fd1498Szrj // of the GNU General Public License as published by the Free Software
8*38fd1498Szrj // Foundation; either version 3, or (at your option) any later
9*38fd1498Szrj // version.
10*38fd1498Szrj 
11*38fd1498Szrj // This library is distributed in the hope that it will be useful, but
12*38fd1498Szrj // WITHOUT ANY WARRANTY; without even the implied warranty of
13*38fd1498Szrj // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14*38fd1498Szrj // General Public License for more details.
15*38fd1498Szrj 
16*38fd1498Szrj // Under Section 7 of GPL version 3, you are granted additional
17*38fd1498Szrj // permissions described in the GCC Runtime Library Exception, version
18*38fd1498Szrj // 3.1, as published by the Free Software Foundation.
19*38fd1498Szrj 
20*38fd1498Szrj // You should have received a copy of the GNU General Public License and
21*38fd1498Szrj // a copy of the GCC Runtime Library Exception along with this program;
22*38fd1498Szrj // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23*38fd1498Szrj // <http://www.gnu.org/licenses/>.
24*38fd1498Szrj 
25*38fd1498Szrj // Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
26*38fd1498Szrj 
27*38fd1498Szrj // Permission to use, copy, modify, sell, and distribute this software
28*38fd1498Szrj // is hereby granted without fee, provided that the above copyright
29*38fd1498Szrj // notice appears in all copies, and that both that copyright notice
30*38fd1498Szrj // and this permission notice appear in supporting documentation. None
31*38fd1498Szrj // of the above authors, nor IBM Haifa Research Laboratories, make any
32*38fd1498Szrj // representation about the suitability of this software for any
33*38fd1498Szrj // purpose. It is provided "as is" without express or implied
34*38fd1498Szrj // warranty.
35*38fd1498Szrj 
36*38fd1498Szrj /**
37*38fd1498Szrj  * @file rc_binomial_heap_/debug_fn_imps.hpp
38*38fd1498Szrj  * Contains an implementation for rc_binomial_heap_.
39*38fd1498Szrj  */
40*38fd1498Szrj 
41*38fd1498Szrj #ifdef _GLIBCXX_DEBUG
42*38fd1498Szrj 
43*38fd1498Szrj PB_DS_CLASS_T_DEC
44*38fd1498Szrj void
45*38fd1498Szrj PB_DS_CLASS_C_DEC::
assert_valid(const char * __file,int __line) const46*38fd1498Szrj assert_valid(const char* __file, int __line) const
47*38fd1498Szrj {
48*38fd1498Szrj   base_type::assert_valid(false, __file, __line);
49*38fd1498Szrj   if (!base_type::empty())
50*38fd1498Szrj     {
51*38fd1498Szrj       PB_DS_DEBUG_VERIFY(base_type::m_p_max != 0);
52*38fd1498Szrj       base_type::assert_max(__file, __line);
53*38fd1498Szrj     }
54*38fd1498Szrj 
55*38fd1498Szrj   m_rc.assert_valid(__file, __line);
56*38fd1498Szrj 
57*38fd1498Szrj   if (m_rc.empty())
58*38fd1498Szrj     {
59*38fd1498Szrj       base_type::assert_valid(true, __file, __line);
60*38fd1498Szrj       PB_DS_DEBUG_VERIFY(next_2_pointer(base_type::m_p_root) == 0);
61*38fd1498Szrj       return;
62*38fd1498Szrj     }
63*38fd1498Szrj 
64*38fd1498Szrj   node_const_pointer p_nd = next_2_pointer(base_type::m_p_root);
65*38fd1498Szrj   typename rc_t::const_iterator it = m_rc.end();
66*38fd1498Szrj   --it;
67*38fd1498Szrj 
68*38fd1498Szrj   while (p_nd != 0)
69*38fd1498Szrj     {
70*38fd1498Szrj       PB_DS_DEBUG_VERIFY(*it == p_nd);
71*38fd1498Szrj       node_const_pointer p_next = p_nd->m_p_next_sibling;
72*38fd1498Szrj       PB_DS_DEBUG_VERIFY(p_next != 0);
73*38fd1498Szrj       PB_DS_DEBUG_VERIFY(p_nd->m_metadata == p_next->m_metadata);
74*38fd1498Szrj       PB_DS_DEBUG_VERIFY(p_next->m_p_next_sibling == 0 ||
75*38fd1498Szrj 		       p_next->m_metadata < p_next->m_p_next_sibling->m_metadata);
76*38fd1498Szrj 
77*38fd1498Szrj       --it;
78*38fd1498Szrj       p_nd = next_2_pointer(next_after_0_pointer(p_nd));
79*38fd1498Szrj     }
80*38fd1498Szrj   PB_DS_DEBUG_VERIFY(it + 1 == m_rc.begin());
81*38fd1498Szrj }
82*38fd1498Szrj 
83*38fd1498Szrj PB_DS_CLASS_T_DEC
84*38fd1498Szrj typename PB_DS_CLASS_C_DEC::node_const_pointer
85*38fd1498Szrj PB_DS_CLASS_C_DEC::
next_2_pointer(node_const_pointer p_nd)86*38fd1498Szrj next_2_pointer(node_const_pointer p_nd)
87*38fd1498Szrj {
88*38fd1498Szrj   if (p_nd == 0)
89*38fd1498Szrj     return 0;
90*38fd1498Szrj 
91*38fd1498Szrj   node_pointer p_next = p_nd->m_p_next_sibling;
92*38fd1498Szrj 
93*38fd1498Szrj   if (p_next == 0)
94*38fd1498Szrj     return 0;
95*38fd1498Szrj 
96*38fd1498Szrj   if (p_nd->m_metadata == p_next->m_metadata)
97*38fd1498Szrj     return p_nd;
98*38fd1498Szrj 
99*38fd1498Szrj   return next_2_pointer(p_next);
100*38fd1498Szrj }
101*38fd1498Szrj 
102*38fd1498Szrj PB_DS_CLASS_T_DEC
103*38fd1498Szrj typename PB_DS_CLASS_C_DEC::node_const_pointer
104*38fd1498Szrj PB_DS_CLASS_C_DEC::
next_after_0_pointer(node_const_pointer p_nd)105*38fd1498Szrj next_after_0_pointer(node_const_pointer p_nd)
106*38fd1498Szrj {
107*38fd1498Szrj   if (p_nd == 0)
108*38fd1498Szrj     return 0;
109*38fd1498Szrj 
110*38fd1498Szrj   node_pointer p_next = p_nd->m_p_next_sibling;
111*38fd1498Szrj 
112*38fd1498Szrj   if (p_next == 0)
113*38fd1498Szrj     return 0;
114*38fd1498Szrj 
115*38fd1498Szrj   if (p_nd->m_metadata < p_next->m_metadata)
116*38fd1498Szrj     return p_next;
117*38fd1498Szrj 
118*38fd1498Szrj   return next_after_0_pointer(p_next);
119*38fd1498Szrj }
120*38fd1498Szrj 
121*38fd1498Szrj #endif
122