1 /* 2 * Copyright 1996, University Corporation for Atmospheric Research 3 * See netcdf/COPYRIGHT file for copying and redistribution conditions. 4 */ 5 /* "$Id: ncx.h,v 1.65 2010/05/26 18:11:08 dmh Exp $" */ 6 7 #ifndef _NCX_H_ 8 #define _NCX_H_ 9 10 #include "ncdispatch.h" 11 12 /* 13 * An external data representation interface. 14 15 * 16 * This started out as a general replacement for ONC XDR, 17 * specifically, the xdrmem family of functions. 18 * 19 * We eventually realized that we could write more portable 20 * code if we decoupled any association between the 'C' types 21 * and the external types. (XDR has this association between the 'C' 22 * types and the external representations, like xdr_int() takes 23 * an int argument and goes to an external int representation.) 24 * So, now there is a matrix of functions. 25 * 26 */ 27 28 #include <config.h> /* output of 'configure' */ 29 #include "rnd.h" 30 #include <stddef.h> /* size_t */ 31 #include <errno.h> 32 #include <sys/types.h> /* off_t */ 33 34 #ifdef _MSC_VER 35 # pragma warning ( disable : 4244 ) 36 #endif 37 38 /* Define uchar if it is not defined on this system. */ 39 #ifndef HAVE_UCHAR 40 typedef unsigned char uchar; 41 #endif 42 43 #ifndef uint 44 typedef unsigned int uint; 45 #endif 46 #define longlong long long 47 48 #if defined(_CRAY) && !defined(_CRAYIEEE) && !defined(__crayx1) 49 #define CRAYFLOAT 1 /* CRAY Floating point */ 50 #elif defined(_SX) && defined(_FLOAT2) /* NEC SUPER-UX in CRAY mode */ 51 #define CRAYFLOAT 1 /* CRAY Floating point */ 52 #endif 53 54 /* 55 * The integer return code for the conversion routines 56 * is 0 (ENOERR) when no error occured, or NC_ERANGE as appropriate 57 * for an overflow conversion. 58 */ 59 #ifndef ENOERR 60 #define ENOERR 0 61 #endif 62 #ifndef NC_ERANGE 63 #define NC_ERANGE (-60) /* N.B. must match value in xxxnetcdf.h */ 64 #endif 65 #ifndef NC_ENOMEM 66 #define NC_ENOMEM (-61) /* N.B. must match value in xxxnetcdf.h */ 67 #endif 68 69 70 /* 71 * External sizes of the primitive elements. 72 */ 73 #define X_SIZEOF_CHAR 1 74 #define X_SIZEOF_SHORT 2 75 #define X_SIZEOF_INT 4 /* xdr_int */ 76 #if 0 77 #define X_SIZEOF_LONG 8 */ /* xdr_long_long */ 78 #endif 79 #define X_SIZEOF_FLOAT 4 80 #define X_SIZEOF_DOUBLE 8 81 82 /* 83 * For now, netcdf is limited to 32 bit sizes, 84 * If compiled with support for "large files", then 85 * netcdf will use a 64 bit off_t and it can then write a file 86 * using 64 bit offsets. 87 * see also X_SIZE_MAX, X_OFF_MAX below 88 */ 89 #define X_SIZEOF_OFF_T (sizeof(off_t)) 90 #define X_SIZEOF_SIZE_T X_SIZEOF_INT 91 92 /* 93 * limits of the external representation 94 */ 95 #define X_SCHAR_MIN (-128) 96 #define X_SCHAR_MAX 127 97 #define X_UCHAR_MAX 255U 98 #define X_SHORT_MIN (-32768) 99 #define X_SHRT_MIN X_SHORT_MIN /* alias compatible with limits.h */ 100 #define X_SHORT_MAX 32767 101 #define X_SHRT_MAX X_SHORT_MAX /* alias compatible with limits.h */ 102 #define X_USHORT_MAX 65535U 103 #define X_USHRT_MAX X_USHORT_MAX /* alias compatible with limits.h */ 104 #define X_INT_MIN (-2147483647-1) 105 #define X_INT_MAX 2147483647 106 #define X_UINT_MAX 4294967295U 107 #define X_FLOAT_MAX 3.402823466e+38f 108 #define X_FLOAT_MIN (-X_FLOAT_MAX) 109 #define X_FLT_MAX X_FLOAT_MAX /* alias compatible with limits.h */ 110 #if CRAYFLOAT 111 /* ldexp(1. - ldexp(.5 , -46), 1024) */ 112 #define X_DOUBLE_MAX 1.79769313486230e+308 113 #else 114 /* scalb(1. - scalb(.5 , -52), 1024) */ 115 #define X_DOUBLE_MAX 1.7976931348623157e+308 116 #endif 117 #define X_DOUBLE_MIN (-X_DOUBLE_MAX) 118 #define X_DBL_MAX X_DOUBLE_MAX /* alias compatible with limits.h */ 119 120 #define X_SIZE_MAX X_UINT_MAX 121 #define X_OFF_MAX X_INT_MAX 122 123 124 /* Begin ncx_len */ 125 126 /* 127 * ncx_len_xxx() interfaces are defined as macros below, 128 * These give the length of an array of nelems of the type. 129 * N.B. The 'char' and 'short' interfaces give the X_ALIGNED length. 130 */ 131 #define X_ALIGN 4 /* a.k.a. BYTES_PER_XDR_UNIT */ 132 133 #define ncx_len_char(nelems) \ 134 _RNDUP((nelems), X_ALIGN) 135 136 #define ncx_len_short(nelems) \ 137 (((nelems) + (nelems)%2) * X_SIZEOF_SHORT) 138 139 #define ncx_len_int(nelems) \ 140 ((nelems) * X_SIZEOF_INT) 141 142 #define ncx_len_long(nelems) \ 143 ((nelems) * X_SIZEOF_LONG) 144 145 #define ncx_len_float(nelems) \ 146 ((nelems) * X_SIZEOF_FLOAT) 147 148 #define ncx_len_double(nelems) \ 149 ((nelems) * X_SIZEOF_DOUBLE) 150 151 /* End ncx_len */ 152 153 #if __CHAR_UNSIGNED__ 154 /* 'char' is unsigned, declare ncbyte as 'signed char' */ 155 typedef signed char schar; 156 157 #else 158 /* 'char' is signed */ 159 typedef signed 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 long 187 ulong 188 float 189 double 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 (ENOERR) when no error occured, 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 occured. 206 * 207 * Note that loss of precision may occur silently. 208 * 209 */ 210 211 #if 0 212 extern int 213 ncx_get_schar_schar(const void *xp, schar *ip); 214 extern int 215 ncx_get_schar_uchar(const void *xp, uchar *ip); 216 extern int 217 ncx_get_schar_short(const void *xp, short *ip); 218 extern int 219 ncx_get_schar_int(const void *xp, int *ip); 220 extern int 221 ncx_get_schar_long(const void *xp, long *ip); 222 extern int 223 ncx_get_schar_float(const void *xp, float *ip); 224 extern int 225 ncx_get_schar_double(const void *xp, double *ip); 226 227 extern int 228 ncx_put_schar_schar(void *xp, const schar *ip); 229 extern int 230 ncx_put_schar_uchar(void *xp, const uchar *ip); 231 extern int 232 ncx_put_schar_short(void *xp, const short *ip); 233 extern int 234 ncx_put_schar_int(void *xp, const int *ip); 235 extern int 236 ncx_put_schar_long(void *xp, const long *ip); 237 extern int 238 ncx_put_schar_float(void *xp, const float *ip); 239 extern int 240 ncx_put_schar_double(void *xp, const double *ip); 241 #endif 242 243 244 extern int 245 ncx_get_short_schar(const void *xp, schar *ip); 246 extern int 247 ncx_get_short_uchar(const void *xp, uchar *ip); 248 extern int 249 ncx_get_short_short(const void *xp, short *ip); 250 extern int 251 ncx_get_short_int(const void *xp, int *ip); 252 extern int 253 ncx_get_short_long(const void *xp, long *ip); 254 extern int 255 ncx_get_short_float(const void *xp, float *ip); 256 extern int 257 ncx_get_short_double(const void *xp, double *ip); 258 259 extern int 260 ncx_put_short_schar(void *xp, const schar *ip); 261 extern int 262 ncx_put_short_uchar(void *xp, const uchar *ip); 263 extern int 264 ncx_put_short_short(void *xp, const short *ip); 265 extern int 266 ncx_put_short_int(void *xp, const int *ip); 267 extern int 268 ncx_put_short_long(void *xp, const long *ip); 269 extern int 270 ncx_put_short_float(void *xp, const float *ip); 271 extern int 272 ncx_put_short_double(void *xp, const double *ip); 273 274 275 extern int 276 ncx_get_int_schar(const void *xp, schar *ip); 277 extern int 278 ncx_get_int_uchar(const void *xp, uchar *ip); 279 extern int 280 ncx_get_int_short(const void *xp, short *ip); 281 extern int 282 ncx_get_int_int(const void *xp, int *ip); 283 extern int 284 ncx_get_int_long(const void *xp, long *ip); 285 extern int 286 ncx_get_int_float(const void *xp, float *ip); 287 extern int 288 ncx_get_int_double(const void *xp, double *ip); 289 290 extern int 291 ncx_put_int_schar(void *xp, const schar *ip); 292 extern int 293 ncx_put_int_uchar(void *xp, const uchar *ip); 294 extern int 295 ncx_put_int_short(void *xp, const short *ip); 296 extern int 297 ncx_put_int_int(void *xp, const int *ip); 298 extern int 299 ncx_put_int_long(void *xp, const long *ip); 300 extern int 301 ncx_put_int_float(void *xp, const float *ip); 302 extern int 303 ncx_put_int_double(void *xp, const double *ip); 304 305 306 extern int 307 ncx_get_float_schar(const void *xp, schar *ip); 308 extern int 309 ncx_get_float_uchar(const void *xp, uchar *ip); 310 extern int 311 ncx_get_float_short(const void *xp, short *ip); 312 extern int 313 ncx_get_float_int(const void *xp, int *ip); 314 extern int 315 ncx_get_float_long(const void *xp, long *ip); 316 extern int 317 ncx_get_float_float(const void *xp, float *ip); 318 extern int 319 ncx_get_float_double(const void *xp, double *ip); 320 321 extern int 322 ncx_put_float_schar(void *xp, const schar *ip); 323 extern int 324 ncx_put_float_uchar(void *xp, const uchar *ip); 325 extern int 326 ncx_put_float_short(void *xp, const short *ip); 327 extern int 328 ncx_put_float_int(void *xp, const int *ip); 329 extern int 330 ncx_put_float_long(void *xp, const long *ip); 331 extern int 332 ncx_put_float_float(void *xp, const float *ip); 333 extern int 334 ncx_put_float_double(void *xp, const double *ip); 335 336 337 extern int 338 ncx_get_double_schar(const void *xp, schar *ip); 339 extern int 340 ncx_get_double_uchar(const void *xp, uchar *ip); 341 extern int 342 ncx_get_double_short(const void *xp, short *ip); 343 extern int 344 ncx_get_double_int(const void *xp, int *ip); 345 extern int 346 ncx_get_double_long(const void *xp, long *ip); 347 extern int 348 ncx_get_double_float(const void *xp, float *ip); 349 extern int 350 ncx_get_double_double(const void *xp, double *ip); 351 352 extern int 353 ncx_put_double_schar(void *xp, const schar *ip); 354 extern int 355 ncx_put_double_uchar(void *xp, const uchar *ip); 356 extern int 357 ncx_put_double_short(void *xp, const short *ip); 358 extern int 359 ncx_put_double_int(void *xp, const int *ip); 360 extern int 361 ncx_put_double_long(void *xp, const long *ip); 362 extern int 363 ncx_put_double_float(void *xp, const float *ip); 364 extern int 365 ncx_put_double_double(void *xp, const double *ip); 366 367 368 /* 369 * Other primitive conversion functions 370 * N.B. slightly different interface 371 * Used by netcdf. 372 */ 373 374 /* ncx_get_int_size_t */ 375 extern int 376 ncx_get_size_t(const void **xpp, size_t *ulp); 377 /* ncx_get_int_off_t */ 378 extern int 379 ncx_get_off_t(const void **xpp, off_t *lp, size_t sizeof_off_t); 380 381 /* ncx_put_int_size_t */ 382 extern int 383 ncx_put_size_t(void **xpp, const size_t *ulp); 384 /* ncx_put_int_off_t */ 385 extern int 386 ncx_put_off_t(void **xpp, const off_t *lp, size_t sizeof_off_t); 387 388 389 /* 390 * Aggregate numeric conversion functions. 391 * Convert an array. Replaces xdr_array(...). 392 * These functions are used by netcdf. Unlike the xdr 393 * interface, we optimize for aggregate conversions. 394 * This functions should be implemented to take advantage 395 * of multiple processor / parallel hardware where available. 396 * 397 * These take the form 398 * int ncx_getn_{external_type}_{internal_type}( 399 * const void *xpp, 400 * size_t nelems, 401 * internal_type *ip 402 * ); 403 * int ncx_putn_{external_type}_{internal_type}( 404 * void **xpp, 405 * size_t nelems, 406 * const internal_type *ip 407 * ); 408 * Where the types are as in the primitive numeric conversion functions. 409 * 410 * The value of the pointer to pointer argument, *xpp, is 411 * expected to reference storage for `nelems' of the external 412 * type. On return, it modified to reference just past the last 413 * converted external element. 414 * 415 * The types whose external size is less than X_ALIGN also have `pad' 416 * interfaces. These round (and zero fill on put) *xpp up to X_ALIGN 417 * boundaries. (This is the usual xdr behavior.) 418 * 419 * The `ip' argument should point to an array of `nelems' of 420 * internal_type. 421 * 422 * Range errors (NC_ERANGE) for a individual values in the array 423 * DO NOT terminate the array conversion. All elements are converted, 424 * with some having undefined values. 425 * If any range error occurs, the function returns NC_ERANGE. 426 * 427 */ 428 429 extern int 430 ncx_getn_schar_schar(const void **xpp, size_t nelems, schar *ip); 431 extern int 432 ncx_getn_schar_uchar(const void **xpp, size_t nelems, uchar *ip); 433 extern int 434 ncx_getn_schar_short(const void **xpp, size_t nelems, short *ip); 435 extern int 436 ncx_getn_schar_int(const void **xpp, size_t nelems, int *ip); 437 extern int 438 ncx_getn_schar_long(const void **xpp, size_t nelems, long *ip); 439 extern int 440 ncx_getn_schar_float(const void **xpp, size_t nelems, float *ip); 441 extern int 442 ncx_getn_schar_double(const void **xpp, size_t nelems, double *ip); 443 extern int 444 ncx_getn_schar_uint(const void **xpp, size_t nelems, unsigned int *ip); 445 extern int 446 ncx_getn_schar_longlong(const void **xpp, size_t nelems, longlong *ip); 447 extern int 448 ncx_getn_schar_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); 449 450 extern int 451 ncx_pad_getn_schar_schar(const void **xpp, size_t nelems, schar *ip); 452 extern int 453 ncx_pad_getn_schar_uchar(const void **xpp, size_t nelems, uchar *ip); 454 extern int 455 ncx_pad_getn_schar_short(const void **xpp, size_t nelems, short *ip); 456 extern int 457 ncx_pad_getn_schar_int(const void **xpp, size_t nelems, int *ip); 458 extern int 459 ncx_pad_getn_schar_long(const void **xpp, size_t nelems, long *ip); 460 extern int 461 ncx_pad_getn_schar_float(const void **xpp, size_t nelems, float *ip); 462 extern int 463 ncx_pad_getn_schar_double(const void **xpp, size_t nelems, double *ip); 464 extern int 465 ncx_pad_getn_schar_uint(const void **xpp, size_t nelems, unsigned int *ip); 466 extern int 467 ncx_pad_getn_schar_longlong(const void **xpp, size_t nelems, longlong *ip); 468 extern int 469 ncx_pad_getn_schar_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); 470 471 extern int 472 ncx_putn_schar_schar(void **xpp, size_t nelems, const schar *ip); 473 extern int 474 ncx_putn_schar_uchar(void **xpp, size_t nelems, const uchar *ip); 475 extern int 476 ncx_putn_schar_short(void **xpp, size_t nelems, const short *ip); 477 extern int 478 ncx_putn_schar_int(void **xpp, size_t nelems, const int *ip); 479 extern int 480 ncx_putn_schar_long(void **xpp, size_t nelems, const long *ip); 481 extern int 482 ncx_putn_schar_float(void **xpp, size_t nelems, const float *ip); 483 extern int 484 ncx_putn_schar_double(void **xpp, size_t nelems, const double *ip); 485 extern int 486 ncx_putn_schar_uint(void **xpp, size_t nelems, const unsigned int *ip); 487 extern int 488 ncx_putn_schar_longlong(void **xpp, size_t nelems, const longlong *ip); 489 extern int 490 ncx_putn_schar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); 491 492 extern int 493 ncx_pad_putn_schar_schar(void **xpp, size_t nelems, const schar *ip); 494 extern int 495 ncx_pad_putn_schar_uchar(void **xpp, size_t nelems, const uchar *ip); 496 extern int 497 ncx_pad_putn_schar_short(void **xpp, size_t nelems, const short *ip); 498 extern int 499 ncx_pad_putn_schar_int(void **xpp, size_t nelems, const int *ip); 500 extern int 501 ncx_pad_putn_schar_long(void **xpp, size_t nelems, const long *ip); 502 extern int 503 ncx_pad_putn_schar_float(void **xpp, size_t nelems, const float *ip); 504 extern int 505 ncx_pad_putn_schar_double(void **xpp, size_t nelems, const double *ip); 506 extern int 507 ncx_pad_putn_schar_uint(void **xpp, size_t nelems, const unsigned int *ip); 508 extern int 509 ncx_pad_putn_schar_longlong(void **xpp, size_t nelems, const longlong *ip); 510 extern int 511 ncx_pad_putn_schar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); 512 513 514 extern int 515 ncx_getn_short_schar(const void **xpp, size_t nelems, schar *ip); 516 extern int 517 ncx_getn_short_uchar(const void **xpp, size_t nelems, uchar *ip); 518 extern int 519 ncx_getn_short_short(const void **xpp, size_t nelems, short *ip); 520 extern int 521 ncx_getn_short_int(const void **xpp, size_t nelems, int *ip); 522 extern int 523 ncx_getn_short_long(const void **xpp, size_t nelems, long *ip); 524 extern int 525 ncx_getn_short_float(const void **xpp, size_t nelems, float *ip); 526 extern int 527 ncx_getn_short_double(const void **xpp, size_t nelems, double *ip); 528 extern int 529 ncx_getn_short_uint(const void **xpp, size_t nelems, unsigned int *ip); 530 extern int 531 ncx_getn_short_longlong(const void **xpp, size_t nelems, longlong *ip); 532 extern int 533 ncx_getn_short_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); 534 535 extern int 536 ncx_pad_getn_short_schar(const void **xpp, size_t nelems, schar *ip); 537 extern int 538 ncx_pad_getn_short_uchar(const void **xpp, size_t nelems, uchar *ip); 539 extern int 540 ncx_pad_getn_short_short(const void **xpp, size_t nelems, short *ip); 541 extern int 542 ncx_pad_getn_short_int(const void **xpp, size_t nelems, int *ip); 543 extern int 544 ncx_pad_getn_short_long(const void **xpp, size_t nelems, long *ip); 545 extern int 546 ncx_pad_getn_short_float(const void **xpp, size_t nelems, float *ip); 547 extern int 548 ncx_pad_getn_short_double(const void **xpp, size_t nelems, double *ip); 549 extern int 550 ncx_pad_getn_short_uint(const void **xpp, size_t nelems, unsigned int *ip); 551 extern int 552 ncx_pad_getn_short_longlong(const void **xpp, size_t nelems, longlong *ip); 553 extern int 554 ncx_pad_getn_short_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); 555 556 extern int 557 ncx_putn_short_schar(void **xpp, size_t nelems, const schar *ip); 558 extern int 559 ncx_putn_short_uchar(void **xpp, size_t nelems, const uchar *ip); 560 extern int 561 ncx_putn_short_short(void **xpp, size_t nelems, const short *ip); 562 extern int 563 ncx_putn_short_int(void **xpp, size_t nelems, const int *ip); 564 extern int 565 ncx_putn_short_long(void **xpp, size_t nelems, const long *ip); 566 extern int 567 ncx_putn_short_float(void **xpp, size_t nelems, const float *ip); 568 extern int 569 ncx_putn_short_double(void **xpp, size_t nelems, const double *ip); 570 extern int 571 ncx_putn_short_uint(void **xpp, size_t nelems, const unsigned int *ip); 572 extern int 573 ncx_putn_short_longlong(void **xpp, size_t nelems, const longlong *ip); 574 extern int 575 ncx_putn_short_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); 576 577 extern int 578 ncx_pad_putn_short_schar(void **xpp, size_t nelems, const schar *ip); 579 extern int 580 ncx_pad_putn_short_uchar(void **xpp, size_t nelems, const uchar *ip); 581 extern int 582 ncx_pad_putn_short_short(void **xpp, size_t nelems, const short *ip); 583 extern int 584 ncx_pad_putn_short_int(void **xpp, size_t nelems, const int *ip); 585 extern int 586 ncx_pad_putn_short_long(void **xpp, size_t nelems, const long *ip); 587 extern int 588 ncx_pad_putn_short_float(void **xpp, size_t nelems, const float *ip); 589 extern int 590 ncx_pad_putn_short_double(void **xpp, size_t nelems, const double *ip); 591 extern int 592 ncx_pad_putn_short_uint(void **xpp, size_t nelems, const unsigned int *ip); 593 extern int 594 ncx_pad_putn_short_longlong(void **xpp, size_t nelems, const longlong *ip); 595 extern int 596 ncx_pad_putn_short_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); 597 598 599 extern int 600 ncx_getn_int_schar(const void **xpp, size_t nelems, schar *ip); 601 extern int 602 ncx_getn_int_uchar(const void **xpp, size_t nelems, uchar *ip); 603 extern int 604 ncx_getn_int_short(const void **xpp, size_t nelems, short *ip); 605 extern int 606 ncx_getn_int_int(const void **xpp, size_t nelems, int *ip); 607 extern int 608 ncx_getn_int_long(const void **xpp, size_t nelems, long *ip); 609 extern int 610 ncx_getn_int_float(const void **xpp, size_t nelems, float *ip); 611 extern int 612 ncx_getn_int_double(const void **xpp, size_t nelems, double *ip); 613 extern int 614 ncx_getn_int_uint(const void **xpp, size_t nelems, unsigned int *ip); 615 extern int 616 ncx_getn_int_longlong(const void **xpp, size_t nelems, longlong *ip); 617 extern int 618 ncx_getn_int_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); 619 620 extern int 621 ncx_putn_int_schar(void **xpp, size_t nelems, const schar *ip); 622 extern int 623 ncx_putn_int_uchar(void **xpp, size_t nelems, const uchar *ip); 624 extern int 625 ncx_putn_int_short(void **xpp, size_t nelems, const short *ip); 626 extern int 627 ncx_putn_int_int(void **xpp, size_t nelems, const int *ip); 628 extern int 629 ncx_putn_int_long(void **xpp, size_t nelems, const long *ip); 630 extern int 631 ncx_putn_int_float(void **xpp, size_t nelems, const float *ip); 632 extern int 633 ncx_putn_int_double(void **xpp, size_t nelems, const double *ip); 634 extern int 635 ncx_putn_int_uint(void **xpp, size_t nelems, const unsigned int *ip); 636 extern int 637 ncx_putn_int_longlong(void **xpp, size_t nelems, const longlong *ip); 638 extern int 639 ncx_putn_int_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); 640 641 642 extern int 643 ncx_getn_float_schar(const void **xpp, size_t nelems, schar *ip); 644 extern int 645 ncx_getn_float_uchar(const void **xpp, size_t nelems, uchar *ip); 646 extern int 647 ncx_getn_float_short(const void **xpp, size_t nelems, short *ip); 648 extern int 649 ncx_getn_float_int(const void **xpp, size_t nelems, int *ip); 650 extern int 651 ncx_getn_float_long(const void **xpp, size_t nelems, long *ip); 652 extern int 653 ncx_getn_float_float(const void **xpp, size_t nelems, float *ip); 654 extern int 655 ncx_getn_float_double(const void **xpp, size_t nelems, double *ip); 656 extern int 657 ncx_getn_float_uint(const void **xpp, size_t nelems, unsigned int *ip); 658 extern int 659 ncx_getn_float_longlong(const void **xpp, size_t nelems, longlong *ip); 660 extern int 661 ncx_getn_float_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); 662 663 extern int 664 ncx_putn_float_schar(void **xpp, size_t nelems, const schar *ip); 665 extern int 666 ncx_putn_float_uchar(void **xpp, size_t nelems, const uchar *ip); 667 extern int 668 ncx_putn_float_short(void **xpp, size_t nelems, const short *ip); 669 extern int 670 ncx_putn_float_int(void **xpp, size_t nelems, const int *ip); 671 extern int 672 ncx_putn_float_long(void **xpp, size_t nelems, const long *ip); 673 extern int 674 ncx_putn_float_float(void **xpp, size_t nelems, const float *ip); 675 extern int 676 ncx_putn_float_double(void **xpp, size_t nelems, const double *ip); 677 extern int 678 ncx_putn_float_uint(void **xpp, size_t nelems, const unsigned int *ip); 679 extern int 680 ncx_putn_float_longlong(void **xpp, size_t nelems, const longlong *ip); 681 extern int 682 ncx_putn_float_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); 683 684 685 extern int 686 ncx_getn_double_schar(const void **xpp, size_t nelems, schar *ip); 687 extern int 688 ncx_getn_double_uchar(const void **xpp, size_t nelems, uchar *ip); 689 extern int 690 ncx_getn_double_short(const void **xpp, size_t nelems, short *ip); 691 extern int 692 ncx_getn_double_int(const void **xpp, size_t nelems, int *ip); 693 extern int 694 ncx_getn_double_long(const void **xpp, size_t nelems, long *ip); 695 extern int 696 ncx_getn_double_float(const void **xpp, size_t nelems, float *ip); 697 extern int 698 ncx_getn_double_double(const void **xpp, size_t nelems, double *ip); 699 extern int 700 ncx_getn_double_uint(const void **xpp, size_t nelems, unsigned int *ip); 701 extern int 702 ncx_getn_double_longlong(const void **xpp, size_t nelems, longlong *ip); 703 extern int 704 ncx_getn_double_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); 705 706 extern int 707 ncx_putn_double_schar(void **xpp, size_t nelems, const schar *ip); 708 extern int 709 ncx_putn_double_uchar(void **xpp, size_t nelems, const uchar *ip); 710 extern int 711 ncx_putn_double_short(void **xpp, size_t nelems, const short *ip); 712 extern int 713 ncx_putn_double_int(void **xpp, size_t nelems, const int *ip); 714 extern int 715 ncx_putn_double_long(void **xpp, size_t nelems, const long *ip); 716 extern int 717 ncx_putn_double_float(void **xpp, size_t nelems, const float *ip); 718 extern int 719 ncx_putn_double_double(void **xpp, size_t nelems, const double *ip); 720 extern int 721 ncx_putn_double_uint(void **xpp, size_t nelems, const unsigned int *ip); 722 extern int 723 ncx_putn_double_longlong(void **xpp, size_t nelems, const longlong *ip); 724 extern int 725 ncx_putn_double_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); 726 727 728 /* 729 * Other aggregate conversion functions. 730 */ 731 732 /* read ASCII characters */ 733 extern int 734 ncx_getn_text(const void **xpp, size_t nchars, char *cp); 735 extern int 736 ncx_pad_getn_text(const void **xpp, size_t nchars, char *cp); 737 738 /* write ASCII characters */ 739 extern int 740 ncx_putn_text(void **xpp, size_t nchars, const char *cp); 741 extern int 742 ncx_pad_putn_text(void **xpp, size_t nchars, const char *cp); 743 744 /* for symmetry */ 745 #define ncx_getn_char_char(xpp, nelems, fillp) ncx_getn_text(xpp, nelems, fillp) 746 #define ncx_putn_char_char(xpp, nelems, fillp) ncx_putn_text(xpp, nelems, fillp) 747 748 /* read opaque data */ 749 extern int 750 ncx_getn_void(const void **xpp, size_t nchars, void *vp); 751 extern int 752 ncx_pad_getn_void(const void **xpp, size_t nchars, void *vp); 753 754 /* write opaque data */ 755 extern int 756 ncx_putn_void(void **xpp, size_t nchars, const void *vp); 757 extern int 758 ncx_pad_putn_void(void **xpp, size_t nchars, const void *vp); 759 760 #endif /* _NCX_H_ */ 761