[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