annotate liboctave/Array-idx.h @ 4504:f6a61399bc5c

[project @ 2003-09-09 17:48:00 by jwe]
author jwe
date Tue, 09 Sep 2003 17:49:13 +0000
parents af308ca1a354
children 508238e65af7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1993
1b57120c997b [project @ 1996-03-03 01:16:15 by jwe]
jwe
parents: 1989
diff changeset
1 // Template array classes
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
2 /*
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
3
2847
8b262e771614 [project @ 1997-03-27 16:18:26 by jwe]
jwe
parents: 2830
diff changeset
4 Copyright (C) 1996, 1997 John W. Eaton
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
5
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
7
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
11 later version.
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
12
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
16 for more details.
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
17
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, write to the Free
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
21
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
22 */
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
23
1906
fb2b7ebf77e4 [project @ 1996-02-10 01:08:28 by jwe]
jwe
parents: 1882
diff changeset
24 #include "Array-flags.h"
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
25 #include "idx-vector.h"
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
26 #include "lo-error.h"
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
27
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
28 template <class T>
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
29 void
1619
1a35c8c91349 [project @ 1995-11-04 11:07:21 by jwe]
jwe
parents: 1614
diff changeset
30 Array<T>::clear_index (void)
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
31 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
32 delete [] idx;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
33 idx = 0;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
34 idx_count = 0;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
35 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
36
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
37 template <class T>
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
38 void
3513
6b8d14532d86 [project @ 2000-02-01 22:32:39 by jwe]
jwe
parents: 3512
diff changeset
39 Array<T>::set_index (const idx_vector& idx_arg)
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
40 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
41 if (! idx)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
42 idx = new idx_vector [max_indices];
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
43
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
44 if (idx_count < max_indices)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
45 {
3513
6b8d14532d86 [project @ 2000-02-01 22:32:39 by jwe]
jwe
parents: 3512
diff changeset
46 idx[idx_count++] = idx_arg;
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
47 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
48 else
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
49 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
50 (*current_liboctave_error_handler)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
51 ("invalid number of indices specified");
1619
1a35c8c91349 [project @ 1995-11-04 11:07:21 by jwe]
jwe
parents: 1614
diff changeset
52
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
53 clear_index ();
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
54 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
55 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
56
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
57 template <class T>
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
58 Array<T>
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
59 Array<T>::value (void)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
60 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
61 Array<T> retval;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
62
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
63 retval = index (idx[0]);
2381
81298641458d [project @ 1996-10-12 17:41:42 by jwe]
jwe
parents: 2245
diff changeset
64
81298641458d [project @ 1996-10-12 17:41:42 by jwe]
jwe
parents: 2245
diff changeset
65 clear_index ();
81298641458d [project @ 1996-10-12 17:41:42 by jwe]
jwe
parents: 2245
diff changeset
66
81298641458d [project @ 1996-10-12 17:41:42 by jwe]
jwe
parents: 2245
diff changeset
67 return retval;
81298641458d [project @ 1996-10-12 17:41:42 by jwe]
jwe
parents: 2245
diff changeset
68 }
81298641458d [project @ 1996-10-12 17:41:42 by jwe]
jwe
parents: 2245
diff changeset
69
81298641458d [project @ 1996-10-12 17:41:42 by jwe]
jwe
parents: 2245
diff changeset
70 template <class T>
81298641458d [project @ 1996-10-12 17:41:42 by jwe]
jwe
parents: 2245
diff changeset
71 Array<T>
4461
af308ca1a354 [project @ 2003-07-11 22:21:17 by jwe]
jwe
parents: 4409
diff changeset
72 Array<T>::index (idx_vector& idx_arg, int resize_ok, const T& rfv) const
2381
81298641458d [project @ 1996-10-12 17:41:42 by jwe]
jwe
parents: 2245
diff changeset
73 {
81298641458d [project @ 1996-10-12 17:41:42 by jwe]
jwe
parents: 2245
diff changeset
74 Array<T> retval;
81298641458d [project @ 1996-10-12 17:41:42 by jwe]
jwe
parents: 2245
diff changeset
75
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
76 int len = length ();
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
77
3933
f9ea3dcf58ee [project @ 2002-05-15 03:21:00 by jwe]
jwe
parents: 3836
diff changeset
78 int n = idx_arg.freeze (len, "vector", resize_ok);
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
79
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
80 if (idx_arg)
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
81 {
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
82 if (idx_arg.is_colon_equiv (len))
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
83 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
84 retval = *this;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
85 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
86 else if (n == 0)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
87 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
88 retval.resize (0);
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
89 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
90 else if (len == 1 && n > 1
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
91 && idx_arg.one_zero_only ()
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
92 && idx_arg.ones_count () == n)
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
93 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
94 retval.resize (n, elem (0));
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
95 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
96 else
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
97 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
98 retval.resize (n);
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
99
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
100 for (int i = 0; i < n; i++)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
101 {
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
102 int ii = idx_arg.elem (i);
4409
6b191c6e6875 [project @ 2003-05-11 16:41:10 by jwe]
jwe
parents: 4054
diff changeset
103 if (ii >= len)
4461
af308ca1a354 [project @ 2003-07-11 22:21:17 by jwe]
jwe
parents: 4409
diff changeset
104 retval.elem (i) = rfv;
3933
f9ea3dcf58ee [project @ 2002-05-15 03:21:00 by jwe]
jwe
parents: 3836
diff changeset
105 else
f9ea3dcf58ee [project @ 2002-05-15 03:21:00 by jwe]
jwe
parents: 3836
diff changeset
106 retval.elem (i) = elem (ii);
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
107 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
108 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
109 }
2381
81298641458d [project @ 1996-10-12 17:41:42 by jwe]
jwe
parents: 2245
diff changeset
110
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
111 // idx_vector::freeze() printed an error message for us.
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
112
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
113 return retval;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
114 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
115
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
116 template <class T>
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
117 void
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
118 Array<T>::maybe_delete_elements (idx_vector& idx_arg)
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
119 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
120 int len = length ();
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
121
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
122 if (len == 0)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
123 return;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
124
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
125 if (idx_arg.is_colon_equiv (len, 1))
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
126 resize (0);
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
127 else
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
128 {
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
129 int num_to_delete = idx_arg.length (len);
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
130
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
131 if (num_to_delete != 0)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
132 {
2245
aaeccf9e1d32 [project @ 1996-05-22 05:21:16 by jwe]
jwe
parents: 2112
diff changeset
133 int new_len = len;
aaeccf9e1d32 [project @ 1996-05-22 05:21:16 by jwe]
jwe
parents: 2112
diff changeset
134
aaeccf9e1d32 [project @ 1996-05-22 05:21:16 by jwe]
jwe
parents: 2112
diff changeset
135 int iidx = 0;
aaeccf9e1d32 [project @ 1996-05-22 05:21:16 by jwe]
jwe
parents: 2112
diff changeset
136
aaeccf9e1d32 [project @ 1996-05-22 05:21:16 by jwe]
jwe
parents: 2112
diff changeset
137 for (int i = 0; i < len; i++)
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
138 if (i == idx_arg.elem (iidx))
2245
aaeccf9e1d32 [project @ 1996-05-22 05:21:16 by jwe]
jwe
parents: 2112
diff changeset
139 {
aaeccf9e1d32 [project @ 1996-05-22 05:21:16 by jwe]
jwe
parents: 2112
diff changeset
140 iidx++;
aaeccf9e1d32 [project @ 1996-05-22 05:21:16 by jwe]
jwe
parents: 2112
diff changeset
141 new_len--;
2918
c8e635ff1af4 [project @ 1997-04-30 21:41:08 by jwe]
jwe
parents: 2847
diff changeset
142
c8e635ff1af4 [project @ 1997-04-30 21:41:08 by jwe]
jwe
parents: 2847
diff changeset
143 if (iidx == num_to_delete)
c8e635ff1af4 [project @ 1997-04-30 21:41:08 by jwe]
jwe
parents: 2847
diff changeset
144 break;
2245
aaeccf9e1d32 [project @ 1996-05-22 05:21:16 by jwe]
jwe
parents: 2112
diff changeset
145 }
aaeccf9e1d32 [project @ 1996-05-22 05:21:16 by jwe]
jwe
parents: 2112
diff changeset
146
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
147 if (new_len > 0)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
148 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
149 T *new_data = new T [new_len];
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
150
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
151 int ii = 0;
2245
aaeccf9e1d32 [project @ 1996-05-22 05:21:16 by jwe]
jwe
parents: 2112
diff changeset
152 iidx = 0;
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
153 for (int i = 0; i < len; i++)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
154 {
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
155 if (iidx < num_to_delete && i == idx_arg.elem (iidx))
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
156 iidx++;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
157 else
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
158 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
159 new_data[ii] = elem (i);
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
160 ii++;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
161 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
162 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
163
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
164 if (--rep->count <= 0)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
165 delete rep;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
166
4054
ac132116db86 [project @ 2002-08-17 23:00:00 by jwe]
jwe
parents: 3933
diff changeset
167 rep = new typename Array<T>::ArrayRep (new_data, new_len);
1694
bad55bbcaf46 [project @ 1996-01-07 01:52:53 by jwe]
jwe
parents: 1634
diff changeset
168
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
169 set_max_indices (1);
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
170 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
171 else
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
172 (*current_liboctave_error_handler)
1634
8cb99fcbb357 [project @ 1995-11-14 23:14:46 by jwe]
jwe
parents: 1620
diff changeset
173 ("A(idx) = []: index out of range");
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
174 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
175 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
176 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
177
2014
b3fd115759b7 [project @ 1996-03-20 10:54:03 by jwe]
jwe
parents: 1993
diff changeset
178 // ??? FIXME ??? -- this does not handle assignment of empty vectors
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
179 // to delete elements. Should it?
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
180
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
181 template <class LT, class RT>
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
182 int
4461
af308ca1a354 [project @ 2003-07-11 22:21:17 by jwe]
jwe
parents: 4409
diff changeset
183 assign (Array<LT>& lhs, const Array<RT>& rhs, const LT& rfv)
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
184 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
185 int retval = 1;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
186
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
187 idx_vector *tmp = lhs.get_idx ();
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
188
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
189 idx_vector lhs_idx = tmp[0];
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
190
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
191 int lhs_len = lhs.length ();
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
192 int rhs_len = rhs.length ();
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
193
4461
af308ca1a354 [project @ 2003-07-11 22:21:17 by jwe]
jwe
parents: 4409
diff changeset
194 int n = lhs_idx.freeze (lhs_len, "vector", true, liboctave_wrore_flag);
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
195
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
196 if (n != 0)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
197 {
4461
af308ca1a354 [project @ 2003-07-11 22:21:17 by jwe]
jwe
parents: 4409
diff changeset
198 if (rhs_len == n || rhs_len == 1)
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
199 {
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
200 int max_idx = lhs_idx.max () + 1;
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
201 if (max_idx > lhs_len)
4461
af308ca1a354 [project @ 2003-07-11 22:21:17 by jwe]
jwe
parents: 4409
diff changeset
202 lhs.resize (max_idx, rfv);
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
203 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
204
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
205 if (rhs_len == n)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
206 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
207 for (int i = 0; i < n; i++)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
208 {
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
209 int ii = lhs_idx.elem (i);
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
210 lhs.elem (ii) = rhs.elem (i);
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
211 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
212 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
213 else if (rhs_len == 1)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
214 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
215 RT scalar = rhs.elem (0);
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
216
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
217 for (int i = 0; i < n; i++)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
218 {
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
219 int ii = lhs_idx.elem (i);
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
220 lhs.elem (ii) = scalar;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
221 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
222 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
223 else
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
224 {
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
225 (*current_liboctave_error_handler)
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
226 ("A(I) = X: X must be a scalar or a vector with same length as I");
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
227
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
228 retval = 0;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
229 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
230 }
3512
e72d846e6f60 [project @ 2000-02-01 22:24:42 by jwe]
jwe
parents: 3177
diff changeset
231 else if (lhs_idx.is_colon ())
2112
320f5463c201 [project @ 1996-05-03 01:19:22 by jwe]
jwe
parents: 2014
diff changeset
232 {
320f5463c201 [project @ 1996-05-03 01:19:22 by jwe]
jwe
parents: 2014
diff changeset
233 if (lhs_len == 0)
320f5463c201 [project @ 1996-05-03 01:19:22 by jwe]
jwe
parents: 2014
diff changeset
234 {
320f5463c201 [project @ 1996-05-03 01:19:22 by jwe]
jwe
parents: 2014
diff changeset
235 lhs.resize (rhs_len);
320f5463c201 [project @ 1996-05-03 01:19:22 by jwe]
jwe
parents: 2014
diff changeset
236
320f5463c201 [project @ 1996-05-03 01:19:22 by jwe]
jwe
parents: 2014
diff changeset
237 for (int i = 0; i < rhs_len; i++)
320f5463c201 [project @ 1996-05-03 01:19:22 by jwe]
jwe
parents: 2014
diff changeset
238 lhs.elem (i) = rhs.elem (i);
320f5463c201 [project @ 1996-05-03 01:19:22 by jwe]
jwe
parents: 2014
diff changeset
239 }
320f5463c201 [project @ 1996-05-03 01:19:22 by jwe]
jwe
parents: 2014
diff changeset
240 else
320f5463c201 [project @ 1996-05-03 01:19:22 by jwe]
jwe
parents: 2014
diff changeset
241 (*current_liboctave_error_handler)
320f5463c201 [project @ 1996-05-03 01:19:22 by jwe]
jwe
parents: 2014
diff changeset
242 ("A(:) = X: A must be the same size as X");
320f5463c201 [project @ 1996-05-03 01:19:22 by jwe]
jwe
parents: 2014
diff changeset
243 }
3177
d81db29f8b2b [project @ 1998-05-28 15:23:50 by jwe]
jwe
parents: 3154
diff changeset
244 else if (! (rhs_len == 1 || rhs_len == 0))
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
245 {
3177
d81db29f8b2b [project @ 1998-05-28 15:23:50 by jwe]
jwe
parents: 3154
diff changeset
246 (*current_liboctave_error_handler)
d81db29f8b2b [project @ 1998-05-28 15:23:50 by jwe]
jwe
parents: 3154
diff changeset
247 ("A([]) = X: X must also be an empty matrix or a scalar");
d81db29f8b2b [project @ 1998-05-28 15:23:50 by jwe]
jwe
parents: 3154
diff changeset
248
d81db29f8b2b [project @ 1998-05-28 15:23:50 by jwe]
jwe
parents: 3154
diff changeset
249 retval = 0;
1559
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
250 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
251
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
252 lhs.clear_index ();
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
253
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
254 return retval;
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
255 }
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
256
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
257 /*
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
258 ;;; Local Variables: ***
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
259 ;;; mode: C++ ***
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
260 ;;; End: ***
1adb4798e5c1 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents:
diff changeset
261 */