6 #ifndef INCLUDED_IMF_XDR_H
7 #define INCLUDED_IMF_XDR_H
92 template <
class S,
class T>
96 template <
class S,
class T>
100 template <
class S,
class T>
102 write (
T &out,
signed char v);
104 template <
class S,
class T>
106 write (
T &out,
unsigned char v);
108 template <
class S,
class T>
110 write (
T &out,
signed short v);
112 template <
class S,
class T>
114 write (
T &out,
unsigned short v);
116 template <
class S,
class T>
118 write (
T &out,
signed int v);
120 template <
class S,
class T>
122 write (
T &out,
unsigned int v);
124 template <
class S,
class T>
126 write (
T &out, int64_t v);
128 template <
class S,
class T>
130 write (
T &out, uint64_t v);
133 template <
class S,
class T>
137 template <
class S,
class T>
141 template <
class S,
class T>
145 template <
class S,
class T>
147 write (
T &out,
const char v[],
int n);
149 template <
class S,
class T>
151 write (
T &out,
const char v[]);
158 template <
class S,
class T>
168 template <
class S,
class T>
170 read (
T &in,
bool &v);
172 template <
class S,
class T>
174 read (
T &in,
char &v);
176 template <
class S,
class T>
178 read (
T &in,
signed char &v);
180 template <
class S,
class T>
182 read (
T &in,
unsigned char &v);
184 template <
class S,
class T>
186 read (
T &in,
signed short &v);
188 template <
class S,
class T>
190 read (
T &in,
unsigned short &v);
192 template <
class S,
class T>
194 read (
T &in,
signed int &v);
196 template <
class S,
class T>
198 read (
T &in,
unsigned int &v);
200 template <
class S,
class T>
202 read (
T &in, int64_t &v);
204 template <
class S,
class T>
206 read (
T &in, uint64_t &v);
208 template <
class S,
class T>
210 read (
T &in,
float &v);
212 template <
class S,
class T>
214 read (
T &in,
double &v);
216 template <
class S,
class T>
220 template <
class S,
class T>
222 read (
T &in,
char v[],
int n);
224 template <
class S,
class T>
226 read (
T &in,
int n,
char v[]);
233 template <
class S,
class T>
253 template <
class S,
class T>
257 S::writeChars (out, (
const char *) c, n);
261 template <
class S,
class T>
265 S::writeChars (out, (
const char *) c, n);
269 template <
class S,
class T>
273 S::readChars (in, (
char *) c, n);
277 template <
class S,
class T>
281 S::readChars (in, (
char *) c, n);
285 template <
class S,
class T>
290 S::writeChars (out, &c, 1);
294 template <
class S,
class T>
298 S::writeChars (out, &v, 1);
302 template <
class S,
class T>
306 writeSignedChars<S> (out, &
v, 1);
310 template <
class S,
class T>
314 writeUnsignedChars<S> (out, &
v, 1);
318 template <
class S,
class T>
324 b[0] = (
signed char) (v);
325 b[1] = (
signed char) (v >> 8);
327 writeSignedChars<S> (out,
b, 2);
331 template <
class S,
class T>
337 b[0] = (
unsigned char) (v);
338 b[1] = (
unsigned char) (v >> 8);
340 writeUnsignedChars<S> (out,
b, 2);
344 template <
class S,
class T>
350 b[0] = (
signed char) (v);
351 b[1] = (
signed char) (v >> 8);
352 b[2] = (
signed char) (v >> 16);
353 b[3] = (
signed char) (v >> 24);
355 writeSignedChars<S> (out,
b, 4);
359 template <
class S,
class T>
365 b[0] = (
unsigned char) (v);
366 b[1] = (
unsigned char) (v >> 8);
367 b[2] = (
unsigned char) (v >> 16);
368 b[3] = (
unsigned char) (v >> 24);
370 writeUnsignedChars<S> (out,
b, 4);
374 template <
class S,
class T>
380 b[0] = (
signed char) (v);
381 b[1] = (
signed char) (v >> 8);
382 b[2] = (
signed char) (v >> 16);
383 b[3] = (
signed char) (v >> 24);
384 b[4] = (
signed char) (v >> 32);
385 b[5] = (
signed char) (v >> 40);
386 b[6] = (
signed char) (v >> 48);
387 b[7] = (
signed char) (v >> 56);
389 writeSignedChars<S> (out,
b, 8);
392 template <
class S,
class T>
398 b[0] = (
unsigned char) (v);
399 b[1] = (
unsigned char) (v >> 8);
400 b[2] = (
unsigned char) (v >> 16);
401 b[3] = (
unsigned char) (v >> 24);
402 b[4] = (
unsigned char) (v >> 32);
403 b[5] = (
unsigned char) (v >> 40);
404 b[6] = (
unsigned char) (v >> 48);
405 b[7] = (
unsigned char) (v >> 56);
407 writeUnsignedChars<S> (out,
b, 8);
413 template <
class S,
class T>
417 union {
unsigned int i;
float f;} u;
422 b[0] = (
unsigned char) (u.i);
423 b[1] = (
unsigned char) (u.i >> 8);
424 b[2] = (
unsigned char) (u.i >> 16);
425 b[3] = (
unsigned char) (u.i >> 24);
427 writeUnsignedChars<S> (out,
b, 4);
431 template <
class S,
class T>
435 union {uint64_t i;
double d;} u;
440 b[0] = (
unsigned char) (u.i);
441 b[1] = (
unsigned char) (u.i >> 8);
442 b[2] = (
unsigned char) (u.i >> 16);
443 b[3] = (
unsigned char) (u.i >> 24);
444 b[4] = (
unsigned char) (u.i >> 32);
445 b[5] = (
unsigned char) (u.i >> 40);
446 b[6] = (
unsigned char) (u.i >> 48);
447 b[7] = (
unsigned char) (u.i >> 56);
449 writeUnsignedChars<S> (out,
b, 8);
453 template <
class S,
class T>
459 b[0] = (
unsigned char) (v.bits());
460 b[1] = (
unsigned char) (v.bits() >> 8);
462 writeUnsignedChars<S> (out,
b, 2);
466 template <
class S,
class T>
468 write (T &out,
const char v[],
int n)
470 S::writeChars (out, v, n);
474 template <
class S,
class T>
480 S::writeChars (out, v, 1);
484 S::writeChars (out, v, 1);
488 template <
class S,
class T>
492 for (
int i = 0; i <
n; i++)
495 S::writeChars (out, &c, 1);
500 template <
class S,
class T>
506 S::readChars (in, &c, 1);
511 template <
class S,
class T>
515 S::readChars (in, &v, 1);
519 template <
class S,
class T>
523 readSignedChars<S> (in, &
v, 1);
527 template <
class S,
class T>
531 readUnsignedChars<S> (in, &
v, 1);
535 template <
class S,
class T>
541 readSignedChars<S> (in,
b, 2);
543 v = (static_cast <
unsigned char> (b[0]) & 0x00ff) |
544 (static_cast <
unsigned char> (b[1]) << 8);
548 template <
class S,
class T>
550 read (T &in,
unsigned short &v)
554 readUnsignedChars<S> (in,
b, 2);
556 v = (b[0] & 0x00ff) |
561 template <
class S,
class T>
567 readSignedChars<S> (in,
b, 4);
569 v = (static_cast <
unsigned char> (b[0]) & 0x000000ff) |
570 ((static_cast <
unsigned char> (b[1]) << 8) & 0x0000ff00) |
571 ((static_cast <unsigned char> (b[2]) << 16) & 0x00ff0000) |
572 (static_cast <
unsigned char> (b[3]) << 24);
576 template <
class S,
class T>
582 readUnsignedChars<S> (in,
b, 4);
584 v = (b[0] & 0x000000ff) |
585 ((b[1] << 8) & 0x0000ff00) |
586 ((b[2] << 16) & 0x00ff0000) |
591 template <
class S,
class T>
597 readSignedChars<S> (in,
b, 8);
599 v = (static_cast <int64_t> (b[0]) & 0x00000000000000ff) |
600 ((static_cast <int64_t> (b[1]) << 8) & 0x000000000000ff00) |
601 ((static_cast <int64_t> (b[2]) << 16) & 0x0000000000ff0000) |
602 ((static_cast <int64_t> (b[3]) << 24) & 0x00000000ff000000) |
603 ((static_cast <int64_t> (b[4]) << 32) & 0x000000ff00000000) |
604 ((static_cast <int64_t> (b[5]) << 40) & 0x0000ff0000000000) |
605 ((static_cast <int64_t> (b[6]) << 48) & 0x00ff000000000000) |
606 (static_cast <int64_t> (b[7]) << 56);
611 template <
class S,
class T>
617 readUnsignedChars<S> (in,
b, 8);
619 v = ((uint64_t) b[0] & 0x00000000000000ffLL) |
620 (((uint64_t) b[1] << 8) & 0x000000000000ff00LL) |
621 (((uint64_t) b[2] << 16) & 0x0000000000ff0000LL) |
622 (((uint64_t) b[3] << 24) & 0x00000000ff000000LL) |
623 (((uint64_t) b[4] << 32) & 0x000000ff00000000LL) |
624 (((uint64_t) b[5] << 40) & 0x0000ff0000000000LL) |
625 (((uint64_t) b[6] << 48) & 0x00ff000000000000LL) |
626 ((uint64_t) b[7] << 56);
630 template <
class S,
class T>
636 readUnsignedChars<S> (in,
b, 4);
638 union {
unsigned int i;
float f;} u;
640 u.i = (b[0] & 0x000000ff) |
641 ((b[1] << 8) & 0x0000ff00) |
642 ((b[2] << 16) & 0x00ff0000) |
649 template <
class S,
class T>
655 readUnsignedChars<S> (in,
b, 8);
657 union {uint64_t i;
double d;} u;
659 u.i = ((uint64_t) b[0] & 0x00000000000000ffULL) |
660 (((uint64_t) b[1] << 8) & 0x000000000000ff00ULL) |
661 (((uint64_t) b[2] << 16) & 0x0000000000ff0000ULL) |
662 (((uint64_t) b[3] << 24) & 0x00000000ff000000ULL) |
663 (((uint64_t) b[4] << 32) & 0x000000ff00000000ULL) |
664 (((uint64_t) b[5] << 40) & 0x0000ff0000000000ULL) |
665 (((uint64_t) b[6] << 48) & 0x00ff000000000000ULL) |
666 ((uint64_t) b[7] << 56);
672 template <
class S,
class T>
678 readUnsignedChars<S> (in,
b, 2);
680 v.setBits ((b[0] & 0x00ff) | (b[1] << 8));
684 template <
class S,
class T>
688 S::readChars (in, v, n);
692 template <
class S,
class T>
698 S::readChars (in, v, 1);
709 template <
class S,
class T>
715 while (n >= (
int)
sizeof (c))
717 if (!S::readChars (in, c,
sizeof (c)))
724 S::readChars (in, c, n);
748 #if defined (OPENEXR_IMF_INTERNAL_NAMESPACE_AUTO_EXPOSE)
#define OPENEXR_IMF_INTERNAL_NAMESPACE
#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT
void writeUnsignedChars(T &out, const unsigned char c[], int n)
imath_half_bits_t half
if we're in a C-only context, alias the half bits type to half
void readUnsignedChars(T &in, unsigned char c[], int n)
void read(T &in, bool &v)
void writeSignedChars(T &out, const signed char c[], int n)
GLboolean GLboolean GLboolean b
#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
void readSignedChars(T &in, signed char c[], int n)
void write(T &out, bool v)