]>
code.delx.au - gnu-emacs/blob - test/manual/etags/cp-src/MDiagArray2.h
1 // Template array classes with like-type math ops
4 Copyright (C) 1996 John W. Eaton
6 This file is part of Octave.
8 Octave is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 2, or (at your option) any
13 Octave is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with Octave; see the file COPYING. If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 #if defined (__GNUG__)
28 #if !defined (octave_MDiagArray2_h)
29 #define octave_MDiagArray2_h 1
31 #include "DiagArray2.h"
38 #if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL)
47 template <typename T
> MDiagArray2
<T
>&
48 operator += (MDiagArray2
<T
>& a
, const MDiagArray2
<T
>& b
);
50 template <typename T
> MDiagArray2
<T
>&
51 operator -= (MDiagArray2
<T
>& a
, const MDiagArray2
<T
>& b
);
53 template <typename T
> MDiagArray2
<T
>
54 operator * (const MDiagArray2
<T
>& a
, const T
& s
);
56 template <typename T
> MDiagArray2
<T
>
57 operator / (const MDiagArray2
<T
>& a
, const T
& s
);
59 template <typename T
> MDiagArray2
<T
>
60 operator * (const T
& s
, const MDiagArray2
<T
>& a
);
62 template <typename T
> MDiagArray2
<T
>
63 operator + (const MDiagArray2
<T
>& a
, const MDiagArray2
<T
>& b
);
65 template <typename T
> MDiagArray2
<T
>
66 operator - (const MDiagArray2
<T
>& a
, const MDiagArray2
<T
>& b
);
68 template <typename T
> MDiagArray2
<T
>
69 product (const MDiagArray2
<T
>& a
, const MDiagArray2
<T
>& b
);
71 template <typename T
> MDiagArray2
<T
>
72 operator - (const MDiagArray2
<T
>& a
);
75 // Two dimensional diagonal array with math ops.
78 class MDiagArray2
: public DiagArray2
<T
>
82 MDiagArray2 (T
*d
, int r
, int c
) : DiagArray2
<T
> (d
, r
, c
) { }
86 MDiagArray2 (void) : DiagArray2
<T
> () { }
87 MDiagArray2 (int r
, int c
) : DiagArray2
<T
> (r
, c
) { }
88 MDiagArray2 (int r
, int c
, const T
& val
) : DiagArray2
<T
> (r
, c
, val
) { }
89 MDiagArray2 (const Array
<T
>& a
) : DiagArray2
<T
> (a
) { }
90 MDiagArray2 (const DiagArray2
<T
>& a
) : DiagArray2
<T
> (a
) { }
91 MDiagArray2 (const MDiagArray2
<T
>& a
) : DiagArray2
<T
> (a
) { }
93 ~MDiagArray2 (void) { }
95 MDiagArray2
<T
>& operator = (const MDiagArray2
<T
>& a
)
97 DiagArray2
<T
>::operator = (a
);
101 operator MArray2
<T
> () const
103 MArray2
<T
> retval (nr
, nc
, T (0));
105 int len
= nr
< nc
? nr
: nc
;
107 for (int i
= 0; i
< len
; i
++)
108 retval
.xelem (i
, i
) = xelem (i
, i
);
113 // element by element MDiagArray2 by MDiagArray2 ops
115 friend MDiagArray2
<T
>&
116 operator += LTGT (MDiagArray2
<T
>& a
, const MDiagArray2
<T
>& b
);
118 friend MDiagArray2
<T
>&
119 operator -= LTGT (MDiagArray2
<T
>& a
, const MDiagArray2
<T
>& b
);
121 // element by element MDiagArray2 by scalar ops
123 friend MDiagArray2
<T
> operator * LTGT (const MDiagArray2
<T
>& a
, const T
& s
);
124 friend MDiagArray2
<T
> operator / LTGT (const MDiagArray2
<T
>& a
, const T
& s
);
126 // element by element scalar by MDiagArray2 ops
128 friend MDiagArray2
<T
> operator * LTGT (const T
& s
, const MDiagArray2
<T
>& a
);
130 // element by element MDiagArray2 by MDiagArray2 ops
132 friend MDiagArray2
<T
>
133 operator + LTGT (const MDiagArray2
<T
>& a
, const MDiagArray2
<T
>& b
);
135 friend MDiagArray2
<T
>
136 operator - LTGT (const MDiagArray2
<T
>& a
, const MDiagArray2
<T
>& b
);
138 friend MDiagArray2
<T
>
139 product
LTGT (const MDiagArray2
<T
>& a
, const MDiagArray2
<T
>& b
);
141 friend MDiagArray2
<T
> operator - LTGT (const MDiagArray2
<T
>& a
);
146 #define INSTANTIATE_MDIAGARRAY_FRIENDS(T) \
147 template MDiagArray2<T>& operator += (MDiagArray2<T>& a, const MDiagArray2<T>& b); \
148 template MDiagArray2<T>& operator -= (MDiagArray2<T>& a, const MDiagArray2<T>& b); \
149 template MDiagArray2<T> operator * (const MDiagArray2<T>& a, const T& s); \
150 template MDiagArray2<T> operator / (const MDiagArray2<T>& a, const T& s); \
151 template MDiagArray2<T> operator * (const T& s, const MDiagArray2<T>& a); \
152 template MDiagArray2<T> operator + (const MDiagArray2<T>& a, const MDiagArray2<T>& b); \
153 template MDiagArray2<T> operator - (const MDiagArray2<T>& a, const MDiagArray2<T>& b); \
154 template MDiagArray2<T> product (const MDiagArray2<T>& a, const MDiagArray2<T>& b); \
155 template MDiagArray2<T> operator - (const MDiagArray2<T>& a);
160 ;;; Local Variables: ***