OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [gcc-x64/] [or1knd-elf/] [or1knd-elf/] [include/] [c++/] [4.8.0/] [ext/] [memory] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ultra_embe
// Memory extensions -*- C++ -*-
2
 
3
// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4
// Free Software Foundation, Inc.
5
//
6
// This file is part of the GNU ISO C++ Library.  This library is free
7
// software; you can redistribute it and/or modify it under the
8
// terms of the GNU General Public License as published by the
9
// Free Software Foundation; either version 3, or (at your option)
10
// any later version.
11
 
12
// This library is distributed in the hope that it will be useful,
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
// GNU General Public License for more details.
16
 
17
// Under Section 7 of GPL version 3, you are granted additional
18
// permissions described in the GCC Runtime Library Exception, version
19
// 3.1, as published by the Free Software Foundation.
20
 
21
// You should have received a copy of the GNU General Public License and
22
// a copy of the GCC Runtime Library Exception along with this program;
23
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
24
// .
25
 
26
/*
27
 *
28
 * Copyright (c) 1994
29
 * Hewlett-Packard Company
30
 *
31
 * Permission to use, copy, modify, distribute and sell this software
32
 * and its documentation for any purpose is hereby granted without fee,
33
 * provided that the above copyright notice appear in all copies and
34
 * that both that copyright notice and this permission notice appear
35
 * in supporting documentation.  Hewlett-Packard Company makes no
36
 * representations about the suitability of this software for any
37
 * purpose.  It is provided "as is" without express or implied warranty.
38
 *
39
 *
40
 * Copyright (c) 1996
41
 * Silicon Graphics Computer Systems, Inc.
42
 *
43
 * Permission to use, copy, modify, distribute and sell this software
44
 * and its documentation for any purpose is hereby granted without fee,
45
 * provided that the above copyright notice appear in all copies and
46
 * that both that copyright notice and this permission notice appear
47
 * in supporting documentation.  Silicon Graphics makes no
48
 * representations about the suitability of this software for any
49
 * purpose.  It is provided "as is" without express or implied warranty.
50
 */
51
 
52
/** @file ext/memory
53
 *  This file is a GNU extension to the Standard C++ Library (possibly
54
 *  containing extensions from the HP/SGI STL subset).
55
 */
56
 
57
#ifndef _EXT_MEMORY
58
#define _EXT_MEMORY 1
59
 
60
#pragma GCC system_header
61
 
62
#include 
63
#include 
64
 
65
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
66
{
67
_GLIBCXX_BEGIN_NAMESPACE_VERSION
68
 
69
  using std::ptrdiff_t;
70
  using std::pair;
71
  using std::__iterator_category;
72
  using std::_Temporary_buffer;
73
 
74
  template
75
    pair<_InputIter, _ForwardIter>
76
    __uninitialized_copy_n(_InputIter __first, _Size __count,
77
                           _ForwardIter __result, std::input_iterator_tag)
78
    {
79
      _ForwardIter __cur = __result;
80
      __try
81
        {
82
          for (; __count > 0 ; --__count, ++__first, ++__cur)
83
            std::_Construct(&*__cur, *__first);
84
          return pair<_InputIter, _ForwardIter>(__first, __cur);
85
        }
86
      __catch(...)
87
        {
88
          std::_Destroy(__result, __cur);
89
          __throw_exception_again;
90
        }
91
    }
92
 
93
  template
94
    inline pair<_RandomAccessIter, _ForwardIter>
95
    __uninitialized_copy_n(_RandomAccessIter __first, _Size __count,
96
                           _ForwardIter __result,
97
                           std::random_access_iterator_tag)
98
    {
99
      _RandomAccessIter __last = __first + __count;
100
      return (pair<_RandomAccessIter, _ForwardIter>
101
              (__last, std::uninitialized_copy(__first, __last, __result)));
102
    }
103
 
104
  template
105
    inline pair<_InputIter, _ForwardIter>
106
    __uninitialized_copy_n(_InputIter __first, _Size __count,
107
                           _ForwardIter __result)
108
    { return __gnu_cxx::__uninitialized_copy_n(__first, __count, __result,
109
                                               __iterator_category(__first)); }
110
 
111
  /**
112
   *  @brief Copies the range [first,last) into result.
113
   *  @param  __first  An input iterator.
114
   *  @param  __count  Length
115
   *  @param  __result An output iterator.
116
   *  @return   __result + (__first + __count)
117
   *  @ingroup SGIextensions
118
   *
119
   *  Like copy(), but does not require an initialized output range.
120
  */
121
  template
122
    inline pair<_InputIter, _ForwardIter>
123
    uninitialized_copy_n(_InputIter __first, _Size __count,
124
                         _ForwardIter __result)
125
    { return __gnu_cxx::__uninitialized_copy_n(__first, __count, __result,
126
                                               __iterator_category(__first)); }
127
 
128
 
129
  // An alternative version of uninitialized_copy_n that constructs
130
  // and destroys objects with a user-provided allocator.
131
  template
132
           typename _Allocator>
133
    pair<_InputIter, _ForwardIter>
134
    __uninitialized_copy_n_a(_InputIter __first, _Size __count,
135
                             _ForwardIter __result,
136
                             _Allocator __alloc)
137
    {
138
      _ForwardIter __cur = __result;
139
      __try
140
        {
141
          for (; __count > 0 ; --__count, ++__first, ++__cur)
142
            __alloc.construct(&*__cur, *__first);
143
          return pair<_InputIter, _ForwardIter>(__first, __cur);
144
        }
145
      __catch(...)
146
        {
147
          std::_Destroy(__result, __cur, __alloc);
148
          __throw_exception_again;
149
        }
150
    }
151
 
152
  template
153
           typename _Tp>
154
    inline pair<_InputIter, _ForwardIter>
155
    __uninitialized_copy_n_a(_InputIter __first, _Size __count,
156
                             _ForwardIter __result,
157
                             std::allocator<_Tp>)
158
    {
159
      return __gnu_cxx::uninitialized_copy_n(__first, __count, __result);
160
    }
161
 
162
  /**
163
   *  This class provides similar behavior and semantics of the standard
164
   *  functions get_temporary_buffer() and return_temporary_buffer(), but
165
   *  encapsulated in a type vaguely resembling a standard container.
166
   *
167
   *  By default, a temporary_buffer stores space for objects of
168
   *  whatever type the Iter iterator points to.  It is constructed from a
169
   *  typical [first,last) range, and provides the begin(), end(), size()
170
   *  functions, as well as requested_size().  For non-trivial types, copies
171
   *  of *first will be used to initialize the storage.
172
   *
173
   *  @c malloc is used to obtain underlying storage.
174
   *
175
   *  Like get_temporary_buffer(), not all the requested memory may be
176
   *  available.  Ideally, the created buffer will be large enough to hold a
177
   *  copy of [first,last), but if size() is less than requested_size(),
178
   *  then this didn't happen.
179
   *
180
   *  @ingroup SGIextensions
181
  */
182
  template 
183
            = typename std::iterator_traits<_ForwardIterator>::value_type >
184
    struct temporary_buffer : public _Temporary_buffer<_ForwardIterator, _Tp>
185
    {
186
      /// Requests storage large enough to hold a copy of [first,last).
187
      temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
188
      : _Temporary_buffer<_ForwardIterator, _Tp>(__first, __last) { }
189
 
190
      /// Destroys objects and frees storage.
191
      ~temporary_buffer() { }
192
    };
193
 
194
_GLIBCXX_END_NAMESPACE_VERSION
195
} // namespace
196
 
197
#endif
198
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.