zmqpp 4.1.2
C++ bindings for 0mq (libzmq)
byte_ordering.hpp
Go to the documentation of this file.
1/*
2 * This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 *
6 * This file is part of zmqpp.
7 * Copyright (c) 2011-2015 Contributors as noted in the AUTHORS file.
8 */
9
17#pragma once
18
19#if defined( __APPLE__) // Byte ordering on OS X
20
21#include <libkern/OSByteOrder.h>
22#define HOST_TO_BIG_ENDIAN_32(x) OSSwapHostToBigInt32(x)
23
24#elif defined(_WIN32) // Byte ordering on Windows
25
26#if BYTE_ORDER == LITTLE_ENDIAN
27#include <winsock2.h>
28#define HOST_TO_BIG_ENDIAN_32(x) htonl(x)
29
30#elif BYTE_ORDER == BIG_ENDIAN
31#define HOST_TO_BIG_ENDIAN_32(x) (x)
32
33#endif
34
35#else // Let htobe32 be the default function
36
37#include <endian.h>
38#define HOST_TO_BIG_ENDIAN_32(x) htobe32(x)
39
40#endif
41
42// Cause a compiler error if the platform is not supported
43#ifndef HOST_TO_BIG_ENDIAN_32
44#error Platform not supported in byte_ordering.hpp
45#endif