Skip to content

Commit 8ba292e

Browse files
author
David Berry
committed
datput0x: Scalars are defined by having one value
They may have rank > 0 but will always have only one element.
1 parent 6dddbfb commit 8ba292e

File tree

1 file changed

+177
-24
lines changed

1 file changed

+177
-24
lines changed

datput0.c

+177-24
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include <string.h>
66

7+
#include "ems.h"
78
#include "hds1.h"
89
#include "dat1.h"
910
#include "hds_types.h"
@@ -99,93 +100,245 @@
99100
*/
100101

101102
int datPut0C ( const HDSLoc * loc, const char * value, int * status ) {
102-
103-
int ndims = 0;
104-
hdsdim dim[] = { 0 };
103+
hdsdim dim[DAT__MXDIM];
104+
int i = 0;
105+
int ndims;
106+
int isscalar;
105107

106108
if ( *status != SAI__OK ) return *status;
107109

110+
/* Get the rank and dimensions of the object */
111+
datShape( loc, DAT__MXDIM, dim, &ndims, status );
112+
113+
/* Check it has only one element (a scalar). */
114+
isscalar = 1;
115+
for (i=0; i<ndims; i++) {
116+
if( dim[i] != 1 ) {
117+
isscalar = 0;
118+
break;
119+
}
120+
}
121+
122+
/* Report an error if not. */
123+
if( !isscalar && *status == SAI__OK ) {
124+
*status = DAT__DIMIN;
125+
emsRepf("datPut0C_1", "datPut0C: Data must be scalar.", status );
126+
}
127+
108128
datPutC( loc, ndims, dim, value, strlen(value), status );
109129
return *status;
110130
}
111131

112132
int datPut0D ( const HDSLoc * loc, double value, int * status ) {
113-
114-
int ndims = 0;
115-
hdsdim dim[] = { 0 };
133+
hdsdim dim[DAT__MXDIM];
134+
int i = 0;
135+
int ndims;
136+
int isscalar;
116137

117138
if ( *status != SAI__OK ) return *status;
118139

140+
/* Get the rank and dimensions of the object */
141+
datShape( loc, DAT__MXDIM, dim, &ndims, status );
142+
143+
/* Check it has only one element (a scalar). */
144+
isscalar = 1;
145+
for (i=0; i<ndims; i++) {
146+
if( dim[i] != 1 ) {
147+
isscalar = 0;
148+
break;
149+
}
150+
}
151+
152+
/* Report an error if not. */
153+
if( !isscalar && *status == SAI__OK ) {
154+
*status = DAT__DIMIN;
155+
emsRepf("datPut0D_1", "datPut0D: Data must be scalar.", status );
156+
}
157+
119158
datPutD( loc, ndims, dim, &value, status );
120159
return *status;
121160
}
122161

123162
int datPut0R ( const HDSLoc * loc, float value, int * status ) {
124-
125-
int ndims = 0;
126-
hdsdim dim[] = { 0 };
163+
hdsdim dim[DAT__MXDIM];
164+
int i = 0;
165+
int ndims;
166+
int isscalar;
127167

128168
if ( *status != SAI__OK ) return *status;
129169

170+
/* Get the rank and dimensions of the object */
171+
datShape( loc, DAT__MXDIM, dim, &ndims, status );
172+
173+
/* Check it has only one element (a scalar). */
174+
isscalar = 1;
175+
for (i=0; i<ndims; i++) {
176+
if( dim[i] != 1 ) {
177+
isscalar = 0;
178+
break;
179+
}
180+
}
181+
182+
/* Report an error if not. */
183+
if( !isscalar && *status == SAI__OK ) {
184+
*status = DAT__DIMIN;
185+
emsRepf("datPut0R_1", "datPut0R: Data must be scalar.", status );
186+
}
187+
130188
datPutR( loc, ndims, dim, &value, status );
131189
return *status;
132190
}
133191

134192
int datPut0I ( const HDSLoc * loc, int value, int * status ) {
135-
136-
int ndims = 0;
137-
hdsdim dim[] = { 0 };
193+
hdsdim dim[DAT__MXDIM];
194+
int i = 0;
195+
int ndims;
196+
int isscalar;
138197

139198
if ( *status != SAI__OK ) return *status;
140199

200+
/* Get the rank and dimensions of the object */
201+
datShape( loc, DAT__MXDIM, dim, &ndims, status );
202+
203+
/* Check it has only one element (a scalar). */
204+
isscalar = 1;
205+
for (i=0; i<ndims; i++) {
206+
if( dim[i] != 1 ) {
207+
isscalar = 0;
208+
break;
209+
}
210+
}
211+
212+
/* Report an error if not. */
213+
if( !isscalar && *status == SAI__OK ) {
214+
*status = DAT__DIMIN;
215+
emsRepf("datPut0I_1", "datPut0I: Data must be scalar.", status );
216+
}
217+
141218
datPutI( loc, ndims, dim, &value, status );
142219

143220
return *status;
144221
}
145222

146223
int datPut0K ( const HDSLoc * loc, int64_t value, int * status ) {
147-
148-
int ndims = 0;
149-
hdsdim dim[] = { 0 };
224+
hdsdim dim[DAT__MXDIM];
225+
int i = 0;
226+
int ndims;
227+
int isscalar;
150228

151229
if ( *status != SAI__OK ) return *status;
152230

231+
/* Get the rank and dimensions of the object */
232+
datShape( loc, DAT__MXDIM, dim, &ndims, status );
233+
234+
/* Check it has only one element (a scalar). */
235+
isscalar = 1;
236+
for (i=0; i<ndims; i++) {
237+
if( dim[i] != 1 ) {
238+
isscalar = 0;
239+
break;
240+
}
241+
}
242+
243+
/* Report an error if not. */
244+
if( !isscalar && *status == SAI__OK ) {
245+
*status = DAT__DIMIN;
246+
emsRepf("datPut0K_1", "datPut0K: Data must be scalar.", status );
247+
}
248+
153249
datPutK( loc, ndims, dim, &value, status );
154250

155251
return *status;
156252
}
157253

158254
int datPut0W ( const HDSLoc * loc, short value, int * status ) {
159-
160-
int ndims = 0;
161-
hdsdim dim[] = { 0 };
255+
hdsdim dim[DAT__MXDIM];
256+
int i = 0;
257+
int ndims;
258+
int isscalar;
162259

163260
if ( *status != SAI__OK ) return *status;
164261

262+
/* Get the rank and dimensions of the object */
263+
datShape( loc, DAT__MXDIM, dim, &ndims, status );
264+
265+
/* Check it has only one element (a scalar). */
266+
isscalar = 1;
267+
for (i=0; i<ndims; i++) {
268+
if( dim[i] != 1 ) {
269+
isscalar = 0;
270+
break;
271+
}
272+
}
273+
274+
/* Report an error if not. */
275+
if( !isscalar && *status == SAI__OK ) {
276+
*status = DAT__DIMIN;
277+
emsRepf("datPut0W_1", "datPut0W: Data must be scalar.", status );
278+
}
279+
165280
datPutW( loc, ndims, dim, &value, status );
166281

167282
return *status;
168283
}
169284

170285
int datPut0UW ( const HDSLoc * loc, unsigned short value, int * status ) {
171-
172-
int ndims = 0;
173-
hdsdim dim[] = { 0 };
286+
hdsdim dim[DAT__MXDIM];
287+
int i = 0;
288+
int ndims;
289+
int isscalar;
174290

175291
if ( *status != SAI__OK ) return *status;
176292

293+
/* Get the rank and dimensions of the object */
294+
datShape( loc, DAT__MXDIM, dim, &ndims, status );
295+
296+
/* Check it has only one element (a scalar). */
297+
isscalar = 1;
298+
for (i=0; i<ndims; i++) {
299+
if( dim[i] != 1 ) {
300+
isscalar = 0;
301+
break;
302+
}
303+
}
304+
305+
/* Report an error if not. */
306+
if( !isscalar && *status == SAI__OK ) {
307+
*status = DAT__DIMIN;
308+
emsRepf("datPut0UW_1", "datPut0UW: Data must be scalar.", status );
309+
}
310+
177311
datPutUW( loc, ndims, dim, &value, status );
178312

179313
return *status;
180314
}
181315

182316
int datPut0L ( const HDSLoc * loc, hdsbool_t value, int * status ) {
183-
184-
int ndims = 0;
185-
hdsdim dim[] = { 0 };
317+
hdsdim dim[DAT__MXDIM];
318+
int i = 0;
319+
int ndims;
320+
int isscalar;
186321

187322
if ( *status != SAI__OK ) return *status;
188323

324+
/* Get the rank and dimensions of the object */
325+
datShape( loc, DAT__MXDIM, dim, &ndims, status );
326+
327+
/* Check it has only one element (a scalar). */
328+
isscalar = 1;
329+
for (i=0; i<ndims; i++) {
330+
if( dim[i] != 1 ) {
331+
isscalar = 0;
332+
break;
333+
}
334+
}
335+
336+
/* Report an error if not. */
337+
if( !isscalar && *status == SAI__OK ) {
338+
*status = DAT__DIMIN;
339+
emsRepf("datPut0L_1", "datPut0L: Data must be scalar.", status );
340+
}
341+
189342
datPutL( loc, ndims, dim, &value, status );
190343
return *status;
191344
}

0 commit comments

Comments
 (0)