| #ifndef BOOST_ALGORITHM_RG071801_HPP |
| #define BOOST_ALGORITHM_RG071801_HPP |
| |
| // |
| // |
| // Copyright (c) 1994 |
| // Hewlett-Packard Company |
| // |
| // Permission to use, copy, modify, distribute and sell this software |
| // and its documentation for any purpose is hereby granted without fee, |
| // provided that the above copyright notice appear in all copies and |
| // that both that copyright notice and this permission notice appear |
| // in supporting documentation. Hewlett-Packard Company makes no |
| // representations about the suitability of this software for any |
| // purpose. It is provided "as is" without express or implied warranty. |
| // |
| // |
| // Copyright (c) 1996-1998 |
| // Silicon Graphics Computer Systems, Inc. |
| // |
| // Permission to use, copy, modify, distribute and sell this software |
| // and its documentation for any purpose is hereby granted without fee, |
| // provided that the above copyright notice appear in all copies and |
| // that both that copyright notice and this permission notice appear |
| // in supporting documentation. Silicon Graphics makes no |
| // representations about the suitability of this software for any |
| // purpose. It is provided "as is" without express or implied warranty. |
| // |
| |
| // Copyright 2002 The Trustees of Indiana University. |
| |
| // Use, modification and distribution is subject to the Boost Software |
| // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at |
| // http://www.boost.org/LICENSE_1_0.txt) |
| |
| // Boost.MultiArray Library |
| // Authors: Ronald Garcia |
| // Jeremy Siek |
| // Andrew Lumsdaine |
| // See http://www.boost.org/libs/multi_array for documentation. |
| |
| |
| #include "boost/iterator.hpp" |
| |
| namespace boost { |
| namespace detail { |
| namespace multi_array { |
| //-------------------------------------------------- |
| // copy_n (not part of the C++ standard) |
| #if 1 |
| |
| template <class InputIter, class Size, class OutputIter> |
| OutputIter copy_n(InputIter first, Size count, |
| OutputIter result) { |
| for ( ; count > 0; --count) { |
| *result = *first; |
| ++first; |
| ++result; |
| } |
| return result; |
| } |
| #else // !1 |
| |
| template <class InputIter, class Size, class OutputIter> |
| OutputIter copy_n__(InputIter first, Size count, |
| OutputIter result, |
| std::input_iterator_tag) { |
| for ( ; count > 0; --count) { |
| *result = *first; |
| ++first; |
| ++result; |
| } |
| return result; |
| } |
| |
| template <class RAIter, class Size, class OutputIter> |
| inline OutputIter |
| copy_n__(RAIter first, Size count, |
| OutputIter result, |
| std::random_access_iterator_tag) { |
| RAIter last = first + count; |
| return std::copy(first, last, result); |
| } |
| |
| template <class InputIter, class Size, class OutputIter> |
| inline OutputIter |
| copy_n__(InputIter first, Size count, OutputIter result) { |
| typedef typename std::iterator_traits<InputIter>::iterator_category cat; |
| return copy_n__(first, count, result, cat()); |
| } |
| |
| template <class InputIter, class Size, class OutputIter> |
| inline OutputIter |
| copy_n(InputIter first, Size count, OutputIter result) { |
| return copy_n__(first, count, result); |
| } |
| |
| #endif // 1 |
| } // namespace multi_array |
| } // namespace detail |
| } // namespace boost |
| |
| #endif // BOOST_ALGORITHM_RG071801_HPP |