annotate src/tc-rep.cc @ 636:fae2bd91c027

[project @ 1994-08-23 18:39:50 by jwe]
author jwe
date Tue, 23 Aug 1994 18:39:50 +0000
parents 9aef0a53eee7
children 36ba0576bd1b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
529
7ea224e713cd [project @ 1994-07-20 18:54:27 by jwe]
jwe
parents: 509
diff changeset
1 // tc-rep.cc -*- C++ -*-
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2 /*
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4 Copyright (C) 1992, 1993, 1994 John W. Eaton
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
7
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
11 later version.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
12
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
16 for more details.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
17
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, write to the Free
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
20 Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
21
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
22 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
23
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
24 #ifdef HAVE_CONFIG_H
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
25 #include "config.h"
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
26 #endif
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
27
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
28 #if defined (__GNUG__)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
29 #pragma implementation
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
30 #endif
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
31
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
32 #include <ctype.h>
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
33 #include <string.h>
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
34 #include <fstream.h>
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
35 #include <iostream.h>
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
36 #include <strstream.h>
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
37
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
38 #include "mx-base.h"
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
39 #include "Range.h"
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
40
504
be155b3d5a2f [project @ 1994-07-08 23:45:33 by jwe]
jwe
parents: 500
diff changeset
41 #include "arith-ops.h"
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
42 #include "variables.h"
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
43 #include "sysdep.h"
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
44 #include "error.h"
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
45 #include "gripes.h"
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
46 #include "user-prefs.h"
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
47 #include "utils.h"
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
48 #include "pager.h"
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
49 #include "pr-output.h"
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
50 #include "tree-const.h"
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
51 #include "idx-vector.h"
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
52
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
53 #include "tc-inlines.cc"
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
54
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
55 // How about a few macros?
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
56
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
57 #define TC_REP tree_constant::tree_constant_rep
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
58
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
59 #ifndef MAX
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
60 #define MAX(a,b) ((a) > (b) ? (a) : (b))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
61 #endif
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
62
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
63 #ifndef MIN
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
64 #define MIN(a,b) ((a) < (b) ? (a) : (b))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
65 #endif
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
66
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
67 #ifndef ABS
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
68 #define ABS(x) (((x) < 0) ? (-x) : (x))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
69 #endif
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
70
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
71 // The following are used by some of the functions in the
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
72 // tree_constant_rep class that must deal with real and complex
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
73 // matrices. This was not done with overloaded or virtual functions
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
74 // from the Matrix class because there is no clean way to do that --
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
75 // the necessary functions (like elem) need to return values of
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
76 // different types...
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
77
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
78 // Given a tree_constant, and the names to be used for the real and
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
79 // complex matrix and their dimensions, declare a real or complex
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
80 // matrix, and initialize it from the tree_constant. Note that m, cm,
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
81 // nr, and nc must not be previously declared, and they must not be
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
82 // expressions. Since only one of the matrices will be defined after
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
83 // this macro is used, only one set of dimesions is declared.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
84
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
85 // This macro only makes sense inside a friend or member function of
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
86 // the tree_constant_rep class
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
87
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
88 #define REP_RHS_MATRIX(tc,m,cm,nr,nc) \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
89 int nr = 0; \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
90 int nc = 0; \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
91 Matrix m; \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
92 ComplexMatrix cm; \
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
93 if ((tc).const_type () == TC_REP::complex_matrix_constant) \
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
94 { \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
95 cm = (tc).complex_matrix_value (); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
96 nr = (cm).rows (); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
97 nc = (cm).columns (); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
98 } \
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
99 else if ((tc).const_type () == TC_REP::matrix_constant) \
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
100 { \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
101 m = (tc).matrix_value (); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
102 nr = (m).rows (); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
103 nc = (m).columns (); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
104 } \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
105 else \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
106 abort ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
107
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
108 // Assign a real or complex value to a tree_constant.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
109 //
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
110 // This macro only makes sense inside a friend or member function of
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
111 // the tree_constant_rep class.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
112
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
113 #define REP_ELEM_ASSIGN(i,j,rval,cval,real_type) \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
114 do \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
115 { \
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
116 if (type_tag == TC_REP::matrix_constant) \
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
117 { \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
118 if (real_type) \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
119 matrix->elem ((i), (j)) = (rval); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
120 else \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
121 abort (); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
122 } \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
123 else \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
124 { \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
125 if (real_type) \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
126 complex_matrix->elem ((i), (j)) = (rval); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
127 else \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
128 complex_matrix->elem ((i), (j)) = (cval); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
129 } \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
130 } \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
131 while (0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
132
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
133 // Given a real and complex matrix and row and column dimensions,
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
134 // declare both and size one of them. Only one of the matrices should
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
135 // be used after this macro has been used.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
136
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
137 // This macro only makes sense inside a friend or member function of
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
138 // the tree_constant_rep class.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
139
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
140 #define CRMATRIX(m,cm,nr,nc) \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
141 Matrix m; \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
142 ComplexMatrix cm; \
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
143 if (type_tag == TC_REP::matrix_constant) \
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
144 (m).resize ((nr), (nc)); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
145 else if (type_tag == complex_matrix_constant) \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
146 (cm).resize ((nr), (nc)); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
147 else \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
148 abort (); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
149
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
150 // Assign a real or complex matrix to a tree constant.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
151
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
152 // This macro only makes sense inside a friend or member function of
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
153 // the tree_constant_rep class.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
154
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
155 #define ASSIGN_CRMATRIX_TO(tc,m,cm) \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
156 do \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
157 { \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
158 if (type_tag == matrix_constant) \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
159 tc = tree_constant (m); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
160 else \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
161 tc = tree_constant (cm); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
162 } \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
163 while (0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
164
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
165 // Assign an element of this tree_constant_rep's real or complex
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
166 // matrix to another real or complex matrix.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
167
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
168 // This macro only makes sense inside a friend or member function of
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
169 // the tree_constant_rep class.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
170
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
171 #define CRMATRIX_ASSIGN_REP_ELEM(m,cm,i1,j1,i2,j2) \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
172 do \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
173 { \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
174 if (type_tag == matrix_constant) \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
175 (m).elem ((i1), (j1)) = matrix->elem ((i2), (j2)); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
176 else \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
177 (cm).elem ((i1), (j1)) = complex_matrix->elem ((i2), (j2)); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
178 } \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
179 while (0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
180
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
181 // Assign a value to an element of a real or complex matrix. Assumes
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
182 // that the lhs and rhs are either both real or both complex types.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
183
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
184 #define CRMATRIX_ASSIGN_ELEM(m,cm,i,j,rval,cval,real_type) \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
185 do \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
186 { \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
187 if (real_type) \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
188 (m).elem ((i), (j)) = (rval); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
189 else \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
190 (cm).elem ((i), (j)) = (cval); \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
191 } \
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
192 while (0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
193
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
194
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
195 // A couple of handy helper functions.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
196
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
197 static int
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
198 any_element_less_than (const Matrix& a, double val)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
199 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
200 int nr = a.rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
201 int nc = a.columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
202 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
203 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
204 if (a.elem (i, j) < val)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
205 return 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
206 return 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
207 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
208
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
209 static int
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
210 any_element_greater_than (const Matrix& a, double val)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
211 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
212 int nr = a.rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
213 int nc = a.columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
214 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
215 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
216 if (a.elem (i, j) > val)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
217 return 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
218 return 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
219 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
220
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
221 static int
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
222 any_element_is_complex (const ComplexMatrix& a)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
223 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
224 int nr = a.rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
225 int nc = a.columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
226 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
227 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
228 if (imag (a.elem (i, j)) != 0.0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
229 return 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
230 return 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
231 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
232
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
233 static int
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
234 valid_scalar_indices (const Octave_object& args)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
235 {
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
236 int nargin = args.length ();
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
237
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
238 return ((nargin == 3
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
239 && args(2).valid_as_scalar_index ()
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
240 && args(1).valid_as_scalar_index ())
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
241 || (nargin == 2
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
242 && args(1).valid_as_scalar_index ()));
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
243 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
244
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
245 // Now, the classes.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
246
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
247 // The real representation of constants.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
248
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
249 TC_REP::tree_constant_rep (void)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
250 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
251 type_tag = unknown_constant;
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
252 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
253 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
254
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
255 TC_REP::tree_constant_rep (double d)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
256 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
257 scalar = d;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
258 type_tag = scalar_constant;
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
259 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
260 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
261
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
262 TC_REP::tree_constant_rep (const Matrix& m)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
263 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
264 if (m.rows () == 1 && m.columns () == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
265 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
266 scalar = m.elem (0, 0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
267 type_tag = scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
268 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
269 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
270 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
271 matrix = new Matrix (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
272 type_tag = matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
273 }
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
274 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
275 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
276
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
277 TC_REP::tree_constant_rep (const DiagMatrix& d)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
278 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
279 if (d.rows () == 1 && d.columns () == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
280 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
281 scalar = d.elem (0, 0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
282 type_tag = scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
283 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
284 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
285 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
286 matrix = new Matrix (d);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
287 type_tag = matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
288 }
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
289 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
290 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
291
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
292 TC_REP::tree_constant_rep (const RowVector& v, int prefer_column_vector)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
293 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
294 int len = v.capacity ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
295 if (len == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
296 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
297 scalar = v.elem (0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
298 type_tag = scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
299 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
300 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
301 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
302 int pcv = (prefer_column_vector < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
303 ? user_pref.prefer_column_vectors
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
304 : prefer_column_vector;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
305
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
306 if (pcv)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
307 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
308 Matrix m (len, 1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
309 for (int i = 0; i < len; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
310 m.elem (i, 0) = v.elem (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
311 matrix = new Matrix (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
312 type_tag = matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
313 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
314 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
315 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
316 Matrix m (1, len);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
317 for (int i = 0; i < len; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
318 m.elem (0, i) = v.elem (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
319 matrix = new Matrix (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
320 type_tag = matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
321 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
322 }
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
323 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
324 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
325
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
326 TC_REP::tree_constant_rep (const ColumnVector& v, int prefer_column_vector)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
327 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
328 int len = v.capacity ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
329 if (len == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
330 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
331 scalar = v.elem (0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
332 type_tag = scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
333 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
334 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
335 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
336 int pcv = (prefer_column_vector < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
337 ? user_pref.prefer_column_vectors
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
338 : prefer_column_vector;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
339
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
340 if (pcv)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
341 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
342 Matrix m (len, 1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
343 for (int i = 0; i < len; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
344 m.elem (i, 0) = v.elem (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
345 matrix = new Matrix (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
346 type_tag = matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
347 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
348 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
349 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
350 Matrix m (1, len);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
351 for (int i = 0; i < len; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
352 m.elem (0, i) = v.elem (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
353 matrix = new Matrix (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
354 type_tag = matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
355 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
356 }
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
357 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
358 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
359
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
360 TC_REP::tree_constant_rep (const Complex& c)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
361 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
362 complex_scalar = new Complex (c);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
363 type_tag = complex_scalar_constant;
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
364 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
365 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
366
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
367 TC_REP::tree_constant_rep (const ComplexMatrix& m)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
368 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
369 if (m.rows () == 1 && m.columns () == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
370 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
371 complex_scalar = new Complex (m.elem (0, 0));
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
372 type_tag = complex_scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
373 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
374 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
375 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
376 complex_matrix = new ComplexMatrix (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
377 type_tag = complex_matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
378 }
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
379 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
380 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
381
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
382 TC_REP::tree_constant_rep (const ComplexDiagMatrix& d)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
383 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
384 if (d.rows () == 1 && d.columns () == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
385 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
386 complex_scalar = new Complex (d.elem (0, 0));
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
387 type_tag = complex_scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
388 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
389 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
390 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
391 complex_matrix = new ComplexMatrix (d);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
392 type_tag = complex_matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
393 }
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
394 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
395 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
396
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
397 TC_REP::tree_constant_rep (const ComplexRowVector& v,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
398 int prefer_column_vector)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
399 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
400 int len = v.capacity ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
401 if (len == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
402 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
403 complex_scalar = new Complex (v.elem (0));
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
404 type_tag = complex_scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
405 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
406 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
407 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
408 int pcv = (prefer_column_vector < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
409 ? user_pref.prefer_column_vectors
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
410 : prefer_column_vector;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
411
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
412 if (pcv)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
413 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
414 ComplexMatrix m (len, 1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
415 for (int i = 0; i < len; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
416 m.elem (i, 0) = v.elem (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
417 complex_matrix = new ComplexMatrix (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
418 type_tag = complex_matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
419 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
420 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
421 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
422 ComplexMatrix m (1, len);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
423 for (int i = 0; i < len; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
424 m.elem (0, i) = v.elem (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
425 complex_matrix = new ComplexMatrix (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
426 type_tag = complex_matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
427 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
428 }
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
429 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
430 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
431
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
432 TC_REP::tree_constant_rep (const ComplexColumnVector& v, int
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
433 prefer_column_vector)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
434 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
435 int len = v.capacity ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
436 if (len == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
437 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
438 complex_scalar = new Complex (v.elem (0));
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
439 type_tag = complex_scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
440 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
441 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
442 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
443 int pcv = (prefer_column_vector < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
444 ? user_pref.prefer_column_vectors
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
445 : prefer_column_vector;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
446
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
447 if (pcv)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
448 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
449 ComplexMatrix m (len, 1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
450 for (int i = 0; i < len; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
451 m.elem (i, 0) = v.elem (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
452 complex_matrix = new ComplexMatrix (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
453 type_tag = complex_matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
454 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
455 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
456 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
457 ComplexMatrix m (1, len);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
458 for (int i = 0; i < len; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
459 m.elem (0, i) = v.elem (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
460 complex_matrix = new ComplexMatrix (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
461 type_tag = complex_matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
462 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
463 }
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
464 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
465 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
466
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
467 TC_REP::tree_constant_rep (const char *s)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
468 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
469 string = strsave (s);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
470 type_tag = string_constant;
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
471 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
472 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
473
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
474 TC_REP::tree_constant_rep (double b, double l, double i)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
475 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
476 range = new Range (b, l, i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
477 int nel = range->nelem ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
478 if (nel < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
479 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
480 delete range;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
481 type_tag = unknown_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
482 if (nel == -1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
483 ::error ("number of elements in range exceeds INT_MAX");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
484 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
485 ::error ("invalid range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
486 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
487 else if (nel > 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
488 type_tag = range_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
489 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
490 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
491 delete range;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
492 if (nel == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
493 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
494 scalar = b;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
495 type_tag = scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
496 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
497 else if (nel == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
498 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
499 matrix = new Matrix ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
500 type_tag = matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
501 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
502 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
503 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
504 }
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
505 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
506 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
507
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
508 TC_REP::tree_constant_rep (const Range& r)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
509 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
510 if (r.nelem () > 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
511 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
512 range = new Range (r);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
513 type_tag = range_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
514 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
515 else if (r.nelem () == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
516 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
517 scalar = r.base ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
518 type_tag = scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
519 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
520 else if (r.nelem () == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
521 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
522 matrix = new Matrix ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
523 type_tag = matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
524 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
525 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
526 panic_impossible ();
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
527
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
528 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
529 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
530
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
531 TC_REP::tree_constant_rep (TC_REP::constant_type t)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
532 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
533 assert (t == magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
534 type_tag = magic_colon;
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
535 orig_text = 0;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
536 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
537
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
538 TC_REP::tree_constant_rep (const tree_constant_rep& t)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
539 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
540 type_tag = t.type_tag;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
541
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
542 switch (t.type_tag)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
543 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
544 case unknown_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
545 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
546
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
547 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
548 scalar = t.scalar;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
549 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
550
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
551 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
552 matrix = new Matrix (*(t.matrix));
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
553 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
554
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
555 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
556 string = strsave (t.string);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
557 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
558
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
559 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
560 complex_matrix = new ComplexMatrix (*(t.complex_matrix));
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
561 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
562
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
563 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
564 complex_scalar = new Complex (*(t.complex_scalar));
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
565 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
566
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
567 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
568 range = new Range (*(t.range));
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
569 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
570
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
571 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
572 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
573
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
574 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
575 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
576 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
577 }
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
578
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
579 orig_text = strsave (t.orig_text);
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
580 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
581
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
582 TC_REP::~tree_constant_rep (void)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
583 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
584 switch (type_tag)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
585 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
586 case unknown_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
587 case scalar_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
588 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
589 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
590
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
591 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
592 delete matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
593 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
594
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
595 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
596 delete complex_scalar;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
597 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
598
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
599 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
600 delete complex_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
601 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
602
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
603 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
604 delete [] string;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
605 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
606
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
607 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
608 delete range;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
609 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
610
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
611 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
612 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
613 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
614 }
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
615
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
616 delete [] orig_text;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
617 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
618
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
619 #if defined (MDEBUG)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
620 void *
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
621 TC_REP::operator new (size_t size)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
622 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
623 tree_constant_rep *p = ::new tree_constant_rep;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
624 cerr << "TC_REP::new(): " << p << "\n";
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
625 return p;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
626 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
627
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
628 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
629 TC_REP::operator delete (void *p, size_t size)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
630 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
631 cerr << "TC_REP::delete(): " << p << "\n";
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
632 ::delete p;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
633 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
634 #endif
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
635
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
636 int
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
637 TC_REP::rows (void) const
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
638 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
639 int retval = -1;
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
640
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
641 switch (type_tag)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
642 {
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
643 case scalar_constant:
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
644 case complex_scalar_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
645 retval = 1;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
646 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
647
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
648 case string_constant:
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
649 case range_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
650 retval = (columns () > 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
651 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
652
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
653 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
654 retval = matrix->rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
655 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
656
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
657 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
658 retval = complex_matrix->rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
659 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
660
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
661 case magic_colon:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
662 ::error ("invalid use of colon operator");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
663 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
664
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
665 case unknown_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
666 retval = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
667 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
668
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
669 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
670 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
671 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
672 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
673
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
674 return retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
675 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
676
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
677 int
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
678 TC_REP::columns (void) const
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
679 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
680 int retval = -1;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
681
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
682 switch (type_tag)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
683 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
684 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
685 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
686 retval = 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
687 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
688
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
689 case matrix_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
690 retval = matrix->columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
691 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
692
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
693 case complex_matrix_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
694 retval = complex_matrix->columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
695 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
696
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
697 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
698 retval = strlen (string);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
699 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
700
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
701 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
702 retval = range->nelem ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
703 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
704
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
705 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
706 ::error ("invalid use of colon operator");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
707 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
708
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
709 case unknown_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
710 retval = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
711 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
712
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
713 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
714 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
715 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
716 }
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
717
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
718 return retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
719 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
720
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
721 tree_constant
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
722 TC_REP::all (void) const
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
723 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
724 if (type_tag == string_constant || type_tag == range_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
725 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
726 tree_constant tmp = make_numeric ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
727 return tmp.all ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
728 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
729
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
730 tree_constant retval;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
731
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
732 switch (type_tag)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
733 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
734 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
735 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
736 double status = (scalar != 0.0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
737 retval = tree_constant (status);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
738 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
739 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
740
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
741 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
742 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
743 Matrix m = matrix->all ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
744 retval = tree_constant (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
745 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
746 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
747
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
748 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
749 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
750 double status = (*complex_scalar != 0.0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
751 retval = tree_constant (status);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
752 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
753 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
754
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
755 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
756 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
757 Matrix m = complex_matrix->all ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
758 retval = tree_constant (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
759 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
760 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
761
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
762 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
763 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
764 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
765 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
766 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
767 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
768 }
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
769
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
770 return retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
771 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
772
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
773 tree_constant
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
774 TC_REP::any (void) const
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
775 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
776 if (type_tag == string_constant || type_tag == range_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
777 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
778 tree_constant tmp = make_numeric ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
779 return tmp.any ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
780 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
781
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
782 tree_constant retval;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
783
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
784 switch (type_tag)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
785 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
786 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
787 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
788 double status = (scalar != 0.0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
789 retval = tree_constant (status);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
790 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
791 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
792
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
793 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
794 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
795 Matrix m = matrix->any ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
796 retval = tree_constant (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
797 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
798 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
799
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
800 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
801 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
802 double status = (*complex_scalar != 0.0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
803 retval = tree_constant (status);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
804 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
805 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
806
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
807 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
808 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
809 Matrix m = complex_matrix->any ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
810 retval = tree_constant (m);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
811 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
812 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
813
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
814 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
815 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
816 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
817 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
818 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
819 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
820 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
821
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
822 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
823 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
824
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
825 int
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
826 TC_REP::valid_as_scalar_index (void) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
827 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
828 return (type_tag == magic_colon
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
829 || (type_tag == scalar_constant && NINT (scalar) == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
830 || (type_tag == range_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
831 && range->nelem () == 1 && NINT (range->base ()) == 1));
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
832 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
833
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
834 int
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
835 TC_REP::is_true (void) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
836 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
837 if (type_tag == string_constant || type_tag == range_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
838 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
839 tree_constant tmp = make_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
840 return tmp.is_true ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
841 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
842
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
843 int retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
844
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
845 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
846 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
847 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
848 retval = (scalar != 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
849 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
850
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
851 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
852 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
853 Matrix m = (matrix->all ()) . all ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
854 retval = (m.rows () == 1
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
855 && m.columns () == 1
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
856 && m.elem (0, 0) != 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
857 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
858 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
859
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
860 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
861 retval = (*complex_scalar != 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
862 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
863
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
864 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
865 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
866 Matrix m = (complex_matrix->all ()) . all ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
867 retval = (m.rows () == 1
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
868 && m.columns () == 1
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
869 && m.elem (0, 0) != 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
870 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
871 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
872
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
873 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
874 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
875 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
876 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
877 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
878 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
879 }
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
880
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
881 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
882 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
883
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
884 static void
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
885 warn_implicit_conversion (const char *from, const char *to)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
886 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
887 warning ("implicit conversion from %s to %s", from, to);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
888 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
889
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
890 double
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
891 TC_REP::double_value (int force_string_conversion) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
892 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
893 double retval = octave_NaN;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
894
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
895 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
896 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
897 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
898 retval = scalar;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
899 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
900
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
901 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
902 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
903 if (user_pref.do_fortran_indexing && rows () > 0 && columns () > 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
904 retval = matrix->elem (0, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
905 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
906 gripe_invalid_conversion ("real matrix", "real scalar");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
907 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
908 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
909
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
910 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
911 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
912 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
913 int flag = user_pref.ok_to_lose_imaginary_part;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
914
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
915 if (flag < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
916 warn_implicit_conversion ("complex scalar", "real scalar");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
917
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
918 if (flag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
919 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
920 if (type_tag == complex_scalar_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
921 retval = ::real (*complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
922 else if (type_tag == complex_matrix_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
923 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
924 if (user_pref.do_fortran_indexing
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
925 && rows () > 0 && columns () > 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
926 retval = ::real (complex_matrix->elem (0, 0));
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
927 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
928 gripe_invalid_conversion ("complex matrix", "real scalar");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
929 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
930 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
931 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
932 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
933 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
934 gripe_invalid_conversion ("complex scalar", "real scalar");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
935 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
936 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
937
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
938 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
939 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
940 int flag = force_string_conversion;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
941 if (! flag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
942 flag = user_pref.implicit_str_to_num_ok;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
943
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
944 if (flag < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
945 warn_implicit_conversion ("string", "real scalar");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
946
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
947 int len = strlen (string);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
948 if (flag && (len == 1 || (len > 1 && user_pref.do_fortran_indexing)))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
949 retval = toascii ((int) string[0]);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
950 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
951 gripe_invalid_conversion ("string", "real scalar");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
952 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
953 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
954
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
955 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
956 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
957 int nel = range->nelem ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
958 if (nel == 1 || (nel > 1 && user_pref.do_fortran_indexing))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
959 retval = range->base ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
960 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
961 gripe_invalid_conversion ("range", "real scalar");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
962 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
963 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
964
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
965 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
966 gripe_invalid_conversion (type_as_string (), "real scalar");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
967 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
968 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
969
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
970 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
971 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
972
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
973 Matrix
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
974 TC_REP::matrix_value (int force_string_conversion) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
975 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
976 Matrix retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
977
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
978 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
979 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
980 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
981 retval = Matrix (1, 1, scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
982 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
983
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
984 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
985 retval = *matrix;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
986 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
987
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
988 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
989 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
990 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
991 int flag = user_pref.ok_to_lose_imaginary_part;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
992 if (flag < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
993 warn_implicit_conversion ("complex matrix", "real matrix");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
994
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
995 if (flag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
996 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
997 if (type_tag == complex_scalar_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
998 retval = Matrix (1, 1, ::real (*complex_scalar));
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
999 else if (type_tag == complex_matrix_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1000 retval = ::real (*complex_matrix);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1001 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1002 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1003 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1004 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1005 gripe_invalid_conversion ("complex matrix", "real matrix");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1006 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1007 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1008
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1009 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1010 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1011 int flag = force_string_conversion;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1012 if (! flag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1013 flag = user_pref.implicit_str_to_num_ok;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1014
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1015 if (flag < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1016 warn_implicit_conversion ("string", "real matrix");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1017
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1018 if (flag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1019 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1020 int len = strlen (string);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1021
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1022 retval.resize (1, len);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1023
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1024 if (len > 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1025 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1026 for (int i = 0; i < len; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1027 retval.elem (0, i) = toascii ((int) string[i]);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1028 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1029 else if (len == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1030 retval.elem (0, 0) = toascii ((int) string[0]);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1031 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1032 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1033 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1034 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1035 gripe_invalid_conversion ("string", "real matrix");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1036 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1037 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1038
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1039 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1040 retval = range->matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1041 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1042
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1043 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1044 gripe_invalid_conversion (type_as_string (), "real matrix");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1045 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1046 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1047
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1048 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1049 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1050
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1051 Complex
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1052 TC_REP::complex_value (int force_string_conversion) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1053 {
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 631
diff changeset
1054 Complex retval (octave_NaN, octave_NaN);
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1055
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1056 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1057 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1058 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1059 retval = *complex_scalar;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1060 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1061
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1062 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1063 retval = scalar;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1064 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1065
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1066 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1067 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1068 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1069 if (user_pref.do_fortran_indexing && rows () > 0 && columns () > 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1070 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1071 if (type_tag == complex_matrix_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1072 retval = complex_matrix->elem (0, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1073 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1074 retval = matrix->elem (0, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1075 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1076 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1077 gripe_invalid_conversion ("real matrix", "real scalar");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1078 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1079 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1080
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1081 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1082 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1083 int flag = force_string_conversion;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1084 if (! flag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1085 flag = user_pref.implicit_str_to_num_ok;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1086
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1087 if (flag < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1088 warn_implicit_conversion ("string", "complex scalar");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1089
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1090 int len = strlen (string);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1091 if (flag && (len == 1 || (len > 1 && user_pref.do_fortran_indexing)))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1092 retval = toascii ((int) string[0]);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1093 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1094 gripe_invalid_conversion ("string", "complex scalar");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1095 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1096 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1097
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1098 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1099 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1100 int nel = range->nelem ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1101 if (nel == 1 || (nel > 1 && user_pref.do_fortran_indexing))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1102 retval = range->base ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1103 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1104 gripe_invalid_conversion ("range", "complex scalar");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1105 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1106 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1107
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1108 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1109 gripe_invalid_conversion (type_as_string (), "complex scalar");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1110 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1111 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1112
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1113 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1114 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1115
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1116 ComplexMatrix
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1117 TC_REP::complex_matrix_value (int force_string_conversion) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1118 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1119 ComplexMatrix retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1120
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1121 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1122 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1123 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1124 retval = ComplexMatrix (1, 1, Complex (scalar));
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1125 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1126
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1127 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1128 retval = ComplexMatrix (1, 1, *complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1129 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1130
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1131 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1132 retval = ComplexMatrix (*matrix);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1133 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1134
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1135 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1136 retval = *complex_matrix;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1137 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1138
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1139 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1140 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1141 int flag = force_string_conversion;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1142 if (! flag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1143 flag = user_pref.implicit_str_to_num_ok;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1144
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1145 if (flag < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1146 warn_implicit_conversion ("string", "complex matrix");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1147
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1148 if (flag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1149 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1150 int len = strlen (string);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1151
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1152 retval.resize (1, len);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1153
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1154 if (len > 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1155 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1156 for (int i = 0; i < len; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1157 retval.elem (0, i) = toascii ((int) string[i]);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1158 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1159 else if (len == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1160 retval.elem (0, 0) = toascii ((int) string[0]);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1161 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1162 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1163 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1164 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1165 gripe_invalid_conversion ("string", "real matrix");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1166 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1167 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1168
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1169 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1170 retval = range->matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1171 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1172
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1173 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1174 gripe_invalid_conversion (type_as_string (), "complex matrix");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1175 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1176 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1177
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1178 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1179 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1180
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1181 char *
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1182 TC_REP::string_value (void) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1183 {
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 631
diff changeset
1184 if (type_tag == string_constant)
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 631
diff changeset
1185 return string;
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 631
diff changeset
1186 else
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 631
diff changeset
1187 {
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 631
diff changeset
1188 gripe_invalid_conversion (type_as_string (), "string");
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 631
diff changeset
1189 return 0;
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 631
diff changeset
1190 }
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1191 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1192
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1193 Range
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1194 TC_REP::range_value (void) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1195 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1196 assert (type_tag == range_constant);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1197 return *range;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1198 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1199
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1200 // This could be made more efficient by doing all the work here rather
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1201 // than relying on matrix_value() to do any possible type conversions.
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1202
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1203 ColumnVector
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1204 TC_REP::vector_value (int force_string_conversion,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1205 int force_vector_conversion) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1206 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1207 ColumnVector retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1208
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1209 Matrix m = matrix_value (force_string_conversion);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1210
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1211 if (error_state)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1212 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1213
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1214 int nr = m.rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1215 int nc = m.columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1216 if (nr == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1217 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1218 retval.resize (nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1219 for (int i = 0; i < nc; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1220 retval.elem (i) = m (0, i);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1221 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1222 else if (nc == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1223 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1224 retval.resize (nr);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1225 for (int i = 0; i < nr; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1226 retval.elem (i) = m.elem (i, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1227 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1228 else if (nr > 0 && nc > 0
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1229 && (user_pref.do_fortran_indexing || force_vector_conversion))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1230 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1231 retval.resize (nr * nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1232 int k = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1233 for (int j = 0; j < nc; j++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1234 for (int i = 0; i < nr; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1235 retval.elem (k++) = m.elem (i, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1236 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1237 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1238 gripe_invalid_conversion ("real matrix", "real vector");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1239
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1240 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1241 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1242
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1243 // This could be made more efficient by doing all the work here rather
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1244 // than relying on complex_matrix_value() to do any possible type
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1245 // conversions.
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1246
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1247 ComplexColumnVector
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1248 TC_REP::complex_vector_value (int force_string_conversion,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1249 int force_vector_conversion) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1250 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1251 ComplexColumnVector retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1252
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1253 ComplexMatrix m = complex_matrix_value (force_string_conversion);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1254
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1255 if (error_state)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1256 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1257
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1258 int nr = m.rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1259 int nc = m.columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1260 if (nr == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1261 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1262 retval.resize (nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1263 for (int i = 0; i < nc; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1264 retval.elem (i) = m (0, i);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1265 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1266 else if (nc == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1267 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1268 retval.resize (nr);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1269 for (int i = 0; i < nr; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1270 retval.elem (i) = m.elem (i, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1271 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1272 else if (nr > 0 && nc > 0
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1273 && (user_pref.do_fortran_indexing || force_vector_conversion))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1274 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1275 retval.resize (nr * nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1276 int k = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1277 for (int j = 0; j < nc; j++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1278 for (int i = 0; i < nr; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1279 retval.elem (k++) = m.elem (i, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1280 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1281 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1282 gripe_invalid_conversion ("complex matrix", "complex vector");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1283
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1284 return retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1285 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1286
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1287 tree_constant
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1288 TC_REP::convert_to_str (void)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1289 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1290 tree_constant retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1291
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1292 switch (type_tag)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1293 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1294 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1295 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1296 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1297 double d = double_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1298 int i = NINT (d);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1299 // Warn about out of range conversions?
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1300 char s[2];
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1301 s[0] = (char) i;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1302 s[1] = '\0';
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1303 retval = tree_constant (s);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1304 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1305 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1306
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1307 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1308 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1309 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1310 ColumnVector v = vector_value ();
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1311 int len = v.length ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1312 if (len == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1313 ::error ("can only convert vectors and scalars to strings");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1314 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1315 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1316 char *s = new char [len+1];
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1317 s[len] = '\0';
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1318 for (int i = 0; i < len; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1319 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1320 double d = v.elem (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1321 int ival = NINT (d);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1322 // Warn about out of range conversions?
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1323 s[i] = (char) ival;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1324 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1325 retval = tree_constant (s);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1326 delete [] s;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1327 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1328 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1329 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1330
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1331 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1332 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1333 Range r = range_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1334 double b = r.base ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1335 double incr = r.inc ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1336 int nel = r.nelem ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1337 char *s = new char [nel+1];
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1338 s[nel] = '\0';
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1339 for (int i = 0; i < nel; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1340 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1341 double d = b + i * incr;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1342 int ival = NINT (d);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1343 // Warn about out of range conversions?
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1344 s[i] = (char) ival;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1345 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1346 retval = tree_constant (s);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1347 delete [] s;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1348 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1349 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1350
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1351 case string_constant:
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
1352 retval = string;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1353 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1354
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1355 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1356 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1357 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1358 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1359 }
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1360
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1361 return retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1362 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1363
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1364 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1365 TC_REP::convert_to_row_or_column_vector (void)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1366 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1367 assert (type_tag == matrix_constant || type_tag == complex_matrix_constant);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1368
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1369 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1370 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1371
509
7a3b6bb00c6e [project @ 1994-07-11 18:36:12 by jwe]
jwe
parents: 506
diff changeset
1372 if (nr == 1 || nc == 1)
7a3b6bb00c6e [project @ 1994-07-11 18:36:12 by jwe]
jwe
parents: 506
diff changeset
1373 return;
7a3b6bb00c6e [project @ 1994-07-11 18:36:12 by jwe]
jwe
parents: 506
diff changeset
1374
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1375 int len = nr * nc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1376
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1377 assert (len > 0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1378
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1379 int new_nr = 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1380 int new_nc = 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1381
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1382 if (user_pref.prefer_column_vectors)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1383 new_nr = len;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1384 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1385 new_nc = len;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1386
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1387 if (type_tag == matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1388 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1389 Matrix *m = new Matrix (new_nr, new_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1390
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1391 double *cop_out = matrix->fortran_vec ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1392
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1393 for (int i = 0; i < len; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1394 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1395 if (new_nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1396 m->elem (0, i) = *cop_out++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1397 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1398 m->elem (i, 0) = *cop_out++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1399 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1400
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1401 delete matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1402 matrix = m;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1403 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1404 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1405 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1406 ComplexMatrix *cm = new ComplexMatrix (new_nr, new_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1407
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1408 Complex *cop_out = complex_matrix->fortran_vec ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1409
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1410 for (int i = 0; i < len; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1411 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1412 if (new_nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1413 cm->elem (0, i) = *cop_out++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1414 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1415 cm->elem (i, 0) = *cop_out++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1416 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1417
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1418 delete complex_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1419 complex_matrix = cm;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1420 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1421 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1422
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1423 void
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1424 TC_REP::force_numeric (int force_str_conv)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1425 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1426 switch (type_tag)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1427 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1428 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1429 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1430 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1431 case complex_matrix_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1432 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1433
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1434 case string_constant:
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1435 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1436 if (! force_str_conv && ! user_pref.implicit_str_to_num_ok)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1437 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1438 ::error ("failed to convert `%s' to a numeric type --", string);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1439 ::error ("default conversion turned off");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1440 // Abort!
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1441 jump_to_top_level ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1442 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1443
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1444 int len = strlen (string);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1445 if (len > 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1446 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1447 type_tag = matrix_constant;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1448 Matrix *tm = new Matrix (1, len);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1449 for (int i = 0; i < len; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1450 tm->elem (0, i) = toascii ((int) string[i]);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1451 matrix = tm;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1452 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1453 else if (len == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1454 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1455 type_tag = scalar_constant;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1456 scalar = toascii ((int) string[0]);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1457 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1458 else if (len == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1459 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1460 type_tag = matrix_constant;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1461 matrix = new Matrix (0, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1462 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1463 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1464 panic_impossible ();
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1465 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1466 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1467
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1468 case range_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1469 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1470 int len = range->nelem ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1471 if (len > 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1472 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1473 type_tag = matrix_constant;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1474 Matrix *tm = new Matrix (1, len);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1475 double b = range->base ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1476 double increment = range->inc ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1477 for (int i = 0; i < len; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1478 tm->elem (0, i) = b + i * increment;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1479 matrix = tm;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1480 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1481 else if (len == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1482 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1483 type_tag = scalar_constant;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1484 scalar = range->base ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1485 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1486 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1487 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1488
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1489 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1490 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1491 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1492 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1493 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1494 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1495
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1496 tree_constant
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1497 TC_REP::make_numeric (int force_str_conv) const
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1498 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1499 tree_constant retval;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1500
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1501 switch (type_tag)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1502 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1503 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1504 retval = tree_constant (scalar);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1505 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1506
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1507 case matrix_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1508 retval = tree_constant (*matrix);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1509 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1510
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1511 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1512 retval = tree_constant (*complex_scalar);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1513 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1514
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1515 case complex_matrix_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1516 retval = tree_constant (*complex_matrix);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1517 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1518
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1519 case string_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1520 retval = tree_constant (string);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1521 retval.force_numeric (force_str_conv);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1522 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1523
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1524 case range_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1525 retval = tree_constant (*range);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1526 retval.force_numeric (force_str_conv);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1527 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1528
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1529 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1530 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1531 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1532 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1533 }
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1534
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1535 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1536 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1537
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1538 void
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1539 TC_REP::bump_value (tree_expression::type etype)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1540 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1541 switch (etype)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1542 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1543 case tree_expression::increment:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1544 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1545 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1546 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1547 scalar++;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1548 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1549
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1550 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1551 *matrix = *matrix + 1.0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1552 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1553
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1554 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1555 *complex_scalar = *complex_scalar + 1.0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1556 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1557
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1558 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1559 *complex_matrix = *complex_matrix + 1.0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1560 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1561
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1562 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1563 ::error ("string++ and ++string not implemented yet, ok?");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1564 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1565
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1566 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1567 range->set_base (range->base () + 1.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1568 range->set_limit (range->limit () + 1.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1569 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1570
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1571 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1572 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1573 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1574 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1575 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1576 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1577
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1578 case tree_expression::decrement:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1579 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1580 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1581 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1582 scalar--;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1583 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1584
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1585 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1586 *matrix = *matrix - 1.0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1587 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1588
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1589 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1590 ::error ("string-- and -- string not implemented yet, ok?");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1591 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1592
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1593 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1594 range->set_base (range->base () - 1.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1595 range->set_limit (range->limit () - 1.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1596 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1597
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1598 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1599 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1600 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1601 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1602 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1603 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1604
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1605 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1606 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1607 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1608 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1609 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1610
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1611 void
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1612 TC_REP::resize (int i, int j)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1613 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1614 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1615 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1616 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1617 matrix->resize (i, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1618 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1619
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1620 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1621 complex_matrix->resize (i, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1622 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1623
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1624 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1625 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1626 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1627 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1628 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1629
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1630 void
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1631 TC_REP::resize (int i, int j, double val)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1632 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1633 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1634 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1635 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1636 matrix->resize (i, j, val);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1637 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1638
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1639 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1640 complex_matrix->resize (i, j, val);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1641 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1642
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1643 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1644 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1645 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1646 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1647 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1648
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1649 void
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1650 TC_REP::maybe_resize (int i, int j)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1651 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1652 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1653 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1654
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1655 i++;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1656 j++;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1657
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1658 assert (i > 0 && j > 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1659
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1660 if (i > nr || j > nc)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1661 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1662 if (user_pref.resize_on_range_error)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1663 resize (MAX (i, nr), MAX (j, nc), 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1664 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1665 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1666 if (i > nr)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1667 ::error ("row index = %d exceeds max row dimension = %d", i, nr);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1668
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1669 if (j > nc)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1670 ::error ("column index = %d exceeds max column dimension = %d",
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1671 j, nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1672 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1673 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1674 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1675
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1676 void
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1677 TC_REP::maybe_resize (int i, force_orient f_orient)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1678 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1679 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1680 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1681
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1682 i++;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1683
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1684 assert (i >= 0 && (nr <= 1 || nc <= 1));
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1685
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1686 // This function never reduces the size of a vector, and all vectors
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1687 // have dimensions of at least 0x0. If i is 0, it is either because
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1688 // a vector has been indexed with a vector of all zeros (in which case
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1689 // the index vector is empty and nothing will happen) or a vector has
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1690 // been indexed with 0 (an error which will be caught elsewhere).
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1691 if (i == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1692 return;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1693
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1694 if (nr <= 1 && nc <= 1 && i >= 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1695 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1696 if (user_pref.resize_on_range_error)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1697 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1698 if (f_orient == row_orient)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1699 resize (1, i, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1700 else if (f_orient == column_orient)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1701 resize (i, 1, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1702 else if (user_pref.prefer_column_vectors)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1703 resize (i, 1, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1704 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1705 resize (1, i, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1706 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1707 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1708 ::error ("matrix index = %d exceeds max dimension = %d", i, nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1709 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1710 else if (nr == 1 && i > nc)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1711 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1712 if (user_pref.resize_on_range_error)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1713 resize (1, i, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1714 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1715 ::error ("matrix index = %d exceeds max dimension = %d", i, nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1716 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1717 else if (nc == 1 && i > nr)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1718 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1719 if (user_pref.resize_on_range_error)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1720 resize (i, 1, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1721 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1722 ::error ("matrix index = %d exceeds max dimension = ", i, nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1723 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1724 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1725
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1726 void
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1727 TC_REP::stash_original_text (char *s)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1728 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1729 orig_text = strsave (s);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1730 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1731
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1732 // Indexing functions.
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1733
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1734 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1735 TC_REP::do_index (const Octave_object& args)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1736 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1737 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1738
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1739 if (error_state)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1740 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1741
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1742 if (rows () == 0 || columns () == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1743 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1744 ::error ("attempt to index empty matrix");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1745 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1746 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1747
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1748 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1749 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1750 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1751 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1752 retval = do_scalar_index (args);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1753 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1754
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1755 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1756 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1757 retval = do_matrix_index (args);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1758 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1759
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1760 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1761 gripe_string_invalid ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1762 // retval = do_string_index (args);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1763 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1764
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1765 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1766 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1767 // This isn\'t great, but it\'s easier than implementing a lot of
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1768 // range indexing functions.
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1769 force_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1770 assert (type_tag != magic_colon && type_tag != range_constant);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1771 retval = do_index (args);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1772 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1773
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1774 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1775 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1776 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1777 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1778
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1779 return retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1780 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1781
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1782 tree_constant
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1783 TC_REP::do_scalar_index (const Octave_object& args) const
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1784 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1785 tree_constant retval;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1786
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1787 if (valid_scalar_indices (args))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1788 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1789 if (type_tag == scalar_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1790 retval = scalar;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1791 else if (type_tag == complex_scalar_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1792 retval = *complex_scalar;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1793 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1794 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1795
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1796 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1797 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1798 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1799 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1800 int rows = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1801 int cols = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1802
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1803 int nargin = args.length ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1804
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1805 switch (nargin)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1806 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1807 case 3:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1808 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1809 if (args(2).is_matrix_type ())
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1810 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1811 Matrix mj = args(2).matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1812
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1813 idx_vector j (mj, user_pref.do_fortran_indexing, "");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1814 if (! j)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1815 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1816
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1817 int len = j.length ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1818 if (len == j.ones_count ())
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1819 cols = len;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1820 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1821 else if (args(2).const_type () == magic_colon
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1822 || (args(2).is_scalar_type ()
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1823 && NINT (args(2).double_value ()) == 1))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1824 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1825 cols = 1;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1826 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1827 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1828 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1829 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1830
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1831 // Fall through...
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1832
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1833 case 2:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1834 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1835 if (args(1).is_matrix_type ())
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1836 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1837 Matrix mi = args(1).matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1838
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1839 idx_vector i (mi, user_pref.do_fortran_indexing, "");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1840 if (! i)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1841 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1842
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1843 int len = i.length ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1844 if (len == i.ones_count ())
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1845 rows = len;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1846 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1847 else if (args(1).const_type () == magic_colon
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1848 || (args(1).is_scalar_type ()
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1849 && NINT (args(1).double_value ()) == 1))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1850 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1851 rows = 1;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1852 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1853 else if (args(1).is_scalar_type ()
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1854 && NINT (args(1).double_value ()) == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1855 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1856 return Matrix ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1857 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1858 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1859 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1860
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1861 if (cols == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1862 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1863 if (user_pref.prefer_column_vectors)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1864 cols = 1;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1865 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1866 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1867 cols = rows;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1868 rows = 1;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1869 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1870 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1871
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1872 if (type_tag == scalar_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1873 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1874 return Matrix (rows, cols, scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1875 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1876 else if (type_tag == complex_scalar_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1877 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1878 return ComplexMatrix (rows, cols, *complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1879 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1880 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1881 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1882 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1883 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1884
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1885 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1886 ::error ("invalid number of arguments for scalar type");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1887 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1888 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1889 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1890 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1891
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1892 ::error ("index invalid or out of range for scalar type");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1893 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1894 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1895
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1896 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1897 TC_REP::do_matrix_index (const Octave_object& args) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1898 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1899 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1900
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1901 int nargin = args.length ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1902
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1903 switch (nargin)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1904 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1905 case 2:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1906 if (args.length () <= 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1907 ::error ("matrix index is null");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1908 else if (args(1).is_undefined ())
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1909 ::error ("matrix index is a null expression");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1910 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1911 retval = do_matrix_index (args(1));
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1912 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1913
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1914 case 3:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1915 if (args.length () <= 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1916 ::error ("matrix indices are null");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1917 else if (args(1).is_undefined ())
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1918 ::error ("first matrix index is a null expression");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1919 else if (args(2).is_undefined ())
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1920 ::error ("second matrix index is a null expression");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1921 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1922 retval = do_matrix_index (args(1), args(2));
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1923 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1924
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1925 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1926 ::error ("too many indices for matrix expression");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1927 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1928 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1929
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1930 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1931 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1932
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1933 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1934 TC_REP::do_matrix_index (const tree_constant& i_arg) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1935 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1936 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1937
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1938 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1939 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1940
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1941 if (user_pref.do_fortran_indexing)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1942 retval = fortran_style_matrix_index (i_arg);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1943 else if (nr <= 1 || nc <= 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1944 retval = do_vector_index (i_arg);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1945 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1946 ::error ("single index only valid for row or column vector");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1947
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1948 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1949 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1950
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1951 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1952 TC_REP::do_matrix_index (const tree_constant& i_arg,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1953 const tree_constant& j_arg) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1954 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1955 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1956
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1957 tree_constant tmp_i = i_arg.make_numeric_or_range_or_magic ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1958
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1959 TC_REP::constant_type itype = tmp_i.const_type ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1960
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1961 switch (itype)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1962 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1963 case complex_scalar_constant:
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1964 case scalar_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1965 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1966 int i = tree_to_mat_idx (tmp_i.double_value ());
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1967 if (index_check (i, "row") < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1968 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1969 retval = do_matrix_index (i, j_arg);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1970 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1971 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1972
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1973 case complex_matrix_constant:
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1974 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1975 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1976 Matrix mi = tmp_i.matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1977 idx_vector iv (mi, user_pref.do_fortran_indexing, "row", rows ());
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1978 if (! iv)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1979 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1980
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1981 if (iv.length () == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1982 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1983 Matrix mtmp;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1984 retval = tree_constant (mtmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1985 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1986 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1987 retval = do_matrix_index (iv, j_arg);
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1988 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1989 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1990
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1991 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1992 gripe_string_invalid ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1993 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1994
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1995 case range_constant:
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
1996 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1997 Range ri = tmp_i.range_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1998 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
1999 if (nr == 2 && is_zero_one (ri))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2000 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2001 retval = do_matrix_index (1, j_arg);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2002 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2003 else if (nr == 2 && is_one_zero (ri))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2004 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2005 retval = do_matrix_index (0, j_arg);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2006 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2007 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2008 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2009 if (index_check (ri, "row") < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2010 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2011 retval = do_matrix_index (ri, j_arg);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2012 }
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2013 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2014 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2015
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2016 case magic_colon:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2017 retval = do_matrix_index (magic_colon, j_arg);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2018 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2019
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2020 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2021 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2022 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2023 }
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2024
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2025 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2026 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2027
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2028 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2029 TC_REP::do_matrix_index (TC_REP::constant_type mci) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2030 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2031 assert (mci == magic_colon);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2032
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2033 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2034 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2035 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2036 int size = nr * nc;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2037 if (size > 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2038 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2039 CRMATRIX (m, cm, size, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2040 int idx = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2041 for (int j = 0; j < nc; j++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2042 for (int i = 0; i < nr; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2043 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2044 CRMATRIX_ASSIGN_REP_ELEM (m, cm, idx, 0, i, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2045 idx++;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2046 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2047 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2048 }
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2049 return retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2050 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2051
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2052 tree_constant
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2053 TC_REP::fortran_style_matrix_index (const tree_constant& i_arg) const
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2054 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2055 tree_constant retval;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2056
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2057 tree_constant tmp_i = i_arg.make_numeric_or_magic ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2058
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2059 TC_REP::constant_type itype = tmp_i.const_type ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2060
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2061 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2062 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2063
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2064 switch (itype)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2065 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2066 case complex_scalar_constant:
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2067 case scalar_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2068 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2069 int i = NINT (tmp_i.double_value ());
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2070 int ii = fortran_row (i, nr) - 1;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2071 int jj = fortran_column (i, nr) - 1;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2072 if (index_check (i-1, "") < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2073 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2074 if (range_max_check (i-1, nr * nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2075 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2076 retval = do_matrix_index (ii, jj);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2077 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2078 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2079
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2080 case complex_matrix_constant:
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2081 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2082 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2083 Matrix mi = tmp_i.matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2084 if (mi.rows () == 0 || mi.columns () == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2085 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2086 Matrix mtmp;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2087 retval = tree_constant (mtmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2088 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2089 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2090 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2091 // Yes, we really do want to call this with mi.
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2092 retval = fortran_style_matrix_index (mi);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2093 }
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2094 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2095 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2096
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2097 case string_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2098 gripe_string_invalid ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2099 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2100
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2101 case range_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2102 gripe_range_invalid ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2103 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2104
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2105 case magic_colon:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2106 retval = do_matrix_index (magic_colon);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2107 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2108
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2109 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2110 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2111 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2112 }
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2113
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2114 return retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2115 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2116
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2117 tree_constant
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2118 TC_REP::fortran_style_matrix_index (const Matrix& mi) const
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2119 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2120 assert (is_matrix_type ());
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2121
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2122 tree_constant retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2123
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2124 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2125 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2126
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2127 int len = nr * nc;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2128
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2129 int index_nr = mi.rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2130 int index_nc = mi.columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2131
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2132 if (index_nr >= 1 && index_nc >= 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2133 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2134 const double *cop_out = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2135 const Complex *c_cop_out = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2136 int real_type = type_tag == matrix_constant;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2137 if (real_type)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2138 cop_out = matrix->data ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2139 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2140 c_cop_out = complex_matrix->data ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2141
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2142 const double *cop_out_index = mi.data ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2143
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2144 idx_vector iv (mi, 1, "", len);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2145 if (! iv)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2146 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2147
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2148 int result_size = iv.length ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2149
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2150 if (nc == 1 || (nr != 1 && iv.one_zero_only ()))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2151 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2152 CRMATRIX (m, cm, result_size, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2153
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2154 for (int i = 0; i < result_size; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2155 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2156 int idx = iv.elem (i);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2157 CRMATRIX_ASSIGN_ELEM (m, cm, i, 0, cop_out [idx],
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2158 c_cop_out [idx], real_type);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2159 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2160
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2161 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2162 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2163 else if (nr == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2164 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2165 CRMATRIX (m, cm, 1, result_size);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2166
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2167 for (int i = 0; i < result_size; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2168 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2169 int idx = iv.elem (i);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2170 CRMATRIX_ASSIGN_ELEM (m, cm, 0, i, cop_out [idx],
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2171 c_cop_out [idx], real_type);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2172 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2173
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2174 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2175 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2176 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2177 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2178 CRMATRIX (m, cm, index_nr, index_nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2179
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2180 for (int j = 0; j < index_nc; j++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2181 for (int i = 0; i < index_nr; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2182 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2183 double tmp = *cop_out_index++;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2184 int idx = tree_to_mat_idx (tmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2185 CRMATRIX_ASSIGN_ELEM (m, cm, i, j, cop_out [idx],
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2186 c_cop_out [idx], real_type);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2187 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2188
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2189 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2190 }
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2191 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2192 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2193 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2194 if (index_nr == 0 || index_nc == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2195 ::error ("empty matrix invalid as index");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2196 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2197 ::error ("invalid matrix index");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2198 return tree_constant ();
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2199 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2200
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2201 return retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2202 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2203
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2204 tree_constant
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2205 TC_REP::do_vector_index (const tree_constant& i_arg) const
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2206 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2207 tree_constant retval;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2208
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2209 tree_constant tmp_i = i_arg.make_numeric_or_range_or_magic ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2210
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2211 TC_REP::constant_type itype = tmp_i.const_type ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2212
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2213 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2214 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2215
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2216 int len = MAX (nr, nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2217
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2218 assert ((nr == 1 || nc == 1) && ! user_pref.do_fortran_indexing);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2219
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2220 int swap_indices = (nr == 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2221
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2222 switch (itype)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2223 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2224 case complex_scalar_constant:
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2225 case scalar_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2226 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2227 int i = tree_to_mat_idx (tmp_i.double_value ());
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2228 if (index_check (i, "") < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2229 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2230 if (swap_indices)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2231 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2232 if (range_max_check (i, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2233 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2234 retval = do_matrix_index (0, i);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2235 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2236 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2237 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2238 if (range_max_check (i, nr) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2239 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2240 retval = do_matrix_index (i, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2241 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2242 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2243 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2244
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2245 case complex_matrix_constant:
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2246 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2247 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2248 Matrix mi = tmp_i.matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2249 if (mi.rows () == 0 || mi.columns () == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2250 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2251 Matrix mtmp;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2252 retval = tree_constant (mtmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2253 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2254 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2255 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2256 idx_vector iv (mi, user_pref.do_fortran_indexing, "", len);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2257 if (! iv)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2258 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2259
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2260 if (swap_indices)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2261 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2262 if (range_max_check (iv.max (), nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2263 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2264 retval = do_matrix_index (0, iv);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2265 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2266 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2267 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2268 if (range_max_check (iv.max (), nr) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2269 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2270 retval = do_matrix_index (iv, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2271 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2272 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2273 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2274 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2275
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2276 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2277 gripe_string_invalid ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2278 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2279
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2280 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2281 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2282 Range ri = tmp_i.range_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2283 if (len == 2 && is_zero_one (ri))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2284 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2285 if (swap_indices)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2286 retval = do_matrix_index (0, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2287 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2288 retval = do_matrix_index (1, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2289 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2290 else if (len == 2 && is_one_zero (ri))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2291 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2292 retval = do_matrix_index (0, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2293 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2294 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2295 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2296 if (index_check (ri, "") < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2297 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2298 if (swap_indices)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2299 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2300 if (range_max_check (tree_to_mat_idx (ri.max ()), nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2301 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2302 retval = do_matrix_index (0, ri);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2303 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2304 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2305 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2306 if (range_max_check (tree_to_mat_idx (ri.max ()), nr) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2307 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2308 retval = do_matrix_index (ri, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2309 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2310 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2311 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2312 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2313
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2314 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2315 if (swap_indices)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2316 retval = do_matrix_index (0, magic_colon);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2317 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2318 retval = do_matrix_index (magic_colon, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2319 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2320
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2321 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2322 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2323 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2324 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2325
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2326 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2327 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2328
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2329 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2330 TC_REP::do_matrix_index (int i, const tree_constant& j_arg) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2331 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2332 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2333
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2334 tree_constant tmp_j = j_arg.make_numeric_or_range_or_magic ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2335
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2336 TC_REP::constant_type jtype = tmp_j.const_type ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2337
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2338 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2339 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2340
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2341 switch (jtype)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2342 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2343 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2344 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2345 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2346 int j = tree_to_mat_idx (tmp_j.double_value ());
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2347 if (index_check (j, "column") < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2348 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2349 if (range_max_check (i, j, nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2350 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2351 retval = do_matrix_index (i, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2352 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2353 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2354
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2355 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2356 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2357 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2358 Matrix mj = tmp_j.matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2359 idx_vector jv (mj, user_pref.do_fortran_indexing, "column", nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2360 if (! jv)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2361 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2362
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2363 if (jv.length () == 0)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2364 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2365 Matrix mtmp;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2366 retval = tree_constant (mtmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2367 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2368 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2369 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2370 if (range_max_check (i, jv.max (), nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2371 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2372 retval = do_matrix_index (i, jv);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2373 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2374 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2375 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2376
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2377 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2378 gripe_string_invalid ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2379 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2380
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2381 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2382 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2383 Range rj = tmp_j.range_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2384 if (nc == 2 && is_zero_one (rj))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2385 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2386 retval = do_matrix_index (i, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2387 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2388 else if (nc == 2 && is_one_zero (rj))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2389 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2390 retval = do_matrix_index (i, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2391 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2392 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2393 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2394 if (index_check (rj, "column") < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2395 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2396 if (range_max_check (i, tree_to_mat_idx (rj.max ()), nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2397 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2398 retval = do_matrix_index (i, rj);
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2399 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2400 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2401 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2402
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2403 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2404 if (range_max_check (i, 0, nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2405 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2406 retval = do_matrix_index (i, magic_colon);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2407 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2408
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2409 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2410 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2411 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2412 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2413
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2414 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2415 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2416
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2417 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2418 TC_REP::do_matrix_index (const idx_vector& iv,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2419 const tree_constant& j_arg) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2420 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2421 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2422
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2423 tree_constant tmp_j = j_arg.make_numeric_or_range_or_magic ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2424
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2425 TC_REP::constant_type jtype = tmp_j.const_type ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2426
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2427 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2428 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2429
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2430 switch (jtype)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2431 {
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2432 case complex_scalar_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2433 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2434 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2435 int j = tree_to_mat_idx (tmp_j.double_value ());
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2436 if (index_check (j, "column") < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2437 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2438 if (range_max_check (iv.max (), j, nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2439 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2440 retval = do_matrix_index (iv, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2441 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2442 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2443
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2444 case complex_matrix_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2445 case matrix_constant:
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2446 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2447 Matrix mj = tmp_j.matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2448 idx_vector jv (mj, user_pref.do_fortran_indexing, "column", nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2449 if (! jv)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2450 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2451
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2452 if (jv.length () == 0)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2453 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2454 Matrix mtmp;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2455 retval = tree_constant (mtmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2456 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2457 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2458 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2459 if (range_max_check (iv.max (), jv.max (), nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2460 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2461 retval = do_matrix_index (iv, jv);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2462 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2463 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2464 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2465
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2466 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2467 gripe_string_invalid ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2468 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2469
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2470 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2471 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2472 Range rj = tmp_j.range_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2473 if (nc == 2 && is_zero_one (rj))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2474 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2475 retval = do_matrix_index (iv, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2476 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2477 else if (nc == 2 && is_one_zero (rj))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2478 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2479 retval = do_matrix_index (iv, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2480 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2481 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2482 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2483 if (index_check (rj, "column") < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2484 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2485 if (range_max_check (iv.max (), tree_to_mat_idx (rj.max ()),
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2486 nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2487 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2488 retval = do_matrix_index (iv, rj);
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2489 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2490 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2491 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2492
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2493 case magic_colon:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2494 if (range_max_check (iv.max (), 0, nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2495 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2496 retval = do_matrix_index (iv, magic_colon);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2497 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2498
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2499 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2500 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2501 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2502 }
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2503
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2504 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2505 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2506
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2507 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2508 TC_REP::do_matrix_index (const Range& ri,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2509 const tree_constant& j_arg) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2510 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2511 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2512
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2513 tree_constant tmp_j = j_arg.make_numeric_or_range_or_magic ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2514
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2515 TC_REP::constant_type jtype = tmp_j.const_type ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2516
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2517 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2518 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2519
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2520 switch (jtype)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2521 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2522 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2523 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2524 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2525 int j = tree_to_mat_idx (tmp_j.double_value ());
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2526 if (index_check (j, "column") < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2527 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2528 if (range_max_check (tree_to_mat_idx (ri.max ()), j, nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2529 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2530 retval = do_matrix_index (ri, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2531 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2532 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2533
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2534 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2535 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2536 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2537 Matrix mj = tmp_j.matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2538 idx_vector jv (mj, user_pref.do_fortran_indexing, "column", nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2539 if (! jv)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2540 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2541
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2542 if (jv.length () == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2543 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2544 Matrix mtmp;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2545 retval = tree_constant (mtmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2546 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2547 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2548 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2549 if (range_max_check (tree_to_mat_idx (ri.max ()),
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2550 jv.max (), nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2551 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2552 retval = do_matrix_index (ri, jv);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2553 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2554 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2555 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2556
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2557 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2558 gripe_string_invalid ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2559 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2560
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2561 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2562 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2563 Range rj = tmp_j.range_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2564 if (nc == 2 && is_zero_one (rj))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2565 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2566 retval = do_matrix_index (ri, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2567 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2568 else if (nc == 2 && is_one_zero (rj))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2569 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2570 retval = do_matrix_index (ri, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2571 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2572 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2573 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2574 if (index_check (rj, "column") < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2575 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2576 if (range_max_check (tree_to_mat_idx (ri.max ()),
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2577 tree_to_mat_idx (rj.max ()), nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2578 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2579 retval = do_matrix_index (ri, rj);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2580 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2581 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2582 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2583
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2584 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2585 retval = do_matrix_index (ri, magic_colon);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2586 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2587
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2588 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2589 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2590 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2591 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2592
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2593 return retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2594 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2595
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2596 tree_constant
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2597 TC_REP::do_matrix_index (TC_REP::constant_type mci,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2598 const tree_constant& j_arg) const
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2599 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2600 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2601
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2602 tree_constant tmp_j = j_arg.make_numeric_or_range_or_magic ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2603
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2604 TC_REP::constant_type jtype = tmp_j.const_type ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2605
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2606 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2607 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2608
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2609 switch (jtype)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2610 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2611 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2612 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2613 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2614 int j = tree_to_mat_idx (tmp_j.double_value ());
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2615 if (index_check (j, "column") < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2616 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2617 if (range_max_check (0, j, nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2618 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2619 retval = do_matrix_index (magic_colon, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2620 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2621 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2622
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2623 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2624 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2625 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2626 Matrix mj = tmp_j.matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2627 idx_vector jv (mj, user_pref.do_fortran_indexing, "column", nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2628 if (! jv)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2629 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2630
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2631 if (jv.length () == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2632 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2633 Matrix mtmp;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2634 retval = tree_constant (mtmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2635 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2636 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2637 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2638 if (range_max_check (0, jv.max (), nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2639 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2640 retval = do_matrix_index (magic_colon, jv);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2641 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2642 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2643 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2644
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2645 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2646 gripe_string_invalid ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2647 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2648
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2649 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2650 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2651 Range rj = tmp_j.range_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2652 if (nc == 2 && is_zero_one (rj))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2653 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2654 retval = do_matrix_index (magic_colon, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2655 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2656 else if (nc == 2 && is_one_zero (rj))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2657 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2658 retval = do_matrix_index (magic_colon, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2659 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2660 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2661 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2662 if (index_check (rj, "column") < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2663 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2664 if (range_max_check (0, tree_to_mat_idx (rj.max ()), nr, nc) < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2665 return tree_constant ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2666 retval = do_matrix_index (magic_colon, rj);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2667 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2668 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2669 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2670
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2671 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2672 retval = do_matrix_index (magic_colon, magic_colon);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2673 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2674
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2675 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2676 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2677 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2678 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2679
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2680 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2681 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2682
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2683 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2684 TC_REP::do_matrix_index (int i, int j) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2685 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2686 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2687
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2688 if (type_tag == matrix_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2689 retval = tree_constant (matrix->elem (i, j));
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2690 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2691 retval = tree_constant (complex_matrix->elem (i, j));
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2692
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2693 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2694 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2695
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2696 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2697 TC_REP::do_matrix_index (int i, const idx_vector& jv) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2698 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2699 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2700
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2701 int jlen = jv.capacity ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2702
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2703 CRMATRIX (m, cm, 1, jlen);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2704
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2705 for (int j = 0; j < jlen; j++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2706 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2707 int col = jv.elem (j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2708 CRMATRIX_ASSIGN_REP_ELEM (m, cm, 0, j, i, col);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2709 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2710 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2711
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2712 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2713 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2714
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2715 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2716 TC_REP::do_matrix_index (int i, const Range& rj) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2717 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2718 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2719
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2720 int jlen = rj.nelem ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2721
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2722 CRMATRIX (m, cm, 1, jlen);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2723
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2724 double b = rj.base ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2725 double increment = rj.inc ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2726 for (int j = 0; j < jlen; j++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2727 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2728 double tmp = b + j * increment;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2729 int col = tree_to_mat_idx (tmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2730 CRMATRIX_ASSIGN_REP_ELEM (m, cm, 0, j, i, col);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2731 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2732
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2733 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2734
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2735 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2736 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2737
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2738 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2739 TC_REP::do_matrix_index (int i, TC_REP::constant_type mcj) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2740 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2741 assert (mcj == magic_colon);
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2742
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2743 tree_constant retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2744
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2745 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2746
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2747 CRMATRIX (m, cm, 1, nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2748
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2749 for (int j = 0; j < nc; j++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2750 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2751 CRMATRIX_ASSIGN_REP_ELEM (m, cm, 0, j, i, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2752 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2753
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2754 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2755
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2756 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2757 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2758
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2759 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2760 TC_REP::do_matrix_index (const idx_vector& iv, int j) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2761 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2762 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2763
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2764 int ilen = iv.capacity ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2765
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2766 CRMATRIX (m, cm, ilen, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2767
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2768 for (int i = 0; i < ilen; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2769 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2770 int row = iv.elem (i);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2771 CRMATRIX_ASSIGN_REP_ELEM (m, cm, i, 0, row, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2772 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2773
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2774 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2775
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2776 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2777 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2778
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2779 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2780 TC_REP::do_matrix_index (const idx_vector& iv, const idx_vector& jv) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2781 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2782 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2783
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2784 int ilen = iv.capacity ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2785 int jlen = jv.capacity ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2786
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2787 CRMATRIX (m, cm, ilen, jlen);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2788
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2789 for (int i = 0; i < ilen; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2790 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2791 int row = iv.elem (i);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2792 for (int j = 0; j < jlen; j++)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2793 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2794 int col = jv.elem (j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2795 CRMATRIX_ASSIGN_REP_ELEM (m, cm, i, j, row, col);
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2796 }
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2797 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2798
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2799 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2800
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2801 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2802 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2803
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2804 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2805 TC_REP::do_matrix_index (const idx_vector& iv, const Range& rj) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2806 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2807 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2808
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2809 int ilen = iv.capacity ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2810 int jlen = rj.nelem ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2811
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2812 CRMATRIX (m, cm, ilen, jlen);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2813
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2814 double b = rj.base ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2815 double increment = rj.inc ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2816
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2817 for (int i = 0; i < ilen; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2818 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2819 int row = iv.elem (i);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2820 for (int j = 0; j < jlen; j++)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2821 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2822 double tmp = b + j * increment;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2823 int col = tree_to_mat_idx (tmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2824 CRMATRIX_ASSIGN_REP_ELEM (m, cm, i, j, row, col);
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2825 }
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2826 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2827
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2828 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2829
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2830 return retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2831 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2832
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2833 tree_constant
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2834 TC_REP::do_matrix_index (const idx_vector& iv,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2835 TC_REP::constant_type mcj) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2836 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2837 assert (mcj == magic_colon);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2838
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2839 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2840
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2841 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2842 int ilen = iv.capacity ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2843
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2844 CRMATRIX (m, cm, ilen, nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2845
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2846 for (int j = 0; j < nc; j++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2847 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2848 for (int i = 0; i < ilen; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2849 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2850 int row = iv.elem (i);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2851 CRMATRIX_ASSIGN_REP_ELEM (m, cm, i, j, row, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2852 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2853 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2854
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2855 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2856
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2857 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2858 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2859
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2860 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2861 TC_REP::do_matrix_index (const Range& ri, int j) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2862 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2863 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2864
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2865 int ilen = ri.nelem ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2866
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2867 CRMATRIX (m, cm, ilen, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2868
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2869 double b = ri.base ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2870 double increment = ri.inc ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2871 for (int i = 0; i < ilen; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2872 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2873 double tmp = b + i * increment;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2874 int row = tree_to_mat_idx (tmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2875 CRMATRIX_ASSIGN_REP_ELEM (m, cm, i, 0, row, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2876 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2877
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2878 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2879
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2880 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2881 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2882
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2883 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2884 TC_REP::do_matrix_index (const Range& ri,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2885 const idx_vector& jv) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2886 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2887 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2888
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2889 int ilen = ri.nelem ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2890 int jlen = jv.capacity ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2891
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2892 CRMATRIX (m, cm, ilen, jlen);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2893
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2894 double b = ri.base ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2895 double increment = ri.inc ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2896 for (int i = 0; i < ilen; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2897 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2898 double tmp = b + i * increment;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2899 int row = tree_to_mat_idx (tmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2900 for (int j = 0; j < jlen; j++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2901 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2902 int col = jv.elem (j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2903 CRMATRIX_ASSIGN_REP_ELEM (m, cm, i, j, row, col);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2904 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2905 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2906
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2907 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2908
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2909 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2910 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2911
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2912 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2913 TC_REP::do_matrix_index (const Range& ri, const Range& rj) const
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2914 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2915 tree_constant retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
2916
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2917 int ilen = ri.nelem ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2918 int jlen = rj.nelem ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2919
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2920 CRMATRIX (m, cm, ilen, jlen);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2921
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2922 double ib = ri.base ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2923 double iinc = ri.inc ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2924 double jb = rj.base ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2925 double jinc = rj.inc ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2926
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2927 for (int i = 0; i < ilen; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2928 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2929 double itmp = ib + i * iinc;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2930 int row = tree_to_mat_idx (itmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2931 for (int j = 0; j < jlen; j++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2932 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2933 double jtmp = jb + j * jinc;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2934 int col = tree_to_mat_idx (jtmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2935
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2936 CRMATRIX_ASSIGN_REP_ELEM (m, cm, i, j, row, col);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2937 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2938 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2939
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2940 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2941
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2942 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2943 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2944
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2945 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2946 TC_REP::do_matrix_index (const Range& ri, TC_REP::constant_type mcj) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2947 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2948 assert (mcj == magic_colon);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2949
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2950 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2951
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2952 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2953
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2954 int ilen = ri.nelem ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2955
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2956 CRMATRIX (m, cm, ilen, nc);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2957
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2958 double ib = ri.base ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2959 double iinc = ri.inc ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2960
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2961 for (int i = 0; i < ilen; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2962 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2963 double itmp = ib + i * iinc;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2964 int row = tree_to_mat_idx (itmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2965 for (int j = 0; j < nc; j++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2966 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2967 CRMATRIX_ASSIGN_REP_ELEM (m, cm, i, j, row, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2968 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2969 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2970
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2971 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2972
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2973 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2974 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2975
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2976 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2977 TC_REP::do_matrix_index (TC_REP::constant_type mci, int j) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2978 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2979 assert (mci == magic_colon);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2980
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2981 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2982
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2983 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2984
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2985 CRMATRIX (m, cm, nr, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2986
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2987 for (int i = 0; i < nr; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2988 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2989 CRMATRIX_ASSIGN_REP_ELEM (m, cm, i, 0, i, j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2990 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2991
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2992 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2993
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2994 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2995 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2996
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2997 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2998 TC_REP::do_matrix_index (TC_REP::constant_type mci,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
2999 const idx_vector& jv) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3000 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3001 assert (mci == magic_colon);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3002
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3003 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3004
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3005 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3006 int jlen = jv.capacity ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3007
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3008 CRMATRIX (m, cm, nr, jlen);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3009
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3010 for (int i = 0; i < nr; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3011 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3012 for (int j = 0; j < jlen; j++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3013 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3014 int col = jv.elem (j);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3015 CRMATRIX_ASSIGN_REP_ELEM (m, cm, i, j, i, col);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3016 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3017 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3018
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3019 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3020
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3021 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3022 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3023
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3024 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3025 TC_REP::do_matrix_index (TC_REP::constant_type mci, const Range& rj) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3026 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3027 assert (mci == magic_colon);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3028
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3029 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3030
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3031 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3032 int jlen = rj.nelem ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3033
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3034 CRMATRIX (m, cm, nr, jlen);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3035
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3036 double jb = rj.base ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3037 double jinc = rj.inc ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3038
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3039 for (int j = 0; j < jlen; j++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3040 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3041 double jtmp = jb + j * jinc;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3042 int col = tree_to_mat_idx (jtmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3043 for (int i = 0; i < nr; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3044 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3045 CRMATRIX_ASSIGN_REP_ELEM (m, cm, i, j, i, col);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3046 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3047 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3048
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3049 ASSIGN_CRMATRIX_TO (retval, m, cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3050
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3051 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3052 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3053
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3054 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3055 TC_REP::do_matrix_index (TC_REP::constant_type mci,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3056 TC_REP::constant_type mcj) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3057 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3058 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3059
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3060 assert (mci == magic_colon && mcj == magic_colon);
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3061
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3062 switch (type_tag)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3063 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3064 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3065 retval = *complex_scalar;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3066 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3067
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3068 case scalar_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3069 retval = scalar;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3070 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3071 case complex_matrix_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3072
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3073 retval = *complex_matrix;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3074 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3075
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3076 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3077 retval = *matrix;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3078 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3079
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3080 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3081 retval = *range;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3082 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3083
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3084 case string_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3085 retval = string;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3086 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3087
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3088 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3089 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3090 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3091 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3092 }
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3093
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3094 return retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3095 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3096
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3097 // Top-level tree-constant function that handles assignments. Only
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3098 // decide if the left-hand side is currently a scalar or a matrix and
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3099 // hand off to other functions to do the real work.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3100
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3101 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3102 TC_REP::assign (const tree_constant& rhs, const Octave_object& args)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3103 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3104 tree_constant rhs_tmp = rhs.make_numeric ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3105
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3106 // This is easier than actually handling assignments to strings.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3107 // An assignment to a range will normally require a conversion to a
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3108 // vector since it will normally destroy the equally-spaced property
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3109 // of the range elements.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3110
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3111 if (type_tag == string_constant || type_tag == range_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3112 force_numeric ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3113
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3114 switch (type_tag)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3115 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3116 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3117 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3118 case unknown_constant:
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 504
diff changeset
3119 do_scalar_assignment (rhs_tmp, args);
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3120 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3121
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3122 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3123 case matrix_constant:
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 504
diff changeset
3124 do_matrix_assignment (rhs_tmp, args);
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3125 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3126
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3127 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3128 ::error ("invalid assignment to string type");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3129 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3130
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3131 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3132 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3133 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3134 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3135 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3136 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3137 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3138
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3139 // Assignments to scalars. If resize_on_range_error is true,
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3140 // this can convert the left-hand side to a matrix.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3141
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3142 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3143 TC_REP::do_scalar_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3144 const Octave_object& args)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3145 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3146 assert (type_tag == unknown_constant
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3147 || type_tag == scalar_constant
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3148 || type_tag == complex_scalar_constant);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3149
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 504
diff changeset
3150 int nargin = args.length ();
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 504
diff changeset
3151
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3152 if ((rhs.is_scalar_type () || rhs.is_zero_by_zero ())
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 504
diff changeset
3153 && valid_scalar_indices (args))
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3154 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3155 if (rhs.is_zero_by_zero ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3156 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3157 if (type_tag == complex_scalar_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3158 delete complex_scalar;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3159
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3160 matrix = new Matrix (0, 0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3161 type_tag = matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3162 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3163 else if (type_tag == unknown_constant || type_tag == scalar_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3164 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3165 if (rhs.const_type () == scalar_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3166 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3167 scalar = rhs.double_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3168 type_tag = scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3169 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3170 else if (rhs.const_type () == complex_scalar_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3171 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3172 complex_scalar = new Complex (rhs.complex_value ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3173 type_tag = complex_scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3174 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3175 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3176 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3177 ::error ("invalid assignment to scalar");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3178 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3179 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3180 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3181 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3182 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3183 if (rhs.const_type () == scalar_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3184 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3185 delete complex_scalar;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3186 scalar = rhs.double_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3187 type_tag = scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3188 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3189 else if (rhs.const_type () == complex_scalar_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3190 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3191 *complex_scalar = rhs.complex_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3192 type_tag = complex_scalar_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3193 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3194 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3195 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3196 ::error ("invalid assignment to scalar");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3197 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3198 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3199 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3200 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3201 else if (user_pref.resize_on_range_error)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3202 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3203 TC_REP::constant_type old_type_tag = type_tag;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3204
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3205 if (type_tag == complex_scalar_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3206 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3207 Complex *old_complex = complex_scalar;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3208 complex_matrix = new ComplexMatrix (1, 1, *complex_scalar);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3209 type_tag = complex_matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3210 delete old_complex;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3211 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3212 else if (type_tag == scalar_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3213 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3214 matrix = new Matrix (1, 1, scalar);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3215 type_tag = matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3216 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3217
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3218 // If there is an error, the call to do_matrix_assignment should not
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3219 // destroy the current value.
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3220 // TC_REP::eval(int) will take
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3221 // care of converting single element matrices back to scalars.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3222
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 504
diff changeset
3223 do_matrix_assignment (rhs, args);
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3224
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3225 // I don't think there's any other way to revert back to unknown
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3226 // constant types, so here it is.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3227
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3228 if (old_type_tag == unknown_constant && error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3229 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3230 if (type_tag == matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3231 delete matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3232 else if (type_tag == complex_matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3233 delete complex_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3234
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3235 type_tag = unknown_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3236 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3237 }
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 504
diff changeset
3238 else if (nargin > 3 || nargin < 2)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3239 ::error ("invalid index expression for scalar type");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3240 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3241 ::error ("index invalid or out of range for scalar type");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3242 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3243
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3244 // Assignments to matrices (and vectors).
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3245 //
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3246 // For compatibility with Matlab, we allow assignment of an empty
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3247 // matrix to an expression with empty indices to do nothing.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3248
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3249 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3250 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3251 const Octave_object& args)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3252 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3253 assert (type_tag == unknown_constant
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3254 || type_tag == matrix_constant
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3255 || type_tag == complex_matrix_constant);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3256
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3257 if (type_tag == matrix_constant && rhs.is_complex_type ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3258 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3259 Matrix *old_matrix = matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3260 complex_matrix = new ComplexMatrix (*matrix);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3261 type_tag = complex_matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3262 delete old_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3263 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3264 else if (type_tag == unknown_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3265 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3266 if (rhs.is_complex_type ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3267 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3268 complex_matrix = new ComplexMatrix ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3269 type_tag = complex_matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3270 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3271 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3272 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3273 matrix = new Matrix ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3274 type_tag = matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3275 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3276 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3277
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 504
diff changeset
3278 int nargin = args.length ();
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 504
diff changeset
3279
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3280 // The do_matrix_assignment functions can't handle empty matrices, so
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3281 // don't let any pass through here.
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 504
diff changeset
3282 switch (nargin)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3283 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3284 case 2:
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 492
diff changeset
3285 if (args.length () <= 0)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3286 ::error ("matrix index is null");
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 492
diff changeset
3287 else if (args(1).is_undefined ())
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3288 ::error ("matrix index is undefined");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3289 else
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 492
diff changeset
3290 do_matrix_assignment (rhs, args(1));
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3291 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3292
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3293 case 3:
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 492
diff changeset
3294 if (args.length () <= 0)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3295 ::error ("matrix indices are null");
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 492
diff changeset
3296 else if (args(1).is_undefined ())
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3297 ::error ("first matrix index is undefined");
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 492
diff changeset
3298 else if (args(2).is_undefined ())
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3299 ::error ("second matrix index is undefined");
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 492
diff changeset
3300 else if (args(1).is_empty () || args(2).is_empty ())
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3301 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3302 if (! rhs.is_empty ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3303 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3304 ::error ("in assignment expression, a matrix index is empty");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3305 ::error ("but hte right hand side is not an empty matrix");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3306 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3307 // XXX FIXME XXX -- to really be correct here, we should probably
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3308 // check to see if the assignment conforms, but that seems like more
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3309 // work than it's worth right now...
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3310 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3311 else
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 492
diff changeset
3312 do_matrix_assignment (rhs, args(1), args(2));
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3313 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3314
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3315 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3316 ::error ("too many indices for matrix expression");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3317 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3318 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3319 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3320
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3321 // Matrix assignments indexed by a single value.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3322
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3323 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3324 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3325 const tree_constant& i_arg)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3326 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3327 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3328 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3329
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3330 if (user_pref.do_fortran_indexing || nr <= 1 || nc <= 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3331 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3332 if (i_arg.is_empty ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3333 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3334 if (! rhs.is_empty ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3335 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3336 ::error ("in assignment expression, matrix index is empty but");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3337 ::error ("right hand side is not an empty matrix");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3338 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3339 // XXX FIXME XXX -- to really be correct here, we should probably
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3340 // check to see if the assignment conforms, but that seems like more
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3341 // work than it's worth right now...
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3342
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3343 // The assignment functions can't handle empty matrices, so don't let
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3344 // any pass through here.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3345 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3346 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3347
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3348 // We can't handle the case of assigning to a vector first, since even
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3349 // then, the two operations are not equivalent. For example, the
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3350 // expression V(:) = M is handled differently depending on whether the
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3351 // user specified do_fortran_indexing = "true".
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3352
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3353 if (user_pref.do_fortran_indexing)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3354 fortran_style_matrix_assignment (rhs, i_arg);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3355 else if (nr <= 1 || nc <= 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3356 vector_assignment (rhs, i_arg);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3357 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3358 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3359 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3360 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3361 ::error ("single index only valid for row or column vector");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3362 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3363
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3364 // Fortran-style assignments. Matrices are assumed to be stored in
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3365 // column-major order and it is ok to use a single index for
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3366 // multi-dimensional matrices.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3367
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3368 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3369 TC_REP::fortran_style_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3370 const tree_constant& i_arg)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3371 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3372 tree_constant tmp_i = i_arg.make_numeric_or_magic ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3373
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3374 TC_REP::constant_type itype = tmp_i.const_type ();
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3375
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3376 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3377 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3378
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3379 int rhs_nr = rhs.rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3380 int rhs_nc = rhs.columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3381
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3382 switch (itype)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3383 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3384 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3385 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3386 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3387 int i = NINT (tmp_i.double_value ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3388 int idx = i - 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3389
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3390 if (rhs_nr == 0 && rhs_nc == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3391 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3392 if (idx < nr * nc)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3393 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3394 convert_to_row_or_column_vector ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3395
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3396 nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3397 nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3398
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3399 if (nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3400 delete_column (idx);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3401 else if (nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3402 delete_row (idx);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3403 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3404 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3405 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3406 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3407 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3408
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3409 if (index_check (idx, "") < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3410 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3411
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3412 if (nr <= 1 || nc <= 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3413 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3414 maybe_resize (idx);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3415 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3416 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3417 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3418 else if (range_max_check (idx, nr * nc) < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3419 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3420
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3421 nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3422 nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3423
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3424 if (! indexed_assign_conforms (1, 1, rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3425 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3426 ::error ("for A(int) = X: X must be a scalar");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3427 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3428 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3429 int ii = fortran_row (i, nr) - 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3430 int jj = fortran_column (i, nr) - 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3431 do_matrix_assignment (rhs, ii, jj);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3432 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3433 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3434
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3435 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3436 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3437 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3438 Matrix mi = tmp_i.matrix_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3439 int len = nr * nc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3440 idx_vector ii (mi, 1, "", len); // Always do fortran indexing here...
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3441 if (! ii)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3442 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3443
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3444 if (rhs_nr == 0 && rhs_nc == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3445 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3446 ii.sort_uniq ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3447 int num_to_delete = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3448 for (int i = 0; i < ii.length (); i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3449 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3450 if (ii.elem (i) < len)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3451 num_to_delete++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3452 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3453 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3454 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3455
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3456 if (num_to_delete > 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3457 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3458 if (num_to_delete != ii.length ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3459 ii.shorten (num_to_delete);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3460
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3461 convert_to_row_or_column_vector ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3462
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3463 nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3464 nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3465
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3466 if (nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3467 delete_columns (ii);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3468 else if (nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3469 delete_rows (ii);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3470 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3471 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3472 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3473 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3474 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3475
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3476 if (nr <= 1 || nc <= 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3477 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3478 maybe_resize (ii.max ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3479 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3480 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3481 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3482 else if (range_max_check (ii.max (), len) < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3483 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3484
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3485 int ilen = ii.capacity ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3486
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3487 if (ilen != rhs_nr * rhs_nc)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3488 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3489 ::error ("A(matrix) = X: X and matrix must have the same number");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3490 ::error ("of elements");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3491 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3492 else if (ilen == 1 && rhs.is_scalar_type ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3493 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3494 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3495 int idx = ii.elem (0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3496 int ii = fortran_row (idx + 1, nr) - 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3497 int jj = fortran_column (idx + 1, nr) - 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3498
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3499 if (rhs.const_type () == scalar_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3500 matrix->elem (ii, jj) = rhs.double_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3501 else if (rhs.const_type () == complex_scalar_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3502 complex_matrix->elem (ii, jj) = rhs.complex_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3503 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3504 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3505 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3506 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3507 fortran_style_matrix_assignment (rhs, ii);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3508 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3509 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3510
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3511 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3512 gripe_string_invalid ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3513 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3514
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3515 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3516 gripe_range_invalid ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3517 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3518
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3519 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3520 // a(:) = [] is equivalent to a(:,:) = [].
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3521 if (rhs_nr == 0 && rhs_nc == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3522 do_matrix_assignment (rhs, magic_colon, magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3523 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3524 fortran_style_matrix_assignment (rhs, magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3525 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3526
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3527 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3528 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3529 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3530 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3531 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3532
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3533 // Fortran-style assignment for vector index.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3534
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3535 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3536 TC_REP::fortran_style_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3537 idx_vector& i)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3538 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3539 assert (rhs.is_matrix_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3540
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3541 int ilen = i.capacity ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3542
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3543 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3544
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3545 int len = rhs_nr * rhs_nc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3546
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3547 if (len == ilen)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3548 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3549 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3550 if (rhs.const_type () == matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3551 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3552 double *cop_out = rhs_m.fortran_vec ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3553 for (int k = 0; k < len; k++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3554 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3555 int ii = fortran_row (i.elem (k) + 1, nr) - 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3556 int jj = fortran_column (i.elem (k) + 1, nr) - 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3557
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3558 matrix->elem (ii, jj) = *cop_out++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3559 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3560 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3561 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3562 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3563 Complex *cop_out = rhs_cm.fortran_vec ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3564 for (int k = 0; k < len; k++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3565 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3566 int ii = fortran_row (i.elem (k) + 1, nr) - 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3567 int jj = fortran_column (i.elem (k) + 1, nr) - 1;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3568
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3569 complex_matrix->elem (ii, jj) = *cop_out++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3570 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3571 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3572 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3573 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3574 ::error ("number of rows and columns must match for indexed assignment");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3575 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3576
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3577 // Fortran-style assignment for colon index.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3578
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3579 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3580 TC_REP::fortran_style_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3581 TC_REP::constant_type mci)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3582 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3583 assert (rhs.is_matrix_type () && mci == TC_REP::magic_colon);
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3584
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3585 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3586 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3587
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3588 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3589
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3590 int rhs_size = rhs_nr * rhs_nc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3591 if (rhs_size == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3592 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3593 if (rhs.const_type () == matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3594 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3595 delete matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3596 matrix = new Matrix (0, 0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3597 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3598 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3599 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3600 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3601 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3602 else if (nr*nc != rhs_size)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3603 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3604 ::error ("A(:) = X: X and A must have the same number of elements");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3605 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3606 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3607
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3608 if (rhs.const_type () == matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3609 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3610 double *cop_out = rhs_m.fortran_vec ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3611 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3612 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3613 matrix->elem (i, j) = *cop_out++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3614 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3615 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3616 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3617 Complex *cop_out = rhs_cm.fortran_vec ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3618 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3619 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3620 complex_matrix->elem (i, j) = *cop_out++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3621 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3622 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3623
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3624 // Assignments to vectors. Hand off to other functions once we know
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3625 // what kind of index we have. For a colon, it is the same as
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3626 // assignment to a matrix indexed by two colons.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3627
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3628 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3629 TC_REP::vector_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3630 const tree_constant& i_arg)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3631 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3632 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3633 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3634
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3635 assert ((nr == 1 || nc == 1 || (nr == 0 && nc == 0))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3636 && ! user_pref.do_fortran_indexing);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3637
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3638 tree_constant tmp_i = i_arg.make_numeric_or_range_or_magic ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3639
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3640 TC_REP::constant_type itype = tmp_i.const_type ();
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3641
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3642 switch (itype)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3643 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3644 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3645 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3646 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3647 int i = tree_to_mat_idx (tmp_i.double_value ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3648 if (index_check (i, "") < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3649 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3650 do_vector_assign (rhs, i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3651 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3652 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3653
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3654 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3655 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3656 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3657 Matrix mi = tmp_i.matrix_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3658 int len = nr * nc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3659 idx_vector iv (mi, user_pref.do_fortran_indexing, "", len);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3660 if (! iv)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3661 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3662
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3663 do_vector_assign (rhs, iv);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3664 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3665 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3666
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3667 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3668 gripe_string_invalid ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3669 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3670
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3671 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3672 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3673 Range ri = tmp_i.range_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3674 int len = nr * nc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3675 if (len == 2 && is_zero_one (ri))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3676 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3677 do_vector_assign (rhs, 1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3678 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3679 else if (len == 2 && is_one_zero (ri))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3680 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3681 do_vector_assign (rhs, 0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3682 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3683 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3684 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3685 if (index_check (ri, "") < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3686 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3687 do_vector_assign (rhs, ri);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3688 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3689 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3690 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3691
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3692 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3693 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3694 int rhs_nr = rhs.rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3695 int rhs_nc = rhs.columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3696
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3697 if (! indexed_assign_conforms (nr, nc, rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3698 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3699 ::error ("A(:) = X: X and A must have the same dimensions");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3700 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3701 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3702 do_matrix_assignment (rhs, magic_colon, magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3703 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3704 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3705 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3706 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3707 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3708 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3709 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3710
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3711 // Check whether an indexed assignment to a vector is valid.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3712
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3713 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3714 TC_REP::check_vector_assign (int rhs_nr, int rhs_nc, int ilen, const char *rm)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3715 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3716 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3717 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3718
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3719 if ((nr == 1 && nc == 1) || nr == 0 || nc == 0) // No orientation.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3720 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3721 if (! (ilen == rhs_nr || ilen == rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3722 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3723 ::error ("A(%s) = X: X and %s must have the same number of elements",
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3724 rm, rm);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3725 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3726 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3727 else if (nr == 1) // Preserve current row orientation.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3728 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3729 if (! (rhs_nr == 1 && rhs_nc == ilen))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3730 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3731 ::error ("A(%s) = X: where A is a row vector, X must also be a", rm);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3732 ::error ("row vector with the same number of elements as %s", rm);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3733 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3734 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3735 else if (nc == 1) // Preserve current column orientation.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3736 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3737 if (! (rhs_nc == 1 && rhs_nr == ilen))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3738 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3739 ::error ("A(%s) = X: where A is a column vector, X must also be", rm);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3740 ::error ("a column vector with the same number of elements as %s", rm);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3741 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3742 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3743 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3744 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3745 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3746
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3747 // Assignment to a vector with an integer index.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3748
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3749 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3750 TC_REP::do_vector_assign (const tree_constant& rhs, int i)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3751 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3752 int rhs_nr = rhs.rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3753 int rhs_nc = rhs.columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3754
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3755 if (indexed_assign_conforms (1, 1, rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3756 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3757 maybe_resize (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3758 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3759 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3760
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3761 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3762 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3763
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3764 if (nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3765 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3766 REP_ELEM_ASSIGN (0, i, rhs.double_value (), rhs.complex_value (),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3767 rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3768 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3769 else if (nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3770 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3771 REP_ELEM_ASSIGN (i, 0, rhs.double_value (), rhs.complex_value (),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3772 rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3773 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3774 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3775 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3776 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3777 else if (rhs_nr == 0 && rhs_nc == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3778 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3779 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3780 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3781
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3782 int len = MAX (nr, nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3783
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3784 if (i < 0 || i >= len)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3785 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3786 ::error ("A(int) = []: index out of range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3787 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3788 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3789
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3790 if (nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3791 delete_column (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3792 else if (nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3793 delete_row (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3794 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3795 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3796 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3797 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3798 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3799 ::error ("for A(int) = X: X must be a scalar");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3800 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3801 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3802 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3803
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3804 // Assignment to a vector with a vector index.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3805
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3806 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3807 TC_REP::do_vector_assign (const tree_constant& rhs, idx_vector& iv)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3808 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3809 if (rhs.is_zero_by_zero ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3810 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3811 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3812 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3813
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3814 int len = MAX (nr, nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3815
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3816 if (iv.max () >= len)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3817 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3818 ::error ("A(matrix) = []: index out of range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3819 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3820 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3821
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3822 if (nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3823 delete_columns (iv);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3824 else if (nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3825 delete_rows (iv);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3826 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3827 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3828 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3829 else if (rhs.is_scalar_type ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3830 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3831 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3832 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3833
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3834 if (iv.capacity () == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3835 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3836 int idx = iv.elem (0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3837
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3838 if (nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3839 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3840 REP_ELEM_ASSIGN (0, idx, rhs.double_value (),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3841 rhs.complex_value (), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3842 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3843 else if (nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3844 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3845 REP_ELEM_ASSIGN (idx, 0, rhs.double_value (),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3846 rhs.complex_value (), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3847 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3848 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3849 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3850 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3851 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3852 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3853 if (nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3854 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3855 ::error ("A(matrix) = X: where A is a row vector, X must also be a");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3856 ::error ("row vector with the same number of elements as matrix");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3857 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3858 else if (nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3859 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3860 ::error ("A(matrix) = X: where A is a column vector, X must also be a");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3861 ::error ("column vector with the same number of elements as matrix");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3862 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3863 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3864 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3865 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3866 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3867 else if (rhs.is_matrix_type ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3868 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3869 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3870
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3871 int ilen = iv.capacity ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3872 check_vector_assign (rhs_nr, rhs_nc, ilen, "matrix");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3873 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3874 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3875
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3876 force_orient f_orient = no_orient;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3877 if (rhs_nr == 1 && rhs_nc != 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3878 f_orient = row_orient;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3879 else if (rhs_nc == 1 && rhs_nr != 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3880 f_orient = column_orient;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3881
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3882 maybe_resize (iv.max (), f_orient);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3883 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3884 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3885
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3886 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3887 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3888
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3889 if (nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3890 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3891 for (int i = 0; i < iv.capacity (); i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3892 REP_ELEM_ASSIGN (0, iv.elem (i), rhs_m.elem (0, i),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3893 rhs_cm.elem (0, i), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3894 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3895 else if (nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3896 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3897 for (int i = 0; i < iv.capacity (); i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3898 REP_ELEM_ASSIGN (iv.elem (i), 0, rhs_m.elem (i, 0),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3899 rhs_cm.elem (i, 0), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3900 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3901 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3902 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3903 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3904 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3905 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3906 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3907
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3908 // Assignment to a vector with a range index.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
3909
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3910 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
3911 TC_REP::do_vector_assign (const tree_constant& rhs, Range& ri)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3912 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3913 if (rhs.is_zero_by_zero ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3914 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3915 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3916 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3917
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3918 int len = MAX (nr, nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3919
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3920 int b = tree_to_mat_idx (ri.min ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3921 int l = tree_to_mat_idx (ri.max ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3922 if (b < 0 || l >= len)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3923 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3924 ::error ("A(range) = []: index out of range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3925 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3926 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3927
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3928 if (nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3929 delete_columns (ri);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3930 else if (nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3931 delete_rows (ri);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3932 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3933 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3934 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3935 else if (rhs.is_scalar_type ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3936 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3937 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3938 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3939
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3940 if (nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3941 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3942 ::error ("A(range) = X: where A is a row vector, X must also be a");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3943 ::error ("row vector with the same number of elements as range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3944 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3945 else if (nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3946 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3947 ::error ("A(range) = X: where A is a column vector, X must also be a");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3948 ::error ("column vector with the same number of elements as range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3949 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3950 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3951 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3952 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3953 else if (rhs.is_matrix_type ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3954 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3955 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3956
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3957 int ilen = ri.nelem ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3958 check_vector_assign (rhs_nr, rhs_nc, ilen, "range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3959 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3960 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3961
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3962 force_orient f_orient = no_orient;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3963 if (rhs_nr == 1 && rhs_nc != 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3964 f_orient = row_orient;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3965 else if (rhs_nc == 1 && rhs_nr != 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3966 f_orient = column_orient;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3967
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3968 maybe_resize (tree_to_mat_idx (ri.max ()), f_orient);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3969 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3970 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3971
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3972 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3973 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3974
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3975 double b = ri.base ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3976 double increment = ri.inc ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3977
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3978 if (nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3979 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3980 for (int i = 0; i < ri.nelem (); i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3981 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3982 double tmp = b + i * increment;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3983 int col = tree_to_mat_idx (tmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3984 REP_ELEM_ASSIGN (0, col, rhs_m.elem (0, i), rhs_cm.elem (0, i),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3985 rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3986 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3987 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3988 else if (nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3989 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3990 for (int i = 0; i < ri.nelem (); i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3991 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3992 double tmp = b + i * increment;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3993 int row = tree_to_mat_idx (tmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3994 REP_ELEM_ASSIGN (row, 0, rhs_m.elem (i, 0), rhs_cm.elem (i, 0),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3995 rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3996 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3997 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3998 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
3999 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4000 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4001 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4002 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4003 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4004
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4005 // Matrix assignment indexed by two values. This function determines
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4006 // the type of the first arugment, checks as much as possible, and
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4007 // then calls one of a set of functions to handle the specific cases:
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4008 //
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4009 // M (integer, arg2) = RHS (MA1)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4010 // M (vector, arg2) = RHS (MA2)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4011 // M (range, arg2) = RHS (MA3)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4012 // M (colon, arg2) = RHS (MA4)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4013 //
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4014 // Each of those functions determines the type of the second argument
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4015 // and calls another function to handle the real work of doing the
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4016 // assignment.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4017
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4018 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4019 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4020 const tree_constant& i_arg,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4021 const tree_constant& j_arg)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4022 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4023 tree_constant tmp_i = i_arg.make_numeric_or_range_or_magic ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4024
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4025 TC_REP::constant_type itype = tmp_i.const_type ();
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4026
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4027 switch (itype)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4028 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4029 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4030 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4031 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4032 int i = tree_to_mat_idx (tmp_i.double_value ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4033 if (index_check (i, "row") < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4034 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4035 do_matrix_assignment (rhs, i, j_arg);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4036 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4037 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4038
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4039 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4040 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4041 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4042 Matrix mi = tmp_i.matrix_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4043 idx_vector iv (mi, user_pref.do_fortran_indexing, "row", rows ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4044 if (! iv)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4045 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4046
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4047 do_matrix_assignment (rhs, iv, j_arg);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4048 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4049 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4050
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4051 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4052 gripe_string_invalid ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4053 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4054
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4055 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4056 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4057 Range ri = tmp_i.range_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4058 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4059 if (nr == 2 && is_zero_one (ri))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4060 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4061 do_matrix_assignment (rhs, 1, j_arg);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4062 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4063 else if (nr == 2 && is_one_zero (ri))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4064 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4065 do_matrix_assignment (rhs, 0, j_arg);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4066 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4067 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4068 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4069 if (index_check (ri, "row") < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4070 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4071 do_matrix_assignment (rhs, ri, j_arg);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4072 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4073 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4074 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4075
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4076 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4077 do_matrix_assignment (rhs, magic_colon, j_arg);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4078 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4079
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4080 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4081 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4082 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4083 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4084 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4085
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4086 /* MA1 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4087 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4088 TC_REP::do_matrix_assignment (const tree_constant& rhs, int i,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4089 const tree_constant& j_arg)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4090 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4091 tree_constant tmp_j = j_arg.make_numeric_or_range_or_magic ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4092
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4093 TC_REP::constant_type jtype = tmp_j.const_type ();
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4094
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4095 int rhs_nr = rhs.rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4096 int rhs_nc = rhs.columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4097
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4098 switch (jtype)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4099 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4100 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4101 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4102 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4103 int j = tree_to_mat_idx (tmp_j.double_value ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4104 if (index_check (j, "column") < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4105 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4106 if (! indexed_assign_conforms (1, 1, rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4107 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4108 ::error ("A(int,int) = X, X must be a scalar");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4109 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4110 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4111 maybe_resize (i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4112 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4113 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4114
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4115 do_matrix_assignment (rhs, i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4116 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4117 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4118
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4119 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4120 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4121 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4122 Matrix mj = tmp_j.matrix_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4123 idx_vector jv (mj, user_pref.do_fortran_indexing, "column",
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4124 columns ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4125 if (! jv)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4126 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4127
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4128 if (! indexed_assign_conforms (1, jv.capacity (), rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4129 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4130 ::error ("A(int,matrix) = X: X must be a row vector with the same");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4131 ::error ("number of elements as matrix");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4132 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4133 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4134 maybe_resize (i, jv.max ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4135 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4136 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4137
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4138 do_matrix_assignment (rhs, i, jv);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4139 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4140 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4141
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4142 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4143 gripe_string_invalid ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4144 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4145
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4146 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4147 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4148 Range rj = tmp_j.range_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4149 if (! indexed_assign_conforms (1, rj.nelem (), rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4150 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4151 ::error ("A(int,range) = X: X must be a row vector with the same");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4152 ::error ("number of elements as range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4153 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4154 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4155
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4156 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4157 if (nc == 2 && is_zero_one (rj) && rhs_nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4158 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4159 do_matrix_assignment (rhs, i, 1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4160 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4161 else if (nc == 2 && is_one_zero (rj) && rhs_nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4162 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4163 do_matrix_assignment (rhs, i, 0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4164 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4165 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4166 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4167 if (index_check (rj, "column") < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4168 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4169 maybe_resize (i, tree_to_mat_idx (rj.max ()));
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4170 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4171 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4172
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4173 do_matrix_assignment (rhs, i, rj);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4174 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4175 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4176 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4177
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4178 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4179 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4180 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4181 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4182 if (nc == 0 && nr == 0 && rhs_nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4183 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4184 if (rhs.is_complex_type ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4185 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4186 complex_matrix = new ComplexMatrix ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4187 type_tag = complex_matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4188 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4189 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4190 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4191 matrix = new Matrix ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4192 type_tag = matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4193 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4194 maybe_resize (i, rhs_nc-1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4195 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4196 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4197 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4198 else if (indexed_assign_conforms (1, nc, rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4199 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4200 maybe_resize (i, nc-1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4201 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4202 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4203 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4204 else if (rhs_nr == 0 && rhs_nc == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4205 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4206 if (i < 0 || i >= nr)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4207 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4208 ::error ("A(int,:) = []: row index out of range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4209 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4210 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4211 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4212 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4213 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4214 ::error ("A(int,:) = X: X must be a row vector with the same");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4215 ::error ("number of columns as A");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4216 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4217 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4218
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4219 do_matrix_assignment (rhs, i, magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4220 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4221 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4222 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4223 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4224 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4225 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4226 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4227
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4228 /* MA2 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4229 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4230 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4231 idx_vector& iv, const tree_constant& j_arg)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4232 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4233 tree_constant tmp_j = j_arg.make_numeric_or_range_or_magic ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4234
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4235 TC_REP::constant_type jtype = tmp_j.const_type ();
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4236
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4237 int rhs_nr = rhs.rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4238 int rhs_nc = rhs.columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4239
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4240 switch (jtype)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4241 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4242 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4243 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4244 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4245 int j = tree_to_mat_idx (tmp_j.double_value ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4246 if (index_check (j, "column") < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4247 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4248 if (! indexed_assign_conforms (iv.capacity (), 1, rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4249 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4250 ::error ("A(matrix,int) = X: X must be a column vector with the");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4251 ::error ("same number of elements as matrix");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4252 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4253 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4254 maybe_resize (iv.max (), j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4255 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4256 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4257
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4258 do_matrix_assignment (rhs, iv, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4259 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4260 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4261
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4262 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4263 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4264 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4265 Matrix mj = tmp_j.matrix_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4266 idx_vector jv (mj, user_pref.do_fortran_indexing, "column",
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4267 columns ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4268 if (! jv)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4269 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4270
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4271 if (! indexed_assign_conforms (iv.capacity (), jv.capacity (),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4272 rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4273 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4274 ::error ("A(r_mat,c_mat) = X: the number of rows in X must match");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4275 ::error ("the number of elements in r_mat and the number of");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4276 ::error ("columns in X must match the number of elements in c_mat");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4277 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4278 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4279 maybe_resize (iv.max (), jv.max ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4280 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4281 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4282
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4283 do_matrix_assignment (rhs, iv, jv);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4284 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4285 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4286
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4287 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4288 gripe_string_invalid ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4289 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4290
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4291 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4292 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4293 Range rj = tmp_j.range_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4294 if (! indexed_assign_conforms (iv.capacity (), rj.nelem (),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4295 rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4296 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4297 ::error ("A(matrix,range) = X: the number of rows in X must match");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4298 ::error ("the number of elements in matrix and the number of");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4299 ::error ("columns in X must match the number of elements in range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4300 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4301 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4302
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4303 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4304 if (nc == 2 && is_zero_one (rj) && rhs_nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4305 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4306 do_matrix_assignment (rhs, iv, 1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4307 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4308 else if (nc == 2 && is_one_zero (rj) && rhs_nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4309 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4310 do_matrix_assignment (rhs, iv, 0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4311 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4312 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4313 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4314 if (index_check (rj, "column") < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4315 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4316 maybe_resize (iv.max (), tree_to_mat_idx (rj.max ()));
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4317 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4318 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4319
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4320 do_matrix_assignment (rhs, iv, rj);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4321 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4322 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4323 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4324
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4325 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4326 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4327 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4328 int new_nc = nc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4329 if (nc == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4330 new_nc = rhs_nc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4331
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4332 if (indexed_assign_conforms (iv.capacity (), new_nc,
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4333 rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4334 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4335 maybe_resize (iv.max (), new_nc-1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4336 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4337 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4338 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4339 else if (rhs_nr == 0 && rhs_nc == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4340 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4341 if (iv.max () >= rows ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4342 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4343 ::error ("A(matrix,:) = []: row index out of range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4344 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4345 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4346 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4347 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4348 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4349 ::error ("A(matrix,:) = X: the number of rows in X must match the");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4350 ::error ("number of elements in matrix, and the number of columns");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4351 ::error ("in X must match the number of columns in A");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4352 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4353 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4354
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4355 do_matrix_assignment (rhs, iv, magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4356 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4357 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4358 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4359 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4360 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4361 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4362 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4363
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4364 /* MA3 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4365 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4366 TC_REP::do_matrix_assignment (const tree_constant& rhs, Range& ri,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4367 const tree_constant& j_arg)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4368 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4369 tree_constant tmp_j = j_arg.make_numeric_or_range_or_magic ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4370
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4371 TC_REP::constant_type jtype = tmp_j.const_type ();
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4372
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4373 int rhs_nr = rhs.rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4374 int rhs_nc = rhs.columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4375
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4376 switch (jtype)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4377 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4378 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4379 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4380 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4381 int j = tree_to_mat_idx (tmp_j.double_value ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4382 if (index_check (j, "column") < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4383 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4384 if (! indexed_assign_conforms (ri.nelem (), 1, rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4385 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4386 ::error ("A(range,int) = X: X must be a column vector with the");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4387 ::error ("same number of elements as range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4388 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4389 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4390 maybe_resize (tree_to_mat_idx (ri.max ()), j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4391 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4392 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4393
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4394 do_matrix_assignment (rhs, ri, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4395 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4396 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4397
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4398 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4399 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4400 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4401 Matrix mj = tmp_j.matrix_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4402 idx_vector jv (mj, user_pref.do_fortran_indexing, "column",
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4403 columns ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4404 if (! jv)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4405 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4406
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4407 if (! indexed_assign_conforms (ri.nelem (), jv.capacity (),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4408 rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4409 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4410 ::error ("A(range,matrix) = X: the number of rows in X must match");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4411 ::error ("the number of elements in range and the number of");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4412 ::error ("columns in X must match the number of elements in matrix");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4413 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4414 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4415 maybe_resize (tree_to_mat_idx (ri.max ()), jv.max ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4416 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4417 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4418
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4419 do_matrix_assignment (rhs, ri, jv);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4420 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4421 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4422
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4423 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4424 gripe_string_invalid ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4425 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4426
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4427 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4428 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4429 Range rj = tmp_j.range_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4430 if (! indexed_assign_conforms (ri.nelem (), rj.nelem (),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4431 rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4432 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4433 ::error ("A(r_range,c_range) = X: the number of rows in X must");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4434 ::error ("match the number of elements in r_range and the number");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4435 ::error ("of columns in X must match the number of elements in");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4436 ::error ("c_range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4437 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4438 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4439
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4440 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4441 if (nc == 2 && is_zero_one (rj) && rhs_nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4442 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4443 do_matrix_assignment (rhs, ri, 1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4444 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4445 else if (nc == 2 && is_one_zero (rj) && rhs_nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4446 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4447 do_matrix_assignment (rhs, ri, 0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4448 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4449 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4450 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4451 if (index_check (rj, "column") < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4452 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4453
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4454 maybe_resize (tree_to_mat_idx (ri.max ()),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4455 tree_to_mat_idx (rj.max ()));
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4456
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4457 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4458 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4459
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4460 do_matrix_assignment (rhs, ri, rj);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4461 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4462 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4463 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4464
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4465 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4466 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4467 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4468 int new_nc = nc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4469 if (nc == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4470 new_nc = rhs_nc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4471
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4472 if (indexed_assign_conforms (ri.nelem (), new_nc, rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4473 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4474 maybe_resize (tree_to_mat_idx (ri.max ()), new_nc-1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4475 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4476 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4477 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4478 else if (rhs_nr == 0 && rhs_nc == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4479 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4480 int b = tree_to_mat_idx (ri.min ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4481 int l = tree_to_mat_idx (ri.max ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4482 if (b < 0 || l >= rows ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4483 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4484 ::error ("A(range,:) = []: row index out of range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4485 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4486 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4487 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4488 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4489 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4490 ::error ("A(range,:) = X: the number of rows in X must match the");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4491 ::error ("number of elements in range, and the number of columns");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4492 ::error ("in X must match the number of columns in A");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4493 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4494 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4495
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4496 do_matrix_assignment (rhs, ri, magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4497 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4498 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4499 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4500 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4501 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4502 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4503 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4504
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4505 /* MA4 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4506 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4507 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4508 TC_REP::constant_type i,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4509 const tree_constant& j_arg)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4510 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4511 tree_constant tmp_j = j_arg.make_numeric_or_range_or_magic ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4512
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4513 TC_REP::constant_type jtype = tmp_j.const_type ();
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4514
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4515 int rhs_nr = rhs.rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4516 int rhs_nc = rhs.columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4517
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4518 switch (jtype)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4519 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4520 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4521 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4522 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4523 int j = tree_to_mat_idx (tmp_j.double_value ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4524 if (index_check (j, "column") < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4525 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4526 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4527 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4528 if (nr == 0 && nc == 0 && rhs_nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4529 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4530 if (rhs.is_complex_type ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4531 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4532 complex_matrix = new ComplexMatrix ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4533 type_tag = complex_matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4534 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4535 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4536 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4537 matrix = new Matrix ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4538 type_tag = matrix_constant;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4539 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4540 maybe_resize (rhs_nr-1, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4541 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4542 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4543 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4544 else if (indexed_assign_conforms (nr, 1, rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4545 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4546 maybe_resize (nr-1, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4547 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4548 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4549 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4550 else if (rhs_nr == 0 && rhs_nc == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4551 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4552 if (j < 0 || j >= nc)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4553 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4554 ::error ("A(:,int) = []: column index out of range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4555 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4556 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4557 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4558 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4559 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4560 ::error ("A(:,int) = X: X must be a column vector with the same");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4561 ::error ("number of rows as A");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4562 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4563 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4564
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4565 do_matrix_assignment (rhs, magic_colon, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4566 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4567 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4568
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4569 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4570 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4571 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4572 Matrix mj = tmp_j.matrix_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4573 idx_vector jv (mj, user_pref.do_fortran_indexing, "column",
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4574 columns ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4575 if (! jv)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4576 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4577
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4578 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4579 int new_nr = nr;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4580 if (nr == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4581 new_nr = rhs_nr;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4582
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4583 if (indexed_assign_conforms (new_nr, jv.capacity (),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4584 rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4585 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4586 maybe_resize (new_nr-1, jv.max ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4587 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4588 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4589 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4590 else if (rhs_nr == 0 && rhs_nc == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4591 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4592 if (jv.max () >= columns ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4593 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4594 ::error ("A(:,matrix) = []: column index out of range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4595 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4596 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4597 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4598 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4599 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4600 ::error ("A(:,matrix) = X: the number of rows in X must match the");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4601 ::error ("number of rows in A, and the number of columns in X must");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4602 ::error ("match the number of elements in matrix");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4603 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4604 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4605
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4606 do_matrix_assignment (rhs, magic_colon, jv);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4607 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4608 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4609
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4610 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4611 gripe_string_invalid ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4612 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4613
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4614 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4615 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4616 Range rj = tmp_j.range_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4617 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4618 int new_nr = nr;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4619 if (nr == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4620 new_nr = rhs_nr;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4621
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4622 if (indexed_assign_conforms (new_nr, rj.nelem (), rhs_nr, rhs_nc))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4623 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4624 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4625 if (nc == 2 && is_zero_one (rj) && rhs_nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4626 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4627 do_matrix_assignment (rhs, magic_colon, 1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4628 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4629 else if (nc == 2 && is_one_zero (rj) && rhs_nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4630 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4631 do_matrix_assignment (rhs, magic_colon, 0);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4632 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4633 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4634 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4635 if (index_check (rj, "column") < 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4636 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4637 maybe_resize (new_nr-1, tree_to_mat_idx (rj.max ()));
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4638 if (error_state)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4639 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4640 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4641 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4642 else if (rhs_nr == 0 && rhs_nc == 0)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4643 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4644 int b = tree_to_mat_idx (rj.min ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4645 int l = tree_to_mat_idx (rj.max ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4646 if (b < 0 || l >= columns ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4647 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4648 ::error ("A(:,range) = []: column index out of range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4649 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4650 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4651 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4652 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4653 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4654 ::error ("A(:,range) = X: the number of rows in X must match the");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4655 ::error ("number of rows in A, and the number of columns in X");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4656 ::error ("must match the number of elements in range");
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4657 return;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4658 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4659
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4660 do_matrix_assignment (rhs, magic_colon, rj);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4661 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4662 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4663
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4664 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4665 // a(:,:) = foo is equivalent to a = foo.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4666 do_matrix_assignment (rhs, magic_colon, magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4667 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4668
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4669 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4670 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4671 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4672 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4673 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4674
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4675 // Functions that actually handle assignment to a matrix using two
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4676 // index values.
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4677 //
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4678 // idx2
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4679 // +---+---+----+----+
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4680 // idx1 | i | v | r | c |
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4681 // ---------+---+---+----+----+
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4682 // integer | 1 | 5 | 9 | 13 |
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4683 // ---------+---+---+----+----+
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4684 // vector | 2 | 6 | 10 | 14 |
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4685 // ---------+---+---+----+----+
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4686 // range | 3 | 7 | 11 | 15 |
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4687 // ---------+---+---+----+----+
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4688 // colon | 4 | 8 | 12 | 16 |
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
4689 // ---------+---+---+----+----+
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4690
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4691 /* 1 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4692 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4693 TC_REP::do_matrix_assignment (const tree_constant& rhs, int i, int j)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4694 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4695 REP_ELEM_ASSIGN (i, j, rhs.double_value (), rhs.complex_value (),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4696 rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4697 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4698
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4699 /* 2 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4700 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4701 TC_REP::do_matrix_assignment (const tree_constant& rhs, int i, idx_vector& jv)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4702 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4703 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4704
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4705 for (int j = 0; j < jv.capacity (); j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4706 REP_ELEM_ASSIGN (i, jv.elem (j), rhs_m.elem (0, j),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4707 rhs_cm.elem (0, j), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4708 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4709
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4710 /* 3 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4711 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4712 TC_REP::do_matrix_assignment (const tree_constant& rhs, int i, Range& rj)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4713 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4714 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4715
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4716 double b = rj.base ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4717 double increment = rj.inc ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4718
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4719 for (int j = 0; j < rj.nelem (); j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4720 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4721 double tmp = b + j * increment;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4722 int col = tree_to_mat_idx (tmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4723 REP_ELEM_ASSIGN (i, col, rhs_m.elem (0, j), rhs_cm.elem (0, j),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4724 rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4725 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4726 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4727
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4728 /* 4 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4729 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4730 TC_REP::do_matrix_assignment (const tree_constant& rhs, int i,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4731 TC_REP::constant_type mcj)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4732 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4733 assert (mcj == magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4734
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4735 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4736
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4737 if (rhs.is_zero_by_zero ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4738 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4739 delete_row (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4740 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4741 else if (rhs.is_matrix_type ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4742 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4743 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4744
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4745 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4746 REP_ELEM_ASSIGN (i, j, rhs_m.elem (0, j), rhs_cm.elem (0, j),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4747 rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4748 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4749 else if (rhs.is_scalar_type () && nc == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4750 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4751 REP_ELEM_ASSIGN (i, 0, rhs.double_value (),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4752 rhs.complex_value (), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4753 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4754 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4755 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4756 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4757
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4758 /* 5 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4759 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4760 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4761 idx_vector& iv, int j)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4762 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4763 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4764
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4765 for (int i = 0; i < iv.capacity (); i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4766 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4767 int row = iv.elem (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4768 REP_ELEM_ASSIGN (row, j, rhs_m.elem (i, 0),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4769 rhs_cm.elem (i, 0), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4770 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4771 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4772
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4773 /* 6 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4774 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4775 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4776 idx_vector& iv, idx_vector& jv)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4777 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4778 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4779
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4780 for (int i = 0; i < iv.capacity (); i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4781 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4782 int row = iv.elem (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4783 for (int j = 0; j < jv.capacity (); j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4784 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4785 int col = jv.elem (j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4786 REP_ELEM_ASSIGN (row, col, rhs_m.elem (i, j),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4787 rhs_cm.elem (i, j), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4788 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4789 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4790 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4791
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4792 /* 7 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4793 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4794 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4795 idx_vector& iv, Range& rj)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4796 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4797 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4798
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4799 double b = rj.base ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4800 double increment = rj.inc ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4801
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4802 for (int i = 0; i < iv.capacity (); i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4803 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4804 int row = iv.elem (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4805 for (int j = 0; j < rj.nelem (); j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4806 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4807 double tmp = b + j * increment;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4808 int col = tree_to_mat_idx (tmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4809 REP_ELEM_ASSIGN (row, col, rhs_m.elem (i, j),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4810 rhs_cm.elem (i, j), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4811 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4812 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4813 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4814
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4815 /* 8 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4816 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4817 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4818 idx_vector& iv, TC_REP::constant_type mcj)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4819 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4820 assert (mcj == magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4821
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4822 if (rhs.is_zero_by_zero ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4823 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4824 delete_rows (iv);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4825 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4826 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4827 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4828 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4829
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4830 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4831
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4832 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4833 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4834 for (int i = 0; i < iv.capacity (); i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4835 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4836 int row = iv.elem (i);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4837 REP_ELEM_ASSIGN (row, j, rhs_m.elem (i, j),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4838 rhs_cm.elem (i, j), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4839 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4840 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4841 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4842 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4843
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4844 /* 9 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4845 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4846 TC_REP::do_matrix_assignment (const tree_constant& rhs, Range& ri, int j)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4847 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4848 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4849
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4850 double b = ri.base ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4851 double increment = ri.inc ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4852
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4853 for (int i = 0; i < ri.nelem (); i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4854 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4855 double tmp = b + i * increment;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4856 int row = tree_to_mat_idx (tmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4857 REP_ELEM_ASSIGN (row, j, rhs_m.elem (i, 0),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4858 rhs_cm.elem (i, 0), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4859 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4860 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4861
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4862 /* 10 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4863 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4864 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4865 Range& ri, idx_vector& jv)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4866 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4867 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4868
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4869 double b = ri.base ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4870 double increment = ri.inc ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4871
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4872 for (int j = 0; j < jv.capacity (); j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4873 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4874 int col = jv.elem (j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4875 for (int i = 0; i < ri.nelem (); i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4876 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4877 double tmp = b + i * increment;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4878 int row = tree_to_mat_idx (tmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4879 REP_ELEM_ASSIGN (row, col, rhs_m.elem (i, j),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4880 rhs_m.elem (i, j), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4881 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4882 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4883 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4884
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4885 /* 11 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4886 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4887 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4888 Range& ri, Range& rj)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4889 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4890 double ib = ri.base ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4891 double iinc = ri.inc ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4892 double jb = rj.base ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4893 double jinc = rj.inc ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4894
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4895 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4896
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4897 for (int i = 0; i < ri.nelem (); i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4898 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4899 double itmp = ib + i * iinc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4900 int row = tree_to_mat_idx (itmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4901 for (int j = 0; j < rj.nelem (); j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4902 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4903 double jtmp = jb + j * jinc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4904 int col = tree_to_mat_idx (jtmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4905 REP_ELEM_ASSIGN (row, col, rhs_m.elem (i, j),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4906 rhs_cm.elem (i, j), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4907 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4908 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4909 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4910
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4911 /* 12 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4912 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4913 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4914 Range& ri, TC_REP::constant_type mcj)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4915 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4916 assert (mcj == magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4917
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4918 if (rhs.is_zero_by_zero ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4919 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4920 delete_rows (ri);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4921 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4922 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4923 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4924 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4925
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4926 double ib = ri.base ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4927 double iinc = ri.inc ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4928
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4929 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4930
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4931 for (int i = 0; i < ri.nelem (); i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4932 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4933 double itmp = ib + i * iinc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4934 int row = tree_to_mat_idx (itmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4935 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4936 REP_ELEM_ASSIGN (row, j, rhs_m.elem (i, j),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4937 rhs_cm.elem (i, j), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4938 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4939 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4940 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4941
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4942 /* 13 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4943 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4944 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4945 TC_REP::constant_type mci, int j)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4946 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4947 assert (mci == magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4948
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4949 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4950
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4951 if (rhs.is_zero_by_zero ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4952 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4953 delete_column (j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4954 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4955 else if (rhs.is_matrix_type ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4956 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4957 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4958
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4959 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4960 REP_ELEM_ASSIGN (i, j, rhs_m.elem (i, 0),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4961 rhs_cm.elem (i, 0), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4962 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4963 else if (rhs.is_scalar_type () && nr == 1)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4964 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4965 REP_ELEM_ASSIGN (0, j, rhs.double_value (),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4966 rhs.complex_value (), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4967 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4968 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4969 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4970 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4971
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4972 /* 14 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4973 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4974 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
4975 TC_REP::constant_type mci, idx_vector& jv)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4976 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4977 assert (mci == magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4978
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4979 if (rhs.is_zero_by_zero ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4980 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4981 delete_columns (jv);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4982 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4983 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4984 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4985 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4986
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4987 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4988
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4989 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4990 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4991 for (int j = 0; j < jv.capacity (); j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4992 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4993 int col = jv.elem (j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4994 REP_ELEM_ASSIGN (i, col, rhs_m.elem (i, j),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4995 rhs_cm.elem (i, j), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4996 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4997 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4998 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
4999 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5000
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5001 /* 15 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5002 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5003 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5004 TC_REP::constant_type mci, Range& rj)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5005 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5006 assert (mci == magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5007
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5008 if (rhs.is_zero_by_zero ())
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5009 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5010 delete_columns (rj);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5011 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5012 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5013 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5014 REP_RHS_MATRIX (rhs, rhs_m, rhs_cm, rhs_nr, rhs_nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5015
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5016 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5017
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5018 double jb = rj.base ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5019 double jinc = rj.inc ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5020
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5021 for (int j = 0; j < rj.nelem (); j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5022 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5023 double jtmp = jb + j * jinc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5024 int col = tree_to_mat_idx (jtmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5025 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5026 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5027 REP_ELEM_ASSIGN (i, col, rhs_m.elem (i, j),
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5028 rhs_cm.elem (i, j), rhs.is_real_type ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5029 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5030 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5031 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5032 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5033
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5034 /* 16 */
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5035 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5036 TC_REP::do_matrix_assignment (const tree_constant& rhs,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5037 TC_REP::constant_type mci,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5038 TC_REP::constant_type mcj)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5039 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5040 assert (mci == magic_colon && mcj == magic_colon);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5041
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5042 switch (type_tag)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5043 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5044 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5045 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5046
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5047 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5048 delete matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5049 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5050
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5051 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5052 delete complex_scalar;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5053 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5054
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5055 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5056 delete complex_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5057 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5058
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5059 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5060 delete [] string;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5061 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5062
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5063 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5064 delete range;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5065 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5066
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5067 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5068 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5069 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5070 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5071 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5072
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5073 type_tag = rhs.const_type ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5074
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5075 switch (type_tag)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5076 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5077 case scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5078 scalar = rhs.double_value ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5079 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5080
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5081 case matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5082 matrix = new Matrix (rhs.matrix_value ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5083 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5084
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5085 case string_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5086 string = strsave (rhs.string_value ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5087 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5088
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5089 case complex_matrix_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5090 complex_matrix = new ComplexMatrix (rhs.complex_matrix_value ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5091 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5092
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5093 case complex_scalar_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5094 complex_scalar = new Complex (rhs.complex_value ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5095 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5096
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5097 case range_constant:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5098 range = new Range (rhs.range_value ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5099 break;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5100
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5101 case magic_colon:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5102 default:
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5103 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5104 break;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5105 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5106 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5107
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5108 // Functions for deleting rows or columns of a matrix. These are used
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5109 // to handle statements like
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5110 //
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5111 // M (i, j) = []
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5112
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5113 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5114 TC_REP::delete_row (int idx)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5115 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5116 if (type_tag == matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5117 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5118 int nr = matrix->rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5119 int nc = matrix->columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5120 Matrix *new_matrix = new Matrix (nr-1, nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5121 int ii = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5122 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5123 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5124 if (i != idx)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5125 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5126 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5127 new_matrix->elem (ii, j) = matrix->elem (i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5128 ii++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5129 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5130 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5131 delete matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5132 matrix = new_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5133 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5134 else if (type_tag == complex_matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5135 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5136 int nr = complex_matrix->rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5137 int nc = complex_matrix->columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5138 ComplexMatrix *new_matrix = new ComplexMatrix (nr-1, nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5139 int ii = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5140 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5141 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5142 if (i != idx)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5143 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5144 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5145 new_matrix->elem (ii, j) = complex_matrix->elem (i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5146 ii++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5147 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5148 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5149 delete complex_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5150 complex_matrix = new_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5151 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5152 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5153 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5154 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5155
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5156 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5157 TC_REP::delete_rows (idx_vector& iv)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5158 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5159 iv.sort_uniq ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5160 int num_to_delete = iv.length ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5161
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5162 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5163 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5164
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5165 // If deleting all rows of a column vector, make result 0x0.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5166 if (nc == 1 && num_to_delete == nr)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5167 nc = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5168
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5169 if (type_tag == matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5170 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5171 Matrix *new_matrix = new Matrix (nr-num_to_delete, nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5172 if (nr > num_to_delete)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5173 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5174 int ii = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5175 int idx = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5176 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5177 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5178 if (i == iv.elem (idx))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5179 idx++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5180 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5181 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5182 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5183 new_matrix->elem (ii, j) = matrix->elem (i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5184 ii++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5185 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5186 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5187 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5188 delete matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5189 matrix = new_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5190 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5191 else if (type_tag == complex_matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5192 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5193 ComplexMatrix *new_matrix = new ComplexMatrix (nr-num_to_delete, nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5194 if (nr > num_to_delete)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5195 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5196 int ii = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5197 int idx = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5198 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5199 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5200 if (i == iv.elem (idx))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5201 idx++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5202 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5203 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5204 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5205 new_matrix->elem (ii, j) = complex_matrix->elem (i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5206 ii++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5207 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5208 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5209 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5210 delete complex_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5211 complex_matrix = new_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5212 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5213 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5214 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5215 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5216
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5217 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5218 TC_REP::delete_rows (Range& ri)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5219 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5220 ri.sort ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5221 int num_to_delete = ri.nelem ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5222
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5223 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5224 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5225
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5226 // If deleting all rows of a column vector, make result 0x0.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5227 if (nc == 1 && num_to_delete == nr)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5228 nc = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5229
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5230 double ib = ri.base ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5231 double iinc = ri.inc ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5232
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5233 int max_idx = tree_to_mat_idx (ri.max ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5234
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5235 if (type_tag == matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5236 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5237 Matrix *new_matrix = new Matrix (nr-num_to_delete, nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5238 if (nr > num_to_delete)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5239 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5240 int ii = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5241 int idx = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5242 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5243 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5244 double itmp = ib + idx * iinc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5245 int row = tree_to_mat_idx (itmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5246
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5247 if (i == row && row <= max_idx)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5248 idx++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5249 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5250 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5251 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5252 new_matrix->elem (ii, j) = matrix->elem (i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5253 ii++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5254 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5255 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5256 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5257 delete matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5258 matrix = new_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5259 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5260 else if (type_tag == complex_matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5261 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5262 ComplexMatrix *new_matrix = new ComplexMatrix (nr-num_to_delete, nc);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5263 if (nr > num_to_delete)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5264 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5265 int ii = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5266 int idx = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5267 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5268 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5269 double itmp = ib + idx * iinc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5270 int row = tree_to_mat_idx (itmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5271
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5272 if (i == row && row <= max_idx)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5273 idx++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5274 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5275 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5276 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5277 new_matrix->elem (ii, j) = complex_matrix->elem (i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5278 ii++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5279 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5280 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5281 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5282 delete complex_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5283 complex_matrix = new_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5284 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5285 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5286 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5287 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5288
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5289 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5290 TC_REP::delete_column (int idx)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5291 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5292 if (type_tag == matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5293 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5294 int nr = matrix->rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5295 int nc = matrix->columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5296 Matrix *new_matrix = new Matrix (nr, nc-1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5297 int jj = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5298 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5299 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5300 if (j != idx)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5301 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5302 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5303 new_matrix->elem (i, jj) = matrix->elem (i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5304 jj++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5305 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5306 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5307 delete matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5308 matrix = new_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5309 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5310 else if (type_tag == complex_matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5311 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5312 int nr = complex_matrix->rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5313 int nc = complex_matrix->columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5314 ComplexMatrix *new_matrix = new ComplexMatrix (nr, nc-1);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5315 int jj = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5316 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5317 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5318 if (j != idx)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5319 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5320 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5321 new_matrix->elem (i, jj) = complex_matrix->elem (i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5322 jj++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5323 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5324 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5325 delete complex_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5326 complex_matrix = new_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5327 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5328 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5329 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5330 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5331
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5332 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5333 TC_REP::delete_columns (idx_vector& jv)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5334 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5335 jv.sort_uniq ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5336 int num_to_delete = jv.length ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5337
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5338 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5339 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5340
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5341 // If deleting all columns of a row vector, make result 0x0.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5342 if (nr == 1 && num_to_delete == nc)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5343 nr = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5344
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5345 if (type_tag == matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5346 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5347 Matrix *new_matrix = new Matrix (nr, nc-num_to_delete);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5348 if (nc > num_to_delete)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5349 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5350 int jj = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5351 int idx = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5352 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5353 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5354 if (j == jv.elem (idx))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5355 idx++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5356 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5357 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5358 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5359 new_matrix->elem (i, jj) = matrix->elem (i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5360 jj++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5361 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5362 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5363 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5364 delete matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5365 matrix = new_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5366 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5367 else if (type_tag == complex_matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5368 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5369 ComplexMatrix *new_matrix = new ComplexMatrix (nr, nc-num_to_delete);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5370 if (nc > num_to_delete)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5371 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5372 int jj = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5373 int idx = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5374 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5375 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5376 if (j == jv.elem (idx))
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5377 idx++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5378 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5379 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5380 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5381 new_matrix->elem (i, jj) = complex_matrix->elem (i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5382 jj++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5383 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5384 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5385 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5386 delete complex_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5387 complex_matrix = new_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5388 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5389 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5390 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5391 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5392
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5393 void
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5394 TC_REP::delete_columns (Range& rj)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5395 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5396 rj.sort ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5397 int num_to_delete = rj.nelem ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5398
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5399 int nr = rows ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5400 int nc = columns ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5401
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5402 // If deleting all columns of a row vector, make result 0x0.
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5403 if (nr == 1 && num_to_delete == nc)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5404 nr = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5405
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5406 double jb = rj.base ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5407 double jinc = rj.inc ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5408
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5409 int max_idx = tree_to_mat_idx (rj.max ());
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5410
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5411 if (type_tag == matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5412 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5413 Matrix *new_matrix = new Matrix (nr, nc-num_to_delete);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5414 if (nc > num_to_delete)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5415 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5416 int jj = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5417 int idx = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5418 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5419 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5420 double jtmp = jb + idx * jinc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5421 int col = tree_to_mat_idx (jtmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5422
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5423 if (j == col && col <= max_idx)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5424 idx++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5425 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5426 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5427 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5428 new_matrix->elem (i, jj) = matrix->elem (i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5429 jj++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5430 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5431 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5432 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5433 delete matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5434 matrix = new_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5435 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5436 else if (type_tag == complex_matrix_constant)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5437 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5438 ComplexMatrix *new_matrix = new ComplexMatrix (nr, nc-num_to_delete);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5439 if (nc > num_to_delete)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5440 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5441 int jj = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5442 int idx = 0;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5443 for (int j = 0; j < nc; j++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5444 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5445 double jtmp = jb + idx * jinc;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5446 int col = tree_to_mat_idx (jtmp);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5447
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5448 if (j == col && col <= max_idx)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5449 idx++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5450 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5451 {
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5452 for (int i = 0; i < nr; i++)
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5453 new_matrix->elem (i, jj) = complex_matrix->elem (i, j);
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5454 jj++;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5455 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5456 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5457 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5458 delete complex_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5459 complex_matrix = new_matrix;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5460 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5461 else
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5462 panic_impossible ();
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5463 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5464
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5465 void
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5466 TC_REP::maybe_mutate (void)
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
5467 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5468 if (error_state)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5469 return;
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5470
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5471 switch (type_tag)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5472 {
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5473 case complex_scalar_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5474 if (::imag (*complex_scalar) == 0.0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5475 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5476 double d = ::real (*complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5477 delete complex_scalar;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5478 scalar = d;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5479 type_tag = scalar_constant;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5480 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5481 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5482
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5483 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5484 if (! any_element_is_complex (*complex_matrix))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5485 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5486 Matrix *m = new Matrix (::real (*complex_matrix));
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5487 delete complex_matrix;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5488 matrix = m;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5489 type_tag = matrix_constant;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5490 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5491 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5492
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5493 case scalar_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5494 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5495 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5496 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5497 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5498 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5499
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5500 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5501 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5502 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5503 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5504
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5505 // Avoid calling rows() and columns() for things like magic_colon.
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5506
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5507 int nr = 1;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5508 int nc = 1;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5509 if (type_tag == matrix_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5510 || type_tag == complex_matrix_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5511 || type_tag == range_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5512 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5513 nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5514 nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5515 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5516
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5517 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5518 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5519 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5520 if (nr == 1 && nc == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5521 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5522 double d = matrix->elem (0, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5523 delete matrix;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5524 scalar = d;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5525 type_tag = scalar_constant;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5526 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5527 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5528
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5529 case complex_matrix_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5530 if (nr == 1 && nc == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5531 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5532 Complex c = complex_matrix->elem (0, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5533 delete complex_matrix;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5534 complex_scalar = new Complex (c);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5535 type_tag = complex_scalar_constant;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5536 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5537 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5538
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5539 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5540 if (nr == 1 && nc == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5541 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5542 double d = range->base ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5543 delete range;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5544 scalar = d;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5545 type_tag = scalar_constant;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5546 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5547 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5548
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5549 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5550 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5551 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5552 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5553
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5554 void
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5555 TC_REP::print (void)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5556 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5557 if (error_state)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5558 return;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5559
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5560 if (print)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5561 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5562 ostrstream output_buf;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5563
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5564 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5565 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5566 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5567 octave_print_internal (output_buf, scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5568 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5569
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5570 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5571 octave_print_internal (output_buf, *matrix);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5572 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5573
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5574 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5575 octave_print_internal (output_buf, *complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5576 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5577
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5578 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5579 octave_print_internal (output_buf, *complex_matrix);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5580 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5581
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5582 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5583 output_buf << string << "\n";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5584 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5585
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5586 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5587 octave_print_internal (output_buf, *range);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5588 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5589
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5590 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5591 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5592 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5593 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5594 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5595
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5596 output_buf << ends;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5597 maybe_page_output (output_buf);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5598 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5599 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5600
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5601 static char *
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5602 undo_string_escapes (char c)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5603 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5604 static char retval[2];
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5605 retval[1] = '\0';
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5606
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5607 if (! c)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5608 return 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5609
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5610 switch (c)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5611 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5612 case '\a':
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5613 return "\\a";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5614
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5615 case '\b': // backspace
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5616 return "\\b";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5617
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5618 case '\f': // formfeed
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5619 return "\\f";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5620
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5621 case '\n': // newline
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5622 return "\\n";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5623
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5624 case '\r': // carriage return
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5625 return "\\r";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5626
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5627 case '\t': // horizontal tab
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5628 return "\\t";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5629
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5630 case '\v': // vertical tab
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5631 return "\\v";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5632
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5633 case '\\': // backslash
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5634 return "\\\\";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5635
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5636 case '"': // double quote
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5637 return "\\\"";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5638
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5639 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5640 retval[0] = c;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5641 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5642 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5643 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5644
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5645 void
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5646 TC_REP::print_code (ostream& os)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5647 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5648 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5649 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5650 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5651 if (orig_text)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5652 os << orig_text;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5653 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5654 octave_print_internal (os, scalar, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5655 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5656
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5657 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5658 octave_print_internal (os, *matrix, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5659 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5660
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5661 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5662 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5663 double re = complex_scalar->real ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5664 double im = complex_scalar->imag ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5665
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5666 // If we have the original text and a pure imaginary, just print the
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5667 // original text, because this must be a constant that was parsed as
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5668 // part of a function.
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5669
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5670 if (orig_text && re == 0.0 && im > 0.0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5671 os << orig_text;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5672 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5673 octave_print_internal (os, *complex_scalar, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5674 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5675 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5676
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5677 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5678 octave_print_internal (os, *complex_matrix, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5679 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5680
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5681 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5682 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5683 os << "\"";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5684 char *s, *t = string;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5685 while (s = undo_string_escapes (*t++))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5686 os << s;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5687 os << "\"";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5688 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5689 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5690
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5691 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5692 octave_print_internal (os, *range, 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5693 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5694
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5695 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5696 os << ":";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5697 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5698
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5699 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5700 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5701 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5702 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5703 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5704
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5705 char *
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5706 TC_REP::type_as_string (void) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5707 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5708 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5709 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5710 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5711 return "real scalar";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5712
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5713 case matrix_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5714 return "real matrix";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5715
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5716 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5717 return "complex scalar";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5718
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5719 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5720 return "complex matrix";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5721
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5722 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5723 return "string";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5724
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5725 case range_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5726 return "range";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5727
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5728 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5729 return "<unknown type>";
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5730 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5731 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5732
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5733 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5734 do_binary_op (tree_constant& a, tree_constant& b, tree_expression::type t)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5735 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5736 tree_constant ans;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5737
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5738 int first_empty = (a.rows () == 0 || a.columns () == 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5739 int second_empty = (b.rows () == 0 || b.columns () == 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5740
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5741 if (first_empty || second_empty)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5742 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5743 int flag = user_pref.propagate_empty_matrices;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5744 if (flag < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5745 warning ("binary operation on empty matrix");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5746 else if (flag == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5747 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5748 ::error ("invalid binary operation on empty matrix");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5749 return ans;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5750 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5751 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5752
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5753 tree_constant tmp_a = a.make_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5754 tree_constant tmp_b = b.make_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5755
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5756 TC_REP::constant_type a_type = tmp_a.const_type ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5757 TC_REP::constant_type b_type = tmp_b.const_type ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5758
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5759 double d1, d2;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5760 Matrix m1, m2;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5761 Complex c1, c2;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5762 ComplexMatrix cm1, cm2;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5763
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5764 switch (a_type)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5765 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5766 case TC_REP::scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5767
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5768 d1 = tmp_a.double_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5769
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5770 switch (b_type)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5771 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5772 case TC_REP::scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5773 d2 = tmp_b.double_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5774 ans = do_binary_op (d1, d2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5775 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5776
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5777 case TC_REP::matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5778 m2 = tmp_b.matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5779 ans = do_binary_op (d1, m2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5780 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5781
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5782 case TC_REP::complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5783 c2 = tmp_b.complex_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5784 ans = do_binary_op (d1, c2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5785 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5786
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5787 case TC_REP::complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5788 cm2 = tmp_b.complex_matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5789 ans = do_binary_op (d1, cm2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5790 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5791
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5792 case TC_REP::magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5793 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5794 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5795 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5796 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5797 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5798
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5799 case TC_REP::matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5800
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5801 m1 = tmp_a.matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5802
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5803 switch (b_type)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5804 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5805 case TC_REP::scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5806 d2 = tmp_b.double_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5807 ans = do_binary_op (m1, d2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5808 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5809
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5810 case TC_REP::matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5811 m2 = tmp_b.matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5812 ans = do_binary_op (m1, m2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5813 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5814
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5815 case TC_REP::complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5816 c2 = tmp_b.complex_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5817 ans = do_binary_op (m1, c2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5818 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5819
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5820 case TC_REP::complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5821 cm2 = tmp_b.complex_matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5822 ans = do_binary_op (m1, cm2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5823 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5824
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5825 case TC_REP::magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5826 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5827 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5828 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5829 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5830 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5831
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5832 case TC_REP::complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5833
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5834 c1 = tmp_a.complex_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5835
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5836 switch (b_type)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5837 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5838 case TC_REP::scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5839 d2 = tmp_b.double_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5840 ans = do_binary_op (c1, d2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5841 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5842
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5843 case TC_REP::matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5844 m2 = tmp_b.matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5845 ans = do_binary_op (c1, m2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5846 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5847
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5848 case TC_REP::complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5849 c2 = tmp_b.complex_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5850 ans = do_binary_op (c1, c2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5851 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5852
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5853 case TC_REP::complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5854 cm2 = tmp_b.complex_matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5855 ans = do_binary_op (c1, cm2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5856 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5857
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5858 case TC_REP::magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5859 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5860 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5861 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5862 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5863 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5864
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5865 case TC_REP::complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5866
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5867 cm1 = tmp_a.complex_matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5868
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5869 switch (b_type)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5870 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5871 case TC_REP::scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5872 d2 = tmp_b.double_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5873 ans = do_binary_op (cm1, d2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5874 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5875
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5876 case TC_REP::matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5877 m2 = tmp_b.matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5878 ans = do_binary_op (cm1, m2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5879 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5880
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5881 case TC_REP::complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5882 c2 = tmp_b.complex_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5883 ans = do_binary_op (cm1, c2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5884 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5885
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5886 case TC_REP::complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5887 cm2 = tmp_b.complex_matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5888 ans = do_binary_op (cm1, cm2, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5889 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5890
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5891 case TC_REP::magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5892 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5893 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5894 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5895 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5896 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5897
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5898 case TC_REP::magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5899 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5900 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5901 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5902 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5903
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5904 return ans;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5905 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5906
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5907 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5908 do_unary_op (tree_constant& a, tree_expression::type t)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5909 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5910 tree_constant ans;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5911
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5912 if (a.rows () == 0 || a.columns () == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5913 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5914 int flag = user_pref.propagate_empty_matrices;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5915 if (flag < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5916 warning ("unary operation on empty matrix");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5917 else if (flag == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5918 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5919 ::error ("invalid unary operation on empty matrix");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5920 return ans;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5921 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5922 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5923
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5924 tree_constant tmp_a = a.make_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5925
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5926 switch (tmp_a.const_type ())
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5927 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5928 case TC_REP::scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5929 ans = do_unary_op (tmp_a.double_value (), t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5930 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5931
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5932 case TC_REP::matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5933 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5934 Matrix m = tmp_a.matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5935 ans = do_unary_op (m, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5936 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5937 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5938
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5939 case TC_REP::complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5940 ans = do_unary_op (tmp_a.complex_value (), t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5941 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5942
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5943 case TC_REP::complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5944 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5945 ComplexMatrix m = tmp_a.complex_matrix_value ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5946 ans = do_unary_op (m, t);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5947 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5948 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5949
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5950 case TC_REP::magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5951 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5952 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5953 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5954 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5955
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5956 return ans;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5957 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5958
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5959 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5960 TC_REP::cumprod (void) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5961 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5962 if (type_tag == string_constant || type_tag == range_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5963 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5964 tree_constant tmp = make_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5965 return tmp.cumprod ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5966 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5967
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5968 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5969
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5970 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5971 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5972 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5973 retval = tree_constant (scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5974 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5975
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5976 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5977 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5978 Matrix m = matrix->cumprod ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5979 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5980 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5981 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5982
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5983 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5984 retval = tree_constant (*complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5985 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5986
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5987 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5988 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5989 ComplexMatrix m = complex_matrix->cumprod ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5990 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5991 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5992 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5993
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5994 case string_constant:
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
5995 case range_constant:
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5996 case magic_colon:
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5997 default:
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5998 panic_impossible ();
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
5999 break;
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
6000 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
6001
529
7ea224e713cd [project @ 1994-07-20 18:54:27 by jwe]
jwe
parents: 509
diff changeset
6002 return retval;
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6003 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6004
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6005 tree_constant
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6006 TC_REP::cumsum (void) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6007 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6008 if (type_tag == string_constant || type_tag == range_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6009 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6010 tree_constant tmp = make_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6011 return tmp.cumsum ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6012 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6013
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6014 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6015
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6016 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6017 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6018 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6019 retval = tree_constant (scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6020 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6021
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6022 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6023 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6024 Matrix m = matrix->cumsum ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6025 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6026 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6027 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6028
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6029 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6030 retval = tree_constant (*complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6031 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6032
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6033 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6034 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6035 ComplexMatrix m = complex_matrix->cumsum ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6036 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6037 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6038 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6039
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6040 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6041 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6042 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6043 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6044 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6045 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6046 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6047
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6048 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6049 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6050
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6051 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6052 TC_REP::prod (void) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6053 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6054 if (type_tag == string_constant || type_tag == range_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6055 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6056 tree_constant tmp = make_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6057 return tmp.prod ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6058 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6059
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6060 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6061
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6062 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6063 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6064 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6065 retval = tree_constant (scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6066 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6067
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6068 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6069 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6070 Matrix m = matrix->prod ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6071 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6072 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6073 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6074
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6075 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6076 retval = tree_constant (*complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6077 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6078
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6079 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6080 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6081 ComplexMatrix m = complex_matrix->prod ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6082 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6083 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6084 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6085
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6086 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6087 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6088 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6089 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6090 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6091 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6092 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6093
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6094 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6095 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6096
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6097 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6098 TC_REP::sum (void) const
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6099 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6100 if (type_tag == string_constant || type_tag == range_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6101 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6102 tree_constant tmp = make_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6103 return tmp.sum ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6104 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6105
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6106 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6107
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6108 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6109 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6110 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6111 retval = tree_constant (scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6112 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6113
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6114 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6115 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6116 Matrix m = matrix->sum ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6117 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6118 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6119 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6120
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6121 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6122 retval = tree_constant (*complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6123 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6124
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6125 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6126 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6127 ComplexMatrix m = complex_matrix->sum ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6128 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6129 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6130 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6131
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6132 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6133 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6134 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6135 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6136 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6137 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6138 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6139
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6140 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6141 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6142
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6143 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6144 TC_REP::sumsq (void) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6145 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6146 if (type_tag == string_constant || type_tag == range_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6147 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6148 tree_constant tmp = make_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6149 return tmp.sumsq ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6150 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6151
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6152 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6153
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6154 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6155 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6156 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6157 retval = tree_constant (scalar * scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6158 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6159
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6160 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6161 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6162 Matrix m = matrix->sumsq ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6163 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6164 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6165 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6166
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6167 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6168 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6169 Complex c (*complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6170 retval = tree_constant (c * c);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6171 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6172 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6173
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6174 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6175 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6176 ComplexMatrix m = complex_matrix->sumsq ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6177 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6178 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6179 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6180
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6181 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6182 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6183 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6184 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6185 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6186 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6187 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6188
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6189 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6190 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6191
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6192 static tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6193 make_diag (const Matrix& v, int k)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6194 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6195 int nr = v.rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6196 int nc = v.columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6197 assert (nc == 1 || nr == 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6198
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6199 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6200
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6201 int roff = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6202 int coff = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6203 if (k > 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6204 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6205 roff = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6206 coff = k;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6207 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6208 else if (k < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6209 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6210 roff = -k;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6211 coff = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6212 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6213
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6214 if (nr == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6215 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6216 int n = nc + ABS (k);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6217 Matrix m (n, n, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6218 for (int i = 0; i < nc; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6219 m.elem (i+roff, i+coff) = v.elem (0, i);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6220 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6221 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6222 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6223 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6224 int n = nr + ABS (k);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6225 Matrix m (n, n, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6226 for (int i = 0; i < nr; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6227 m.elem (i+roff, i+coff) = v.elem (i, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6228 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6229 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6230
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6231 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6232 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6233
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6234 static tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6235 make_diag (const ComplexMatrix& v, int k)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6236 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6237 int nr = v.rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6238 int nc = v.columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6239 assert (nc == 1 || nr == 1);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6240
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6241 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6242
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6243 int roff = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6244 int coff = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6245 if (k > 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6246 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6247 roff = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6248 coff = k;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6249 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6250 else if (k < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6251 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6252 roff = -k;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6253 coff = 0;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6254 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6255
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6256 if (nr == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6257 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6258 int n = nc + ABS (k);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6259 ComplexMatrix m (n, n, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6260 for (int i = 0; i < nc; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6261 m.elem (i+roff, i+coff) = v.elem (0, i);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6262 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6263 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6264 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6265 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6266 int n = nr + ABS (k);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6267 ComplexMatrix m (n, n, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6268 for (int i = 0; i < nr; i++)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6269 m.elem (i+roff, i+coff) = v.elem (i, 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6270 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6271 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6272
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6273 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6274 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6275
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6276 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6277 TC_REP::diag (void) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6278 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6279 if (type_tag == string_constant || type_tag == range_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6280 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6281 tree_constant tmp = make_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6282 return tmp.diag ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6283 }
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6284
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6285 tree_constant retval;
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6286
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6287 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6288 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6289 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6290 retval = tree_constant (scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6291 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6292
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6293 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6294 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6295 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6296 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6297 if (nr == 0 || nc == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6298 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6299 Matrix mtmp;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6300 retval = tree_constant (mtmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6301 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6302 else if (nr == 1 || nc == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6303 retval = make_diag (matrix_value (), 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6304 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6305 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6306 ColumnVector v = matrix->diag ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6307 if (v.capacity () > 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6308 retval = tree_constant (v);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6309 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6310 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6311 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6312
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6313 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6314 retval = tree_constant (*complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6315 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6316
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6317 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6318 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6319 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6320 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6321 if (nr == 0 || nc == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6322 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6323 Matrix mtmp;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6324 retval = tree_constant (mtmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6325 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6326 else if (nr == 1 || nc == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6327 retval = make_diag (complex_matrix_value (), 0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6328 else
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6329 {
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6330 ComplexColumnVector v = complex_matrix->diag ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6331 if (v.capacity () > 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6332 retval = tree_constant (v);
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6333 }
631
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6334 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6335 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6336
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6337 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6338 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6339 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6340 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6341 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6342 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6343 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6344
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6345 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6346 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6347
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6348 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6349 TC_REP::diag (const tree_constant& a) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6350 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6351 if (type_tag == string_constant || type_tag == range_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6352 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6353 tree_constant tmp = make_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6354 return tmp.diag (a);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6355 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6356
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6357 tree_constant tmp_a = a.make_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6358
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6359 TC_REP::constant_type a_type = tmp_a.const_type ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6360
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6361 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6362
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6363 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6364 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6365 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6366 if (a_type == scalar_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6367 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6368 int k = NINT (tmp_a.double_value ());
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6369 int n = ABS (k) + 1;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6370 if (k == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6371 retval = tree_constant (scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6372 else if (k > 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6373 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6374 Matrix m (n, n, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6375 m.elem (0, k) = scalar;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6376 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6377 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6378 else if (k < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6379 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6380 Matrix m (n, n, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6381 m.elem (-k, 0) = scalar;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6382 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6383 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6384 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6385 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6386
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6387 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6388 if (a_type == scalar_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6389 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6390 int k = NINT (tmp_a.double_value ());
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6391 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6392 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6393 if (nr == 0 || nc == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6394 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6395 Matrix mtmp;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6396 retval = tree_constant (mtmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6397 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6398 else if (nr == 1 || nc == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6399 retval = make_diag (matrix_value (), k);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6400 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6401 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6402 ColumnVector d = matrix->diag (k);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6403 retval = tree_constant (d);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6404 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6405 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6406 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6407 ::error ("diag: invalid second argument");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6408
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6409 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6410
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6411 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6412 if (a_type == scalar_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6413 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6414 int k = NINT (tmp_a.double_value ());
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6415 int n = ABS (k) + 1;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6416 if (k == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6417 retval = tree_constant (*complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6418 else if (k > 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6419 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6420 ComplexMatrix m (n, n, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6421 m.elem (0, k) = *complex_scalar;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6422 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6423 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6424 else if (k < 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6425 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6426 ComplexMatrix m (n, n, 0.0);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6427 m.elem (-k, 0) = *complex_scalar;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6428 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6429 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6430 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6431 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6432
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6433 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6434 if (a_type == scalar_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6435 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6436 int k = NINT (tmp_a.double_value ());
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6437 int nr = rows ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6438 int nc = columns ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6439 if (nr == 0 || nc == 0)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6440 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6441 Matrix mtmp;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6442 retval = tree_constant (mtmp);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6443 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6444 else if (nr == 1 || nc == 1)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6445 retval = make_diag (complex_matrix_value (), k);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6446 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6447 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6448 ComplexColumnVector d = complex_matrix->diag (k);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6449 retval = tree_constant (d);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6450 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6451 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6452 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6453 ::error ("diag: invalid second argument");
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6454
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6455 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6456
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6457 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6458 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6459 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6460 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6461 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6462 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6463 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6464
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6465 return retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6466 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6467
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6468 // XXX FIXME XXX -- this can probably be rewritten efficiently as a
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6469 // nonmember function...
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6470
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6471 tree_constant
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6472 TC_REP::mapper (Mapper_fcn& m_fcn, int print) const
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6473 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6474 tree_constant retval;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6475
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6476 if (type_tag == string_constant || type_tag == range_constant)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6477 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6478 tree_constant tmp = make_numeric ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6479 return tmp.mapper (m_fcn, print);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6480 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6481
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6482 switch (type_tag)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6483 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6484 case scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6485 if (m_fcn.can_return_complex_for_real_arg
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6486 && (scalar < m_fcn.lower_limit
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6487 || scalar > m_fcn.upper_limit))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6488 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6489 if (m_fcn.c_c_mapper)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6490 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6491 Complex c = m_fcn.c_c_mapper (Complex (scalar));
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6492 retval = tree_constant (c);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6493 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6494 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6495 ::error ("%s: unable to handle real arguments", m_fcn.name);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6496 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6497 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6498 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6499 if (m_fcn.d_d_mapper)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6500 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6501 double d = m_fcn.d_d_mapper (scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6502 retval = tree_constant (d);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6503 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6504 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6505 ::error ("%s: unable to handle real arguments", m_fcn.name);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6506 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6507 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6508
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6509 case matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6510 if (m_fcn.can_return_complex_for_real_arg
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6511 && (any_element_less_than (*matrix, m_fcn.lower_limit)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6512 || any_element_greater_than (*matrix, m_fcn.upper_limit)))
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6513 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6514 if (m_fcn.c_c_mapper)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6515 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6516 ComplexMatrix cm = map (m_fcn.c_c_mapper,
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6517 ComplexMatrix (*matrix));
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6518 retval = tree_constant (cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6519 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6520 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6521 ::error ("%s: unable to handle real arguments", m_fcn.name);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6522 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6523 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6524 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6525 if (m_fcn.d_d_mapper)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6526 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6527 Matrix m = map (m_fcn.d_d_mapper, *matrix);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6528 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6529 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6530 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6531 ::error ("%s: unable to handle real arguments", m_fcn.name);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6532 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6533 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6534
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6535 case complex_scalar_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6536 if (m_fcn.d_c_mapper)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6537 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6538 double d;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6539 d = m_fcn.d_c_mapper (*complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6540 retval = tree_constant (d);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6541 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6542 else if (m_fcn.c_c_mapper)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6543 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6544 Complex c;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6545 c = m_fcn.c_c_mapper (*complex_scalar);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6546 retval = tree_constant (c);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6547 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6548 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6549 ::error ("%s: unable to handle complex arguments", m_fcn.name);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6550 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6551
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6552 case complex_matrix_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6553 if (m_fcn.d_c_mapper)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6554 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6555 Matrix m;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6556 m = map (m_fcn.d_c_mapper, *complex_matrix);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6557 retval = tree_constant (m);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6558 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6559 else if (m_fcn.c_c_mapper)
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6560 {
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6561 ComplexMatrix cm;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6562 cm = map (m_fcn.c_c_mapper, *complex_matrix);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6563 retval = tree_constant (cm);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6564 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6565 else
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6566 ::error ("%s: unable to handle complex arguments", m_fcn.name);
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6567 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6568
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6569 case string_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6570 case range_constant:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6571 case magic_colon:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6572 default:
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6573 panic_impossible ();
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6574 break;
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6575 }
9aef0a53eee7 [project @ 1994-08-19 21:06:30 by jwe]
jwe
parents: 607
diff changeset
6576
492
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6577 return retval;
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6578 }
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6579
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6580 /*
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6581 ;;; Local Variables: ***
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6582 ;;; mode: C++ ***
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6583 ;;; page-delimiter: "^/\\*" ***
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6584 ;;; End: ***
d45bdf960233 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents:
diff changeset
6585 */