diff options
| author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-01-02 12:16:56 +0000 |
|---|---|---|
| committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-01-02 12:16:56 +0000 |
| commit | 5ebed336c24d9c7456e2075ba0a075a3897c98dd (patch) | |
| tree | ad019616814a5f2ed84eaafde669d01edf9985a9 /libstdc++-v3/include/ext/memory | |
| parent | e5a3ec3f7420ab74f2be4011f3bc67e227f08087 (diff) | |
| download | ppe42-gcc-5ebed336c24d9c7456e2075ba0a075a3897c98dd.tar.gz ppe42-gcc-5ebed336c24d9c7456e2075ba0a075a3897c98dd.zip | |
2002-01-02 Paolo Carlini <pcarlini@unitus.it>
* include/bits/stl_algobase.h (copy_n + helpers,
lexicographical_compare_3way + helpers): Move to...
* include/ext/algorithm: ...here.
* include/bits/stl_uninitialized.h (uninitialized_copy_n +
helpers): Move to...
* include/ext/memory: ...here, new file.
* include/Makefile.am (ext_headers): Add new file.
* include/Makefile.in: Regenerate.
* testsuite/ext/headers.cc: Include <ext/memory>.
* include/backward/algobase.h: Include <ext/memory> and
<ext/algorithm>, tweak.
* include/ext/ropeimpl.h: Include <ext/memory>, tweak.
* include/ext/stl_rope.h: Include <ext/memory>, tweak.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@48467 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/ext/memory')
| -rw-r--r-- | libstdc++-v3/include/ext/memory | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/libstdc++-v3/include/ext/memory b/libstdc++-v3/include/ext/memory new file mode 100644 index 00000000000..e8b85741c8c --- /dev/null +++ b/libstdc++-v3/include/ext/memory @@ -0,0 +1,128 @@ +// Memory extensions -*- C++ -*- + +// Copyright (C) 2002 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +/* + * + * 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 + * 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. + */ + +#ifndef _EXT_MEMORY +#define _EXT_MEMORY + +#pragma GCC system_header +#include <bits/std_memory.h> + +namespace __gnu_cxx +{ + using std::pair; + using std::__iterator_category; + + // uninitialized_copy_n (not part of the C++ standard) + + template<typename _InputIter, typename _Size, typename _ForwardIter> + pair<_InputIter, _ForwardIter> + __uninitialized_copy_n(_InputIter __first, _Size __count, + _ForwardIter __result, + std::input_iterator_tag) + { + _ForwardIter __cur = __result; + try { + for ( ; __count > 0 ; --__count, ++__first, ++__cur) + std::_Construct(&*__cur, *__first); + return pair<_InputIter, _ForwardIter>(__first, __cur); + } + catch(...) + { + std::_Destroy(__result, __cur); + __throw_exception_again; + } + } + + template<typename _RandomAccessIter, typename _Size, typename _ForwardIter> + inline pair<_RandomAccessIter, _ForwardIter> + __uninitialized_copy_n(_RandomAccessIter __first, _Size __count, + _ForwardIter __result, + std::random_access_iterator_tag) + { + _RandomAccessIter __last = __first + __count; + return pair<_RandomAccessIter, _ForwardIter>( + __last, + std::uninitialized_copy(__first, __last, __result)); + } + + template<typename _InputIter, typename _Size, typename _ForwardIter> + inline pair<_InputIter, _ForwardIter> + __uninitialized_copy_n(_InputIter __first, _Size __count, + _ForwardIter __result) { + return __uninitialized_copy_n(__first, __count, __result, + __iterator_category(__first)); + } + + /** + * @brief Copies the range [first,last) into result. + * @param first An input iterator. + * @param last An input iterator. + * @param result An output iterator. + * @return result + (first - last) + * + * Like copy(), but does not require an initialized output range. + */ + template<typename _InputIter, typename _Size, typename _ForwardIter> + inline pair<_InputIter, _ForwardIter> + uninitialized_copy_n(_InputIter __first, _Size __count, + _ForwardIter __result) { + return __uninitialized_copy_n(__first, __count, __result, + __iterator_category(__first)); + } + +} // namespace __gnu_cxx + +#endif /* _EXT_MEMORY */ + |

