1/*
2 * Copyright 1996, University Corporation for Atmospheric Research
3 * See netcdf/COPYRIGHT file for copying and redistribution conditions.
4 */
5
6#ifndef _NCX_H_
7#define _NCX_H_
8
9#include "ncdispatch.h"
10#include "ncio.h"
11#include "fbits.h"
12
13/*
14 * An external data representation interface.
15
16 *
17 * This started out as a general replacement for ONC XDR,
18 * specifically, the xdrmem family of functions.
19 *
20 * We eventually realized that we could write more portable
21 * code if we decoupled any association between the 'C' types
22 * and the external types. (XDR has this association between the 'C'
23 * types and the external representations, like xdr_int() takes
24 * an int argument and goes to an external int representation.)
25 * So, now there is a matrix of functions.
26 *
27 */
28
29#include <config.h> /* output of 'configure' */
30#include "rnd.h"
31#include <stddef.h> /* size_t */
32#include <errno.h>
33#include <sys/types.h> /* off_t */
34#include "ncdispatch.h"
35
36#if defined(_CRAY) && !defined(_CRAYIEEE) && !defined(__crayx1)
37#define CRAYFLOAT 1 /* CRAY Floating point */
38#elif defined(_SX) && defined(_FLOAT2) /* NEC SUPER-UX in CRAY mode */
39#define CRAYFLOAT 1 /* CRAY Floating point */
40#endif
41
42
43/*
44 * External sizes of the primitive elements.
45 */
46#define X_SIZEOF_CHAR 1
47#define X_SIZEOF_SHORT 2
48#define X_SIZEOF_INT 4 /* xdr_int */
49#if 0
50#define X_SIZEOF_LONG 8 */ /* alias */
51#endif
52#define X_SIZEOF_FLOAT 4
53#define X_SIZEOF_DOUBLE 8
54
55/* additional data types in CDF-5 */
56#define X_SIZEOF_UBYTE 1
57#define X_SIZEOF_USHORT 2
58#define X_SIZEOF_UINT 4
59#define X_SIZEOF_LONGLONG 8
60#define X_SIZEOF_ULONGLONG 8
61#define X_SIZEOF_INT64 8
62#define X_SIZEOF_UINT64 8
63
64/*
65 * For now, netcdf is limited to 32 bit sizes,
66 * If compiled with support for "large files", then
67 * netcdf will use a 64 bit off_t and it can then write a file
68 * using 64 bit offsets.
69 *  see also X_SIZE_MAX, X_OFF_MAX below
70 */
71#define X_SIZEOF_OFF_T (sizeof(off_t))
72#define X_SIZEOF_SIZE_T X_SIZEOF_INT
73
74/*
75 * limits of the external representation
76 */
77#define X_SCHAR_MIN (-128)
78#define X_SCHAR_MAX 127
79#define X_UCHAR_MAX 255U
80#define X_SHORT_MIN (-32768)
81#define X_SHRT_MIN X_SHORT_MIN /* alias compatible with limits.h */
82#define X_SHORT_MAX 32767
83#define X_SHRT_MAX X_SHORT_MAX /* alias compatible with limits.h */
84#define X_USHORT_MAX 65535U
85#define X_USHRT_MAX X_USHORT_MAX /* alias compatible with limits.h */
86#define X_INT_MIN (-2147483647-1)
87#define X_INT_MAX 2147483647
88#define X_UINT_MAX 4294967295U
89#define X_LONGLONG_MIN (-9223372036854775807LL-1LL)
90#define X_LONGLONG_MAX 9223372036854775807LL
91#define X_ULONGLONG_MAX 18446744073709551615ULL
92#define X_FLOAT_MAX 3.402823466e+38f
93#define X_FLOAT_MIN (-X_FLOAT_MAX)
94#define X_FLT_MAX X_FLOAT_MAX /* alias compatible with limits.h */
95#if CRAYFLOAT
96/* ldexp(1. - ldexp(.5 , -46), 1024) */
97#define X_DOUBLE_MAX    1.79769313486230e+308
98#else
99/* scalb(1. - scalb(.5 , -52), 1024) */
100#define X_DOUBLE_MAX 1.7976931348623157e+308
101#endif
102#define X_DOUBLE_MIN (-X_DOUBLE_MAX)
103#define X_DBL_MAX X_DOUBLE_MAX /* alias compatible with limits.h */
104
105#define X_SIZE_MAX X_UINT_MAX
106#define X_OFF_MAX X_INT_MAX
107
108
109/* Begin ncx_len */
110
111/*
112 * ncx_len_xxx() interfaces are defined as macros below,
113 * These give the length of an array of nelems of the type.
114 * N.B. The 'char' and 'short' interfaces give the X_ALIGNED length.
115 */
116#define X_ALIGN 4 /* a.k.a. BYTES_PER_XDR_UNIT */
117
118#define ncx_len_char(nelems) \
119 _RNDUP((nelems), X_ALIGN)
120
121#define ncx_len_short(nelems) \
122 (((nelems) + (nelems)%2)  * X_SIZEOF_SHORT)
123
124#define ncx_len_int(nelems) \
125 ((nelems) * X_SIZEOF_INT)
126
127#define ncx_len_long(nelems) \
128 ((nelems) * X_SIZEOF_LONG)
129
130#define ncx_len_float(nelems) \
131 ((nelems) * X_SIZEOF_FLOAT)
132
133#define ncx_len_double(nelems) \
134 ((nelems) * X_SIZEOF_DOUBLE)
135
136#define ncx_len_ubyte(nelems) \
137 _RNDUP((nelems), X_ALIGN)
138
139#define ncx_len_ushort(nelems) \
140 (((nelems) + (nelems)%2)  * X_SIZEOF_USHORT)
141
142#define ncx_len_uint(nelems) \
143 ((nelems) * X_SIZEOF_UINT)
144
145#define ncx_len_int64(nelems) \
146 ((nelems) * X_SIZEOF_INT64)
147
148#define ncx_len_uint64(nelems) \
149 ((nelems) * X_SIZEOF_UINT64)
150
151/* End ncx_len */
152
153#ifdef __CHAR_UNSIGNED__
154 /* 'char' is unsigned, declare ncbyte as 'signed char' */
155typedef signed char schar;
156
157#else
158 /* 'char' is signed */
159typedef char schar;
160
161#endif /* __CHAR_UNSIGNED__ */
162
163/*
164 * Primitive numeric conversion functions.
165 * The `put' functions convert from native internal
166 * type to the external type, while the `get' functions
167 * convert from the external to the internal.
168 *
169 * These take the form
170 * int ncx_get_{external_type}_{internal_type}(
171 * const void *xp,
172 * internal_type *ip
173 * );
174 * int ncx_put_{external_type}_{internal_type}(
175 * void *xp,
176 * const internal_type *ip
177 * );
178 * where
179 * `external_type' and `internal_type' chosen from
180 * schar
181 * uchar
182 * short
183 * ushort
184 * int
185 * uint
186 * float
187 * double
188 * longlong == int64
189 *         ulonglong == uint64
190 *
191 * Not all combinations make sense.
192 * We may not implement all combinations that make sense.
193 * The netcdf functions that use this ncx interface don't
194 * use these primitive conversion functions. They use the
195 * aggregate conversion functions declared below.
196 *
197 * Storage for a single element of external type is at the `void * xp'
198 * argument.
199 *
200 * Storage for a single element of internal type is at `ip' argument.
201 *
202 * These functions return 0 (NC_NOERR) when no error occurred,
203 * or NC_ERANGE when the value being converted is too large.
204 * When NC_ERANGE occurs, an undefined (implementation dependent)
205 * conversion may have occurred.
206 *
207 * Note that loss of precision may occur silently.
208 *
209 */
210
211#if 0
212extern int
213ncx_get_schar_schar(const void *xpschar *ip);
214extern int
215ncx_get_schar_uchar(const void *xpuchar *ip);
216extern int
217ncx_get_schar_short(const void *xp, short *ip);
218extern int
219ncx_get_schar_int(const void *xp, int *ip);
220extern int
221ncx_get_schar_long(const void *xp, long *ip);
222extern int
223ncx_get_schar_float(const void *xp, float *ip);
224extern int
225ncx_get_schar_double(const void *xp, double *ip);
226
227extern int
228ncx_put_schar_schar(void *xp, const schar *ip);
229extern int
230ncx_put_schar_uchar(void *xp, const uchar *ip);
231extern int
232ncx_put_schar_short(void *xp, const short *ip);
233extern int
234ncx_put_schar_int(void *xp, const int *ip);
235extern int
236ncx_put_schar_long(void *xp, const long *ip);
237extern int
238ncx_put_schar_float(void *xp, const float *ip);
239extern int
240ncx_put_schar_double(void *xp, const double *ip);
241#endif
242
243/*
244 * Other primitive conversion functions
245 * N.B. slightly different interface
246 * Used by netcdf.
247 */
248
249/* ncx_get_int_size_t */
250extern int
251ncx_get_size_t(const void **xpp, size_t *ulp);
252/* ncx_get_int_off_t */
253extern int
254ncx_get_off_t(const void **xppoff_t *lp, size_t sizeof_off_t);
255
256/* ncx_put_int_size_t */
257extern int
258ncx_put_size_t(void **xpp, const size_t *ulp);
259/* ncx_put_int_off_t */
260extern int
261ncx_put_off_t(void **xpp, const off_t *lp, size_t sizeof_off_t);
262
263extern int
264ncx_get_int32(const void **xpp, int *ip);
265extern int
266ncx_get_int64(const void **xpp, long long *ip);
267extern int
268ncx_put_int32(void **xpp, const int ip);
269extern int
270ncx_put_int64(void **xpp, const long long ip);
271
272extern int ncx_get_int_int(const void *xp, int *ip);
273extern int ncx_put_int_int(void *xp, const int *ip);
274
275/*
276 * Aggregate numeric conversion functions.
277 * Convert an array.  Replaces xdr_array(...).
278 * These functions are used by netcdf. Unlike the xdr
279 * interface, we optimize for aggregate conversions.
280 * This functions should be implemented to take advantage
281 * of multiple processor / parallel hardware where available.
282 *
283 * These take the form
284 * int ncx_getn_{external_type}_{internal_type}(
285 * const void *xpp,
286 * size_t nelems,
287 * internal_type *ip
288 * );
289 * int ncx_putn_{external_type}_{internal_type}(
290 * void **xpp,
291 * size_t nelems,
292 * const internal_type *ip
293 * );
294 * Where the types are as in the primitive numeric conversion functions.
295 *
296 * The value of the pointer to pointer argument, *xpp, is
297 * expected to reference storage for `nelems' of the external
298 * type.  On return, it modified to reference just past the last
299 * converted external element.
300 *
301 * The types whose external size is less than X_ALIGN also have `pad'
302 * interfaces. These round (and zero fill on put) *xpp up to X_ALIGN
303 * boundaries. (This is the usual xdr behavior.)
304 *
305 * The `ip' argument should point to an array of `nelems' of
306 * internal_type.
307 *
308 * Range errors (NC_ERANGE) for a individual values in the array
309 * DO NOT terminate the array conversion. All elements are converted,
310 * with some having undefined values.
311 * If any range error occurs, the function returns NC_ERANGE.
312 *
313 */
314
315/*---- schar ----------------------------------------------------------------*/
316extern int
317ncx_getn_schar_schar (const void **xpp, size_t nelemsschar  *ip);
318extern int
319ncx_getn_schar_uchar (const void **xpp, size_t nelemsuchar  *ip);
320extern int
321ncx_getn_schar_short (const void **xpp, size_t nelems, short  *ip);
322extern int
323ncx_getn_schar_ushort(const void **xpp, size_t nelemsushort *ip);
324extern int
325ncx_getn_schar_int   (const void **xpp, size_t nelems, int    *ip);
326extern int
327ncx_getn_schar_uint  (const void **xpp, size_t nelemsuint   *ip);
328extern int
329ncx_getn_schar_long  (const void **xpp, size_t nelems, long   *ip);
330extern int
331ncx_getn_schar_float (const void **xpp, size_t nelems, float  *ip);
332extern int
333ncx_getn_schar_double(const void **xpp, size_t nelems, double *ip);
334extern int
335ncx_getn_schar_longlong (const void **xpp, size_t nelemslonglong  *ip);
336extern int
337ncx_getn_schar_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
338
339extern int
340ncx_pad_getn_schar_schar (const void **xpp, size_t nelemsschar  *ip);
341extern int
342ncx_pad_getn_schar_uchar (const void **xpp, size_t nelemsuchar  *ip);
343extern int
344ncx_pad_getn_schar_short (const void **xpp, size_t nelems, short  *ip);
345extern int
346ncx_pad_getn_schar_ushort(const void **xpp, size_t nelemsushort *ip);
347extern int
348ncx_pad_getn_schar_int   (const void **xpp, size_t nelems, int    *ip);
349extern int
350ncx_pad_getn_schar_uint  (const void **xpp, size_t nelemsuint   *ip);
351extern int
352ncx_pad_getn_schar_long  (const void **xpp, size_t nelems, long   *ip);
353extern int
354ncx_pad_getn_schar_float (const void **xpp, size_t nelems, float  *ip);
355extern int
356ncx_pad_getn_schar_double(const void **xpp, size_t nelems, double *ip);
357extern int
358ncx_pad_getn_schar_longlong (const void **xpp, size_t nelemslonglong  *ip);
359extern int
360ncx_pad_getn_schar_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
361
362extern int
363ncx_putn_schar_schar (void **xpp, size_t nelems, const schar   *ip);
364extern int
365ncx_putn_schar_uchar (void **xpp, size_t nelems, const uchar  *ip);
366extern int
367ncx_putn_schar_short (void **xpp, size_t nelems, const short  *ip);
368extern int
369ncx_putn_schar_ushort(void **xpp, size_t nelems, const ushort *ip);
370extern int
371ncx_putn_schar_int   (void **xpp, size_t nelems, const int    *ip);
372extern int
373ncx_putn_schar_uint  (void **xpp, size_t nelems, const uint   *ip);
374extern int
375ncx_putn_schar_long  (void **xpp, size_t nelems, const long   *ip);
376extern int
377ncx_putn_schar_float (void **xpp, size_t nelems, const float  *ip);
378extern int
379ncx_putn_schar_double(void **xpp, size_t nelems, const double  *ip);
380extern int
381ncx_putn_schar_longlong (void **xpp, size_t nelems, const longlong  *ip);
382extern int
383ncx_putn_schar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
384
385extern int
386ncx_pad_putn_schar_schar (void **xpp, size_t nelems, const schar  *ip);
387extern int
388ncx_pad_putn_schar_uchar (void **xpp, size_t nelems, const uchar  *ip);
389extern int
390ncx_pad_putn_schar_short (void **xpp, size_t nelems, const short  *ip);
391extern int
392ncx_pad_putn_schar_ushort(void **xpp, size_t nelems, const ushort *ip);
393extern int
394ncx_pad_putn_schar_int   (void **xpp, size_t nelems, const int    *ip);
395extern int
396ncx_pad_putn_schar_uint  (void **xpp, size_t nelems, const uint   *ip);
397extern int
398ncx_pad_putn_schar_long  (void **xpp, size_t nelems, const long   *ip);
399extern int
400ncx_pad_putn_schar_float (void **xpp, size_t nelems, const float  *ip);
401extern int
402ncx_pad_putn_schar_double(void **xpp, size_t nelems, const double *ip);
403extern int
404ncx_pad_putn_schar_longlong (void **xpp, size_t nelems, const longlong  *ip);
405extern int
406ncx_pad_putn_schar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
407
408/*---- uchar ----------------------------------------------------------------*/
409extern int
410ncx_getn_uchar_schar (const void **xpp, size_t nelemsschar  *ip);
411extern int
412ncx_getn_uchar_uchar (const void **xpp, size_t nelemsuchar  *ip);
413extern int
414ncx_getn_uchar_short (const void **xpp, size_t nelems, short  *ip);
415extern int
416ncx_getn_uchar_ushort(const void **xpp, size_t nelemsushort *ip);
417extern int
418ncx_getn_uchar_int   (const void **xpp, size_t nelems, int    *ip);
419extern int
420ncx_getn_uchar_uint  (const void **xpp, size_t nelemsuint   *ip);
421extern int
422ncx_getn_uchar_long  (const void **xpp, size_t nelems, long   *ip);
423extern int
424ncx_getn_uchar_float (const void **xpp, size_t nelems, float  *ip);
425extern int
426ncx_getn_uchar_double(const void **xpp, size_t nelems, double *ip);
427extern int
428ncx_getn_uchar_longlong (const void **xpp, size_t nelemslonglong  *ip);
429extern int
430ncx_getn_uchar_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
431
432extern int
433ncx_pad_getn_uchar_schar (const void **xpp, size_t nelemsschar  *ip);
434extern int
435ncx_pad_getn_uchar_uchar (const void **xpp, size_t nelemsuchar  *ip);
436extern int
437ncx_pad_getn_uchar_short (const void **xpp, size_t nelems, short  *ip);
438extern int
439ncx_pad_getn_uchar_ushort(const void **xpp, size_t nelemsushort *ip);
440extern int
441ncx_pad_getn_uchar_int   (const void **xpp, size_t nelems, int    *ip);
442extern int
443ncx_pad_getn_uchar_uint  (const void **xpp, size_t nelemsuint   *ip);
444extern int
445ncx_pad_getn_uchar_long  (const void **xpp, size_t nelems, long   *ip);
446extern int
447ncx_pad_getn_uchar_float (const void **xpp, size_t nelems, float  *ip);
448extern int
449ncx_pad_getn_uchar_double(const void **xpp, size_t nelems, double *ip);
450extern int
451ncx_pad_getn_uchar_longlong (const void **xpp, size_t nelemslonglong  *ip);
452extern int
453ncx_pad_getn_uchar_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
454
455extern int
456ncx_putn_uchar_schar (void **xpp, size_t nelems, const schar   *ip);
457extern int
458ncx_putn_uchar_uchar (void **xpp, size_t nelems, const uchar  *ip);
459extern int
460ncx_putn_uchar_short (void **xpp, size_t nelems, const short  *ip);
461extern int
462ncx_putn_uchar_ushort(void **xpp, size_t nelems, const ushort *ip);
463extern int
464ncx_putn_uchar_int   (void **xpp, size_t nelems, const int    *ip);
465extern int
466ncx_putn_uchar_uint  (void **xpp, size_t nelems, const uint   *ip);
467extern int
468ncx_putn_uchar_long  (void **xpp, size_t nelems, const long   *ip);
469extern int
470ncx_putn_uchar_float (void **xpp, size_t nelems, const float  *ip);
471extern int
472ncx_putn_uchar_double(void **xpp, size_t nelems, const double  *ip);
473extern int
474ncx_putn_uchar_longlong (void **xpp, size_t nelems, const longlong  *ip);
475extern int
476ncx_putn_uchar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
477
478extern int
479ncx_pad_putn_uchar_schar (void **xpp, size_t nelems, const schar  *ip);
480extern int
481ncx_pad_putn_uchar_uchar (void **xpp, size_t nelems, const uchar  *ip);
482extern int
483ncx_pad_putn_uchar_short (void **xpp, size_t nelems, const short  *ip);
484extern int
485ncx_pad_putn_uchar_ushort(void **xpp, size_t nelems, const ushort *ip);
486extern int
487ncx_pad_putn_uchar_int   (void **xpp, size_t nelems, const int    *ip);
488extern int
489ncx_pad_putn_uchar_uint  (void **xpp, size_t nelems, const uint   *ip);
490extern int
491ncx_pad_putn_uchar_long  (void **xpp, size_t nelems, const long   *ip);
492extern int
493ncx_pad_putn_uchar_float (void **xpp, size_t nelems, const float  *ip);
494extern int
495ncx_pad_putn_uchar_double(void **xpp, size_t nelems, const double *ip);
496extern int
497ncx_pad_putn_uchar_longlong (void **xpp, size_t nelems, const longlong  *ip);
498extern int
499ncx_pad_putn_uchar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
500
501/*---- short ----------------------------------------------------------------*/
502extern int
503ncx_getn_short_schar (const void **xpp, size_t nelemsschar  *ip);
504extern int
505ncx_getn_short_uchar (const void **xpp, size_t nelemsuchar  *ip);
506extern int
507ncx_getn_short_short (const void **xpp, size_t nelems, short  *ip);
508extern int
509ncx_getn_short_ushort(const void **xpp, size_t nelemsushort *ip);
510extern int
511ncx_getn_short_int   (const void **xpp, size_t nelems, int    *ip);
512extern int
513ncx_getn_short_uint  (const void **xpp, size_t nelemsuint   *ip);
514extern int
515ncx_getn_short_long  (const void **xpp, size_t nelems, long   *ip);
516extern int
517ncx_getn_short_float (const void **xpp, size_t nelems, float  *ip);
518extern int
519ncx_getn_short_double(const void **xpp, size_t nelems, double *ip);
520extern int
521ncx_getn_short_longlong (const void **xpp, size_t nelemslonglong  *ip);
522extern int
523ncx_getn_short_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
524
525extern int
526ncx_pad_getn_short_schar (const void **xpp, size_t nelemsschar  *ip);
527extern int
528ncx_pad_getn_short_uchar (const void **xpp, size_t nelemsuchar  *ip);
529extern int
530ncx_pad_getn_short_short (const void **xpp, size_t nelems, short  *ip);
531extern int
532ncx_pad_getn_short_ushort(const void **xpp, size_t nelemsushort *ip);
533extern int
534ncx_pad_getn_short_int   (const void **xpp, size_t nelems, int    *ip);
535extern int
536ncx_pad_getn_short_uint  (const void **xpp, size_t nelemsuint   *ip);
537extern int
538ncx_pad_getn_short_long  (const void **xpp, size_t nelems, long   *ip);
539extern int
540ncx_pad_getn_short_float (const void **xpp, size_t nelems, float  *ip);
541extern int
542ncx_pad_getn_short_double(const void **xpp, size_t nelems, double *ip);
543extern int
544ncx_pad_getn_short_longlong (const void **xpp, size_t nelemslonglong  *ip);
545extern int
546ncx_pad_getn_short_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
547
548extern int
549ncx_putn_short_schar (void **xpp, size_t nelems, const schar  *ip);
550extern int
551ncx_putn_short_uchar (void **xpp, size_t nelems, const uchar  *ip);
552extern int
553ncx_putn_short_short (void **xpp, size_t nelems, const short  *ip);
554extern int
555ncx_putn_short_ushort(void **xpp, size_t nelems, const ushort *ip);
556extern int
557ncx_putn_short_int   (void **xpp, size_t nelems, const int    *ip);
558extern int
559ncx_putn_short_uint  (void **xpp, size_t nelems, const uint   *ip);
560extern int
561ncx_putn_short_long  (void **xpp, size_t nelems, const long   *ip);
562extern int
563ncx_putn_short_float (void **xpp, size_t nelems, const float  *ip);
564extern int
565ncx_putn_short_double(void **xpp, size_t nelems, const double *ip);
566extern int
567ncx_putn_short_longlong (void **xpp, size_t nelems, const longlong  *ip);
568extern int
569ncx_putn_short_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
570
571extern int
572ncx_pad_putn_short_schar (void **xpp, size_t nelems, const schar  *ip);
573extern int
574ncx_pad_putn_short_uchar (void **xpp, size_t nelems, const uchar  *ip);
575extern int
576ncx_pad_putn_short_short (void **xpp, size_t nelems, const short  *ip);
577extern int
578ncx_pad_putn_short_ushort(void **xpp, size_t nelems, const ushort *ip);
579extern int
580ncx_pad_putn_short_int   (void **xpp, size_t nelems, const int    *ip);
581extern int
582ncx_pad_putn_short_uint  (void **xpp, size_t nelems, const uint   *ip);
583extern int
584ncx_pad_putn_short_long  (void **xpp, size_t nelems, const long   *ip);
585extern int
586ncx_pad_putn_short_float (void **xpp, size_t nelems, const float  *ip);
587extern int
588ncx_pad_putn_short_double(void **xpp, size_t nelems, const double *ip);
589extern int
590ncx_pad_putn_short_longlong (void **xpp, size_t nelems, const longlong  *ip);
591extern int
592ncx_pad_putn_short_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
593
594/*---- ushort ---------------------------------------------------------------*/
595extern int
596ncx_getn_ushort_schar (const void **xpp, size_t nelemsschar  *ip);
597extern int
598ncx_getn_ushort_uchar (const void **xpp, size_t nelemsuchar  *ip);
599extern int
600ncx_getn_ushort_short (const void **xpp, size_t nelems, short  *ip);
601extern int
602ncx_getn_ushort_ushort(const void **xpp, size_t nelemsushort *ip);
603extern int
604ncx_getn_ushort_int   (const void **xpp, size_t nelems, int    *ip);
605extern int
606ncx_getn_ushort_uint  (const void **xpp, size_t nelemsuint   *ip);
607extern int
608ncx_getn_ushort_long  (const void **xpp, size_t nelems, long   *ip);
609extern int
610ncx_getn_ushort_float (const void **xpp, size_t nelems, float  *ip);
611extern int
612ncx_getn_ushort_double(const void **xpp, size_t nelems, double *ip);
613extern int
614ncx_getn_ushort_longlong (const void **xpp, size_t nelemslonglong  *ip);
615extern int
616ncx_getn_ushort_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
617
618extern int
619ncx_pad_getn_ushort_schar (const void **xpp, size_t nelemsschar  *ip);
620extern int
621ncx_pad_getn_ushort_uchar (const void **xpp, size_t nelemsuchar  *ip);
622extern int
623ncx_pad_getn_ushort_short (const void **xpp, size_t nelems, short  *ip);
624extern int
625ncx_pad_getn_ushort_ushort(const void **xpp, size_t nelemsushort *ip);
626extern int
627ncx_pad_getn_ushort_int   (const void **xpp, size_t nelems, int    *ip);
628extern int
629ncx_pad_getn_ushort_uint  (const void **xpp, size_t nelemsuint   *ip);
630extern int
631ncx_pad_getn_ushort_long  (const void **xpp, size_t nelems, long   *ip);
632extern int
633ncx_pad_getn_ushort_float (const void **xpp, size_t nelems, float  *ip);
634extern int
635ncx_pad_getn_ushort_double(const void **xpp, size_t nelems, double *ip);
636extern int
637ncx_pad_getn_ushort_longlong (const void **xpp, size_t nelemslonglong  *ip);
638extern int
639ncx_pad_getn_ushort_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
640
641extern int
642ncx_putn_ushort_schar (void **xpp, size_t nelems, const schar  *ip);
643extern int
644ncx_putn_ushort_uchar (void **xpp, size_t nelems, const uchar  *ip);
645extern int
646ncx_putn_ushort_short (void **xpp, size_t nelems, const short  *ip);
647extern int
648ncx_putn_ushort_ushort(void **xpp, size_t nelems, const ushort *ip);
649extern int
650ncx_putn_ushort_int   (void **xpp, size_t nelems, const int    *ip);
651extern int
652ncx_putn_ushort_uint  (void **xpp, size_t nelems, const uint   *ip);
653extern int
654ncx_putn_ushort_long  (void **xpp, size_t nelems, const long   *ip);
655extern int
656ncx_putn_ushort_float (void **xpp, size_t nelems, const float  *ip);
657extern int
658ncx_putn_ushort_double(void **xpp, size_t nelems, const double *ip);
659extern int
660ncx_putn_ushort_longlong (void **xpp, size_t nelems, const longlong  *ip);
661extern int
662ncx_putn_ushort_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
663
664extern int
665ncx_pad_putn_ushort_schar (void **xpp, size_t nelems, const schar  *ip);
666extern int
667ncx_pad_putn_ushort_uchar (void **xpp, size_t nelems, const uchar  *ip);
668extern int
669ncx_pad_putn_ushort_short (void **xpp, size_t nelems, const short  *ip);
670extern int
671ncx_pad_putn_ushort_ushort(void **xpp, size_t nelems, const ushort *ip);
672extern int
673ncx_pad_putn_ushort_int   (void **xpp, size_t nelems, const int    *ip);
674extern int
675ncx_pad_putn_ushort_uint  (void **xpp, size_t nelems, const uint   *ip);
676extern int
677ncx_pad_putn_ushort_long  (void **xpp, size_t nelems, const long   *ip);
678extern int
679ncx_pad_putn_ushort_float (void **xpp, size_t nelems, const float  *ip);
680extern int
681ncx_pad_putn_ushort_double(void **xpp, size_t nelems, const double *ip);
682extern int
683ncx_pad_putn_ushort_longlong (void **xpp, size_t nelems, const longlong  *ip);
684extern int
685ncx_pad_putn_ushort_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
686
687/*---- int ------------------------------------------------------------------*/
688extern int
689ncx_getn_int_schar (const void **xpp, size_t nelemsschar  *ip);
690extern int
691ncx_getn_int_uchar (const void **xpp, size_t nelemsuchar  *ip);
692extern int
693ncx_getn_int_short (const void **xpp, size_t nelems, short  *ip);
694extern int
695ncx_getn_int_ushort(const void **xpp, size_t nelemsushort *ip);
696extern int
697ncx_getn_int_int   (const void **xpp, size_t nelems, int    *ip);
698extern int
699ncx_getn_int_uint  (const void **xpp, size_t nelemsuint   *ip);
700extern int
701ncx_getn_int_long  (const void **xpp, size_t nelems, long   *ip);
702extern int
703ncx_getn_long_long (const void **xpp, size_t nelems, long   *ip);
704extern int
705ncx_getn_int_float (const void **xpp, size_t nelems, float  *ip);
706extern int
707ncx_getn_int_double(const void **xpp, size_t nelems, double *ip);
708extern int
709ncx_getn_int_longlong (const void **xpp, size_t nelemslonglong  *ip);
710extern int
711ncx_getn_int_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
712
713extern int
714ncx_putn_int_schar (void **xpp, size_t nelems, const schar  *ip);
715extern int
716ncx_putn_int_uchar (void **xpp, size_t nelems, const uchar  *ip);
717extern int
718ncx_putn_int_short (void **xpp, size_t nelems, const short  *ip);
719extern int
720ncx_putn_int_ushort(void **xpp, size_t nelems, const ushort *ip);
721extern int
722ncx_putn_int_int   (void **xpp, size_t nelems, const int    *ip);
723extern int
724ncx_putn_int_uint  (void **xpp, size_t nelems, const uint   *ip);
725extern int
726ncx_putn_int_long  (void **xpp, size_t nelems, const long   *ip);
727extern int
728ncx_putn_long_long (void **xpp, size_t nelems, const long   *ip);
729extern int
730ncx_putn_int_float (void **xpp, size_t nelems, const float  *ip);
731extern int
732ncx_putn_int_double(void **xpp, size_t nelems, const double *ip);
733extern int
734ncx_putn_int_longlong (void **xpp, size_t nelems, const longlong  *ip);
735extern int
736ncx_putn_int_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
737
738/*---- uint -----------------------------------------------------------------*/
739extern int
740ncx_getn_uint_schar (const void **xpp, size_t nelemsschar  *ip);
741extern int
742ncx_getn_uint_uchar (const void **xpp, size_t nelemsuchar  *ip);
743extern int
744ncx_getn_uint_short (const void **xpp, size_t nelems, short  *ip);
745extern int
746ncx_getn_uint_ushort(const void **xpp, size_t nelemsushort *ip);
747extern int
748ncx_getn_uint_int   (const void **xpp, size_t nelems, int    *ip);
749extern int
750ncx_getn_uint_uint  (const void **xpp, size_t nelemsuint   *ip);
751extern int
752ncx_getn_uint_long  (const void **xpp, size_t nelems, long   *ip);
753extern int
754ncx_getn_long_long (const void **xpp, size_t nelems, long   *ip);
755extern int
756ncx_getn_uint_float (const void **xpp, size_t nelems, float  *ip);
757extern int
758ncx_getn_uint_double(const void **xpp, size_t nelems, double *ip);
759extern int
760ncx_getn_uint_longlong (const void **xpp, size_t nelemslonglong  *ip);
761extern int
762ncx_getn_uint_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
763
764extern int
765ncx_putn_uint_schar (void **xpp, size_t nelems, const schar  *ip);
766extern int
767ncx_putn_uint_uchar (void **xpp, size_t nelems, const uchar  *ip);
768extern int
769ncx_putn_uint_short (void **xpp, size_t nelems, const short  *ip);
770extern int
771ncx_putn_uint_ushort(void **xpp, size_t nelems, const ushort *ip);
772extern int
773ncx_putn_uint_int   (void **xpp, size_t nelems, const int    *ip);
774extern int
775ncx_putn_uint_uint  (void **xpp, size_t nelems, const uint   *ip);
776extern int
777ncx_putn_uint_long  (void **xpp, size_t nelems, const long   *ip);
778extern int
779ncx_putn_long_long (void **xpp, size_t nelems, const long   *ip);
780extern int
781ncx_putn_uint_float (void **xpp, size_t nelems, const float  *ip);
782extern int
783ncx_putn_uint_double(void **xpp, size_t nelems, const double *ip);
784extern int
785ncx_putn_uint_longlong (void **xpp, size_t nelems, const longlong  *ip);
786extern int
787ncx_putn_uint_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
788
789/*---- float ----------------------------------------------------------------*/
790extern int
791ncx_getn_float_schar (const void **xpp, size_t nelemsschar  *ip);
792extern int
793ncx_getn_float_uchar (const void **xpp, size_t nelemsuchar  *ip);
794extern int
795ncx_getn_float_short (const void **xpp, size_t nelems, short  *ip);
796extern int
797ncx_getn_float_ushort(const void **xpp, size_t nelemsushort *ip);
798extern int
799ncx_getn_float_int   (const void **xpp, size_t nelems, int    *ip);
800extern int
801ncx_getn_float_uint  (const void **xpp, size_t nelemsuint   *ip);
802extern int
803ncx_getn_float_long  (const void **xpp, size_t nelems, long   *ip);
804extern int
805ncx_getn_float_float (const void **xpp, size_t nelems, float  *ip);
806extern int
807ncx_getn_float_double(const void **xpp, size_t nelems, double *ip);
808extern int
809ncx_getn_float_longlong (const void **xpp, size_t nelemslonglong  *ip);
810extern int
811ncx_getn_float_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
812
813extern int
814ncx_putn_float_schar (void **xpp, size_t nelems, const schar  *ip);
815extern int
816ncx_putn_float_uchar (void **xpp, size_t nelems, const uchar  *ip);
817extern int
818ncx_putn_float_short (void **xpp, size_t nelems, const short  *ip);
819extern int
820ncx_putn_float_ushort(void **xpp, size_t nelems, const ushort *ip);
821extern int
822ncx_putn_float_int   (void **xpp, size_t nelems, const int    *ip);
823extern int
824ncx_putn_float_uint  (void **xpp, size_t nelems, const uint   *ip);
825extern int
826ncx_putn_float_long  (void **xpp, size_t nelems, const long   *ip);
827extern int
828ncx_putn_float_float (void **xpp, size_t nelems, const float  *ip);
829extern int
830ncx_putn_float_double(void **xpp, size_t nelems, const double *ip);
831extern int
832ncx_putn_float_longlong (void **xpp, size_t nelems, const longlong  *ip);
833extern int
834ncx_putn_float_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
835
836/*---- double ---------------------------------------------------------------*/
837extern int
838ncx_getn_double_schar (const void **xpp, size_t nelemsschar  *ip);
839extern int
840ncx_getn_double_uchar (const void **xpp, size_t nelemsuchar  *ip);
841extern int
842ncx_getn_double_short (const void **xpp, size_t nelems, short  *ip);
843extern int
844ncx_getn_double_ushort(const void **xpp, size_t nelemsushort  *ip);
845extern int
846ncx_getn_double_int   (const void **xpp, size_t nelems, int    *ip);
847extern int
848ncx_getn_double_uint  (const void **xpp, size_t nelemsuint   *ip);
849extern int
850ncx_getn_double_long  (const void **xpp, size_t nelems, long   *ip);
851extern int
852ncx_getn_double_float (const void **xpp, size_t nelems, float  *ip);
853extern int
854ncx_getn_double_double(const void **xpp, size_t nelems, double *ip);
855extern int
856ncx_getn_double_longlong (const void **xpp, size_t nelemslonglong  *ip);
857extern int
858ncx_getn_double_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
859
860extern int
861ncx_putn_double_schar (void **xpp, size_t nelems, const schar  *ip);
862extern int
863ncx_putn_double_uchar (void **xpp, size_t nelems, const uchar  *ip);
864extern int
865ncx_putn_double_short (void **xpp, size_t nelems, const short  *ip);
866extern int
867ncx_putn_double_ushort(void **xpp, size_t nelems, const ushort *ip);
868extern int
869ncx_putn_double_int   (void **xpp, size_t nelems, const int    *ip);
870extern int
871ncx_putn_double_uint  (void **xpp, size_t nelems, const uint   *ip);
872extern int
873ncx_putn_double_long  (void **xpp, size_t nelems, const long   *ip);
874extern int
875ncx_putn_double_float (void **xpp, size_t nelems, const float  *ip);
876extern int
877ncx_putn_double_double(void **xpp, size_t nelems, const double *ip);
878extern int
879ncx_putn_double_longlong (void **xpp, size_t nelems, const longlong  *ip);
880extern int
881ncx_putn_double_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
882
883/*---- longlong ----------------------------------------------------------------*/
884extern int
885ncx_getn_longlong_schar (const void **xpp, size_t nelemsschar  *ip);
886extern int
887ncx_getn_longlong_uchar (const void **xpp, size_t nelemsuchar  *ip);
888extern int
889ncx_getn_longlong_short (const void **xpp, size_t nelems, short  *ip);
890extern int
891ncx_getn_longlong_ushort(const void **xpp, size_t nelemsushort  *ip);
892extern int
893ncx_getn_longlong_int   (const void **xpp, size_t nelems, int    *ip);
894extern int
895ncx_getn_longlong_uint  (const void **xpp, size_t nelemsuint   *ip);
896extern int
897ncx_getn_longlong_long  (const void **xpp, size_t nelems, long   *ip);
898extern int
899ncx_getn_longlong_float (const void **xpp, size_t nelems, float  *ip);
900extern int
901ncx_getn_longlong_double(const void **xpp, size_t nelems, double *ip);
902extern int
903ncx_getn_longlong_longlong (const void **xpp, size_t nelemslonglong  *ip);
904extern int
905ncx_getn_longlong_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
906
907extern int
908ncx_putn_longlong_schar (void **xpp, size_t nelems, const schar  *ip);
909extern int
910ncx_putn_longlong_uchar (void **xpp, size_t nelems, const uchar  *ip);
911extern int
912ncx_putn_longlong_short (void **xpp, size_t nelems, const short  *ip);
913extern int
914ncx_putn_longlong_ushort(void **xpp, size_t nelems, const ushort *ip);
915extern int
916ncx_putn_longlong_int   (void **xpp, size_t nelems, const int    *ip);
917extern int
918ncx_putn_longlong_uint  (void **xpp, size_t nelems, const uint   *ip);
919extern int
920ncx_putn_longlong_long  (void **xpp, size_t nelems, const long   *ip);
921extern int
922ncx_putn_longlong_float (void **xpp, size_t nelems, const float  *ip);
923extern int
924ncx_putn_longlong_double(void **xpp, size_t nelems, const double *ip);
925extern int
926ncx_putn_longlong_longlong (void **xpp, size_t nelems, const longlong  *ip);
927extern int
928ncx_putn_longlong_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
929
930/*---- ulonglong ---------------------------------------------------------------*/
931extern int
932ncx_getn_ulonglong_schar (const void **xpp, size_t nelemsschar  *ip);
933extern int
934ncx_getn_ulonglong_uchar (const void **xpp, size_t nelemsuchar  *ip);
935extern int
936ncx_getn_ulonglong_short (const void **xpp, size_t nelems, short  *ip);
937extern int
938ncx_getn_ulonglong_ushort(const void **xpp, size_t nelemsushort  *ip);
939extern int
940ncx_getn_ulonglong_int   (const void **xpp, size_t nelems, int    *ip);
941extern int
942ncx_getn_ulonglong_uint  (const void **xpp, size_t nelemsuint   *ip);
943extern int
944ncx_getn_ulonglong_long  (const void **xpp, size_t nelems, long   *ip);
945extern int
946ncx_getn_ulonglong_float (const void **xpp, size_t nelems, float  *ip);
947extern int
948ncx_getn_ulonglong_double(const void **xpp, size_t nelems, double *ip);
949extern int
950ncx_getn_ulonglong_longlong (const void **xpp, size_t nelemslonglong  *ip);
951extern int
952ncx_getn_ulonglong_ulonglong(const void **xpp, size_t nelemsulonglong *ip);
953
954extern int
955ncx_putn_ulonglong_schar (void **xpp, size_t nelems, const schar  *ip);
956extern int
957ncx_putn_ulonglong_uchar (void **xpp, size_t nelems, const uchar  *ip);
958extern int
959ncx_putn_ulonglong_short (void **xpp, size_t nelems, const short  *ip);
960extern int
961ncx_putn_ulonglong_ushort(void **xpp, size_t nelems, const ushort *ip);
962extern int
963ncx_putn_ulonglong_int   (void **xpp, size_t nelems, const int    *ip);
964extern int
965ncx_putn_ulonglong_uint  (void **xpp, size_t nelems, const uint   *ip);
966extern int
967ncx_putn_ulonglong_long  (void **xpp, size_t nelems, const long   *ip);
968extern int
969ncx_putn_ulonglong_float (void **xpp, size_t nelems, const float  *ip);
970extern int
971ncx_putn_ulonglong_double(void **xpp, size_t nelems, const double *ip);
972extern int
973ncx_putn_ulonglong_longlong (void **xpp, size_t nelems, const longlong  *ip);
974extern int
975ncx_putn_ulonglong_ulonglong(void **xpp, size_t nelems, const ulonglong *ip);
976
977
978/*
979 * Other aggregate conversion functions.
980 */
981
982/* read ASCII characters */
983#ifdef __arm__
984
985extern int
986ncx_getn_text(const void **xpp, size_t nchars, signed char *cp);
987extern int
988ncx_pad_getn_text(const void **xpp, size_t nchars, signed char *cp);
989
990/* write ASCII characters */
991extern int
992ncx_putn_text(void **xpp, size_t nchars, const signed char *cp);
993extern int
994ncx_pad_putn_text(void **xpp, size_t nchars, const signed char *cp);
995
996#else // ifdef __arm__
997
998extern int
999ncx_getn_text(const void **xpp, size_t nchars, char *cp);
1000extern int
1001ncx_pad_getn_text(const void **xpp, size_t nchars, char *cp);
1002
1003/* write ASCII characters */
1004extern int
1005ncx_putn_text(void **xpp, size_t nchars, const char *cp);
1006extern int
1007ncx_pad_putn_text(void **xpp, size_t nchars, const char *cp);
1008
1009#endif //ifdef __arm__
1010
1011/* for symmetry */
1012#define ncx_getn_char_char(xppnelemsfillpncx_getn_text(xppnelemsfillp)
1013#define ncx_putn_char_char(xppnelemsfillpncx_putn_text(xppnelemsfillp)
1014
1015/* read opaque data */
1016extern int
1017ncx_getn_void(const void **xpp, size_t nchars, void *vp);
1018extern int
1019ncx_pad_getn_void(const void **xpp, size_t nchars, void *vp);
1020
1021/* write opaque data */
1022extern int
1023ncx_putn_void(void **xpp, size_t nchars, const void *vp);
1024extern int
1025ncx_pad_putn_void(void **xpp, size_t nchars, const void *vp);
1026
1027#endif /* _NCX_H_ */


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed