summaryrefslogtreecommitdiff
path: root/gnu/lib/libg++/g++-include/gen/AVec.hP
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-18 08:53:40 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-18 08:53:40 +0000
commitd6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch)
treeece253b876159b39c620e62b6c9b1174642e070e /gnu/lib/libg++/g++-include/gen/AVec.hP
initial import of NetBSD tree
Diffstat (limited to 'gnu/lib/libg++/g++-include/gen/AVec.hP')
-rw-r--r--gnu/lib/libg++/g++-include/gen/AVec.hP123
1 files changed, 123 insertions, 0 deletions
diff --git a/gnu/lib/libg++/g++-include/gen/AVec.hP b/gnu/lib/libg++/g++-include/gen/AVec.hP
new file mode 100644
index 00000000000..9c57d204f7d
--- /dev/null
+++ b/gnu/lib/libg++/g++-include/gen/AVec.hP
@@ -0,0 +1,123 @@
+// 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
+#ifdef __GNUG__
+#pragma once
+#pragma interface
+#endif
+#define _<T>AVec_h 1
+
+#include "<T>.Vec.h"
+
+class <T>AVec : public <T>Vec
+{
+protected:
+ 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);
+
+// vector 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);
+};
+
+#if defined(__OPTIMIZE__) || defined(USE_LIBGXX_INLINES)
+
+inline <T>AVec::<T>AVec() {}
+inline <T>AVec::<T>AVec(int l) :<T>Vec(l) {}
+inline <T>AVec::<T>AVec(int l, <T&> fill_value) : <T>Vec (l, fill_value) {}
+inline <T>AVec::<T>AVec(<T>AVec& v) :(v) {}
+inline <T>AVec::<T>AVec(int l, <T>* d) :<T>Vec(l, d) {}
+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
+#endif