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