source: Sophya/trunk/Poubelle/DPC:FitsIOServer/Blitz/blitz/array/resize.cc

Last change on this file was 658, checked in by ansari, 26 years ago

no message

File size: 14.0 KB
RevLine 
[658]1#ifndef BZ_ARRAYRESIZE_CC
2#define BZ_ARRAYRESIZE_CC
3
4#ifndef BZ_ARRAY_H
5 #error <blitz/array/resize.cc> must be included via <blitz/array.h>
6#endif
7
8BZ_NAMESPACE(blitz)
9
10template<class T_numtype, int N_rank>
11void Array<T_numtype, N_rank>::resize(int length0)
12{
13 BZPRECONDITION(length0 > 0);
14 BZPRECONDITION(N_rank == 1);
15
16 if (length0 != length_[firstRank])
17 {
18 length_[firstRank] = length0;
19 setupStorage(0);
20 }
21}
22
23template<class T_numtype, int N_rank>
24void Array<T_numtype, N_rank>::resize(int extent0, int extent1)
25{
26 BZPRECONDITION((extent0 > 0) && (extent1 > 0));
27 BZPRECONDITION(N_rank == 2);
28
29 if ((extent0 != length_[0]) || (extent1 != length_[1]))
30 {
31 length_[0] = extent0;
32 length_[1] = extent1;
33 setupStorage(1);
34 }
35}
36
37template<class T_numtype, int N_rank>
38void Array<T_numtype, N_rank>::resize(int extent0, int extent1,
39 int extent2)
40{
41 BZPRECONDITION((extent0 > 0) && (extent1 > 0) && (extent2 > 0));
42 BZPRECONDITION(N_rank == 3);
43
44 if ((extent0 != length_[0]) || (extent1 != length_[1])
45 || (extent2 != length_[2]))
46 {
47 length_[0] = extent0;
48 length_[1] = extent1;
49 length_[2] = extent2;
50 setupStorage(1);
51 }
52}
53
54
55template<class T_numtype, int N_rank>
56void Array<T_numtype, N_rank>::resize(int extent0, int extent1,
57 int extent2, int extent3)
58{
59 BZPRECONDITION((extent0 > 0) && (extent1 > 0) && (extent2 > 0)
60 && (extent3 > 0));
61 BZPRECONDITION(N_rank == 4);
62
63 if ((extent0 != length_[0]) || (extent1 != length_[1])
64 || (extent2 != length_[2]) || (extent3 != length_[3]))
65 {
66 length_[0] = extent0;
67 length_[1] = extent1;
68 length_[2] = extent2;
69 length_[3] = extent3;
70 setupStorage(1);
71 }
72}
73
74template<class T_numtype, int N_rank>
75void Array<T_numtype, N_rank>::resize(int extent0, int extent1,
76 int extent2, int extent3, int extent4)
77{
78 BZPRECONDITION((extent0 > 0) && (extent1 > 0) && (extent2 > 0)
79 && (extent3 > 0) && (extent4 > 0));
80 BZPRECONDITION(N_rank == 5);
81
82 if ((extent0 != length_[0]) || (extent1 != length_[1])
83 || (extent2 != length_[2]) || (extent3 != length_[3])
84 || (extent4 != length_[4]))
85 {
86 length_[0] = extent0;
87 length_[1] = extent1;
88 length_[2] = extent2;
89 length_[3] = extent3;
90 length_[4] = extent4;
91 setupStorage(1);
92 }
93}
94
95template<class T_numtype, int N_rank>
96void Array<T_numtype, N_rank>::resize(int extent0, int extent1,
97 int extent2, int extent3, int extent4, int extent5)
98{
99 BZPRECONDITION((extent0 > 0) && (extent1 > 0) && (extent2 > 0)
100 && (extent3 > 0) && (extent4 > 0) && (extent5 > 0));
101 BZPRECONDITION(N_rank == 6);
102
103 if ((extent0 != length_[0]) || (extent1 != length_[1])
104 || (extent2 != length_[2]) || (extent3 != length_[3])
105 || (extent4 != length_[4]) || (extent5 != length_[5]))
106 {
107 length_[0] = extent0;
108 length_[1] = extent1;
109 length_[2] = extent2;
110 length_[3] = extent3;
111 length_[4] = extent4;
112 length_[5] = extent5;
113 setupStorage(1);
114 }
115}
116
117template<class T_numtype, int N_rank>
118void Array<T_numtype, N_rank>::resize(int extent0, int extent1,
119 int extent2, int extent3, int extent4, int extent5,
120 int extent6)
121{
122 BZPRECONDITION((extent0 > 0) && (extent1 > 0) && (extent2 > 0)
123 && (extent3 > 0) && (extent4 > 0) && (extent5 > 0)
124 && (extent6 > 0));
125 BZPRECONDITION(N_rank == 7);
126
127 if ((extent0 != length_[0]) || (extent1 != length_[1])
128 || (extent2 != length_[2]) || (extent3 != length_[3])
129 || (extent4 != length_[4]) || (extent5 != length_[5])
130 || (extent6 != length_[6]))
131 {
132 length_[0] = extent0;
133 length_[1] = extent1;
134 length_[2] = extent2;
135 length_[3] = extent3;
136 length_[4] = extent4;
137 length_[5] = extent5;
138 length_[6] = extent6;
139 setupStorage(1);
140 }
141}
142
143template<class T_numtype, int N_rank>
144void Array<T_numtype, N_rank>::resize(int extent0, int extent1,
145 int extent2, int extent3, int extent4, int extent5,
146 int extent6, int extent7)
147{
148 BZPRECONDITION((extent0 > 0) && (extent1 > 0) && (extent2 > 0)
149 && (extent3 > 0) && (extent4 > 0) && (extent5 > 0)
150 && (extent6 > 0) && (extent7 > 0));
151 BZPRECONDITION(N_rank == 8);
152
153 if ((extent0 != length_[0]) || (extent1 != length_[1])
154 || (extent2 != length_[2]) || (extent3 != length_[3])
155 || (extent4 != length_[4]) || (extent5 != length_[5])
156 || (extent6 != length_[6]) || (extent7 != length_[7]))
157 {
158 length_[0] = extent0;
159 length_[1] = extent1;
160 length_[2] = extent2;
161 length_[3] = extent3;
162 length_[4] = extent4;
163 length_[5] = extent5;
164 length_[6] = extent6;
165 length_[7] = extent7;
166 setupStorage(1);
167 }
168}
169
170template<class T_numtype, int N_rank>
171void Array<T_numtype, N_rank>::resize(int extent0, int extent1,
172 int extent2, int extent3, int extent4, int extent5,
173 int extent6, int extent7, int extent8)
174{
175 BZPRECONDITION((extent0 > 0) && (extent1 > 0) && (extent2 > 0)
176 && (extent3 > 0) && (extent4 > 0) && (extent5 > 0)
177 && (extent6 > 0) && (extent7 > 0) && (extent8 > 0));
178 BZPRECONDITION(N_rank == 9);
179
180 if ((extent0 != length_[0]) || (extent1 != length_[1])
181 || (extent2 != length_[2]) || (extent3 != length_[3])
182 || (extent4 != length_[4]) || (extent5 != length_[5])
183 || (extent6 != length_[6]) || (extent7 != length_[7])
184 || (extent8 != length_[8]))
185 {
186 length_[0] = extent0;
187 length_[1] = extent1;
188 length_[2] = extent2;
189 length_[3] = extent3;
190 length_[4] = extent4;
191 length_[5] = extent5;
192 length_[6] = extent6;
193 length_[7] = extent7;
194 length_[8] = extent8;
195 setupStorage(1);
196 }
197}
198
199
200template<class T_numtype, int N_rank>
201void Array<T_numtype, N_rank>::resize(int extent0, int extent1,
202 int extent2, int extent3, int extent4, int extent5,
203 int extent6, int extent7, int extent8, int extent9)
204{
205 BZPRECONDITION((extent0 > 0) && (extent1 > 0) && (extent2 > 0)
206 && (extent3 > 0) && (extent4 > 0) && (extent5 > 0)
207 && (extent6 > 0) && (extent7 > 0) && (extent8 > 0)
208 && (extent9 > 0));
209 BZPRECONDITION(N_rank == 10);
210
211 if ((extent0 != length_[0]) || (extent1 != length_[1])
212 || (extent2 != length_[2]) || (extent3 != length_[3])
213 || (extent4 != length_[4]) || (extent5 != length_[5])
214 || (extent6 != length_[6]) || (extent7 != length_[7])
215 || (extent8 != length_[8]) || (extent9 != length_[9]))
216 {
217 length_[0] = extent0;
218 length_[1] = extent1;
219 length_[2] = extent2;
220 length_[3] = extent3;
221 length_[4] = extent4;
222 length_[5] = extent5;
223 length_[6] = extent6;
224 length_[7] = extent7;
225 length_[8] = extent8;
226 length_[9] = extent9;
227 setupStorage(1);
228 }
229}
230
231template<class T_numtype, int N_rank>
232void Array<T_numtype, N_rank>::resize(int extent0, int extent1,
233 int extent2, int extent3, int extent4, int extent5,
234 int extent6, int extent7, int extent8, int extent9,
235 int extent10)
236{
237 BZPRECONDITION((extent0 > 0) && (extent1 > 0) && (extent2 > 0)
238 && (extent3 > 0) && (extent4 > 0) && (extent5 > 0)
239 && (extent6 > 0) && (extent7 > 0) && (extent8 > 0)
240 && (extent9 > 0) && (extent10 > 0));
241 BZPRECONDITION(N_rank == 11);
242
243 if ((extent0 != length_[0]) || (extent1 != length_[1])
244 || (extent2 != length_[2]) || (extent3 != length_[3])
245 || (extent4 != length_[4]) || (extent5 != length_[5])
246 || (extent6 != length_[6]) || (extent7 != length_[7])
247 || (extent8 != length_[8]) || (extent9 != length_[9])
248 || (extent10 != length_[10]))
249 {
250 length_[0] = extent0;
251 length_[1] = extent1;
252 length_[2] = extent2;
253 length_[3] = extent3;
254 length_[4] = extent4;
255 length_[5] = extent5;
256 length_[6] = extent6;
257 length_[7] = extent7;
258 length_[8] = extent8;
259 length_[9] = extent9;
260 length_[10] = extent10;
261 setupStorage(1);
262 }
263}
264
265template<class T_numtype, int N_rank>
266void Array<T_numtype, N_rank>::resizeAndPreserve(int length0)
267{
268 BZPRECONDITION(length0 > 0);
269 BZPRECONDITION(N_rank == 1);
270
271 if (length0 != length_[firstRank])
272 {
273#if defined(__KCC) || defined(__DECCXX)
274 // NEEDS_WORK: have to discard the base() parameter for EDG,
275 // because it gives the following bizarre error:
276
277/*
278 * "blitz/tinyvec.h", line 421: error: the size of an array must be greater
279 * than zero
280 * T_numtype data_[N_length];
281 * ^
282 * detected during:
283 * instantiation of class "blitz::TinyVector<int, 0>" at line 273 of
284 * "./../blitz/array/resize.cc"
285 * instantiation of
286 * "void blitz::Array<int, 1>::resizeAndPreserve(int)"
287 */
288 T_array B(length0, storage_);
289#else
290 T_array B(base(), BZ_BLITZ_SCOPE(shape)(length0), storage_); // line 273
291#endif
292 Range overlap0 = Range(fromStart, min(B.ubound(0), ubound(0)));
293 B(overlap0) = (*this)(overlap0);
294 reference(B);
295 }
296}
297
298template<class T_numtype, int N_rank>
299void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1)
300{
301 BZPRECONDITION((length0 > 0) && (length1 > 0));
302 BZPRECONDITION(N_rank == 2);
303
304 if ((length0 != length_[0]) || (length1 != length_[1]))
305 {
306 T_array B(base(), BZ_BLITZ_SCOPE(shape)(length0, length1), storage_);
307 Range overlap0 = Range(fromStart, min(B.ubound(0), ubound(0)));
308 Range overlap1 = Range(fromStart, min(B.ubound(1), ubound(1)));
309 B(overlap0, overlap1) = (*this)(overlap0, overlap1);
310 reference(B);
311 }
312}
313
314template<class T_numtype, int N_rank>
315void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
316 int length2)
317{
318 BZPRECONDITION((length0 > 0) && (length1 > 0) && (length2 > 0));
319 BZPRECONDITION(N_rank == 3);
320
321 if ((length0 != length_[0]) || (length1 != length_[1])
322 || (length2 != length_[2]))
323 {
324 T_array B(base(), BZ_BLITZ_SCOPE(shape)(length0, length1, length2), storage_);
325 Range overlap0 = Range(fromStart, min(B.ubound(0), ubound(0)));
326 Range overlap1 = Range(fromStart, min(B.ubound(1), ubound(1)));
327 Range overlap2 = Range(fromStart, min(B.ubound(2), ubound(2)));
328 B(overlap0, overlap1, overlap2) = (*this)(overlap0, overlap1, overlap2);
329 reference(B);
330 }
331}
332
333template<class T_numtype, int N_rank>
334void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
335 int length2, int length3)
336{
337 BZPRECONDITION((length0 > 0) && (length1 > 0) && (length2 > 0)
338 && (length3 > 0));
339 BZPRECONDITION(N_rank == 4);
340
341 if ((length0 != length_[0]) || (length1 != length_[1])
342 || (length2 != length_[2]) || (length3 != length_[3]))
343 {
344 T_array B(base(), BZ_BLITZ_SCOPE(shape)(length0, length1, length2, length3),
345 storage_);
346 Range overlap0 = Range(fromStart, min(B.ubound(0), ubound(0)));
347 Range overlap1 = Range(fromStart, min(B.ubound(1), ubound(1)));
348 Range overlap2 = Range(fromStart, min(B.ubound(2), ubound(2)));
349 Range overlap3 = Range(fromStart, min(B.ubound(3), ubound(3)));
350 B(overlap0, overlap1, overlap2, overlap3) = (*this)(overlap0,
351 overlap1, overlap2, overlap3);
352 reference(B);
353 }
354}
355
356template<class T_numtype, int N_rank>
357void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
358 int length2, int length3, int length4)
359{
360 BZPRECONDITION((length0 > 0) && (length1 > 0) && (length2 > 0)
361 && (length3 > 0) && (length4 > 0));
362 BZPRECONDITION(N_rank == 5);
363
364 if ((length0 != length_[0]) || (length1 != length_[1])
365 || (length2 != length_[2]) || (length3 != length_[3])
366 || (length4 != length_[4]))
367 {
368 T_array B(base(), BZ_BLITZ_SCOPE(shape)(length0, length1, length2, length3, length4),
369 storage_);
370 Range overlap0 = Range(fromStart, min(B.ubound(0), ubound(0)));
371 Range overlap1 = Range(fromStart, min(B.ubound(1), ubound(1)));
372 Range overlap2 = Range(fromStart, min(B.ubound(2), ubound(2)));
373 Range overlap3 = Range(fromStart, min(B.ubound(3), ubound(3)));
374 Range overlap4 = Range(fromStart, min(B.ubound(4), ubound(4)));
375 B(overlap0, overlap1, overlap2, overlap3, overlap4) = (*this)(overlap0,
376 overlap1, overlap2, overlap3, overlap4);
377 reference(B);
378 }
379}
380
381template<class T_numtype, int N_rank>
382void Array<T_numtype, N_rank>::resizeAndPreserve(int length0, int length1,
383 int length2, int length3, int length4, int length5)
384{
385 BZPRECONDITION((length0 > 0) && (length1 > 0) && (length2 > 0)
386 && (length3 > 0) && (length4 > 0) && (length5 > 0));
387 BZPRECONDITION(N_rank == 6);
388
389 if ((length0 != length_[0]) || (length1 != length_[1])
390 || (length2 != length_[2]) || (length3 != length_[3])
391 || (length4 != length_[4]) || (length5 != length_[5]))
392 {
393 T_array B(base(), BZ_BLITZ_SCOPE(shape)(length0, length1, length2, length3,
394 length4, length5), storage_);
395 Range overlap0 = Range(fromStart, min(B.ubound(0), ubound(0)));
396 Range overlap1 = Range(fromStart, min(B.ubound(1), ubound(1)));
397 Range overlap2 = Range(fromStart, min(B.ubound(2), ubound(2)));
398 Range overlap3 = Range(fromStart, min(B.ubound(3), ubound(3)));
399 Range overlap4 = Range(fromStart, min(B.ubound(4), ubound(4)));
400 Range overlap5 = Range(fromStart, min(B.ubound(5), ubound(5)));
401 B(overlap0, overlap1, overlap2, overlap3, overlap4, overlap5)
402 = (*this)(overlap0, overlap1, overlap2, overlap3, overlap4,
403 overlap5);
404 reference(B);
405 }
406}
407
408
409// NEEDS_WORK: resizeAndPreserve for N_rank = 7..11
410
411template<class T_numtype, int N_rank>
412void Array<T_numtype, N_rank>::resize(const TinyVector<int,N_rank>& extent)
413{
414// NEEDS_WORK
415// BZPRECONDITION(all(extent > 0));
416// if (any(extent != length_))
417// {
418 length_ = extent;
419 setupStorage(1);
420// }
421}
422
423BZ_NAMESPACE_END
424
425#endif // BZ_ARRAYRESIZE_CC
Note: See TracBrowser for help on using the repository browser.