btrfs: Attempt to fix GCC2 build.
[haiku.git] / src / apps / cortex / support / set_tools.h
blob23fce8ee0be453621b745e24be3eab6896c1ec59
1 /*
2 * Copyright (c) 1999-2000, Eric Moon.
3 * All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions, and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions, and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * 3. The name of the author may not be used to endorse or promote products
17 * derived from this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 * OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
27 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 // set_tools.h
33 // e.moon 7may99
35 // PURPOSE
36 // Tools to manipulate STL set types.
38 // HISTORY
39 // e.moon 27jul99 moved into cortex namespace
40 // e.moon 7may99 created
42 #ifndef __SET_TOOLS_H__
43 #define __SET_TOOLS_H__
45 #include "cortex_defs.h"
46 __BEGIN_CORTEX_NAMESPACE
48 // delete range of pointer values from set
49 template<class iter>
50 void ptr_set_delete(iter begin, iter end) {
51 while(begin != end) {
52 if(*begin)
53 delete *begin;
54 ++begin;
58 // delete range of pointer values from map
59 template<class iter>
60 void ptr_map_delete(iter begin, iter end) {
61 while(begin != end) {
62 if((*begin).second)
63 delete (*begin).second;
64 ++begin;
68 // a simple equality-test functor for maps
69 template<class key, class value>
70 class map_value_equal_to :
71 public std::binary_function<std::pair<key,value>, value, bool> {
73 public:
74 bool operator()(const std::pair<key,value>& p, const value& v) const {
75 return p.second == v;
79 //// a predicate functor adaptor for maps
80 //// e.moon 28jul99
81 //template<class key, class value>
82 //class map_value_predicate_t :
83 // public unary_function<pair<key,value>, bool> {
85 // const unary_function<const value, bool>& fn;
87 //public:
88 // map_value_predicate_t(const unary_function<const value, bool>& _fn) : fn(_fn) {}
89 // bool operator()(const std::pair<key,value>& p) const {
90 // return fn(p.second);
91 // }
92 //};
94 //template<class key, class value>
95 //inline map_value_predicate_t<key,value> map_value_predicate(
96 // const unary_function<const value, bool>& fn) {
97 // return map_value_predicate_t<key,value>(fn);
98 //}
100 // copy values from a map subset
101 template<class input_iter, class output_iter>
102 void map_value_copy(input_iter begin, input_iter end, output_iter to) {
103 while(begin != end) {
104 *to = (*begin).second;
105 ++to;
106 ++begin;
110 // adapt a unary functor to a map (eek)
111 template <class pairT, class opT>
112 class unary_map_function_t :
113 public std::unary_function<typename opT::argument_type, typename opT::result_type> {
115 opT f;
117 public:
118 unary_map_function_t(const opT& _f) : f(_f) {}
120 typename opT::result_type
121 operator()(pairT& p) const {
122 return f(p.second);
126 template <class mapT, class opT>
127 inline unary_map_function_t<typename mapT::value_type, opT>
128 unary_map_function(
129 const mapT& map,
130 const opT& f) {
131 return unary_map_function_t<typename mapT::value_type, opT>(f);
135 __END_CORTEX_NAMESPACE
136 #endif /* __SET_TOOLS_H__ */