home *** CD-ROM | disk | FTP | other *** search
- // This may look like C code, but it is really -*- C++ -*-
- /*
- Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
- This file is part of GNU CC.
-
- GNU CC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY. No author or distributor
- accepts responsibility to anyone for the consequences of using it
- or for whether it serves any particular purpose or works at all,
- unless he says so in writing. Refer to the GNU CC General Public
- License for full details.
-
- Everyone is granted permission to copy, modify and redistribute
- GNU CC, but only under the conditions described in the
- GNU CC General Public License. A copy of this license is
- supposed to have been given to you along with GNU CC so you
- can know your rights and responsibilities. It should be in a
- file named COPYING. Among other things, the copyright notice
- and this notice must be preserved on all copies.
- */
-
-
- #ifndef _<T>AVec_h
- #define _<T>AVec_h 1
-
- #include "<T>Vec.h"
-
- class <T>AVec : public <T>Vec
- {
- void check_len(int l);
- <T>* vec();
- <T>AVec(int l, <T>* d);
- public:
- <T>AVec ();
- <T>AVec (int l);
- <T>AVec (int l, <T&> fill_value);
- <T>AVec (<T>AVec&);
- ~<T>AVec ();
-
- <T>AVec& operator = (<T>AVec& a);
- <T>AVec& operator = (<T&> fill_value);
-
- // vector by scalar -> vector operations
-
- friend <T>AVec operator + (<T>AVec& a, <T&> b);
- friend <T>AVec operator - (<T>AVec& a, <T&> b);
- friend <T>AVec operator * (<T>AVec& a, <T&> b);
- friend <T>AVec operator / (<T>AVec& a, <T&> b);
-
- <T>AVec& operator += (<T&> b);
- <T>AVec& operator -= (<T&> b);
- <T>AVec& operator *= (<T&> b);
- <T>AVec& operator /= (<T&> b);
-
- // vectos by vector -> vector operations
-
- friend <T>AVec operator + (<T>AVec& a, <T>AVec& b);
- friend <T>AVec operator - (<T>AVec& a, <T>AVec& b);
- <T>AVec& operator += (<T>AVec& b);
- <T>AVec& operator -= (<T>AVec& b);
-
- <T>AVec operator - ();
-
- friend <T>AVec product(<T>AVec& a, <T>AVec& b);
- <T>AVec& product(<T>AVec& b);
- friend <T>AVec quotient(<T>AVec& a, <T>AVec& b);
- <T>AVec& quotient(<T>AVec& b);
-
- // vector -> scalar operations
-
- friend <T> operator * (<T>AVec& a, <T>AVec& b);
-
- <T> sum();
- <T> min();
- <T> max();
- <T> sumsq();
-
- // indexing
-
- int min_index();
- int max_index();
-
- // redundant but necesssary
- friend <T>AVec concat(<T>AVec& a, <T>AVec& b);
- friend <T>AVec map(<T>Mapper f, <T>AVec& a);
- friend <T>AVec merge(<T>AVec& a, <T>AVec& b, <T>Comparator f);
- friend <T>AVec combine(<T>Combiner f, <T>AVec& a, <T>AVec& b);
- friend <T>AVec reverse(<T>AVec& a);
- <T>AVec at(int from = 0, int n = -1);
- };
-
-
- inline <T>AVec::<T>AVec() {}
- inline <T>AVec::<T>AVec(int l) :(l) {}
- inline <T>AVec::<T>AVec(int l, <T&> fill_value) : (l, fill_value) {}
- inline <T>AVec::<T>AVec(int l, <T>* d) :(l, d) {}
- inline <T>AVec::<T>AVec(<T>AVec& v) :(v) {}
- inline <T>AVec::~<T>AVec() {}
-
-
- inline <T>* <T>AVec::vec()
- {
- return s;
- }
-
- inline void <T>AVec::check_len(int l)
- {
- if (l != len)
- error("nonconformant vectors.");
- }
-
-
- #endif
-