[uClibc-cvs] CVS update of uClibc++ (include/iterator_base include/valarray src/valarray.cpp)
Garrett Kajmowicz
gkajmowi at codepoet.org
Thu Sep 9 18:43:53 UTC 2004
Date: Thursday, September 9, 2004 @ 12:43:53
Author: gkajmowi
Path: /var/cvs/uClibc++
Added: include/iterator_base (1.1) include/valarray (1.1)
src/valarray.cpp (1.1)
Syncing cvs code to current developement level (0.1.4-pre)
Index: uClibc++/include/iterator_base
diff -u /dev/null uClibc++/include/iterator_base:1.1
--- /dev/null Thu Sep 9 12:43:53 2004
+++ uClibc++/include/iterator_base Thu Sep 9 12:43:52 2004
@@ -0,0 +1,274 @@
+/* Copyright (C) 2004 Garrett A. Kajmowicz
+
+ This file is part of the uClibc++ Library.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include <basic_definitions>
+
+#ifndef __STD_HEADER_ITERATOR_BASE
+#define __STD_HEADER_ITERATOR_BASE 1
+
+
+namespace std{
+ template<class Iterator> struct iterator_traits;
+ template<class T> struct iterator_traits<T*>;
+
+ template<class Category, class T, class Distance = ptrdiff_t, class Pointer = T*, class Reference = T&> struct iterator;
+
+ struct input_iterator_tag {};
+ struct output_iterator_tag {};
+ struct forward_iterator_tag: public input_iterator_tag {};
+ struct bidirectional_iterator_tag: public forward_iterator_tag {};
+ struct random_access_iterator_tag: public bidirectional_iterator_tag {};
+
+ template <class InputIterator, class Distance> void advance(InputIterator& i, Distance n){
+ while(n > 0){
+ --n;
+ ++i;
+ }
+ }
+
+ template <class InputIterator> typename iterator_traits<InputIterator>::difference_type
+ distance(InputIterator first, InputIterator last)
+ {
+ typename iterator_traits<InputIterator>::difference_type d = 0;
+ while(first++ !=last){
+ d++;
+ }
+ return d;
+ }
+
+ // subclause _lib.predef.iterators_, predefined iterators:
+ template <class Iterator> class reverse_iterator;
+ template <class Iterator> bool operator==(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);
+ template <class Iterator> bool operator<(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);
+ template <class Iterator> bool operator!=(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);
+ template <class Iterator> bool operator>(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);
+ template <class Iterator> bool operator>=(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);
+ template <class Iterator> bool operator<=(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);
+ template <class Iterator> typename reverse_iterator<Iterator>::difference_type
+ operator-( const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);
+ template <class Iterator> reverse_iterator<Iterator>
+ operator+( typename reverse_iterator<Iterator>::difference_type n, const reverse_iterator<Iterator>& x);
+ template <class Container> class back_insert_iterator;
+ template <class Container> back_insert_iterator<Container> back_inserter(Container& x);
+ template <class Container> class front_insert_iterator;
+ template <class Container> front_insert_iterator<Container> front_inserter(Container& x);
+ template <class Container> class insert_iterator;
+ template <class Container, class Iterator>
+ insert_iterator<Container> inserter(Container& x, Iterator i);
+
+ //Actual Template definitions
+
+ template<class Iterator> struct iterator_traits {
+ typedef typename Iterator::difference_type difference_type;
+ typedef typename Iterator::value_type value_type;
+ typedef typename Iterator::pointer pointer;
+ typedef typename Iterator::reference reference;
+ typedef typename Iterator::iterator_category iterator_category;
+ };
+
+ //Pointer specialization - required by standard
+ template<class T> struct iterator_traits<T*> {
+ typedef ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef T* pointer;
+ typedef T& reference;
+ typedef random_access_iterator_tag iterator_category;
+ };
+
+ //Specialization recomended by standard
+/* template<class T> struct iterator_traits<T __far*> {
+ typedef long difference_type;
+ typedef T value_type;
+ typedef T __far* pointer;
+ typedef T __far& reference;
+ typedef random_access_iterator_tag iterator_category;
+ };*/
+
+/* template <class BidirectionalIterator> void reverse(BidirectionalIterator first, BidirectionalIterator last){
+ typename iterator_traits<BidirectionalIterator>::difference_type n = distance(first, last);
+ --n;
+ while(n > 0){
+ typename iterator_traits<BidirectionalIterator>::value_type tmp = *first;
+ *first++ = * --last;
+ *last = tmp;
+ n -= 2;
+ }
+ };*/
+
+
+ template <class Category, class T, class Distance, class Pointer, class Reference>
+ struct iterator
+ {
+ typedef T value_type;
+ typedef Distance difference_type;
+ typedef Pointer pointer;
+ typedef Reference reference;
+ typedef Category iterator_category;
+ };
+
+
+ template <class Iterator> class reverse_iterator : public iterator<typename iterator_traits<Iterator>::iterator_category,
+ typename iterator_traits<Iterator>::value_type, typename iterator_traits<Iterator>::difference_type,
+ typename iterator_traits<Iterator>::pointer, typename iterator_traits<Iterator>::reference>
+ {
+ protected:
+ Iterator current;
+ friend bool operator== <Iterator>(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);
+ friend bool operator< <Iterator>(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y);
+
+ public:
+ typedef Iterator iterator_type;
+
+ reverse_iterator() : current(){};
+ explicit reverse_iterator(Iterator x) : current(x) { }
+ template<class U> reverse_iterator(const reverse_iterator<U> &x) : current(x.base()){}
+
+ Iterator base() const { return current; } // explicit
+
+ typename iterator_traits<Iterator>::reference operator*() const { Iterator tmp = current; return *--tmp;}
+ typename iterator_traits<Iterator>::pointer operator->() const { Iterator tmp = current; return *--tmp;}
+ typename iterator_traits<Iterator>::reference operator[](typename iterator_traits<Iterator>::difference_type n) const{
+ return current[-n-1];
+ }
+
+ reverse_iterator& operator++(){ --current; return *this; }
+ reverse_iterator operator++(int) {reverse_iterator tmp = *this; --current; return tmp; }
+ reverse_iterator& operator--() { ++ current; return *this; }
+ reverse_iterator operator--(int) {reverse_iterator tmp = *this; ++current; return tmp; }
+
+ reverse_iterator operator+ (typename iterator_traits<Iterator>::difference_type n) const{
+ return reverse_iterator(current-n);
+ }
+ reverse_iterator& operator+=(typename iterator_traits<Iterator>::difference_type n){
+ current -= n;
+ return *this;
+ }
+ reverse_iterator operator- (typename iterator_traits<Iterator>::difference_type n) const{
+ return reverse_iterator(current+n);
+ }
+ reverse_iterator& operator-=(typename iterator_traits<Iterator>::difference_type n){
+ current += n;
+ return *this;
+ }
+ };
+
+
+ template <class Iterator> bool operator==(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y){
+ return x.base() == y.base();
+ }
+ template <class Iterator> bool operator<(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y){
+ return x.base() < y.base();
+ }
+ template <class Iterator> bool operator!=(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y){
+ return x.base() != y.base();
+ }
+ template <class Iterator> bool operator>(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y){
+ return x.base() > y.base();
+ }
+ template <class Iterator> bool operator>=(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y){
+ return x.base() >= y.base();
+ }
+ template <class Iterator> bool operator<=(const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y){
+ return x.base() <= y.base();
+ }
+ template <class Iterator> typename reverse_iterator<Iterator>::difference_type operator-
+ ( const reverse_iterator<Iterator>& x, const reverse_iterator<Iterator>& y)
+ {
+ return y.base() - x.base();
+ }
+ template <class Iterator>reverse_iterator<Iterator> operator+
+ (typename reverse_iterator<Iterator>::difference_type n, const reverse_iterator<Iterator>& x)
+ {
+ return reverse_iterator<Iterator> (x.base() - n);
+ }
+
+ template <class Container> class back_insert_iterator :
+ public iterator<output_iterator_tag,void,void,void,void>
+ {
+ protected:
+ Container& container;
+ public:
+ typedef Container container_type;
+ explicit back_insert_iterator(Container& x):container(x) {};
+ back_insert_iterator<Container>& operator=(const typename Container::value_type& value){
+ container.push_back(value);
+ return *this;
+ }
+ back_insert_iterator<Container>& operator*(){
+ return *this;
+ }
+ back_insert_iterator<Container>& operator++(){
+ return *this;
+ }
+ back_insert_iterator<Container> operator++(int){
+ return *this;
+ }
+ };
+
+ template <class Container> back_insert_iterator<Container> back_inserter(Container& x){
+ return back_insert_iterator<Container>(x);
+ }
+
+ template <class Container>class front_insert_iterator : public iterator<output_iterator_tag,void,void,void,void> {
+ protected:
+ Container& container;
+ public:
+ typedef Container container_type;
+ explicit front_insert_iterator(Container& x): container(x) {}
+ front_insert_iterator<Container>& operator=(const typename Container::value_type& value){
+ container.push_front(value);
+ return *this;
+ }
+
+ front_insert_iterator<Container>& operator*() { return *this; }
+ front_insert_iterator<Container>& operator++() { return *this; }
+ front_insert_iterator<Container> operator++(int) { return *this; }
+ };
+
+ template <class Container> front_insert_iterator<Container> front_inserter(Container& x){
+ return front_insert_iterator<Container>(x);
+ }
+
+ template <class Container> class insert_iterator : public iterator<output_iterator_tag,void,void,void,void> {
+ protected:
+ Container& container;
+ typename Container::iterator iter;
+ public:
+ typedef Container container_type;
+ insert_iterator(Container& x, typename Container::iterator i) : container(x), iter(i) {}
+ insert_iterator<Container>& operator=(const typename Container::value_type& value){
+ iter = container.insert(iter, value);
+ ++iter;
+ return *this;
+ }
+ insert_iterator<Container>& operator*() { return *this; }
+ insert_iterator<Container>& operator++() { return *this; }
+ insert_iterator<Container> operator++(int) { return *this; }
+ };
+
+ template <class Container, class Iterator> insert_iterator<Container> inserter(Container& x, Iterator i){
+ return insert_iterator<Container>(x,typename Container::iterator(i));
+ }
+
+}
+
+
+#endif
+
+
Index: uClibc++/include/valarray
diff -u /dev/null uClibc++/include/valarray:1.1
--- /dev/null Thu Sep 9 12:43:53 2004
+++ uClibc++/include/valarray Thu Sep 9 12:43:52 2004
@@ -0,0 +1,412 @@
+/* Copyright (C) 2004 Garrett A. Kajmowicz
+
+ This file is part of the uClibc++ Library.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include <basic_definitions>
+#include <cstddef>
+
+#ifndef __HEADER_STD_VALARRAY
+#define __HEADER_STD_VALARRAY 1
+
+namespace std{
+
+ template<class T> class valarray;
+ class slice;
+ template<class T> class slice_array;
+ class gslice;
+ template<class T> class gslice_array;
+ template<class T> class mask_array;
+ template<class T> class indirect_array;
+
+ template<class T> valarray<T> operator* (const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<T> operator* (const valarray<T>&, const T&);
+ template<class T> valarray<T> operator* (const T&, const valarray<T>&);
+ template<class T> valarray<T> operator/ (const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<T> operator/ (const valarray<T>&, const T&);
+ template<class T> valarray<T> operator/ (const T&, const valarray<T>&);
+ template<class T> valarray<T> operator% (const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<T> operator% (const valarray<T>&, const T&);
+ template<class T> valarray<T> operator% (const T&, const valarray<T>&);
+ template<class T> valarray<T> operator+ (const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<T> operator+ (const valarray<T>&, const T&);
+ template<class T> valarray<T> operator+ (const T&, const valarray<T>&);
+ template<class T> valarray<T> operator- (const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<T> operator- (const valarray<T>&, const T&);
+ template<class T> valarray<T> operator- (const T&, const valarray<T>&);
+ template<class T> valarray<T> operator^ (const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<T> operator^ (const valarray<T>&, const T&);
+ template<class T> valarray<T> operator^ (const T&, const valarray<T>&);
+ template<class T> valarray<T> operator& (const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<T> operator& (const valarray<T>&, const T&);
+ template<class T> valarray<T> operator& (const T&, const valarray<T>&);
+ template<class T> valarray<T> operator| (const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<T> operator| (const valarray<T>&, const T&);
+ template<class T> valarray<T> operator| (const T&, const valarray<T>&);
+ template<class T> valarray<T> operator<<(const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<T> operator<<(const valarray<T>&, const T&);
+ template<class T> valarray<T> operator<<(const T&, const valarray<T>&);
+ template<class T> valarray<T> operator>>(const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<T> operator>>(const valarray<T>&, const T&);
+ template<class T> valarray<T> operator>>(const T&, const valarray<T>&);
+
+ template<class T> valarray<bool> operator&&(const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<bool> operator&&(const valarray<T>&, const T&);
+ template<class T> valarray<bool> operator&&(const T&, const valarray<T>&);
+ template<class T> valarray<bool> operator||(const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<bool> operator||(const valarray<T>&, const T&);
+ template<class T> valarray<bool> operator||(const T&, const valarray<T>&);
+
+ template<class T> valarray<bool> operator==(const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<bool> operator==(const valarray<T>&, const T&);
+ template<class T> valarray<bool> operator==(const T&, const valarray<T>&);
+ template<class T> valarray<bool> operator!=(const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<bool> operator!=(const valarray<T>&, const T&);
+ template<class T> valarray<bool> operator!=(const T&, const valarray<T>&);
+ template<class T> valarray<bool> operator< (const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<bool> operator< (const valarray<T>&, const T&);
+ template<class T> valarray<bool> operator< (const T&, const valarray<T>&);
+ template<class T> valarray<bool> operator> (const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<bool> operator> (const valarray<T>&, const T&);
+ template<class T> valarray<bool> operator> (const T&, const valarray<T>&);
+ template<class T> valarray<bool> operator<=(const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<bool> operator<=(const valarray<T>&, const T&);
+ template<class T> valarray<bool> operator<=(const T&, const valarray<T>&);
+ template<class T> valarray<bool> operator>=(const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<bool> operator>=(const valarray<T>&, const T&);
+ template<class T> valarray<bool> operator>=(const T&, const valarray<T>&);
+ template<class T> T min(const valarray<T>&);
+ template<class T> T max(const valarray<T>&);
+ template<class T> valarray<T> abs (const valarray<T>&);
+ template<class T> valarray<T> acos (const valarray<T>&);
+ template<class T> valarray<T> asin (const valarray<T>&);
+ template<class T> valarray<T> atan (const valarray<T>&);
+ template<class T> valarray<T> atan2(const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<T> atan2(const valarray<T>&, const T&);
+ template<class T> valarray<T> atan2(const T&, const valarray<T>&);
+ template<class T> valarray<T> cos (const valarray<T>&);
+ template<class T> valarray<T> cosh (const valarray<T>&);
+ template<class T> valarray<T> exp (const valarray<T>&);
+ template<class T> valarray<T> log (const valarray<T>&);
+ template<class T> valarray<T> log10(const valarray<T>&);
+ template<class T> valarray<T> pow (const valarray<T>&, const valarray<T>&);
+ template<class T> valarray<T> pow (const valarray<T>&, const T&);
+ template<class T> valarray<T> pow (const T&, const valarray<T>&);
+ template<class T> valarray<T> sin (const valarray<T>&);
+ template<class T> valarray<T> sinh (const valarray<T>&);
+ template<class T> valarray<T> sqrt (const valarray<T>&);
+ template<class T> valarray<T> tan (const valarray<T>&);
+ template<class T> valarray<T> tanh (const valarray<T>&);
+
+
+ //Actual class definitions
+
+ template<class T> class valarray {
+ protected:
+ T * data;
+ size_t length;
+
+ public:
+ typedef T value_type;
+
+ valarray() : data(0), length(0) { }
+
+ explicit valarray(size_t t) : data(0), length(t){
+ data = new T[length];
+ }
+
+ valarray(const T& v, size_t t) : data(0), length(t){
+ data = new T[length](v);
+ }
+ valarray(const T* p, size_t t) : data(0), length(t) {
+ data = new T[length];
+ for(size_t i = 0; i < length; ++i){
+ data[i] = p[i];
+ }
+ }
+ valarray(const valarray& v) : data(0), length(v.length){
+ data = new T[length];
+ for(size_t i = 0; i < length; ++i){
+ data[i] = v.data[i];
+ }
+ }
+ valarray(const slice_array<T>&);
+ valarray(const gslice_array<T>&);
+ valarray(const mask_array<T>&);
+ valarray(const indirect_array<T>&);
+ ~valarray(){
+ delete [] data;
+ data = 0;
+ length = 0;
+ }
+
+ valarray<T>& operator=(const valarray<T>& v){
+ for(size_t i =0; i< length; ++i){
+ data[i] = v.data[i];
+ }
+ }
+ valarray<T>& operator=(const T& t){
+ for(size_t i = 0; i < length; ++i){
+ data[i] = t;
+ }
+ }
+ valarray<T>& operator=(const slice_array<T>&);
+ valarray<T>& operator=(const gslice_array<T>&);
+ valarray<T>& operator=(const mask_array<T>&);
+ valarray<T>& operator=(const indirect_array<T>&);
+
+ T operator[](size_t t) const{
+ return data[t];
+ }
+ T& operator[](size_t t){
+ return data[t];
+ }
+
+ valarray<T> operator[](slice) const;
+ slice_array<T> operator[](slice);
+ valarray<T> operator[](const gslice&) const;
+ gslice_array<T> operator[](const gslice&);
+ valarray<T> operator[](const valarray<bool>&) const;
+ mask_array<T> operator[](const valarray<bool>&);
+ valarray<T> operator[](const valarray<size_t>&) const;
+ indirect_array<T> operator[](const valarray<size_t>&);
+
+ valarray<T> operator+() const{
+ valarray<T> retval(length);
+ for(size_t i = 0; i< length ; ++i){
+ retval.data[i] = +data[i];
+ }
+ return retval;
+ }
+ valarray<T> operator-() const{
+ valarray<T> retval(length);
+ for(size_t i = 0; i< length; ++i){
+ retval.data[i] = -data[i];
+ }
+ return retval;
+ }
+ valarray<T> operator~() const{
+ valarray<T> retval(length);
+ for(size_t i = 0; i< length ; ++i){
+ retval.data[i] = ~data[i];
+ }
+ return retval;
+ }
+ valarray<T> operator!() const{
+ valarray<T> retval(length);
+ for(size_t i = 0; i< length ; ++i){
+ retval.data[i] = !data[i];
+ }
+ return retval;
+ }
+ valarray<T>& operator*= (const T& t){
+ for(size_t i=0;i<length;++i){
+ data[i] *= t;
+ }
+ return *this;
+ }
+ valarray<T>& operator/= (const T& t){
+ for(size_t i=0;i<length;++i){
+ data[i] /= t;
+ }
+ return *this;
+ }
+ valarray<T>& operator%= (const T& t){
+ for(size_t i=0;i<length;++i){
+ data[i] %= t;
+ }
+ return *this;
+ }
+ valarray<T>& operator+= (const T& t){
+ for(size_t i=0;i<length;++i){
+ data[i] += t;
+ }
+ return *this;
+ }
+ valarray<T>& operator-= (const T& t){
+ for(size_t i=0;i<length;++i){
+ data[i] -= t;
+ }
+ return *this;
+ }
+ valarray<T>& operator^= (const T& t){
+ for(size_t i=0;i<length;++i){
+ data[i] ^= t;
+ }
+ return *this;
+ }
+ valarray<T>& operator&= (const T& t){
+ for(size_t i=0;i<length;++i){
+ data[i] &= t;
+ }
+ return *this;
+ }
+ valarray<T>& operator|= (const T& t){
+ for(size_t i=0;i<length; ++i){
+ data[i] != t;
+ }
+ return *this;
+ }
+ valarray<T>& operator<<=(const T& t){
+ for(size_t i=0;i<length;++i){
+ data[i] <<= t;
+ }
+ return *this;
+ }
+ valarray<T>& operator>>=(const T& t){
+ for(size_t i=0;i<length;++i){
+ data[i] >>= t;
+ }
+ return *this;
+ }
+ valarray<T>& operator*= (const valarray<T>& a){
+ for(size_t i=0;i<length;++i){
+ data[i] *= a.data[i];
+ }
+ return *this;
+ }
+ valarray<T>& operator/= (const valarray<T>& a){
+ for(size_t i=0;i<length;++i){
+ data[i] /= a.data[i];
+ }
+ return *this;
+ }
+ valarray<T>& operator%= (const valarray<T>& a){
+ for(size_t i=0;i<length;++i){
+ data[i] %= a.data[i];
+ }
+ return *this;
+ }
+ valarray<T>& operator+= (const valarray<T>& a){
+ for(size_t i=0;i<length;++i){
+ data[i] += a.data[i];
+ }
+ return *this;
+ }
+ valarray<T>& operator-= (const valarray<T>& a){
+ for(size_t i=0;i<length ;++i){
+ data[i] -= a.data[i];
+ }
+ return *this;
+ }
+ valarray<T>& operator^= (const valarray<T>& a){
+ for(size_t i=0;i<length;++i){
+ data[i] ^= a.data[i];
+ }
+ return *this;
+ }
+ valarray<T>& operator|= (const valarray<T>& a){
+ for(size_t i=0;i<length ;++i){
+ data[i] |= a.data[i];
+ }
+ return *this;
+ }
+ valarray<T>& operator&= (const valarray<T>& a){
+ for(size_t i=0;i<length;++i){
+ data[i] &= a.data[i];
+ }
+ return *this;
+ }
+ valarray<T>& operator<<=(const valarray<T>& a){
+ for(size_t i=0;i<length;++i){
+ data[i] <<= a.data[i];
+ }
+ return *this;
+ }
+ valarray<T>& operator>>=(const valarray<T>& a){
+ for(size_t i=0;i<length;++i){
+ data[i] >>= a.data[i];
+ }
+ return *this;
+ }
+
+ size_t size() const{
+ return length;
+ }
+
+ T sum() const{
+ T retval(data[0]);
+ for(size_t i = 1; i< length; ++i){
+ retval += data[i];
+ }
+ return retval;
+ }
+
+ T min() const{
+ T retval(data[0]);
+ for(size_t i = 1; i< length; ++i){
+ if(data[i] < retval){
+ retval = data[i];
+ }
+ }
+ return retval;
+ }
+
+ T max() const{
+ T retval(data[0]);
+ for(size_t i = 1; i< length; ++i){
+ if(retval < data[i]){
+ retval = data[i];
+ }
+ }
+ return retval;
+ }
+
+ valarray<T> shift (int n) const{
+ valarray<T> retval(length);
+ for(size_t i = 0; i < length ; ++i){
+ if(i + n > 0 && i + n < length){
+ retval.data[i] = data[i + n];
+ }
+ }
+ return retval;
+ }
+ valarray<T> cshift(int n) const{
+ valarray<T> retval(length);
+ for(size_t i = 0; i < length ; ++i){
+ retval.data[i] = data[ (i + n) % length ];
+ }
+ return retval;
+ }
+ valarray<T> apply(T func(T) ) const{
+ valarray<T> retval(length);
+ for(size_t i = 0; i< length; ++i){
+ retval.data[i] = func(data[i]);
+ }
+ return retval;
+ }
+ valarray<T> apply(T func(const T&)) const{
+ valarray<T> retval(length);
+ for(size_t i = 0; i< length; ++i){
+ retval.data[i] = func(data[i]);
+ }
+ return retval;
+ }
+ void resize(size_t sz, T c = T()){
+ delete [] data;
+ data = 0;
+ data = new T[sz](c);
+ length = sz;
+ }
+ };
+
+
+
+}
+
+
+#endif
Index: uClibc++/src/valarray.cpp
diff -u /dev/null uClibc++/src/valarray.cpp:1.1
--- /dev/null Thu Sep 9 12:43:53 2004
+++ uClibc++/src/valarray.cpp Thu Sep 9 12:43:52 2004
@@ -0,0 +1,29 @@
+/* Copyright (C) 2004 Garrett A. Kajmowicz
+
+ This file is part of the uClibc++ Library.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include <valarray>
+
+namespace std{
+
+
+
+
+}
+
+
More information about the uClibc-cvs
mailing list