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