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

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc4/] [libstdc++-v3/] [include/] [ext/] [memory] - Blame information for rev 424

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 424 jeremybenn
// 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
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
66
 
67
  using std::ptrdiff_t;
68
  using std::pair;
69
  using std::__iterator_category;
70
  using std::_Temporary_buffer;
71
 
72
  template
73
    pair<_InputIter, _ForwardIter>
74
    __uninitialized_copy_n(_InputIter __first, _Size __count,
75
                           _ForwardIter __result, std::input_iterator_tag)
76
    {
77
      _ForwardIter __cur = __result;
78
      __try
79
        {
80
          for (; __count > 0 ; --__count, ++__first, ++__cur)
81
            std::_Construct(&*__cur, *__first);
82
          return pair<_InputIter, _ForwardIter>(__first, __cur);
83
        }
84
      __catch(...)
85
        {
86
          std::_Destroy(__result, __cur);
87
          __throw_exception_again;
88
        }
89
    }
90
 
91
  template
92
    inline pair<_RandomAccessIter, _ForwardIter>
93
    __uninitialized_copy_n(_RandomAccessIter __first, _Size __count,
94
                           _ForwardIter __result,
95
                           std::random_access_iterator_tag)
96
    {
97
      _RandomAccessIter __last = __first + __count;
98
      return (pair<_RandomAccessIter, _ForwardIter>
99
              (__last, std::uninitialized_copy(__first, __last, __result)));
100
    }
101
 
102
  template
103
    inline pair<_InputIter, _ForwardIter>
104
    __uninitialized_copy_n(_InputIter __first, _Size __count,
105
                           _ForwardIter __result)
106
    { return __gnu_cxx::__uninitialized_copy_n(__first, __count, __result,
107
                                               __iterator_category(__first)); }
108
 
109
  /**
110
   *  @brief Copies the range [first,last) into result.
111
   *  @param  first  An input iterator.
112
   *  @param  last   An input iterator.
113
   *  @param  result An output iterator.
114
   *  @return   result + (first - last)
115
   *  @ingroup SGIextensions
116
   *
117
   *  Like copy(), but does not require an initialized output range.
118
  */
119
  template
120
    inline pair<_InputIter, _ForwardIter>
121
    uninitialized_copy_n(_InputIter __first, _Size __count,
122
                         _ForwardIter __result)
123
    { return __gnu_cxx::__uninitialized_copy_n(__first, __count, __result,
124
                                               __iterator_category(__first)); }
125
 
126
 
127
  // An alternative version of uninitialized_copy_n that constructs
128
  // and destroys objects with a user-provided allocator.
129
  template
130
           typename _Allocator>
131
    pair<_InputIter, _ForwardIter>
132
    __uninitialized_copy_n_a(_InputIter __first, _Size __count,
133
                             _ForwardIter __result,
134
                             _Allocator __alloc)
135
    {
136
      _ForwardIter __cur = __result;
137
      __try
138
        {
139
          for (; __count > 0 ; --__count, ++__first, ++__cur)
140
            __alloc.construct(&*__cur, *__first);
141
          return pair<_InputIter, _ForwardIter>(__first, __cur);
142
        }
143
      __catch(...)
144
        {
145
          std::_Destroy(__result, __cur, __alloc);
146
          __throw_exception_again;
147
        }
148
    }
149
 
150
  template
151
           typename _Tp>
152
    inline pair<_InputIter, _ForwardIter>
153
    __uninitialized_copy_n_a(_InputIter __first, _Size __count,
154
                             _ForwardIter __result,
155
                             std::allocator<_Tp>)
156
    {
157
      return __gnu_cxx::uninitialized_copy_n(__first, __count, __result);
158
    }
159
 
160
  /**
161
   *  This class provides similar behavior and semantics of the standard
162
   *  functions get_temporary_buffer() and return_temporary_buffer(), but
163
   *  encapsulated in a type vaguely resembling a standard container.
164
   *
165
   *  By default, a temporary_buffer stores space for objects of
166
   *  whatever type the Iter iterator points to.  It is constructed from a
167
   *  typical [first,last) range, and provides the begin(), end(), size()
168
   *  functions, as well as requested_size().  For non-trivial types, copies
169
   *  of *first will be used to initialize the storage.
170
   *
171
   *  @c malloc is used to obtain underlying storage.
172
   *
173
   *  Like get_temporary_buffer(), not all the requested memory may be
174
   *  available.  Ideally, the created buffer will be large enough to hold a
175
   *  copy of [first,last), but if size() is less than requested_size(),
176
   *  then this didn't happen.
177
   *
178
   *  @ingroup SGIextensions
179
  */
180
  template 
181
            = typename std::iterator_traits<_ForwardIterator>::value_type >
182
    struct temporary_buffer : public _Temporary_buffer<_ForwardIterator, _Tp>
183
    {
184
      /// Requests storage large enough to hold a copy of [first,last).
185
      temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
186
      : _Temporary_buffer<_ForwardIterator, _Tp>(__first, __last) { }
187
 
188
      /// Destroys objects and frees storage.
189
      ~temporary_buffer() { }
190
    };
191
 
192
_GLIBCXX_END_NAMESPACE
193
 
194
#endif
195
 

powered by: WebSVN 2.1.0

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