-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "ctsupport.h"
-#include "byteorder.h"
-
-
-inline void
-SwapBytes2 (void* buffer)
-{
- unsigned char* p = static_cast<unsigned char*>(buffer);
- unsigned char temp = p[0];
- p[0] = p[1];
- p[1] = temp;
-}
-
-// 0<->3 1<->2 = 0123 -> 3210
-inline void
-SwapBytes4 (void* buffer)
-{
- unsigned char* p = static_cast<unsigned char*>(buffer);
- unsigned char temp = p[0];
- p[0] = p[3];
- p[3] = temp;
- temp = p[1];
- p[1] = p[2];
- p[2] = temp;
-}
-
-// 0<->7 1<->6 2<->5 3<->4 = 01234567 -> 76543210
-inline void
-SwapBytes8 (void* buffer)
-{
- unsigned char* p = static_cast<unsigned char*>(buffer);
- unsigned char temp = p[0];
- p[0] = p[7];
- p[7] = temp;
- temp = p[1];
- p[1] = p[6];
- p[6] = temp;
- temp = p[2];
- p[2] = p[5];
- p[5] = temp;
- temp = p[3];
- p[3] = p[4];
- p[4] = temp;
-}
-
-void
-ConvertNetworkOrder (void* buffer, size_t bytes)
-{
-#if ! defined (WORDS_BIGENDIAN)
- if (bytes < 2)
- return;
-
- char* start = static_cast<char*>(buffer);
- char* end = start + bytes - 1; // last byte
- size_t nSwap = bytes / 2;
-
- while (nSwap-- > 0) {
- unsigned char c = *start;
- *start++ = *end;
- *end-- = c;
- }
-#endif
-}
-
-void
-ConvertReverseNetworkOrder (void* buffer, size_t bytes)
-{
-#if defined (WORDS_BIGENDIAN)
- if (bytes < 2)
- return;
-
- char* start = static_cast<char*>(buffer);
- char* end = start + bytes - 1; // last byte
- size_t nSwap = bytes / 2;
-
- while (nSwap-- > 0) {
- unsigned char c = *start;
- *start++ = *end;
- *end-- = c;
- }
-#endif
-}
-
-bool
-write_nint16 (kuint16 const *n_in, int fd)
-{
- kuint16 n = *n_in;
-
-#ifndef WORDS_BIGENDIAN
- SwapBytes2 (&n);
-#endif
-
- if (write (fd, &n, 2) != 2)
- return false;
- else
- return true;
-}
-
-bool
-read_nint16 (kuint16 *n_out, int fd)
-{
- if (read (fd, n_out, 2) != 2)
- return false;
-
-#ifndef WORDS_BIGENDIAN
- SwapBytes2 (n_out);
-#endif
-
- return true;
-}
-
-bool
-write_nint32 (kuint32 const *n_in, int fd)
-{
- kuint32 n = *n_in;
-
-#ifndef WORDS_BIGENDIAN
- SwapBytes4(&n);
-#endif
-
- if (write (fd, &n, 4) != 4)
- return false;
- else
- return true;
-}
-
-bool
-read_nint32 (kuint32 *n_out, int fd)
-{
- if (read (fd, n_out, 4) != 4)
- return false;
-
-#ifndef WORDS_BIGENDIAN
- SwapBytes4 (n_out);
-#endif
-
- return true;
-}
-
-bool
-write_nfloat32 (kfloat32 const *f_in, int fd)
-{
- kfloat32 f = *f_in;
-
-#ifndef WORDS_BIGENDIAN
- SwapBytes4 (&f);
-#endif
-
- if (write (fd, &f, 4) != 4)
- return false;
- else
- return true;
-}
-
-bool
-read_nfloat32 (kfloat32 *f_out, int fd)
-{
- if (read (fd, f_out, 4) != 4)
- return false;
-
-#ifndef WORDS_BIGENDIAN
- SwapBytes4(f_out);
-#endif
-
- return true;
-}
-
-bool
-write_nfloat64 (kfloat64 const *f_in, int fd)
-{
- kfloat64 f = *f_in;
-
-#ifndef WORDS_BIGENDIAN
- SwapBytes8 (&f);
-#endif
-
- if (write (fd, &f, 8) != 8)
- return false;
- else
- return true;
-}
-
-bool
-read_nfloat64 (kfloat64 *f_out, int fd)
-{
- if (read (fd, f_out, 8) != 8)
- return false;
-
-#ifndef WORDS_BIGENDIAN
- SwapBytes8 (f_out);
-#endif
-
- return true;
-}
-
-
-
-onetorderstream& onetorderstream::writeInt16 (kuint16 n) {
-#ifndef WORDS_BIGENDIAN
- SwapBytes2 (&n);
-#endif
- write (&n, 2);
- return (*this);
-}
-
-inetorderstream& inetorderstream::readInt16 (kuint16& n) {
- read (&n, 2);
-#ifndef WORDS_BIGENDIAN
- SwapBytes2 (&n);
-#endif
- return (*this);
-}
-
-onetorderstream& onetorderstream::writeInt32 (kuint32 n) {
-#ifndef WORDS_BIGENDIAN
- SwapBytes4(&n);
-#endif
- write (&n, 4);
- return (*this);
-}
-
-inetorderstream& inetorderstream::readInt32 (kuint32& n) {
- read (&n, 4);
-#ifndef WORDS_BIGENDIAN
- SwapBytes4 (&n);
-#endif
- return (*this);
-}
-
-onetorderstream& onetorderstream::writeFloat32 (kfloat32 n) {
-#ifndef WORDS_BIGENDIAN
- SwapBytes4 (&n);
-#endif
- write (&n, 4);
- return (*this);
-}
-
-inetorderstream& inetorderstream::readFloat32 (kfloat32& n) {
- read (&n, 4);
-#ifndef WORDS_BIGENDIAN
- SwapBytes4 (&n);
-#endif
- return (*this);
-}
-
-onetorderstream& onetorderstream::writeFloat64 (kfloat64 n) {
-#ifndef WORDS_BIGENDIAN
- SwapBytes8 (&n);
-#endif
- write (&n, 8);
- return (*this);
-}
-
-inetorderstream& inetorderstream::readFloat64 (kfloat64& n) {
- read (&n, 8);
-#ifndef WORDS_BIGENDIAN
- SwapBytes8 (&n);
-#endif
- return (*this);
-}
-
-
-
-void
-write_rnint16 (kuint16 n, ostream& ostr)
-{
-#ifdef WORDS_BIGENDIAN
- SwapBytes2 (&n);
-#endif
- ostr.write (&n, 2);
-}
-
-void
-read_rnint16 (kuint16& n, istream& istr)
-{
- istr.read (&n, 2);
-#ifdef WORDS_BIGENDIAN
- SwapBytes2 (&n);
-#endif
-}
-
-void
-write_rnint32 (kuint32 n, ostream& ostr)
-{
-#ifdef WORDS_BIGENDIAN
- SwapBytes4(&n);
-#endif
- ostr.write (&n, 4);
-}
-
-void
-read_rnint32 (kuint32& n, istream istr)
-{
- istr.read (&n, 4);
-#ifdef WORDS_BIGENDIAN
- SwapBytes4 (&n);
-#endif
-}
-
-void
-write_rnfloat32 (kfloat32 n, ostream ostr)
-{
-#ifdef WORDS_BIGENDIAN
- SwapBytes4 (&n);
-#endif
- ostr.write (&n, 4);
-}
-
-void
-read_rnfloat32 (kfloat32& n, istream istr)
-{
- istr.read (&n, 4);
-#ifdef WORDS_BIGENDIAN
- SwapBytes4 (&n);
-#endif
-}
-
-void
-write_rnfloat64 (kfloat64 n, ostream ostr)
-{
-#ifdef WORDS_BIGENDIAN
- SwapBytes8 (&n);
-#endif
- ostr.write (&n, 8);
-}
-
-void
-read_rnfloat64 (kfloat64& n, istream istr)
-{
- istr.read (&n, 8);
-#ifdef WORDS_BIGENDIAN
- SwapBytes8 (&n);
-#endif
-}
-