comparison liboctave/CColVector.cc @ 4316:236c10efcde2

[project @ 2003-02-10 21:57:15 by jwe]
author jwe
date Mon, 10 Feb 2003 21:57:15 +0000
parents 5719210fff4c
children 6f3382e08a52
comparison
equal deleted inserted replaced
4315:0a056052bc90 4316:236c10efcde2
76 76
77 ComplexColumnVector& 77 ComplexColumnVector&
78 ComplexColumnVector::insert (const ColumnVector& a, int r) 78 ComplexColumnVector::insert (const ColumnVector& a, int r)
79 { 79 {
80 int a_len = a.length (); 80 int a_len = a.length ();
81
81 if (r < 0 || r + a_len > length ()) 82 if (r < 0 || r + a_len > length ())
82 { 83 {
83 (*current_liboctave_error_handler) ("range error for insert"); 84 (*current_liboctave_error_handler) ("range error for insert");
84 return *this; 85 return *this;
85 } 86 }
86 87
87 for (int i = 0; i < a_len; i++) 88 if (a_len > 0)
88 elem (r+i) = a.elem (i); 89 {
90 make_unique ();
91
92 for (int i = 0; i < a_len; i++)
93 xelem (r+i) = a.elem (i);
94 }
89 95
90 return *this; 96 return *this;
91 } 97 }
92 98
93 ComplexColumnVector& 99 ComplexColumnVector&
94 ComplexColumnVector::insert (const ComplexColumnVector& a, int r) 100 ComplexColumnVector::insert (const ComplexColumnVector& a, int r)
95 { 101 {
96 int a_len = a.length (); 102 int a_len = a.length ();
103
97 if (r < 0 || r + a_len > length ()) 104 if (r < 0 || r + a_len > length ())
98 { 105 {
99 (*current_liboctave_error_handler) ("range error for insert"); 106 (*current_liboctave_error_handler) ("range error for insert");
100 return *this; 107 return *this;
101 } 108 }
102 109
103 for (int i = 0; i < a_len; i++) 110 if (a_len > 0)
104 elem (r+i) = a.elem (i); 111 {
112 make_unique ();
113
114 for (int i = 0; i < a_len; i++)
115 xelem (r+i) = a.elem (i);
116 }
105 117
106 return *this; 118 return *this;
107 } 119 }
108 120
109 ComplexColumnVector& 121 ComplexColumnVector&
110 ComplexColumnVector::fill (double val) 122 ComplexColumnVector::fill (double val)
111 { 123 {
112 int len = length (); 124 int len = length ();
125
113 if (len > 0) 126 if (len > 0)
114 for (int i = 0; i < len; i++) 127 {
115 elem (i) = val; 128 make_unique ();
129
130 for (int i = 0; i < len; i++)
131 xelem (i) = val;
132 }
133
116 return *this; 134 return *this;
117 } 135 }
118 136
119 ComplexColumnVector& 137 ComplexColumnVector&
120 ComplexColumnVector::fill (const Complex& val) 138 ComplexColumnVector::fill (const Complex& val)
121 { 139 {
122 int len = length (); 140 int len = length ();
141
123 if (len > 0) 142 if (len > 0)
124 for (int i = 0; i < len; i++) 143 {
125 elem (i) = val; 144 make_unique ();
145
146 for (int i = 0; i < len; i++)
147 xelem (i) = val;
148 }
149
150
126 return *this; 151 return *this;
127 } 152 }
128 153
129 ComplexColumnVector& 154 ComplexColumnVector&
130 ComplexColumnVector::fill (double val, int r1, int r2) 155 ComplexColumnVector::fill (double val, int r1, int r2)
131 { 156 {
132 int len = length (); 157 int len = length ();
158
133 if (r1 < 0 || r2 < 0 || r1 >= len || r2 >= len) 159 if (r1 < 0 || r2 < 0 || r1 >= len || r2 >= len)
134 { 160 {
135 (*current_liboctave_error_handler) ("range error for fill"); 161 (*current_liboctave_error_handler) ("range error for fill");
136 return *this; 162 return *this;
137 } 163 }
138 164
139 if (r1 > r2) { int tmp = r1; r1 = r2; r2 = tmp; } 165 if (r1 > r2) { int tmp = r1; r1 = r2; r2 = tmp; }
140 166
141 for (int i = r1; i <= r2; i++) 167 if (r2 >= r1)
142 elem (i) = val; 168 {
169 make_unique ();
170
171 for (int i = r1; i <= r2; i++)
172 xelem (i) = val;
173 }
143 174
144 return *this; 175 return *this;
145 } 176 }
146 177
147 ComplexColumnVector& 178 ComplexColumnVector&
148 ComplexColumnVector::fill (const Complex& val, int r1, int r2) 179 ComplexColumnVector::fill (const Complex& val, int r1, int r2)
149 { 180 {
150 int len = length (); 181 int len = length ();
182
151 if (r1 < 0 || r2 < 0 || r1 >= len || r2 >= len) 183 if (r1 < 0 || r2 < 0 || r1 >= len || r2 >= len)
152 { 184 {
153 (*current_liboctave_error_handler) ("range error for fill"); 185 (*current_liboctave_error_handler) ("range error for fill");
154 return *this; 186 return *this;
155 } 187 }
156 188
157 if (r1 > r2) { int tmp = r1; r1 = r2; r2 = tmp; } 189 if (r1 > r2) { int tmp = r1; r1 = r2; r2 = tmp; }
158 190
159 for (int i = r1; i <= r2; i++) 191 if (r2 >= r1)
160 elem (i) = val; 192 {
193 make_unique ();
194
195 for (int i = r1; i <= r2; i++)
196 xelem (i) = val;
197 }
161 198
162 return *this; 199 return *this;
163 } 200 }
164 201
165 ComplexColumnVector 202 ComplexColumnVector
217 int new_r = r2 - r1 + 1; 254 int new_r = r2 - r1 + 1;
218 255
219 ComplexColumnVector result (new_r); 256 ComplexColumnVector result (new_r);
220 257
221 for (int i = 0; i < new_r; i++) 258 for (int i = 0; i < new_r; i++)
259 result.elem (i) = elem (r1+i);
260
261 return result;
262 }
263
264 ComplexColumnVector
265 ComplexColumnVector::extract_n (int r1, int n) const
266 {
267 ComplexColumnVector result (n);
268
269 for (int i = 0; i < n; i++)
222 result.elem (i) = elem (r1+i); 270 result.elem (i) = elem (r1+i);
223 271
224 return result; 272 return result;
225 } 273 }
226 274