blob: 2acac01cf98a8eda4a34b9c9e48542f8cd83bd44 [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 2008 PacketVideo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the License for the specific language governing permissions
* and limitations under the License.
* -------------------------------------------------------------------
*/
// -*- c++ -*-
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// B Y T E O R D E R U T I L S
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
/*! \file byte_order_utils.inl This file defines functions providing byte ordering utility.
*/
//! Convert little endian to host format.
/*!
This function takes a buffer of data which is assumed to be in little endian order and
rearranges it to the native order of the machine running the code. If the machine is a
little endian machine, nothing is done.
\param data A pointer to the input/output buffer
\param size The number of bytes in the buffer.
*/
#if !(OSCL_BYTE_ORDER_LITTLE_ENDIAN) && !(OSCL_BYTE_ORDER_BIG_ENDIAN)
#error must define either OSCL_BYTE_ORDER_LITTLE_ENDIAN or OSCL_BYTE_ORDER_BIG_ENDIAN
#elif (OSCL_BYTE_ORDER_LITTLE_ENDIAN) && (OSCL_BYTE_ORDER_BIG_ENDIAN)
#error must only define one of OSCL_BYTE_ORDER_LITTLE_ENDIAN, OSCL_BYTE_ORDER_BIG_ENDIAN
#endif
//! Swap the order of bytes.
/*!
This function takes a buffer of data and reverses the order of the bytes.
\param data A pointer to the input/output buffer
\param size The number of bytes in the buffer.
*/
OSCL_INLINE void swap_byte_order(char *data, unsigned int size)
{
char tmp;
char *ptr1, *ptr2;
ptr1 = data;
ptr2 = data + size - 1;
while (ptr1 < ptr2)
{
tmp = *ptr1;
*ptr1++ = *ptr2;
*ptr2-- = tmp;
}
}
OSCL_INLINE void little_endian_to_host(char *data, uint32 size)
{
#if (OSCL_BYTE_ORDER_BIG_ENDIAN)
swap_byte_order(data, size);
#else
OSCL_UNUSED_ARG(data); // to remove warning 'unreferenced parameter
OSCL_UNUSED_ARG(size); // to remove warning 'unreferenced parameter
// data=data; size=size;
#endif
}
//! Convert host to little endian format.
/*!
This function takes a buffer of data which is assumed to be in the host's native order and
rearranges it to the little endian format. If the machine is a little endian machine, nothing is done.
\param data A pointer to the input/output buffer
\param size The number of bytes in the buffer.
*/
OSCL_INLINE void host_to_little_endian(char *data, unsigned int size)
{
#if (OSCL_BYTE_ORDER_BIG_ENDIAN)
swap_byte_order(data, size);
#else
OSCL_UNUSED_ARG(data); // to remove warning 'unreferenced parameter
OSCL_UNUSED_ARG(size); // to remove warning 'unreferenced parameter
#endif
}
//! Convert big endian to host format.
/*!
This function takes a buffer of data which is assumed to be in big endian order and
rearranges it to the native order of the machine running the code. If the machine is a
big endian machine, nothing is done.
\param data A pointer to the input/output buffer
\param size The number of bytes in the buffer.
*/
OSCL_INLINE void big_endian_to_host(char *data, unsigned int size)
{
#if (OSCL_BYTE_ORDER_LITTLE_ENDIAN)
swap_byte_order(data, size);
#else
OSCL_UNUSED_ARG(data); // to remove warning 'unreferenced parameter
OSCL_UNUSED_ARG(size); // to remove warning 'unreferenced parameter
#endif
}
//! Convert host to big endian format.
/*!
This function takes a buffer of data which is assumed to be in native host order and
rearranges it to big endian format. If the machine is a big endian machine, nothing is done.
\param data A pointer to the input/output buffer
\param size The number of bytes in the buffer.
*/
OSCL_INLINE void host_to_big_endian(char *data, unsigned int size)
{
#if (OSCL_BYTE_ORDER_LITTLE_ENDIAN)
swap_byte_order(data, size);
#else
OSCL_UNUSED_ARG(data); // to remove warning 'unreferenced parameter
OSCL_UNUSED_ARG(size); // to remove warning 'unreferenced parameter
#endif
}