OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [libstdc++-v3/] [include/] [ext/] [pb_ds/] [detail/] [tree_policy/] [order_statistics_imp.hpp] - Blame information for rev 424

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 424 jeremybenn
// -*- C++ -*-
2
 
3
// Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
4
//
5
// This file is part of the GNU ISO C++ Library.  This library is free
6
// software; you can redistribute it and/or modify it under the terms
7
// of the GNU General Public License as published by the Free Software
8
// Foundation; either version 3, or (at your option) any later
9
// version.
10
 
11
// This library is distributed in the hope that it will be useful, but
12
// WITHOUT ANY WARRANTY; without even the implied warranty of
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
// General Public License for more details.
15
 
16
// Under Section 7 of GPL version 3, you are granted additional
17
// permissions described in the GCC Runtime Library Exception, version
18
// 3.1, as published by the Free Software Foundation.
19
 
20
// You should have received a copy of the GNU General Public License and
21
// a copy of the GCC Runtime Library Exception along with this program;
22
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23
// <http://www.gnu.org/licenses/>.
24
 
25
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
26
 
27
// Permission to use, copy, modify, sell, and distribute this software
28
// is hereby granted without fee, provided that the above copyright
29
// notice appears in all copies, and that both that copyright notice
30
// and this permission notice appear in supporting documentation. None
31
// of the above authors, nor IBM Haifa Research Laboratories, make any
32
// representation about the suitability of this software for any
33
// purpose. It is provided "as is" without express or implied
34
// warranty.
35
 
36
/**
37
 * @file order_statistics_imp.hpp
38
 * Contains forward declarations for order_statistics_key
39
 */
40
 
41
PB_DS_CLASS_T_DEC
42
inline typename PB_DS_CLASS_C_DEC::iterator
43
PB_DS_CLASS_C_DEC::
44
find_by_order(size_type order)
45
{
46
  node_iterator it = node_begin();
47
 
48
  node_iterator end_it = node_end();
49
 
50
  while (it != end_it)
51
    {
52
      node_iterator l_it = it.get_l_child();
53
 
54
      const size_type o = (l_it == end_it)?
55
 
56
        l_it.get_metadata();
57
 
58
      if (order == o)
59
        return (*it);
60
      else if (order < o)
61
        it = l_it;
62
      else
63
        {
64
          order -= o + 1;
65
 
66
          it = it.get_r_child();
67
        }
68
    }
69
 
70
  return (PB_DS_BASE_C_DEC::end_iterator());
71
}
72
 
73
PB_DS_CLASS_T_DEC
74
inline typename PB_DS_CLASS_C_DEC::const_iterator
75
PB_DS_CLASS_C_DEC::
76
find_by_order(size_type order) const
77
{
78
  return (const_cast<PB_DS_CLASS_C_DEC* >(this)->find_by_order(order));
79
}
80
 
81
PB_DS_CLASS_T_DEC
82
inline typename PB_DS_CLASS_C_DEC::size_type
83
PB_DS_CLASS_C_DEC::
84
order_of_key(const_key_reference r_key) const
85
{
86
  const_node_iterator it = node_begin();
87
 
88
  const_node_iterator end_it = node_end();
89
 
90
  const cmp_fn& r_cmp_fn =
91
    const_cast<PB_DS_CLASS_C_DEC* >(this)->get_cmp_fn();
92
 
93
  size_type ord = 0;
94
 
95
  while (it != end_it)
96
    {
97
      const_node_iterator l_it = it.get_l_child();
98
 
99
      if (r_cmp_fn(r_key, extract_key(*(*it))))
100
        it = l_it;
101
      else if (r_cmp_fn(extract_key(*(*it)), r_key))
102
        {
103
 
104
          ord += (l_it == end_it)?
105
            1 :
106
            1 + l_it.get_metadata();
107
 
108
          it = it.get_r_child();
109
        }
110
      else
111
        {
112
          ord += (l_it == end_it)?
113
 
114
            l_it.get_metadata();
115
 
116
          it = end_it;
117
        }
118
    }
119
 
120
  return (ord);
121
}
122
 
123
PB_DS_CLASS_T_DEC
124
inline void
125
PB_DS_CLASS_C_DEC::
126
operator()(node_iterator node_it, const_node_iterator end_nd_it) const
127
{
128
  node_iterator l_child_it = node_it.get_l_child();
129
  const size_type l_rank =(l_child_it == end_nd_it)? 0 : l_child_it.get_metadata();
130
 
131
  node_iterator r_child_it = node_it.get_r_child();
132
  const size_type r_rank =(r_child_it == end_nd_it)? 0 : r_child_it.get_metadata();
133
 
134
  const_cast<metadata_reference>(node_it.get_metadata())=
135
    1 + l_rank + r_rank;
136
}
137
 
138
PB_DS_CLASS_T_DEC
139
PB_DS_CLASS_C_DEC::
140
~tree_order_statistics_node_update()
141
{ }

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.