]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | #ifndef BOOST_ALGORITHM_RG071801_HPP |
2 | #define BOOST_ALGORITHM_RG071801_HPP | |
3 | ||
4 | // | |
5 | // | |
6 | // Copyright (c) 1994 | |
7 | // Hewlett-Packard Company | |
8 | // | |
9 | // Permission to use, copy, modify, distribute and sell this software | |
10 | // and its documentation for any purpose is hereby granted without fee, | |
11 | // provided that the above copyright notice appear in all copies and | |
12 | // that both that copyright notice and this permission notice appear | |
13 | // in supporting documentation. Hewlett-Packard Company makes no | |
14 | // representations about the suitability of this software for any | |
15 | // purpose. It is provided "as is" without express or implied warranty. | |
16 | // | |
17 | // | |
18 | // Copyright (c) 1996-1998 | |
19 | // Silicon Graphics Computer Systems, Inc. | |
20 | // | |
21 | // Permission to use, copy, modify, distribute and sell this software | |
22 | // and its documentation for any purpose is hereby granted without fee, | |
23 | // provided that the above copyright notice appear in all copies and | |
24 | // that both that copyright notice and this permission notice appear | |
25 | // in supporting documentation. Silicon Graphics makes no | |
26 | // representations about the suitability of this software for any | |
27 | // purpose. It is provided "as is" without express or implied warranty. | |
28 | // | |
29 | ||
30 | // Copyright 2002 The Trustees of Indiana University. | |
31 | ||
32 | // Use, modification and distribution is subject to the Boost Software | |
33 | // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at | |
34 | // http://www.boost.org/LICENSE_1_0.txt) | |
35 | ||
36 | // Boost.MultiArray Library | |
37 | // Authors: Ronald Garcia | |
38 | // Jeremy Siek | |
39 | // Andrew Lumsdaine | |
40 | // See http://www.boost.org/libs/multi_array for documentation. | |
41 | ||
42 | ||
43 | #include "boost/iterator.hpp" | |
44 | ||
45 | namespace boost { | |
46 | namespace detail { | |
47 | namespace multi_array { | |
48 | //-------------------------------------------------- | |
49 | // copy_n (not part of the C++ standard) | |
50 | #if 1 | |
51 | ||
52 | template <class InputIter, class Size, class OutputIter> | |
53 | OutputIter copy_n(InputIter first, Size count, | |
54 | OutputIter result) { | |
55 | for ( ; count > 0; --count) { | |
56 | *result = *first; | |
57 | ++first; | |
58 | ++result; | |
59 | } | |
60 | return result; | |
61 | } | |
62 | #else // !1 | |
63 | ||
64 | template <class InputIter, class Size, class OutputIter> | |
65 | OutputIter copy_n__(InputIter first, Size count, | |
66 | OutputIter result, | |
67 | std::input_iterator_tag) { | |
68 | for ( ; count > 0; --count) { | |
69 | *result = *first; | |
70 | ++first; | |
71 | ++result; | |
72 | } | |
73 | return result; | |
74 | } | |
75 | ||
76 | template <class RAIter, class Size, class OutputIter> | |
77 | inline OutputIter | |
78 | copy_n__(RAIter first, Size count, | |
79 | OutputIter result, | |
80 | std::random_access_iterator_tag) { | |
81 | RAIter last = first + count; | |
82 | return std::copy(first, last, result); | |
83 | } | |
84 | ||
85 | template <class InputIter, class Size, class OutputIter> | |
86 | inline OutputIter | |
87 | copy_n__(InputIter first, Size count, OutputIter result) { | |
88 | typedef typename std::iterator_traits<InputIter>::iterator_category cat; | |
89 | return copy_n__(first, count, result, cat()); | |
90 | } | |
91 | ||
92 | template <class InputIter, class Size, class OutputIter> | |
93 | inline OutputIter | |
94 | copy_n(InputIter first, Size count, OutputIter result) { | |
95 | return copy_n__(first, count, result); | |
96 | } | |
97 | ||
98 | #endif // 1 | |
99 | } // namespace multi_array | |
100 | } // namespace detail | |
101 | } // namespace boost | |
102 | ||
103 | #endif // BOOST_ALGORITHM_RG071801_HPP |