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/] [bits/] [valarray_array.tcc] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ultra_embe
// The template and inlines for the -*- C++ -*- internal _Array helper class.
2
 
3
// Copyright (C) 1997, 1998, 1999, 2003, 2005, 2009, 2010
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
/** @file bits/valarray_array.tcc
27
 *  This is an internal header file, included by other library headers.
28
 *  Do not attempt to use it directly. @headername{valarray}
29
 */
30
 
31
// Written by Gabriel Dos Reis 
32
 
33
#ifndef _VALARRAY_ARRAY_TCC
34
#define _VALARRAY_ARRAY_TCC 1
35
 
36
namespace std _GLIBCXX_VISIBILITY(default)
37
{
38
_GLIBCXX_BEGIN_NAMESPACE_VERSION
39
 
40
  template
41
    void
42
    __valarray_fill(_Array<_Tp> __a, size_t __n, _Array __m,
43
                    const _Tp& __t)
44
    {
45
      _Tp* __p = __a._M_data;
46
      bool* __ok (__m._M_data);
47
      for (size_t __i=0; __i < __n; ++__i, ++__ok, ++__p)
48
        {
49
          while (!*__ok)
50
          {
51
            ++__ok;
52
            ++__p;
53
          }
54
          *__p = __t;
55
        }
56
    }
57
 
58
  // Copy n elements of a into consecutive elements of b.  When m is
59
  // false, the corresponding element of a is skipped.  m must contain
60
  // at least n true elements.  a must contain at least n elements and
61
  // enough elements to match up with m through the nth true element
62
  // of m.  I.e.  if n is 10, m has 15 elements with 5 false followed
63
  // by 10 true, a must have 15 elements.
64
  template
65
    void
66
    __valarray_copy(_Array<_Tp> __a, _Array __m, _Array<_Tp> __b,
67
                    size_t __n)
68
    {
69
      _Tp* __p (__a._M_data);
70
      bool* __ok (__m._M_data);
71
      for (_Tp* __q = __b._M_data; __q < __b._M_data + __n;
72
           ++__q, ++__ok, ++__p)
73
        {
74
          while (! *__ok)
75
            {
76
              ++__ok;
77
              ++__p;
78
            }
79
          *__q = *__p;
80
        }
81
    }
82
 
83
  // Copy n consecutive elements from a into elements of b.  Elements
84
  // of b are skipped if the corresponding element of m is false.  m
85
  // must contain at least n true elements.  b must have at least as
86
  // many elements as the index of the nth true element of m.  I.e. if
87
  // m has 15 elements with 5 false followed by 10 true, b must have
88
  // at least 15 elements.
89
  template
90
    void
91
    __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b,
92
                    _Array __m)
93
    {
94
      _Tp* __q (__b._M_data);
95
      bool* __ok (__m._M_data);
96
      for (_Tp* __p = __a._M_data; __p < __a._M_data+__n;
97
           ++__p, ++__ok, ++__q)
98
        {
99
          while (! *__ok)
100
            {
101
              ++__ok;
102
              ++__q;
103
            }
104
          *__q = *__p;
105
        }
106
    }
107
 
108
  // Copy n elements from a into elements of b.  Elements of a are
109
  // skipped if the corresponding element of m is false.  Elements of
110
  // b are skipped if the corresponding element of k is false.  m and
111
  // k must contain at least n true elements.  a and b must have at
112
  // least as many elements as the index of the nth true element of m.
113
  template
114
    void
115
    __valarray_copy(_Array<_Tp> __a, _Array __m, size_t __n,
116
                    _Array<_Tp> __b, _Array __k)
117
    {
118
      _Tp* __p (__a._M_data);
119
      _Tp* __q (__b._M_data);
120
      bool* __srcok (__m._M_data);
121
      bool* __dstok (__k._M_data);
122
      for (size_t __i = 0; __i < __n;
123
           ++__srcok, ++__p, ++__dstok, ++__q, ++__i)
124
        {
125
          while (! *__srcok)
126
            {
127
              ++__srcok;
128
              ++__p;
129
            }
130
          while (! *__dstok)
131
            {
132
              ++__dstok;
133
              ++__q;
134
            }
135
          *__q = *__p;
136
        }
137
    }
138
 
139
  // Copy n consecutive elements of e into consecutive elements of a.
140
  // I.e. a[i] = e[i].
141
  template
142
    void
143
    __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n, _Array<_Tp> __a)
144
    {
145
      _Tp* __p (__a._M_data);
146
      for (size_t __i = 0; __i < __n; ++__i, ++__p)
147
        *__p = __e[__i];
148
    }
149
 
150
  // Copy n consecutive elements of e into elements of a using stride
151
  // s.  I.e., a[0] = e[0], a[s] = e[1], a[2*s] = e[2].
152
  template
153
    void
154
    __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
155
                     _Array<_Tp> __a, size_t __s)
156
    {
157
      _Tp* __p (__a._M_data);
158
      for (size_t __i = 0; __i < __n; ++__i, __p += __s)
159
        *__p = __e[__i];
160
    }
161
 
162
  // Copy n consecutive elements of e into elements of a indexed by
163
  // contents of i.  I.e., a[i[0]] = e[0].
164
  template
165
    void
166
    __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
167
                    _Array<_Tp> __a, _Array __i)
168
    {
169
      size_t* __j (__i._M_data);
170
      for (size_t __k = 0; __k < __n; ++__k, ++__j)
171
        __a._M_data[*__j] = __e[__k];
172
    }
173
 
174
  // Copy n elements of e indexed by contents of f into elements of a
175
  // indexed by contents of i.  I.e., a[i[0]] = e[f[0]].
176
  template
177
    void
178
    __valarray_copy(_Array<_Tp> __e, _Array __f,
179
                    size_t __n,
180
                    _Array<_Tp> __a, _Array __i)
181
    {
182
      size_t* __g (__f._M_data);
183
      size_t* __j (__i._M_data);
184
      for (size_t __k = 0; __k < __n; ++__k, ++__j, ++__g)
185
        __a._M_data[*__j] = __e._M_data[*__g];
186
    }
187
 
188
  // Copy n consecutive elements of e into elements of a.  Elements of
189
  // a are skipped if the corresponding element of m is false.  m must
190
  // have at least n true elements and a must have at least as many
191
  // elements as the index of the nth true element of m.  I.e. if m
192
  // has 5 false followed by 10 true elements and n == 10, a must have
193
  // at least 15 elements.
194
  template
195
    void
196
    __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
197
                    _Array<_Tp> __a, _Array __m)
198
    {
199
      bool* __ok (__m._M_data);
200
      _Tp* __p (__a._M_data);
201
      for (size_t __i = 0; __i < __n; ++__i, ++__ok, ++__p)
202
        {
203
          while (! *__ok)
204
            {
205
              ++__ok;
206
              ++__p;
207
            }
208
          *__p = __e[__i];
209
        }
210
    }
211
 
212
 
213
  template
214
    void
215
    __valarray_copy_construct(const _Expr<_Dom, _Tp>& __e, size_t __n,
216
                              _Array<_Tp> __a)
217
    {
218
      _Tp* __p (__a._M_data);
219
      for (size_t __i = 0; __i < __n; ++__i, ++__p)
220
        new (__p) _Tp(__e[__i]);
221
    }
222
 
223
 
224
  template
225
    void
226
    __valarray_copy_construct(_Array<_Tp> __a, _Array __m,
227
                              _Array<_Tp> __b, size_t __n)
228
    {
229
      _Tp* __p (__a._M_data);
230
      bool* __ok (__m._M_data);
231
      for (_Tp* __q = __b._M_data; __q < __b._M_data+__n; ++__q, ++__ok, ++__p)
232
        {
233
          while (! *__ok)
234
            {
235
              ++__ok;
236
              ++__p;
237
            }
238
          new (__q) _Tp(*__p);
239
        }
240
    }
241
 
242
_GLIBCXX_END_NAMESPACE_VERSION
243
} // namespace
244
 
245
#endif /* _VALARRAY_ARRAY_TCC */

powered by: WebSVN 2.1.0

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