annotate src/tc-inlines.h @ 1217:8ec4c0c375a2

[project @ 1995-04-07 21:00:24 by jwe]
author jwe
date Fri, 07 Apr 1995 21:00:24 +0000
parents 83b59118ab1a
children 611d403c7f3d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
759
3fc1ccd5a9db [project @ 1994-10-02 15:34:26 by jwe]
jwe
parents: 744
diff changeset
1 // tc-inlines.h -*- C++ -*-
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
3
1009
dfe01093f657 [project @ 1995-01-04 04:05:12 by jwe]
jwe
parents: 768
diff changeset
4 Copyright (C) 1992, 1993, 1994, 1995 John W. Eaton
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
5
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
7
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
11 later version.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
12
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
16 for more details.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
17
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, write to the Free
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
20 Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
21
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
22 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
23
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
24 // Just a coupla more helper functions.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
25
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
26 static inline int
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
27 tree_to_mat_idx (double x)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
28 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
29 if (x > 0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
30 return ((int) (x + 0.5) - 1);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
31 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
32 return ((int) (x - 0.5) - 1);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
33 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
34
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
35 static inline int
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
36 range_max_check (int i, int imax)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
37 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
38 i++;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
39 if (i > imax)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
40 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
41 error ("matrix index = %d exceeds maximum dimension = %d", i, imax);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
42 return -1;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
43 }
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
44 return 0;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
45 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
46
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
47 static inline int
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
48 range_max_check (int i, int j, int nr, int nc)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
49 {
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
50 int status = 0;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
51 i++;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
52 if (i > nr)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
53 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
54 error ("matrix row index = %d exceeds maximum row dimension = %d",
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
55 i, nr);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
56 status = -1;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
57 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
58
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
59 j++;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
60 if (j > nc)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
61 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
62 error ("matrix column index = %d exceeds maximum column dimension = %d",
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
63 j, nc);
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
64 status = -1;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
65 }
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
66 return status;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
67 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
68
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
69 static inline int
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
70 indexed_assign_conforms (int lhs_nr, int lhs_nc, int rhs_nr, int rhs_nc)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
71 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
72 return (lhs_nr == rhs_nr && lhs_nc == rhs_nc);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
73 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
74
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
75 static inline int
212
6188aa8d1fec [project @ 1993-11-13 03:44:55 by jwe]
jwe
parents: 164
diff changeset
76 is_one_zero (const Range& r)
6188aa8d1fec [project @ 1993-11-13 03:44:55 by jwe]
jwe
parents: 164
diff changeset
77 {
6188aa8d1fec [project @ 1993-11-13 03:44:55 by jwe]
jwe
parents: 164
diff changeset
78 double b = r.base ();
6188aa8d1fec [project @ 1993-11-13 03:44:55 by jwe]
jwe
parents: 164
diff changeset
79 double l = r.limit ();
6188aa8d1fec [project @ 1993-11-13 03:44:55 by jwe]
jwe
parents: 164
diff changeset
80 return (r.nelem () == 2 && NINT (b) == 1 && NINT (l) == 0);
6188aa8d1fec [project @ 1993-11-13 03:44:55 by jwe]
jwe
parents: 164
diff changeset
81 }
6188aa8d1fec [project @ 1993-11-13 03:44:55 by jwe]
jwe
parents: 164
diff changeset
82
6188aa8d1fec [project @ 1993-11-13 03:44:55 by jwe]
jwe
parents: 164
diff changeset
83 static inline int
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
84 is_zero_one (const Range& r)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
85 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
86 double b = r.base ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
87 double l = r.limit ();
212
6188aa8d1fec [project @ 1993-11-13 03:44:55 by jwe]
jwe
parents: 164
diff changeset
88 return (r.nelem () == 2 && NINT (b) == 0 && NINT (l) == 1);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
89 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
90
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
91 static inline int
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
92 index_check (int i, char *rc)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
93 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
94 if (i < 0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
95 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
96 error ("invalid %s index = %d", rc, i+1);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
97 return -1;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
98 }
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
99 return 0;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
100 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
101
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
102 static inline int
212
6188aa8d1fec [project @ 1993-11-13 03:44:55 by jwe]
jwe
parents: 164
diff changeset
103 index_check (const Range& r, char *rc)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
104 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
105 if (r.nelem () < 1)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
106 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
107 error ("range invalid as %s index", rc);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
108 return -1;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
109 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
110
212
6188aa8d1fec [project @ 1993-11-13 03:44:55 by jwe]
jwe
parents: 164
diff changeset
111 int imin = tree_to_mat_idx (r.min ());
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
112
212
6188aa8d1fec [project @ 1993-11-13 03:44:55 by jwe]
jwe
parents: 164
diff changeset
113 if (imin < 0)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
114 {
212
6188aa8d1fec [project @ 1993-11-13 03:44:55 by jwe]
jwe
parents: 164
diff changeset
115 error ("invalid %s index = %d", rc, imin+1);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
116 return -1;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
117 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
118
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
119 return 0;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
120 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
121
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
122 static inline int
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
123 fortran_row (int i, int nr)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
124 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
125 int r;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
126 r = i % nr;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
127 if (r == 0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
128 r = nr;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
129 return r;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
130 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
131
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
132 static inline int
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
133 fortran_column (int i, int nr)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
134 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
135 int c;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
136 int r;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
137 r = fortran_row (i, nr);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
138 c = (i - r) / nr + 1;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
139 return c;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
140 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
141
744
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
142 // How about a few macros?
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
143
1206
83b59118ab1a [project @ 1995-04-04 02:09:11 by jwe]
jwe
parents: 1041
diff changeset
144 #ifndef TC_REP
744
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
145 #define TC_REP tree_constant::tree_constant_rep
1206
83b59118ab1a [project @ 1995-04-04 02:09:11 by jwe]
jwe
parents: 1041
diff changeset
146 #endif
744
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
147
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
148 #ifndef MAX
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
149 #define MAX(a,b) ((a) > (b) ? (a) : (b))
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
150 #endif
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
151
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
152 #ifndef MIN
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
153 #define MIN(a,b) ((a) < (b) ? (a) : (b))
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
154 #endif
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
155
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
156 #ifndef ABS
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
157 #define ABS(x) (((x) < 0) ? (-x) : (x))
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
158 #endif
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
159
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
160 // The following are used by some of the functions in the
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
161 // tree_constant_rep class that must deal with real and complex
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
162 // matrices. This was not done with overloaded or virtual functions
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
163 // from the Matrix class because there is no clean way to do that --
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
164 // the necessary functions (like elem) need to return values of
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
165 // different types...
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
166
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
167 // Given a tree_constant, and the names to be used for the real and
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
168 // complex matrix and their dimensions, declare a real or complex
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
169 // matrix, and initialize it from the tree_constant. Note that m, cm,
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
170 // nr, and nc must not be previously declared, and they must not be
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
171 // expressions. Since only one of the matrices will be defined after
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
172 // this macro is used, only one set of dimesions is declared.
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
173
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
174 // This macro only makes sense inside a friend or member function of
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
175 // the tree_constant_rep class
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
176
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
177 #define REP_RHS_MATRIX(tc,m,cm,nr,nc) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
178 int nr = 0; \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
179 int nc = 0; \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
180 Matrix m; \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
181 ComplexMatrix cm; \
1217
8ec4c0c375a2 [project @ 1995-04-07 21:00:24 by jwe]
jwe
parents: 1206
diff changeset
182 if ((tc).is_real_type ()) \
8ec4c0c375a2 [project @ 1995-04-07 21:00:24 by jwe]
jwe
parents: 1206
diff changeset
183 { \
8ec4c0c375a2 [project @ 1995-04-07 21:00:24 by jwe]
jwe
parents: 1206
diff changeset
184 m = (tc).matrix_value (); \
8ec4c0c375a2 [project @ 1995-04-07 21:00:24 by jwe]
jwe
parents: 1206
diff changeset
185 nr = (m).rows (); \
8ec4c0c375a2 [project @ 1995-04-07 21:00:24 by jwe]
jwe
parents: 1206
diff changeset
186 nc = (m).columns (); \
8ec4c0c375a2 [project @ 1995-04-07 21:00:24 by jwe]
jwe
parents: 1206
diff changeset
187 } \
8ec4c0c375a2 [project @ 1995-04-07 21:00:24 by jwe]
jwe
parents: 1206
diff changeset
188 else if ((tc).is_complex_type ()) \
744
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
189 { \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
190 cm = (tc).complex_matrix_value (); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
191 nr = (cm).rows (); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
192 nc = (cm).columns (); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
193 } \
1217
8ec4c0c375a2 [project @ 1995-04-07 21:00:24 by jwe]
jwe
parents: 1206
diff changeset
194 else \
744
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
195 { \
1217
8ec4c0c375a2 [project @ 1995-04-07 21:00:24 by jwe]
jwe
parents: 1206
diff changeset
196 panic_impossible (); \
744
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
197 } \
1217
8ec4c0c375a2 [project @ 1995-04-07 21:00:24 by jwe]
jwe
parents: 1206
diff changeset
198 if (error_state) \
8ec4c0c375a2 [project @ 1995-04-07 21:00:24 by jwe]
jwe
parents: 1206
diff changeset
199 return;
744
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
200
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
201 // Assign a real or complex value to a tree_constant.
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
202 //
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
203 // This macro only makes sense inside a friend or member function of
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
204 // the tree_constant_rep class.
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
205
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
206 #define REP_ELEM_ASSIGN(i,j,rval,cval,real_type) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
207 do \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
208 { \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
209 if (type_tag == TC_REP::matrix_constant) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
210 { \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
211 if (real_type) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
212 matrix->elem ((i), (j)) = (rval); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
213 else \
768
4b36f97e86cf [project @ 1994-10-05 21:39:23 by jwe]
jwe
parents: 759
diff changeset
214 panic_impossible (); \
744
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
215 } \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
216 else \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
217 { \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
218 if (real_type) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
219 complex_matrix->elem ((i), (j)) = (rval); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
220 else \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
221 complex_matrix->elem ((i), (j)) = (cval); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
222 } \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
223 } \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
224 while (0)
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
225
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
226 // Given a real and complex matrix and row and column dimensions,
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
227 // declare both and size one of them. Only one of the matrices should
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
228 // be used after this macro has been used.
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
229
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
230 // This macro only makes sense inside a friend or member function of
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
231 // the tree_constant_rep class.
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
232
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
233 #define CRMATRIX(m,cm,nr,nc) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
234 Matrix m; \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
235 ComplexMatrix cm; \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
236 if (type_tag == TC_REP::matrix_constant) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
237 (m).resize ((nr), (nc)); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
238 else if (type_tag == complex_matrix_constant) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
239 (cm).resize ((nr), (nc)); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
240 else \
768
4b36f97e86cf [project @ 1994-10-05 21:39:23 by jwe]
jwe
parents: 759
diff changeset
241 panic_impossible (); \
744
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
242
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
243 // Assign a real or complex matrix to a tree constant.
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
244
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
245 // This macro only makes sense inside a friend or member function of
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
246 // the tree_constant_rep class.
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
247
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
248 #define ASSIGN_CRMATRIX_TO(tc,m,cm) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
249 do \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
250 { \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
251 if (type_tag == matrix_constant) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
252 tc = tree_constant (m); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
253 else \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
254 tc = tree_constant (cm); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
255 } \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
256 while (0)
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
257
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
258 // Assign an element of this tree_constant_rep's real or complex
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
259 // matrix to another real or complex matrix.
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
260
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
261 // This macro only makes sense inside a friend or member function of
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
262 // the tree_constant_rep class.
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
263
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
264 #define CRMATRIX_ASSIGN_REP_ELEM(m,cm,i1,j1,i2,j2) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
265 do \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
266 { \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
267 if (type_tag == matrix_constant) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
268 (m).elem ((i1), (j1)) = matrix->elem ((i2), (j2)); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
269 else \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
270 (cm).elem ((i1), (j1)) = complex_matrix->elem ((i2), (j2)); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
271 } \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
272 while (0)
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
273
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
274 // Assign a value to an element of a real or complex matrix. Assumes
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
275 // that the lhs and rhs are either both real or both complex types.
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
276
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
277 #define CRMATRIX_ASSIGN_ELEM(m,cm,i,j,rval,cval,real_type) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
278 do \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
279 { \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
280 if (real_type) \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
281 (m).elem ((i), (j)) = (rval); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
282 else \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
283 (cm).elem ((i), (j)) = (cval); \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
284 } \
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
285 while (0)
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
286
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
287
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
288 // One more...
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
289
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
290 static inline int
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
291 valid_scalar_indices (const Octave_object& args)
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
292 {
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
293 int nargin = args.length ();
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
294
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
295 return ((nargin == 2
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
296 && args(1).valid_as_scalar_index ()
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
297 && args(0).valid_as_scalar_index ())
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
298 || (nargin == 1
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
299 && args(0).valid_as_scalar_index ()));
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
300 }
e86264a8682e [project @ 1994-09-30 14:56:50 by jwe]
jwe
parents: 581
diff changeset
301
1041
7dbf5bb19bde [project @ 1995-01-18 15:06:19 by jwe]
jwe
parents: 1009
diff changeset
302 static inline int
7dbf5bb19bde [project @ 1995-01-18 15:06:19 by jwe]
jwe
parents: 1009
diff changeset
303 valid_zero_index (const Octave_object& args)
7dbf5bb19bde [project @ 1995-01-18 15:06:19 by jwe]
jwe
parents: 1009
diff changeset
304 {
7dbf5bb19bde [project @ 1995-01-18 15:06:19 by jwe]
jwe
parents: 1009
diff changeset
305 int nargin = args.length ();
7dbf5bb19bde [project @ 1995-01-18 15:06:19 by jwe]
jwe
parents: 1009
diff changeset
306
7dbf5bb19bde [project @ 1995-01-18 15:06:19 by jwe]
jwe
parents: 1009
diff changeset
307 return ((nargin == 2
7dbf5bb19bde [project @ 1995-01-18 15:06:19 by jwe]
jwe
parents: 1009
diff changeset
308 && args(1).valid_as_zero_index ()
7dbf5bb19bde [project @ 1995-01-18 15:06:19 by jwe]
jwe
parents: 1009
diff changeset
309 && args(0).valid_as_zero_index ())
7dbf5bb19bde [project @ 1995-01-18 15:06:19 by jwe]
jwe
parents: 1009
diff changeset
310 || (nargin == 1
7dbf5bb19bde [project @ 1995-01-18 15:06:19 by jwe]
jwe
parents: 1009
diff changeset
311 && args(0).valid_as_zero_index ()));
7dbf5bb19bde [project @ 1995-01-18 15:06:19 by jwe]
jwe
parents: 1009
diff changeset
312 }
7dbf5bb19bde [project @ 1995-01-18 15:06:19 by jwe]
jwe
parents: 1009
diff changeset
313
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
314 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
315 ;;; Local Variables: ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
316 ;;; mode: C++ ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
317 ;;; page-delimiter: "^/\\*" ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
318 ;;; End: ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
319 */