annotate src/pt-const.cc @ 1558:297e084c3857

[project @ 1995-10-12 07:20:28 by jwe]
author jwe
date Thu, 12 Oct 1995 07:21:51 +0000
parents 4d6c168ff235
children 0d9e10d10bd7
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: 513
diff changeset
1 // tree-const.cc -*- C++ -*-
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
3
1009
dfe01093f657 [project @ 1995-01-04 04:05:12 by jwe]
jwe
parents: 877
diff changeset
4 Copyright (C) 1992, 1993, 1994, 1995 John W. Eaton
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
5
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
7
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
11 later version.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
12
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
16 for more details.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
17
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, write to the Free
1315
611d403c7f3d [project @ 1995-06-25 19:56:32 by jwe]
jwe
parents: 1299
diff changeset
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
21
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
22 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
23
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
24 #if defined (__GNUG__)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
25 #pragma implementation
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
26 #endif
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
27
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 217
diff changeset
28 #ifdef HAVE_CONFIG_H
1192
b6360f2d4fa6 [project @ 1995-03-30 21:38:35 by jwe]
jwe
parents: 1170
diff changeset
29 #include <config.h>
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
30 #endif
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
31
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
32 #include <cctype>
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
33 #include <cstring>
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
34
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
35 #include <fstream.h>
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 531
diff changeset
36 #include <iostream.h>
1199
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
37 #include <strstream.h>
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 531
diff changeset
38
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
39 #include "mx-base.h"
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
40 #include "Range.h"
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
41
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
42 #include "arith-ops.h"
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
43 #include "error.h"
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
44 #include "gripes.h"
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
45 #include "idx-vector.h"
747
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
46 #include "oct-map.h"
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
47 #include "oct-str.h"
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
48 #include "pager.h"
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
49 #include "pr-output.h"
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
50 #include "sysdep.h"
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
51 #include "tree-const.h"
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
52 #include "unwind-prot.h"
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
53 #include "user-prefs.h"
1430
045e70a15a8f [project @ 1995-09-19 07:05:37 by jwe]
jwe
parents: 1358
diff changeset
54 #include "utils.h"
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
55 #include "variables.h"
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
56
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
57 #ifndef TC_REP
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
58 #define TC_REP tree_constant::tree_constant_rep
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
59 #endif
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
60
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
61 #ifndef MAX
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
62 #define MAX(a,b) ((a) > (b) ? (a) : (b))
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
63 #endif
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
64
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
65 #ifndef TC_REP
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
66 #define TC_REP tree_constant::tree_constant_rep
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
67 #endif
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
68
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
69 #ifndef MAX
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
70 #define MAX(a,b) ((a) > (b) ? (a) : (b))
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
71 #endif
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
72
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
73 // The following three variables could be made static members of the
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
74 // TC_REP class.
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
75
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
76 // Pointer to the blocks of memory we manage.
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
77 static TC_REP *tc_rep_newlist = 0;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
78
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
79 // Multiplier for allocating new blocks.
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
80 static const int tc_rep_newlist_grow_size = 128;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
81
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
82 // Indentation level for structures.
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
83 static int structure_indent_level = 0;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
84
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
85 static void
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
86 increment_structure_indent_level (void)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
87 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
88 structure_indent_level += 2;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
89 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
90
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
91 static void
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
92 decrement_structure_indent_level (void)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
93 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
94 structure_indent_level -= 2;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
95 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
96
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
97 static int
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
98 any_element_is_complex (const ComplexMatrix& a)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
99 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
100 int nr = a.rows ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
101 int nc = a.columns ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
102 for (int j = 0; j < nc; j++)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
103 for (int i = 0; i < nr; i++)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
104 if (imag (a.elem (i, j)) != 0.0)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
105 return 1;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
106 return 0;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
107 }
747
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
108
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1009
diff changeset
109 // The following three variables could be made static members of the
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1009
diff changeset
110 // tree_constant class.
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1009
diff changeset
111
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1009
diff changeset
112 // Pointer to the blocks of memory we manage.
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
113 static tree_constant *tc_newlist = 0;
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1009
diff changeset
114
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1009
diff changeset
115 // Multiplier for allocating new blocks.
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
116 static const int tc_newlist_grow_size = 128;
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1009
diff changeset
117
747
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
118 Octave_map
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
119 tree_constant::map_value (void) const
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
120 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
121 return rep->map_value ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
122 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
123
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
124 tree_constant::~tree_constant (void)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
125 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
126 #if defined (MDEBUG)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
127 cerr << "~tree_constant: rep: " << rep
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
128 << " rep->count: " << rep->count << "\n";
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
129 #endif
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
130
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
131 if (--rep->count <= 0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
132 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
133 delete rep;
531
1be78be437c7 [project @ 1994-07-20 19:44:13 by jwe]
jwe
parents: 529
diff changeset
134 rep = 0;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
135 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
136 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
137
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
138 void *
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
139 tree_constant::operator new (size_t size)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
140 {
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1009
diff changeset
141 assert (size == sizeof (tree_constant));
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1009
diff changeset
142
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
143 if (! tc_newlist)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
144 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
145 int block_size = tc_newlist_grow_size * sizeof (tree_constant);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
146 tc_newlist = (tree_constant *) new char [block_size];
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
147
1321
64819a909ed7 [project @ 1995-08-22 05:39:43 by jwe]
jwe
parents: 1320
diff changeset
148 int i = 0;
64819a909ed7 [project @ 1995-08-22 05:39:43 by jwe]
jwe
parents: 1320
diff changeset
149
64819a909ed7 [project @ 1995-08-22 05:39:43 by jwe]
jwe
parents: 1320
diff changeset
150 for (i = 0; i < tc_newlist_grow_size - 1; i++)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
151 tc_newlist[i].freeptr = &tc_newlist[i+1];
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
152
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
153 tc_newlist[i].freeptr = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
154 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
155
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
156 tree_constant *tmp = tc_newlist;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
157 tc_newlist = tc_newlist->freeptr;
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1009
diff changeset
158 return tmp;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
159 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
160
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
161 void
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1430
diff changeset
162 tree_constant::operator delete (void *p, size_t /* size */)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
163 {
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1009
diff changeset
164 tree_constant *tmp = (tree_constant *) p;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
165 tmp->freeptr = tc_newlist;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
166 tc_newlist = tmp;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
167 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
168
747
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
169 // Simple assignment.
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
170
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
171 tree_constant
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
172 tree_constant::operator = (const tree_constant& a)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
173 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
174 if (rep != a.rep)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
175 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
176 if (--rep->count <= 0)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
177 delete rep;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
178 rep = a.rep;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
179 rep->count++;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
180 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
181 return *this;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
182 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
183
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
184 tree_constant
1277
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
185 tree_constant::lookup_map_element (const char *ref, int insert,
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
186 int silent)
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
187 {
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
188 tree_constant retval;
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
189
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
190 if (ref)
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
191 {
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
192 char *tmp = strsave (ref);
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
193
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
194 SLList<char *> list;
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
195
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
196 char *beg = tmp;
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
197 char *end = 0;
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
198 do
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
199 {
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
200 end = strchr (beg, '.');
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
201 if (end)
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
202 *end = '\0';
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
203
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
204 list.append (strsave (beg));
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
205 }
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
206 while (end && (beg = end + 1));
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
207
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
208 retval = lookup_map_element (list, insert, silent);
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
209
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
210 delete [] tmp;
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
211 }
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
212
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
213 return retval;
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
214 }
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
215
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
216 tree_constant
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
217 tree_constant::lookup_map_element (SLList<char*>& list, int insert,
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
218 int silent)
747
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
219 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
220 tree_constant retval;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
221
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
222 tree_constant_rep *tmp_rep = rep;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
223
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
224 Pix p = list.first ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
225 while (p)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
226 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
227 char *elt = list (p);
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
228
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
229 list.next (p);
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
230
1277
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
231 tree_constant tmp;
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
232
db4f4009d6e8 [project @ 1995-04-24 20:35:06 by jwe]
jwe
parents: 1199
diff changeset
233 tmp = tmp_rep->lookup_map_element (elt, insert, silent);
747
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
234
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
235 if (error_state)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
236 break;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
237
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
238 tmp_rep = tmp.rep;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
239
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
240 if (! p)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
241 retval = tmp;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
242 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
243
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
244 return retval;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
245 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
246
1199
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
247 void
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
248 tree_constant::print (void)
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
249 {
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
250 ostrstream output_buf;
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
251 print (output_buf);
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
252 output_buf << ends;
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
253 maybe_page_output (output_buf);
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
254 }
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
255
747
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
256 // Simple structure assignment.
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
257
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
258 void
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
259 tree_constant::make_unique (void)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
260 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
261 if (rep->count > 1)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
262 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
263 --rep->count;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
264 rep = new tree_constant_rep (*rep);
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
265 rep->count = 1;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
266 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
267
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
268 if (rep->is_map ())
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
269 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
270 for (Pix p = rep->a_map->first (); p != 0; rep->a_map->next (p))
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
271 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
272 rep->a_map->contents (p) . make_unique ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
273 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
274 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
275 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
276
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
277 tree_constant::tree_constant_rep *
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
278 tree_constant::make_unique_map (void)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
279 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
280 if (! rep->is_map ())
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
281 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
282 if (--rep->count <= 0)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
283 delete rep;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
284
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
285 Octave_map m;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
286 rep = new tree_constant_rep (m);
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
287 rep->count = 1;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
288 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
289
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
290 make_unique ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
291
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
292 return rep;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
293 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
294
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
295 tree_constant
780
81a661c0368b [project @ 1994-10-07 17:26:04 by jwe]
jwe
parents: 777
diff changeset
296 tree_constant::assign_map_element (SLList<char*>& list,
782
ffe18d3d64a6 [project @ 1994-10-07 19:01:20 by jwe]
jwe
parents: 780
diff changeset
297 tree_constant& rhs)
747
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
298 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
299 tree_constant_rep *tmp_rep = make_unique_map ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
300
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
301 if (rhs.is_map ())
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
302 rhs.make_unique ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
303
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
304 Pix p = list.first ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
305 while (p)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
306 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
307 char *elt = list (p);
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
308
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
309 list.next (p);
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
310
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
311 tree_constant& tmp = tmp_rep->lookup_map_element (elt, 1);
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
312
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
313 if (! p)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
314 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
315 tmp = rhs;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
316 return tmp;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
317 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
318
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
319 tmp_rep = tmp.make_unique_map ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
320 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
321
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
322 return tree_constant ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
323 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
324
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
325 // Indexed structure assignment.
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
326
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
327 tree_constant
780
81a661c0368b [project @ 1994-10-07 17:26:04 by jwe]
jwe
parents: 777
diff changeset
328 tree_constant::assign_map_element (SLList<char*>& list,
782
ffe18d3d64a6 [project @ 1994-10-07 19:01:20 by jwe]
jwe
parents: 780
diff changeset
329 tree_constant& rhs,
747
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
330 const Octave_object& args)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
331 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
332 tree_constant_rep *tmp_rep = make_unique_map ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
333
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
334 if (rhs.is_map ())
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
335 rhs.make_unique ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
336
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
337 Pix p = list.first ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
338 while (p)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
339 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
340 char *elt = list (p);
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
341
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
342 list.next (p);
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
343
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
344 tree_constant& tmp = tmp_rep->lookup_map_element (elt, 1);
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
345
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
346 if (! p)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
347 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
348 tmp.assign (rhs, args);
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
349 return tmp;
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
350 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
351
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
352 tmp_rep = tmp.make_unique_map ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
353 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
354
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
355 return tree_constant ();
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
356 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
357
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
358 void
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
359 tree_constant::print_code (ostream& os)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
360 {
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
361 print_code_indent (os);
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
362
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
363 if (in_parens)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
364 os << "(";
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
365
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
366 if (rep)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
367 rep->print_code (os);
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
368
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
369 if (in_parens)
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
370 os << ")";
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
371 }
6182de8cb3b7 [project @ 1994-09-30 15:09:36 by jwe]
jwe
parents: 629
diff changeset
372
1199
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
373 int
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
374 print_as_scalar (const tree_constant& val)
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
375 {
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
376 int nr = val.rows ();
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
377 int nc = val.columns ();
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
378 return (val.is_scalar_type ()
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
379 || (val.is_string () && nr <= 1)
1199
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
380 || (val.is_matrix_type ()
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
381 && ((nr == 1 && nc == 1)
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
382 || nr == 0
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
383 || nc == 0)));
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
384 }
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
385
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
386 int
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
387 print_as_structure (const tree_constant& val)
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
388 {
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
389 return val.is_map ();
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
390 }
4f1bfa351b99 [project @ 1995-03-31 22:16:54 by jwe]
jwe
parents: 1192
diff changeset
391
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
392 // The real representation of constants.
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
393
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
394 TC_REP::tree_constant_rep (void)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
395 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
396 type_tag = unknown_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
397 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
398 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
399
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
400 TC_REP::tree_constant_rep (double d)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
401 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
402 scalar = d;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
403 type_tag = scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
404 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
405 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
406
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
407 TC_REP::tree_constant_rep (const Matrix& m)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
408 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
409 if (m.rows () == 1 && m.columns () == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
410 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
411 scalar = m.elem (0, 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
412 type_tag = scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
413 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
414 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
415 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
416 matrix = new Matrix (m);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
417 type_tag = matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
418 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
419 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
420 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
421
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
422 TC_REP::tree_constant_rep (const DiagMatrix& d)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
423 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
424 if (d.rows () == 1 && d.columns () == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
425 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
426 scalar = d.elem (0, 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
427 type_tag = scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
428 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
429 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
430 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
431 matrix = new Matrix (d);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
432 type_tag = matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
433 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
434 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
435 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
436
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
437 TC_REP::tree_constant_rep (const RowVector& v, int prefer_column_vector)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
438 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
439 int len = v.capacity ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
440 if (len == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
441 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
442 scalar = v.elem (0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
443 type_tag = scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
444 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
445 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
446 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
447 int pcv = (prefer_column_vector < 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
448 ? user_pref.prefer_column_vectors
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
449 : prefer_column_vector;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
450
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
451 if (pcv)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
452 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
453 Matrix m (len, 1);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
454 for (int i = 0; i < len; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
455 m.elem (i, 0) = v.elem (i);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
456 matrix = new Matrix (m);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
457 type_tag = matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
458 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
459 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
460 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
461 Matrix m (1, len);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
462 for (int i = 0; i < len; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
463 m.elem (0, i) = v.elem (i);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
464 matrix = new Matrix (m);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
465 type_tag = matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
466 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
467 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
468 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
469 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
470
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
471 TC_REP::tree_constant_rep (const ColumnVector& v, int prefer_column_vector)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
472 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
473 int len = v.capacity ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
474 if (len == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
475 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
476 scalar = v.elem (0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
477 type_tag = scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
478 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
479 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
480 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
481 int pcv = (prefer_column_vector < 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
482 ? user_pref.prefer_column_vectors
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
483 : prefer_column_vector;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
484
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
485 if (pcv)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
486 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
487 Matrix m (len, 1);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
488 for (int i = 0; i < len; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
489 m.elem (i, 0) = v.elem (i);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
490 matrix = new Matrix (m);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
491 type_tag = matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
492 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
493 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
494 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
495 Matrix m (1, len);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
496 for (int i = 0; i < len; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
497 m.elem (0, i) = v.elem (i);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
498 matrix = new Matrix (m);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
499 type_tag = matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
500 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
501 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
502 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
503 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
504
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
505 TC_REP::tree_constant_rep (const Complex& c)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
506 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
507 complex_scalar = new Complex (c);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
508 type_tag = complex_scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
509 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
510 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
511
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
512 TC_REP::tree_constant_rep (const ComplexMatrix& m)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
513 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
514 if (m.rows () == 1 && m.columns () == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
515 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
516 complex_scalar = new Complex (m.elem (0, 0));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
517 type_tag = complex_scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
518 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
519 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
520 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
521 complex_matrix = new ComplexMatrix (m);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
522 type_tag = complex_matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
523 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
524 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
525 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
526
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
527 TC_REP::tree_constant_rep (const ComplexDiagMatrix& d)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
528 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
529 if (d.rows () == 1 && d.columns () == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
530 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
531 complex_scalar = new Complex (d.elem (0, 0));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
532 type_tag = complex_scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
533 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
534 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
535 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
536 complex_matrix = new ComplexMatrix (d);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
537 type_tag = complex_matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
538 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
539 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
540 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
541
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
542 TC_REP::tree_constant_rep (const ComplexRowVector& v,
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
543 int prefer_column_vector)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
544 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
545 int len = v.capacity ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
546 if (len == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
547 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
548 complex_scalar = new Complex (v.elem (0));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
549 type_tag = complex_scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
550 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
551 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
552 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
553 int pcv = (prefer_column_vector < 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
554 ? user_pref.prefer_column_vectors
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
555 : prefer_column_vector;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
556
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
557 if (pcv)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
558 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
559 ComplexMatrix m (len, 1);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
560 for (int i = 0; i < len; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
561 m.elem (i, 0) = v.elem (i);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
562 complex_matrix = new ComplexMatrix (m);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
563 type_tag = complex_matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
564 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
565 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
566 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
567 ComplexMatrix m (1, len);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
568 for (int i = 0; i < len; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
569 m.elem (0, i) = v.elem (i);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
570 complex_matrix = new ComplexMatrix (m);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
571 type_tag = complex_matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
572 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
573 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
574 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
575 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
576
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
577 TC_REP::tree_constant_rep (const ComplexColumnVector& v, int
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
578 prefer_column_vector)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
579 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
580 int len = v.capacity ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
581 if (len == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
582 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
583 complex_scalar = new Complex (v.elem (0));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
584 type_tag = complex_scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
585 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
586 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
587 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
588 int pcv = (prefer_column_vector < 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
589 ? user_pref.prefer_column_vectors
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
590 : prefer_column_vector;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
591
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
592 if (pcv)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
593 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
594 ComplexMatrix m (len, 1);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
595 for (int i = 0; i < len; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
596 m.elem (i, 0) = v.elem (i);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
597 complex_matrix = new ComplexMatrix (m);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
598 type_tag = complex_matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
599 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
600 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
601 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
602 ComplexMatrix m (1, len);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
603 for (int i = 0; i < len; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
604 m.elem (0, i) = v.elem (i);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
605 complex_matrix = new ComplexMatrix (m);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
606 type_tag = complex_matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
607 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
608 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
609 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
610 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
611
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
612 TC_REP::tree_constant_rep (const char *s)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
613 {
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
614 str_obj = new Octave_str_obj (s);
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
615 type_tag = string_constant;
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
616 orig_text = 0;
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
617 }
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
618
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
619 TC_REP::tree_constant_rep (const Octave_str_obj& s)
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
620 {
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
621 str_obj = new Octave_str_obj (s);
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
622 type_tag = string_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
623 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
624 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
625
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
626 TC_REP::tree_constant_rep (double b, double l, double i)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
627 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
628 range = new Range (b, l, i);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
629 int nel = range->nelem ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
630 if (nel > 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
631 type_tag = range_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
632 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
633 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
634 delete range;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
635 if (nel == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
636 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
637 scalar = b;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
638 type_tag = scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
639 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
640 else if (nel == 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
641 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
642 matrix = new Matrix ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
643 type_tag = matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
644 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
645 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
646 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
647 type_tag = unknown_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
648 if (nel == -1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
649 ::error ("number of elements in range exceeds INT_MAX");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
650 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
651 ::error ("invalid range");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
652 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
653 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
654 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
655 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
656
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
657 TC_REP::tree_constant_rep (const Range& r)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
658 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
659 int nel = r.nelem ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
660 if (nel > 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
661 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
662 range = new Range (r);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
663 type_tag = range_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
664 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
665 else if (nel == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
666 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
667 scalar = r.base ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
668 type_tag = scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
669 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
670 else if (nel == 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
671 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
672 matrix = new Matrix ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
673 type_tag = matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
674 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
675 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
676 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
677 type_tag = unknown_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
678 if (nel == -1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
679 ::error ("number of elements in range exceeds INT_MAX");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
680 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
681 ::error ("invalid range");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
682 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
683
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
684 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
685 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
686
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
687 TC_REP::tree_constant_rep (const Octave_map& m)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
688 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
689 a_map = new Octave_map (m);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
690 type_tag = map_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
691 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
692 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
693
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
694 TC_REP::tree_constant_rep (TC_REP::constant_type t)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
695 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
696 assert (t == magic_colon || t == all_va_args);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
697 type_tag = t;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
698 orig_text = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
699 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
700
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
701 TC_REP::tree_constant_rep (const tree_constant_rep& t)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
702 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
703 type_tag = t.type_tag;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
704
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
705 switch (t.type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
706 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
707 case unknown_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
708 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
709
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
710 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
711 scalar = t.scalar;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
712 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
713
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
714 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
715 matrix = new Matrix (*(t.matrix));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
716 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
717
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
718 case string_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
719 str_obj = new Octave_str_obj (*(t.str_obj));
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
720 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
721
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
722 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
723 complex_matrix = new ComplexMatrix (*(t.complex_matrix));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
724 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
725
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
726 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
727 complex_scalar = new Complex (*(t.complex_scalar));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
728 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
729
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
730 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
731 range = new Range (*(t.range));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
732 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
733
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
734 case map_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
735 a_map = new Octave_map (*(t.a_map));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
736 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
737
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
738 case magic_colon:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
739 case all_va_args:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
740 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
741 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
742
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
743 orig_text = strsave (t.orig_text);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
744 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
745
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
746 TC_REP::~tree_constant_rep (void)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
747 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
748 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
749 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
750 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
751 delete matrix;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
752 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
753
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
754 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
755 delete complex_scalar;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
756 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
757
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
758 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
759 delete complex_matrix;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
760 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
761
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
762 case string_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
763 delete str_obj;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
764 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
765
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
766 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
767 delete range;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
768 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
769
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
770 case map_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
771 delete a_map;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
772 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
773
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
774 case unknown_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
775 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
776 case magic_colon:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
777 case all_va_args:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
778 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
779 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
780
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
781 delete [] orig_text;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
782 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
783
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
784 void *
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
785 TC_REP::operator new (size_t size)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
786 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
787 assert (size == sizeof (TC_REP));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
788
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
789 if (! tc_rep_newlist)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
790 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
791 int block_size = tc_rep_newlist_grow_size * sizeof (TC_REP);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
792 tc_rep_newlist = (TC_REP *) new char [block_size];
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
793
1321
64819a909ed7 [project @ 1995-08-22 05:39:43 by jwe]
jwe
parents: 1320
diff changeset
794 int i = 0;
64819a909ed7 [project @ 1995-08-22 05:39:43 by jwe]
jwe
parents: 1320
diff changeset
795
64819a909ed7 [project @ 1995-08-22 05:39:43 by jwe]
jwe
parents: 1320
diff changeset
796 for (i = 0; i < tc_rep_newlist_grow_size - 1; i++)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
797 tc_rep_newlist[i].freeptr = &tc_rep_newlist[i+1];
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
798
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
799 tc_rep_newlist[i].freeptr = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
800 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
801
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
802 TC_REP *tmp = tc_rep_newlist;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
803 tc_rep_newlist = tc_rep_newlist->freeptr;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
804 return tmp;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
805 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
806
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
807 void
1488
89c587478067 [project @ 1995-09-26 22:49:48 by jwe]
jwe
parents: 1430
diff changeset
808 TC_REP::operator delete (void *p, size_t /* size */)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
809 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
810 TC_REP *tmp = (TC_REP *) p;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
811 tmp->freeptr = tc_rep_newlist;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
812 tc_rep_newlist = tmp;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
813 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
814
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
815 int
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
816 TC_REP::rows (void) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
817 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
818 int retval = -1;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
819
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
820 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
821 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
822 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
823 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
824 retval = 1;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
825 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
826
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
827 case string_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
828 retval = str_obj->num_strings ();
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
829 break;
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
830
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
831 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
832 retval = (columns () > 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
833 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
834
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
835 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
836 retval = matrix->rows ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
837 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
838
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
839 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
840 retval = complex_matrix->rows ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
841 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
842
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
843 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
844 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
845 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
846
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
847 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
848 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
849
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
850 int
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
851 TC_REP::columns (void) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
852 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
853 int retval = -1;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
854
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
855 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
856 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
857 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
858 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
859 retval = 1;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
860 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
861
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
862 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
863 retval = matrix->columns ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
864 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
865
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
866 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
867 retval = complex_matrix->columns ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
868 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
869
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
870 case string_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
871 retval = str_obj->max_length ();
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
872 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
873
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
874 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
875 retval = range->nelem ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
876 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
877
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
878 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
879 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
880 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
881
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
882 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
883 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
884
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
885 tree_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
886 TC_REP::all (void) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
887 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
888 tree_constant retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
889
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
890 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
891 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
892
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
893 if (! is_numeric_type ())
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
894 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
895 tree_constant tmp = make_numeric ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
896
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
897 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
898 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
899
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
900 return tmp.all ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
901 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
902
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
903 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
904 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
905 case scalar_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
906 retval = (double) (scalar != 0.0);
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
907 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
908
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
909 case matrix_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
910 retval = matrix->all ();
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
911 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
912
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
913 case complex_scalar_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
914 retval = (double) (*complex_scalar != 0.0);
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
915 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
916
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
917 case complex_matrix_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
918 retval = complex_matrix->all ();
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
919 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
920
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
921 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
922 gripe_wrong_type_arg ("all", *this);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
923 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
924 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
925
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
926 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
927 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
928
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
929 tree_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
930 TC_REP::any (void) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
931 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
932 tree_constant retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
933
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
934 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
935 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
936
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
937 if (! is_numeric_type ())
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
938 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
939 tree_constant tmp = make_numeric ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
940
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
941 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
942 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
943
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
944 return tmp.any ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
945 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
946
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
947 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
948 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
949 case scalar_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
950 retval = (double) (scalar != 0.0);
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
951 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
952
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
953 case matrix_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
954 retval = matrix->any ();
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
955 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
956
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
957 case complex_scalar_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
958 retval = (double) (*complex_scalar != 0.0);
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
959 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
960
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
961 case complex_matrix_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
962 retval = complex_matrix->any ();
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
963 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
964
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
965 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
966 gripe_wrong_type_arg ("any", *this);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
967 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
968 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
969
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
970 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
971 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
972
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
973 int
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
974 TC_REP::valid_as_scalar_index (void) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
975 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
976 return (type_tag == magic_colon
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
977 || (type_tag == scalar_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
978 && ! xisnan (scalar)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
979 && NINT (scalar) == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
980 || (type_tag == range_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
981 && range->nelem () == 1
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
982 && ! xisnan (range->base ())
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
983 && NINT (range->base ()) == 1));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
984 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
985
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
986 int
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
987 TC_REP::valid_as_zero_index (void) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
988 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
989 return ((type_tag == scalar_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
990 && ! xisnan (scalar)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
991 && NINT (scalar) == 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
992 || (type_tag == matrix_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
993 && matrix->rows () == 0
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
994 && matrix->columns () == 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
995 || (type_tag == range_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
996 && range->nelem () == 1
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
997 && ! xisnan (range->base ())
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
998 && NINT (range->base ()) == 0));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
999 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1000
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1001 int
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1002 TC_REP::is_true (void) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1003 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1004 int retval = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1005
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1006 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1007 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1008
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1009 if (! is_numeric_type ())
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1010 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1011 tree_constant tmp = make_numeric ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1012
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1013 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1014 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1015
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1016 return tmp.is_true ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1017 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1018
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1019 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1020 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1021 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1022 retval = (scalar != 0.0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1023 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1024
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1025 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1026 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1027 Matrix m = (matrix->all ()) . all ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1028 retval = (m.rows () == 1
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1029 && m.columns () == 1
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1030 && m.elem (0, 0) != 0.0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1031 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1032 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1033
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1034 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1035 retval = (*complex_scalar != 0.0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1036 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1037
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1038 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1039 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1040 Matrix m = (complex_matrix->all ()) . all ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1041 retval = (m.rows () == 1
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1042 && m.columns () == 1
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1043 && m.elem (0, 0) != 0.0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1044 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1045 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1046
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1047 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1048 gripe_wrong_type_arg (0, *this);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1049 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1050 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1051
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1052 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1053 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1054
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1055 static void
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1056 warn_implicit_conversion (const char *from, const char *to)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1057 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1058 warning ("implicit conversion from %s to %s", from, to);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1059 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1060
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1061 double
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1062 TC_REP::double_value (int force_string_conversion) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1063 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1064 double retval = octave_NaN;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1065
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1066 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1067 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1068 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1069 retval = scalar;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1070 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1071
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1072 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1073 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1074 if (user_pref.do_fortran_indexing && rows () > 0 && columns () > 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1075 retval = matrix->elem (0, 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1076 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1077 gripe_invalid_conversion ("real matrix", "real scalar");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1078 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1079 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1080
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1081 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1082 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1083 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1084 int flag = user_pref.ok_to_lose_imaginary_part;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1085
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1086 if (flag < 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1087 warn_implicit_conversion ("complex scalar", "real scalar");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1088
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1089 if (flag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1090 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1091 if (type_tag == complex_scalar_constant)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1092 retval = ::real (*complex_scalar);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1093 else if (type_tag == complex_matrix_constant)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1094 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1095 if (user_pref.do_fortran_indexing
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1096 && rows () > 0 && columns () > 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1097 retval = ::real (complex_matrix->elem (0, 0));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1098 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1099 gripe_invalid_conversion ("complex matrix", "real scalar");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1100 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1101 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1102 panic_impossible ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1103 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1104 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1105 gripe_invalid_conversion ("complex scalar", "real scalar");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1106 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1107 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1108
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1109 case string_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1110 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1111 int flag = force_string_conversion;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1112 if (! flag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1113 flag = user_pref.implicit_str_to_num_ok;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1114
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1115 if (flag < 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1116 warn_implicit_conversion ("string", "real scalar");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1117
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1118 int len = str_obj->max_length ();
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1119 if (flag
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1120 && ((str_obj->num_strings () == 1 && len == 1)
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1121 || (len > 1 && user_pref.do_fortran_indexing)))
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1122 retval = toascii ((int) str_obj->elem (0, 0));
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1123 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1124 gripe_invalid_conversion ("string", "real scalar");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1125 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1126 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1127
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1128 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1129 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1130 int nel = range->nelem ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1131 if (nel == 1 || (nel > 1 && user_pref.do_fortran_indexing))
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1132 retval = range->base ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1133 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1134 gripe_invalid_conversion ("range", "real scalar");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1135 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1136 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1137
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1138 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1139 gripe_invalid_conversion (type_as_string (), "real scalar");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1140 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1141 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1142
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1143 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1144 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1145
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1146 Matrix
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1147 TC_REP::matrix_value (int force_string_conversion) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1148 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1149 Matrix retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1150
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1151 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1152 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1153 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1154 retval = Matrix (1, 1, scalar);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1155 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1156
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1157 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1158 retval = *matrix;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1159 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1160
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1161 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1162 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1163 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1164 int flag = user_pref.ok_to_lose_imaginary_part;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1165 if (flag < 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1166 warn_implicit_conversion ("complex matrix", "real matrix");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1167
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1168 if (flag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1169 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1170 if (type_tag == complex_scalar_constant)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1171 retval = Matrix (1, 1, ::real (*complex_scalar));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1172 else if (type_tag == complex_matrix_constant)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1173 retval = ::real (*complex_matrix);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1174 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1175 panic_impossible ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1176 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1177 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1178 gripe_invalid_conversion ("complex matrix", "real matrix");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1179 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1180 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1181
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1182 case string_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1183 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1184 int flag = force_string_conversion;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1185 if (! flag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1186 flag = user_pref.implicit_str_to_num_ok;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1187
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1188 if (flag < 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1189 warn_implicit_conversion ("string", "real matrix");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1190
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1191 if (flag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1192 {
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1193 int nr = str_obj->num_strings ();
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1194 int nc = str_obj->max_length ();
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1195
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1196 if (nr > 0 && nc > 0)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1197 {
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1198 retval.resize (nr, nc);
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1199
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1200 for (int i = 0; i < nr; i++)
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1201 {
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1202 for (int j = 0; j < nc; j++)
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1203 {
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1204 int c = (int) str_obj->elem (i, j);
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1205 retval.elem (i, j) = toascii (c);
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1206 }
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1207 }
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1208 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1209 else
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1210 retval = Matrix (); // XXX FIXME XXX -- is this correct?
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1211 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1212 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1213 gripe_invalid_conversion ("string", "real matrix");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1214 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1215 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1216
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1217 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1218 retval = range->matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1219 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1220
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1221 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1222 gripe_invalid_conversion (type_as_string (), "real matrix");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1223 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1224 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1225
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1226 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1227 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1228
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1229 Complex
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1230 TC_REP::complex_value (int force_string_conversion) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1231 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1232 Complex retval (octave_NaN, octave_NaN);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1233
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1234 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1235 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1236 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1237 retval = *complex_scalar;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1238 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1239
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1240 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1241 retval = scalar;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1242 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1243
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1244 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1245 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1246 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1247 if (user_pref.do_fortran_indexing && rows () > 0 && columns () > 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1248 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1249 if (type_tag == complex_matrix_constant)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1250 retval = complex_matrix->elem (0, 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1251 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1252 retval = matrix->elem (0, 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1253 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1254 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1255 gripe_invalid_conversion ("real matrix", "real scalar");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1256 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1257 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1258
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1259 case string_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1260 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1261 int flag = force_string_conversion;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1262 if (! flag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1263 flag = user_pref.implicit_str_to_num_ok;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1264
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1265 if (flag < 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1266 warn_implicit_conversion ("string", "complex scalar");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1267
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1268 int len = str_obj->max_length ();
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1269 if (flag
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1270 && ((str_obj->num_strings () == 1 && len == 1)
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1271 || (len > 1 && user_pref.do_fortran_indexing)))
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1272 retval = toascii ((int) str_obj->elem (0, 0));
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1273 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1274 gripe_invalid_conversion ("string", "complex scalar");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1275 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1276 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1277
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1278 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1279 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1280 int nel = range->nelem ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1281 if (nel == 1 || (nel > 1 && user_pref.do_fortran_indexing))
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1282 retval = range->base ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1283 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1284 gripe_invalid_conversion ("range", "complex scalar");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1285 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1286 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1287
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1288 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1289 gripe_invalid_conversion (type_as_string (), "complex scalar");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1290 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1291 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1292
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1293 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1294 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1295
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1296 ComplexMatrix
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1297 TC_REP::complex_matrix_value (int force_string_conversion) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1298 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1299 ComplexMatrix retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1300
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1301 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1302 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1303 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1304 retval = ComplexMatrix (1, 1, Complex (scalar));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1305 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1306
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1307 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1308 retval = ComplexMatrix (1, 1, *complex_scalar);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1309 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1310
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1311 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1312 retval = ComplexMatrix (*matrix);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1313 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1314
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1315 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1316 retval = *complex_matrix;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1317 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1318
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1319 case string_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1320 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1321 int flag = force_string_conversion;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1322 if (! flag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1323 flag = user_pref.implicit_str_to_num_ok;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1324
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1325 if (flag < 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1326 warn_implicit_conversion ("string", "complex matrix");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1327
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1328 if (flag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1329 {
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1330 int nr = str_obj->num_strings ();
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1331 int nc = str_obj->max_length ();
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1332
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1333 if (nr > 0 && nc > 0)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1334 {
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1335 retval.resize (nr, nc);
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1336
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1337 for (int i = 0; i < nr; i++)
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1338 {
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1339 for (int j = 0; j < nc; j++)
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1340 {
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1341 int c = (int) str_obj->elem (i, j);
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1342 retval.elem (i, j) = toascii (c);
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1343 }
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1344 }
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1345 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1346 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1347 panic_impossible ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1348 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1349 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1350 gripe_invalid_conversion ("string", "real matrix");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1351 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1352 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1353
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1354 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1355 retval = range->matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1356 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1357
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1358 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1359 gripe_invalid_conversion (type_as_string (), "complex matrix");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1360 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1361 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1362
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1363 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1364 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1365
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1366 Octave_str_obj
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1367 TC_REP::all_strings (void) const
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1368 {
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1369 if (type_tag == string_constant)
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1370 return *str_obj;
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1371 else
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1372 {
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1373 gripe_invalid_conversion (type_as_string (), "string");
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1374 return 0;
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1375 }
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1376 }
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1377
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1378 const char *
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1379 TC_REP::string_value (void) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1380 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1381 if (type_tag == string_constant)
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1382 return str_obj->elem (0).c_str (); // XXX FIXME??? XXX
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1383 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1384 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1385 gripe_invalid_conversion (type_as_string (), "string");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1386 return 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1387 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1388 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1389
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1390 Range
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1391 TC_REP::range_value (void) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1392 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1393 assert (type_tag == range_constant);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1394 return *range;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1395 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1396
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1397 Octave_map
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1398 TC_REP::map_value (void) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1399 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1400 assert (type_tag == map_constant);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1401 return *a_map;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1402 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1403
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1404 tree_constant&
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1405 TC_REP::lookup_map_element (const char *name, int insert, int silent)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1406 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1407 static tree_constant retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1408
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1409 if (type_tag == map_constant)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1410 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1411 Pix idx = a_map->seek (name);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1412
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1413 if (idx)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1414 return a_map->contents (idx);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1415 else if (insert)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1416 return (*a_map) [name];
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1417 else if (! silent)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1418 error ("structure has no member `%s'", name);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1419 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1420 else if (! silent)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1421 error ("invalid structure access attempted");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1422
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1423 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1424 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1425
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1426 // This could be made more efficient by doing all the work here rather
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1427 // than relying on matrix_value() to do any possible type conversions.
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1428
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1429 ColumnVector
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1430 TC_REP::vector_value (int force_string_conversion,
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1431 int force_vector_conversion) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1432 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1433 ColumnVector retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1434
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1435 Matrix m = matrix_value (force_string_conversion);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1436
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1437 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1438 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1439
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1440 int nr = m.rows ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1441 int nc = m.columns ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1442 if (nr == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1443 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1444 retval.resize (nc);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1445 for (int i = 0; i < nc; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1446 retval.elem (i) = m (0, i);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1447 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1448 else if (nc == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1449 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1450 retval.resize (nr);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1451 for (int i = 0; i < nr; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1452 retval.elem (i) = m.elem (i, 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1453 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1454 else if (nr > 0 && nc > 0
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1455 && (user_pref.do_fortran_indexing || force_vector_conversion))
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1456 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1457 retval.resize (nr * nc);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1458 int k = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1459 for (int j = 0; j < nc; j++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1460 for (int i = 0; i < nr; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1461 retval.elem (k++) = m.elem (i, j);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1462 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1463 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1464 gripe_invalid_conversion ("real matrix", "real vector");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1465
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1466 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1467 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1468
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1469 // This could be made more efficient by doing all the work here rather
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1470 // than relying on complex_matrix_value() to do any possible type
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1471 // conversions.
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1472
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1473 ComplexColumnVector
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1474 TC_REP::complex_vector_value (int force_string_conversion,
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1475 int force_vector_conversion) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1476 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1477 ComplexColumnVector retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1478
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1479 ComplexMatrix m = complex_matrix_value (force_string_conversion);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1480
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1481 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1482 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1483
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1484 int nr = m.rows ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1485 int nc = m.columns ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1486 if (nr == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1487 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1488 retval.resize (nc);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1489 for (int i = 0; i < nc; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1490 retval.elem (i) = m (0, i);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1491 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1492 else if (nc == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1493 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1494 retval.resize (nr);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1495 for (int i = 0; i < nr; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1496 retval.elem (i) = m.elem (i, 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1497 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1498 else if (nr > 0 && nc > 0
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1499 && (user_pref.do_fortran_indexing || force_vector_conversion))
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1500 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1501 retval.resize (nr * nc);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1502 int k = 0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1503 for (int j = 0; j < nc; j++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1504 for (int i = 0; i < nr; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1505 retval.elem (k++) = m.elem (i, j);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1506 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1507 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1508 gripe_invalid_conversion ("complex matrix", "complex vector");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1509
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1510 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1511 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1512
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1513 tree_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1514 TC_REP::convert_to_str (void) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1515 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1516 tree_constant retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1517
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1518 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1519 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1520 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1521 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1522 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1523 double d = double_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1524
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1525 if (xisnan (d))
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1526 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1527 ::error ("invalid conversion from NaN to character");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1528 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1529 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1530 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1531 {
1358
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
1532 // XXX FIXME XXX -- warn about out of range conversions?
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
1533
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1534 int i = NINT (d);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1535 char s[2];
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1536 s[0] = (char) i;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1537 s[1] = '\0';
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1538 retval = s;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1539 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1540 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1541 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1542
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1543 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1544 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1545 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1546 if (rows () == 0 && columns () == 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1547 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1548 char s = '\0';
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1549 retval = &s;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1550 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1551 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1552 {
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1553 Matrix m = matrix_value ();
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1554
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1555 int nr = m.rows ();
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1556 int nc = m.columns ();
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1557
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1558 if (nr == 0 || nc == 0)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1559 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1560 char s = '\0';
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1561 retval = &s;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1562 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1563 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1564 {
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1565 Octave_str_obj s (nr);
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1566
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1567 for (int i = 0; i < nr; i++)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1568 {
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1569 char buf[nc+1];
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1570 buf[nc] = '\0';
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1571
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1572 for (int j = 0; j < nc; j++)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1573 {
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1574 double d = m.elem (i, j);
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1575
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1576 if (xisnan (d))
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1577 {
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1578 ::error ("invalid conversion from NaN to character");
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1579 return retval;
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1580 }
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1581 else
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1582 {
1358
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
1583 // XXX FIXME XXX -- warn about out of
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
1584 // range conversions?
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1585
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1586 int ival = NINT (d);
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1587 buf[j] = (char) ival;
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1588 }
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1589 }
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1590
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1591 s.elem (i).assign (buf, nc);
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1592 }
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1593
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1594 retval = s;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1595 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1596 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1597 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1598 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1599
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1600 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1601 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1602 Range r = range_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1603 double b = r.base ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1604 double incr = r.inc ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1605 int nel = r.nelem ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1606 char *s = new char [nel+1];
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1607 s[nel] = '\0';
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1608 for (int i = 0; i < nel; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1609 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1610 double d = b + i * incr;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1611
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1612 if (xisnan (d))
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1613 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1614 ::error ("invalid conversion from NaN to character");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1615 delete [] s;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1616 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1617 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1618 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1619 {
1358
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
1620 // XXX FIXME XXX -- warn about out of range
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
1621 // conversions?
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
1622
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1623 int ival = NINT (d);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1624 s[i] = (char) ival;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1625 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1626 }
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1627 retval = s;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1628 delete [] s;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1629 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1630 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1631
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1632 case string_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1633 retval = *str_obj;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1634 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1635
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1636 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1637 gripe_invalid_conversion (type_as_string (), "string");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1638 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1639 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1640
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1641 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1642 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1643
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1644 void
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1645 TC_REP::convert_to_row_or_column_vector (void)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1646 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1647 assert (type_tag == matrix_constant || type_tag == complex_matrix_constant);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1648
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1649 int nr = rows ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1650 int nc = columns ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1651
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1652 if (nr == 1 || nc == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1653 return;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1654
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1655 int len = nr * nc;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1656
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1657 assert (len > 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1658
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1659 int new_nr = 1;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1660 int new_nc = 1;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1661
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1662 if (user_pref.prefer_column_vectors)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1663 new_nr = len;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1664 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1665 new_nc = len;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1666
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1667 if (type_tag == matrix_constant)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1668 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1669 Matrix *m = new Matrix (new_nr, new_nc);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1670
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1671 double *cop_out = matrix->fortran_vec ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1672
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1673 for (int i = 0; i < len; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1674 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1675 if (new_nr == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1676 m->elem (0, i) = *cop_out++;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1677 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1678 m->elem (i, 0) = *cop_out++;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1679 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1680
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1681 delete matrix;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1682 matrix = m;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1683 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1684 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1685 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1686 ComplexMatrix *cm = new ComplexMatrix (new_nr, new_nc);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1687
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1688 Complex *cop_out = complex_matrix->fortran_vec ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1689
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1690 for (int i = 0; i < len; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1691 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1692 if (new_nr == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1693 cm->elem (0, i) = *cop_out++;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1694 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1695 cm->elem (i, 0) = *cop_out++;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1696 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1697
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1698 delete complex_matrix;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1699 complex_matrix = cm;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1700 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1701 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1702
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1703 void
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1704 TC_REP::convert_to_matrix_type (void)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1705 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1706 switch (type_tag)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1707 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1708 case complex_scalar_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1709 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1710 Complex *old_complex = complex_scalar;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1711 complex_matrix = new ComplexMatrix (1, 1, *complex_scalar);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1712 type_tag = complex_matrix_constant;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1713 delete old_complex;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1714 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1715 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1716
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1717 case scalar_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1718 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1719 matrix = new Matrix (1, 1, scalar);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1720 type_tag = matrix_constant;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1721 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1722 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1723
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1724 case unknown_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1725 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1726 matrix = new Matrix (0, 0);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1727 type_tag = matrix_constant;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1728 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1729 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1730
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1731 default:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1732 panic_impossible ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1733 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1734 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1735 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1736
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
1737 void
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1738 TC_REP::force_numeric (int force_str_conv)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1739 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1740 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1741 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1742 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1743 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1744 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1745 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1746 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1747
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1748 case string_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1749 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1750 if (! force_str_conv && ! user_pref.implicit_str_to_num_ok)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1751 {
1490
4d6c168ff235 [project @ 1995-09-29 03:59:46 by jwe]
jwe
parents: 1488
diff changeset
1752 ::error ("string to numeric conversion failed --\
4d6c168ff235 [project @ 1995-09-29 03:59:46 by jwe]
jwe
parents: 1488
diff changeset
1753 default conversion turned off");
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1754 return;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1755 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1756
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1757 int nr = str_obj->num_strings ();
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1758 int nc = str_obj->max_length ();
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1759
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1760 if (nr == 1 && nc == 1)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1761 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1762 type_tag = scalar_constant;
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1763 scalar = toascii ((int) str_obj->elem (0, 0));
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1764 }
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1765 else if (nr == 0 || nc == 0)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1766 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1767 type_tag = matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1768 matrix = new Matrix (0, 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1769 }
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1770 else if (nr > 0 && nc > 0)
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1771 {
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1772 type_tag = matrix_constant;
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1773
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1774 Matrix *tm = new Matrix (nr, nc);
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1775
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1776 for (int i = 0; i < nr; i++)
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1777 {
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1778 for (int j = 0; j < nc; j++)
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1779 {
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1780 int c = (int) str_obj->elem (i, j);
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1781 tm->elem (i, j) = toascii (c);
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1782 }
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1783 }
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1784 matrix = tm;
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1785 }
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1786 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1787 panic_impossible ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1788 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1789 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1790
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1791 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1792 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1793 int len = range->nelem ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1794 if (len > 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1795 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1796 type_tag = matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1797 Matrix *tm = new Matrix (1, len);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1798 double b = range->base ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1799 double increment = range->inc ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1800 for (int i = 0; i < len; i++)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1801 tm->elem (0, i) = b + i * increment;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1802 matrix = tm;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1803 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1804 else if (len == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1805 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1806 type_tag = scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1807 scalar = range->base ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1808 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1809 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1810 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1811
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1812 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1813 gripe_invalid_conversion (type_as_string (), "numeric type");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1814 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1815 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1816 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1817
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1818 tree_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1819 TC_REP::make_numeric (int force_str_conv) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1820 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1821 tree_constant retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1822
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1823 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1824 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1825 case scalar_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1826 retval = scalar;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1827 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1828
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1829 case matrix_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1830 retval = *matrix;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1831 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1832
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1833 case complex_scalar_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1834 retval = *complex_scalar;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1835 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1836
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1837 case complex_matrix_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1838 retval = *complex_matrix;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1839 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1840
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1841 case string_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1842 retval = *str_obj;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1843 retval.force_numeric (force_str_conv);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1844 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1845
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1846 case range_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
1847 retval = *range;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1848 retval.force_numeric (force_str_conv);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1849 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1850
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1851 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1852 gripe_invalid_conversion (type_as_string (), "numeric value");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1853 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1854 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1855
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1856 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1857 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1858
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1859 void
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1860 TC_REP::bump_value (tree_expression::type etype)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1861 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1862 switch (etype)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1863 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1864 case tree_expression::increment:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1865 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1866 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1867 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1868 scalar++;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1869 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1870
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1871 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1872 *matrix = *matrix + 1.0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1873 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1874
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1875 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1876 *complex_scalar = *complex_scalar + 1.0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1877 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1878
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1879 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1880 *complex_matrix = *complex_matrix + 1.0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1881 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1882
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1883 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1884 range->set_base (range->base () + 1.0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1885 range->set_limit (range->limit () + 1.0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1886 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1887
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1888 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1889 gripe_wrong_type_arg ("operator ++", type_as_string ());
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1890 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1891 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1892 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1893
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1894 case tree_expression::decrement:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1895 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1896 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1897 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1898 scalar--;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1899 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1900
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1901 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1902 *matrix = *matrix - 1.0;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1903 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1904
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1905 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1906 range->set_base (range->base () - 1.0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1907 range->set_limit (range->limit () - 1.0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1908 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1909
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1910 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1911 gripe_wrong_type_arg ("operator --", type_as_string ());
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1912 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1913 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1914 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1915
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1916 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1917 panic_impossible ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1918 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1919 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1920 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1921
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1922 void
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1923 TC_REP::resize (int i, int j)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1924 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1925 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1926 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1927 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1928 matrix->resize (i, j);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1929 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1930
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1931 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1932 complex_matrix->resize (i, j);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1933 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1934
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1935 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1936 gripe_wrong_type_arg ("resize", type_as_string ());
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1937 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1938 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1939 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1940
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1941 void
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1942 TC_REP::resize (int i, int j, double val)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1943 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1944 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1945 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1946 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1947 matrix->resize (i, j, val);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1948 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1949
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1950 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1951 complex_matrix->resize (i, j, val);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1952 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1953
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1954 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1955 gripe_wrong_type_arg ("resize", type_as_string ());
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1956 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1957 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1958 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1959
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1960 void
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1961 TC_REP::stash_original_text (char *s)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1962 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1963 orig_text = strsave (s);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1964 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1965
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1966 void
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1967 TC_REP::maybe_mutate (void)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1968 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1969 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1970 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1971 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1972 if (::imag (*complex_scalar) == 0.0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1973 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1974 double d = ::real (*complex_scalar);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1975 delete complex_scalar;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1976 scalar = d;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1977 type_tag = scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1978 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1979 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1980
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1981 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1982 if (! any_element_is_complex (*complex_matrix))
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1983 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1984 Matrix *m = new Matrix (::real (*complex_matrix));
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1985 delete complex_matrix;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1986 matrix = m;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1987 type_tag = matrix_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1988 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1989 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1990
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1991 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1992 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1993 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1994
1358
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
1995 // Avoid calling rows() and columns() for things like magic_colon.
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1996
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1997 int nr = 1;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1998 int nc = 1;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
1999 if (type_tag == matrix_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2000 || type_tag == complex_matrix_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2001 || type_tag == range_constant)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2002 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2003 nr = rows ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2004 nc = columns ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2005 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2006
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2007 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2008 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2009 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2010 if (nr == 1 && nc == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2011 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2012 double d = matrix->elem (0, 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2013 delete matrix;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2014 scalar = d;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2015 type_tag = scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2016 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2017 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2018
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2019 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2020 if (nr == 1 && nc == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2021 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2022 Complex c = complex_matrix->elem (0, 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2023 delete complex_matrix;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2024 complex_scalar = new Complex (c);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2025 type_tag = complex_scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2026 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2027 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2028
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2029 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2030 if (nr == 1 && nc == 1)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2031 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2032 double d = range->base ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2033 delete range;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2034 scalar = d;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2035 type_tag = scalar_constant;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2036 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2037 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2038
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2039 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2040 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2041 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2042 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2043
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2044 void
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2045 TC_REP::print (ostream& output_buf)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2046 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2047 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2048 return;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2049
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2050 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2051 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2052 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2053 octave_print_internal (output_buf, scalar);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2054 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2055
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2056 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2057 octave_print_internal (output_buf, *matrix);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2058 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2059
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2060 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2061 octave_print_internal (output_buf, *complex_scalar);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2062 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2063
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2064 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2065 octave_print_internal (output_buf, *complex_matrix);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2066 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2067
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2068 case string_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
2069 octave_print_internal (output_buf, *str_obj);
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2070 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2071
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2072 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2073 octave_print_internal (output_buf, *range);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2074 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2075
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2076 case map_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2077 {
1358
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
2078 // XXX FIXME XXX -- would be nice to print the output in some
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
2079 // standard order. Maybe all substructures first, maybe
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
2080 // alphabetize entries, etc.
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
2081
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2082 begin_unwind_frame ("TC_REP_print");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2083
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2084 unwind_protect_int (structure_indent_level);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2085 unwind_protect_int (user_pref.struct_levels_to_print);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2086
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2087 if (user_pref.struct_levels_to_print-- > 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2088 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2089 output_buf << "{\n";
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2090
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2091 increment_structure_indent_level ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2092
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2093 for (Pix p = a_map->first (); p != 0; a_map->next (p))
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2094 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2095 const char *key = a_map->key (p);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2096 tree_constant val = a_map->contents (p);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2097
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2098 output_buf.form ("%*s%s = ", structure_indent_level,
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2099 "", key);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2100
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2101 if (! (print_as_scalar (val) || print_as_structure (val)))
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2102 output_buf << "\n";
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2103
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2104 val.print (output_buf);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2105 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2106
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2107 decrement_structure_indent_level ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2108
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2109 output_buf.form ("%*s%s", structure_indent_level, "", "}\n");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2110 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2111 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2112 output_buf << "<structure>\n";
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2113
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2114 run_unwind_frame ("TC_REP_print");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2115 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2116 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2117
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2118 case unknown_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2119 case magic_colon:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2120 case all_va_args:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2121 panic_impossible ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2122 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2123 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2124 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2125
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2126 void
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2127 TC_REP::print_code (ostream& os)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2128 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2129 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2130 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2131 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2132 if (orig_text)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2133 os << orig_text;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2134 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2135 octave_print_internal (os, scalar, 1);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2136 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2137
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2138 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2139 octave_print_internal (os, *matrix, 1);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2140 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2141
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2142 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2143 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2144 double re = complex_scalar->real ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2145 double im = complex_scalar->imag ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2146
1358
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
2147 // If we have the original text and a pure imaginary, just
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
2148 // print the original text, because this must be a constant
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
2149 // that was parsed as part of a function.
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2150
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2151 if (orig_text && re == 0.0 && im > 0.0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2152 os << orig_text;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2153 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2154 octave_print_internal (os, *complex_scalar, 1);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2155 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2156 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2157
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2158 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2159 octave_print_internal (os, *complex_matrix, 1);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2160 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2161
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2162 case string_constant:
1355
94697d007075 [project @ 1995-09-05 20:04:15 by jwe]
jwe
parents: 1331
diff changeset
2163 octave_print_internal (os, *str_obj, 1);
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2164 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2165
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2166 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2167 octave_print_internal (os, *range, 1);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2168 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2169
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2170 case magic_colon:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2171 os << ":";
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2172 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2173
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2174 case all_va_args:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2175 os << "all_va_args";
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2176 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2177
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2178 case map_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2179 case unknown_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2180 panic_impossible ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2181 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2182 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2183 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2184
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2185 void
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2186 TC_REP::gripe_wrong_type_arg (const char *name,
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2187 const tree_constant_rep& tcr) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2188 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2189 if (name)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2190 ::error ("%s: wrong type argument `%s'", name, tcr.type_as_string ());
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2191 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2192 ::error ("wrong type argument `%s'", name, tcr.type_as_string ());
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2193 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2194
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2195 char *
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2196 TC_REP::type_as_string (void) const
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2197 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2198 switch (type_tag)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2199 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2200 case scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2201 return "real scalar";
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2202
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2203 case matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2204 return "real matrix";
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2205
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2206 case complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2207 return "complex scalar";
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2208
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2209 case complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2210 return "complex matrix";
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2211
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2212 case string_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2213 return "string";
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2214
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2215 case range_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2216 return "range";
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2217
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2218 case map_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2219 return "structure";
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2220
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2221 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2222 return "<unknown type>";
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2223 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2224 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2225
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2226 tree_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2227 do_binary_op (tree_constant& a, tree_constant& b, tree_expression::type t)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2228 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2229 tree_constant retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2230
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2231 int first_empty = (a.rows () == 0 || a.columns () == 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2232 int second_empty = (b.rows () == 0 || b.columns () == 0);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2233
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2234 if (first_empty || second_empty)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2235 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2236 int flag = user_pref.propagate_empty_matrices;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2237 if (flag < 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2238 warning ("binary operation on empty matrix");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2239 else if (flag == 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2240 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2241 ::error ("invalid binary operation on empty matrix");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2242 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2243 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2244 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2245
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2246 tree_constant tmp_a = a.make_numeric ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2247
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2248 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2249 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2250
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2251 tree_constant tmp_b = b.make_numeric ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2252
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2253 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2254 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2255
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2256 TC_REP::constant_type a_type = tmp_a.const_type ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2257 TC_REP::constant_type b_type = tmp_b.const_type ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2258
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2259 double d1, d2;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2260 Matrix m1, m2;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2261 Complex c1, c2;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2262 ComplexMatrix cm1, cm2;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2263
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2264 switch (a_type)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2265 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2266 case TC_REP::scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2267
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2268 d1 = tmp_a.double_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2269
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2270 switch (b_type)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2271 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2272 case TC_REP::scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2273 d2 = tmp_b.double_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2274 retval = do_binary_op (d1, d2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2275 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2276
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2277 case TC_REP::matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2278 m2 = tmp_b.matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2279 retval = do_binary_op (d1, m2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2280 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2281
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2282 case TC_REP::complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2283 c2 = tmp_b.complex_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2284 retval = do_binary_op (d1, c2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2285 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2286
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2287 case TC_REP::complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2288 cm2 = tmp_b.complex_matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2289 retval = do_binary_op (d1, cm2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2290 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2291
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2292 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2293 gripe_wrong_type_arg_for_binary_op (tmp_b);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2294 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2295 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2296 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2297
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2298 case TC_REP::matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2300 m1 = tmp_a.matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2301
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2302 switch (b_type)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2303 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2304 case TC_REP::scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2305 d2 = tmp_b.double_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2306 retval = do_binary_op (m1, d2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2307 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2308
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2309 case TC_REP::matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2310 m2 = tmp_b.matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2311 retval = do_binary_op (m1, m2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2312 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2313
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2314 case TC_REP::complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2315 c2 = tmp_b.complex_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2316 retval = do_binary_op (m1, c2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2317 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2318
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2319 case TC_REP::complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2320 cm2 = tmp_b.complex_matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2321 retval = do_binary_op (m1, cm2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2322 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2323
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2324 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2325 gripe_wrong_type_arg_for_binary_op (tmp_b);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2326 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2327 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2328 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2329
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2330 case TC_REP::complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2331
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2332 c1 = tmp_a.complex_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2333
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2334 switch (b_type)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2335 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2336 case TC_REP::scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2337 d2 = tmp_b.double_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2338 retval = do_binary_op (c1, d2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2339 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2340
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2341 case TC_REP::matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2342 m2 = tmp_b.matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2343 retval = do_binary_op (c1, m2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2344 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2345
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2346 case TC_REP::complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2347 c2 = tmp_b.complex_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2348 retval = do_binary_op (c1, c2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2349 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2350
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2351 case TC_REP::complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2352 cm2 = tmp_b.complex_matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2353 retval = do_binary_op (c1, cm2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2354 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2355
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2356 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2357 gripe_wrong_type_arg_for_binary_op (tmp_b);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2358 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2359 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2360 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2361
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2362 case TC_REP::complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2363
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2364 cm1 = tmp_a.complex_matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2365
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2366 switch (b_type)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2367 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2368 case TC_REP::scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2369 d2 = tmp_b.double_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2370 retval = do_binary_op (cm1, d2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2371 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2372
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2373 case TC_REP::matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2374 m2 = tmp_b.matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2375 retval = do_binary_op (cm1, m2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2376 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2377
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2378 case TC_REP::complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2379 c2 = tmp_b.complex_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2380 retval = do_binary_op (cm1, c2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2381 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2382
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2383 case TC_REP::complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2384 cm2 = tmp_b.complex_matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2385 retval = do_binary_op (cm1, cm2, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2386 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2387
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2388 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2389 gripe_wrong_type_arg_for_binary_op (tmp_b);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2390 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2391 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2392 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2393
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2394 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2395 gripe_wrong_type_arg_for_binary_op (tmp_a);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2396 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2397 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2398
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2399 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2400 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2401
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2402 tree_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2403 do_unary_op (tree_constant& a, tree_expression::type t)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2404 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2405 tree_constant retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2406
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2407 if (a.rows () == 0 || a.columns () == 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2408 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2409 int flag = user_pref.propagate_empty_matrices;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2410 if (flag < 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2411 warning ("unary operation on empty matrix");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2412 else if (flag == 0)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2413 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2414 ::error ("invalid unary operation on empty matrix");
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2415 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2416 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2417 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2418
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2419 tree_constant tmp_a = a.make_numeric ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2420
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2421 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2422 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2423
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2424 switch (tmp_a.const_type ())
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2425 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2426 case TC_REP::scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2427 retval = do_unary_op (tmp_a.double_value (), t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2428 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2429
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2430 case TC_REP::matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2431 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2432 Matrix m = tmp_a.matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2433 retval = do_unary_op (m, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2434 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2435 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2436
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2437 case TC_REP::complex_scalar_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2438 retval = do_unary_op (tmp_a.complex_value (), t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2439 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2440
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2441 case TC_REP::complex_matrix_constant:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2442 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2443 ComplexMatrix m = tmp_a.complex_matrix_value ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2444 retval = do_unary_op (m, t);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2445 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2446 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2447
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2448 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2449 gripe_wrong_type_arg_for_unary_op (tmp_a);
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2450 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2451 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2452
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2453 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2454 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2455
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2456 // Indexing operations for the tree-constant representation class.
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2457
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2458 void
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2459 TC_REP::clear_index (void)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2460 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2461 switch (type_tag)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2462 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2463 case matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2464 matrix->clear_index ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2465 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2466
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2467 case TC_REP::complex_matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2468 complex_matrix->clear_index ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2469 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2470
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2471 default:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2472 panic_impossible ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2473 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2474 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2475 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2476
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2477 #if 0
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2478 void
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2479 TC_REP::set_index (double d)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2480 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2481 switch (type_tag)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2482 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2483 case matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2484 matrix->set_index (d);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2485 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2486
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2487 case TC_REP::complex_matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2488 complex_matrix->set_index (d);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2489 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2490
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2491 default:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2492 panic_impossible ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2493 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2494 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2495 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2496 #endif
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2497
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2498 void
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2499 TC_REP::set_index (const Range& r)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2500 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2501 switch (type_tag)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2502 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2503 case matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2504 matrix->set_index (r);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2505 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2506
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2507 case TC_REP::complex_matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2508 complex_matrix->set_index (r);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2509 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2510
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2511 default:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2512 panic_impossible ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2513 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2514 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2515 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2516
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2517 void
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2518 TC_REP::set_index (const ColumnVector& v)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2519 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2520 switch (type_tag)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2521 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2522 case matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2523 matrix->set_index (v);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2524 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2525
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2526 case TC_REP::complex_matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2527 complex_matrix->set_index (v);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2528 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2529
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2530 default:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2531 panic_impossible ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2532 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2533 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2534 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2535
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2536 void
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2537 TC_REP::set_index (const Matrix& m)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2538 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2539 int nr = m.rows ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2540 int nc = m.cols ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2541
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2542 if (nr <= 1 || nc <= 1
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2543 || user_pref.do_fortran_indexing)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2544 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2545 switch (type_tag)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2546 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2547 case matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2548 matrix->set_index (m);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2549 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2550
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2551 case TC_REP::complex_matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2552 complex_matrix->set_index (m);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2553 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2554
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2555 default:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2556 panic_impossible ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2557 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2558 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2559 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2560 else
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2561 ::error ("invalid matrix used as index");
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2562 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2563
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2564 // XXX FIXME XXX -- this should probably be handled some other way...
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2565 // The arg here is expected to be ':'.
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2566 void
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2567 TC_REP::set_index (char c)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2568 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2569 switch (type_tag)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2570 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2571 case matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2572 matrix->set_index (c);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2573 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2574
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2575 case TC_REP::complex_matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2576 complex_matrix->set_index (c);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2577 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2578
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2579 default:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2580 panic_impossible ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2581 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2582 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2583 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2584
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2585 void
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2586 TC_REP::set_index (const Octave_object& args)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2587 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2588 switch (type_tag)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2589 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2590 case unknown_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2591 case scalar_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2592 case complex_scalar_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2593 case range_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2594 convert_to_matrix_type ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2595 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2596
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2597 default:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2598 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2599 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2600
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2601 int n = args.length ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2602
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2603 for (int i = 0; i < n; i++)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2604 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2605 tree_constant arg = args (i);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2606
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2607 switch (arg.const_type ())
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2608 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2609 case range_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2610 set_index (arg.range_value ());
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2611 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2612
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2613 case magic_colon:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2614 set_index (':');
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2615 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2616
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2617 default:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2618 set_index (arg.matrix_value ());
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2619 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2620 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2621
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2622 if (error_state)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2623 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2624 clear_index ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2625 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2626 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2627 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2628 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2629
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2630 static inline int
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2631 valid_scalar_indices (const Octave_object& args)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2632 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2633 int nargin = args.length ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2634
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2635 for (int i = 0; i < nargin; i++)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2636 if (! args(i).valid_as_scalar_index ())
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2637 return 0;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2638
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2639 return 1;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2640 }
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2641
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2642 tree_constant
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2643 TC_REP::do_index (const Octave_object& args)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2644 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2645 tree_constant retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2646
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2647 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2648 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2649
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2650 int originally_scalar_type = is_scalar_type ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2651
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2652 if (originally_scalar_type && valid_scalar_indices (args))
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2653 {
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2654 switch (type_tag)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2655 {
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2656 case scalar_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2657 retval = scalar;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2658 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2659
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2660 case complex_scalar_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2661 retval = *complex_scalar;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2662 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2663
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2664 default:
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2665 panic_impossible ();
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2666 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2667 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2668 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2669 else
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2670 {
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2671 set_index (args);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2672
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2673 if (! error_state)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2674 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2675 switch (type_tag)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2676 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2677 case range_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2678 force_numeric ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2679 // Fall through...
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2680
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2681 case matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2682 retval = Matrix (matrix->value ());
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2683 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2684
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2685 case complex_matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2686 retval = ComplexMatrix (complex_matrix->value ());
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2687 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2688
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2689 default:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2690 error ("can't index %s variables", type_as_string ());
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2691 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2692 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2693 }
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2694
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2695 // This is a fairly expensive operation.
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2696
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2697 if (originally_scalar_type)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2698 maybe_mutate ();
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2699 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2700
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2701 return retval;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2702 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2703
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2704 void
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2705 TC_REP::maybe_widen (TC_REP::constant_type rhs_type)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2706 {
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2707 switch (type_tag)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2708 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2709 case matrix_constant:
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2710 switch (rhs_type)
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2711 {
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2712 case complex_scalar_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2713 case complex_matrix_constant:
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2714 {
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2715 ComplexMatrix *cm = new ComplexMatrix (*matrix);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2716 delete matrix;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2717 complex_matrix = cm;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2718 type_tag = complex_matrix_constant;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2719 }
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2720 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2721
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2722 default:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2723 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2724 }
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2725 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2726
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2727 default:
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2728 break;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2729 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2730 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2731
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2732 // Assignment operations for the tree-constant representation class.
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2733
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2734 // Top-level tree-constant function that handles assignments. Only
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2735 // decide if the left-hand side is currently a scalar or a matrix and
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2736 // hand off to other functions to do the real work.
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2737
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2738 extern void assign (Array2<Complex>&, const Array2<Complex>&);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2739 extern void assign (Array2<Complex>&, const Array2<double>&);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2740 extern void assign (Array2<double>&, const Array2<double>&);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2741
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2742 void
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2743 TC_REP::assign (tree_constant& rhs, const Octave_object& args)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2744 {
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2745 tree_constant rhs_tmp = rhs.make_numeric ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2746
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2747 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2748 return;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2749
1358
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
2750 // This is easier than actually handling assignments to strings. An
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
2751 // assignment to a range will normally require a conversion to a
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
2752 // vector since it will normally destroy the equally-spaced property
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1355
diff changeset
2753 // of the range elements.
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2754
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2755 if (is_defined () && ! is_numeric_type ())
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2756 force_numeric ();
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2757
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2758 if (error_state)
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2759 return;
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2760
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2761 // Do this before setting the index so that we don't have to copy
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2762 // indices in the Array class.
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2763
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2764 maybe_widen (rhs.const_type ());
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2765
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2766 set_index (args);
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2767
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2768 if (! error_state)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2769 {
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2770 switch (type_tag)
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2771 {
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2772 case complex_matrix_constant:
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2773 {
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2774 switch (rhs.const_type ())
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2775 {
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2776 case complex_scalar_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2777 case complex_matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2778 ::assign (*complex_matrix, rhs.complex_matrix_value ());
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2779 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2780
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2781 case scalar_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2782 case matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2783 ::assign (*complex_matrix, rhs.matrix_value ());
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2784 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2785
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2786 default:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2787 panic_impossible ();;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2788 break;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2789 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2790 }
1558
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2791 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2792
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2793 case scalar_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2794 case matrix_constant:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2795 ::assign (*matrix, rhs.matrix_value ());
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2796 break;
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2797
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2798 default:
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2799 panic_impossible ();
297e084c3857 [project @ 1995-10-12 07:20:28 by jwe]
jwe
parents: 1490
diff changeset
2800 break;
1299
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2801 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2802 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2803 }
484e94579182 [project @ 1995-05-01 18:50:20 by jwe]
jwe
parents: 1277
diff changeset
2804
96
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
2805 /*
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2806 ;;; Local Variables: ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2807 ;;; mode: C++ ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2808 ;;; page-delimiter: "^/\\*" ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2809 ;;; End: ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2810 */