]> gcc.gnu.org Git - gcc.git/commitdiff
2004-03-10 Paolo Carlini <pcarlini@suse.de>
authorPaolo Carlini <paolo@gcc.gnu.org>
Wed, 10 Mar 2004 17:08:32 +0000 (17:08 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 10 Mar 2004 17:08:32 +0000 (17:08 +0000)
Add include/bits/valarray_array.tcc changes missing from
Jerry's commit to mainline.

From-SVN: r79260

libstdc++-v3/include/bits/valarray_array.tcc

index cf660346472eef95230b608f72021fe79e46461d..fac5de6399b178e6e3d76d5bf39a60608abc37f2 100644 (file)
@@ -52,6 +52,12 @@ namespace std
        }
     }
 
+  // Copy n elements of a into consecutive elements of b.  When m is
+  // false, the corresponding element of a is skipped.  m must contain
+  // at least n true elements.  a must contain at least n elements and
+  // enough elements to match up with m through the nth true element
+  // of m.  I.e.  if n is 10, m has 15 elements with 5 false followed
+  // by 10 true, a must have 15 elements.
   template<typename _Tp>
     void
     __valarray_copy(_Array<_Tp> __a, _Array<bool> __m, _Array<_Tp> __b,
@@ -71,6 +77,12 @@ namespace std
        }
     }
 
+  // Copy n consecutive elements from a into elements of b.  Elements
+  // of b are skipped if the corresponding element of m is false.  m
+  // must contain at least n true elements.  b must have at least as
+  // many elements as the index of the nth true element of m.  I.e. if
+  // m has 15 elements with 5 false followed by 10 true, b must have
+  // at least 15 elements.
   template<typename _Tp>
     void
     __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b,
@@ -90,6 +102,39 @@ namespace std
        }
     }
 
+  // Copy n elements from a into elements of b.  Elements of a are
+  // skipped if the corresponding element of m is false.  Elements of
+  // b are skipped if the corresponding element of k is false.  m and
+  // k must contain at least n true elements.  a and b must have at
+  // least as many elements as the index of the nth true element of m.
+  template<typename _Tp>
+    void
+    __valarray_copy(_Array<_Tp> __a, _Array<bool> __m, size_t __n,
+                   _Array<_Tp> __b, _Array<bool> __k)
+    {
+      _Tp* __p (__a._M_data);
+      _Tp* __q (__b._M_data);
+      bool* __srcok (__m._M_data);
+      bool* __dstok (__k._M_data);
+      for (size_t __i = 0; __i < __n;
+          ++__srcok, ++__p, ++__dstok, ++__q, ++__i)
+       {
+         while (! *__srcok)
+           {
+             ++__srcok;
+             ++__p;
+           }
+         while (! *__dstok) 
+           {
+             ++__dstok;
+             ++__q;
+           }
+         *__q = *__p;
+       }
+    }
+
+  // Copy n consecutive elements of e into consecutive elements of a.
+  // I.e. a[i] = e[i].
   template<typename _Tp, class _Dom>
     void
     __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n, _Array<_Tp> __a)
@@ -99,6 +144,8 @@ namespace std
        *__p = __e[__i];
     }
 
+  // Copy n consecutive elements of e into elements of a using stride
+  // s.  I.e., a[0] = e[0], a[s] = e[1], a[2*s] = e[2].
   template<typename _Tp, class _Dom>
     void
     __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
@@ -109,6 +156,8 @@ namespace std
        *__p = __e[__i];
     }
 
+  // Copy n consecutive elements of e into elements of a indexed by
+  // contents of i.  I.e., a[i[0]] = e[0].
   template<typename _Tp, class _Dom>
     void
     __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
@@ -119,6 +168,26 @@ namespace std
        __a._M_data[*__j] = __e[__k];
     }
 
+  // Copy n elements of e indexed by contents of f into elements of a
+  // indexed by contents of i.  I.e., a[i[0]] = e[f[0]].
+  template<typename _Tp>
+    void
+    __valarray_copy(_Array<_Tp> __e, _Array<size_t> __f,
+                   size_t __n, 
+                   _Array<_Tp> __a, _Array<size_t> __i)
+    {
+      size_t* __g (__f._M_data);
+      size_t* __j (__i._M_data);
+      for (size_t __k = 0; __k < __n; ++__k, ++__j, ++__g) 
+       __a._M_data[*__j] = __e._M_data[*__g];
+    }
+
+  // Copy n consecutive elements of e into elements of a.  Elements of
+  // a are skipped if the corresponding element of m is false.  m must
+  // have at least n true elements and a must have at least as many
+  // elements as the index of the nth true element of m.  I.e. if m
+  // has 5 false followed by 10 true elements and n == 10, a must have
+  // at least 15 elements.
   template<typename _Tp, class _Dom>
     void
     __valarray_copy(const _Expr<_Dom, _Tp>& __e, size_t __n,
This page took 0.066613 seconds and 5 git commands to generate.