/*****************************************************************************\ * Copyright (c) 2004 Mark Aylett * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, sublicense, and/or sell copies of the Software, and to permit * * persons to whom the Software is furnished to do so, subject to the * * following conditions: * * * * The above copyright notice and this permission notice shall be included * * in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN * * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * * USE OR OTHER DEALINGS IN THE SOFTWARE. * \*****************************************************************************/ /** * \file mar_format_c.h * \brief TODO */ #ifndef INCLUDED_MAR_FORMAT_C #define INCLUDED_MAR_FORMAT_C #ifndef INCLUDED_MAR_STORAGE_C #include "mar_storage_c.h" #endif /* INCLUDED_MAR_STORAGE_C */ #ifndef INCLUDED_MAR_TYPES_C #include "mar_types_c.h" #endif /* INCLUDED_MAR_TYPES_C */ #if !defined(WIN32) #ifndef INCLUDED_INTTYPES #define INCLUDED_INTTYPES #include #endif /* INCLUDED_INTTYPES */ #else /* WIN32 */ typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #endif /* WIN32 */ typedef uint8_t mar_byte_t; typedef uint16_t mar_uint16_t; typedef uint32_t mar_uint32_t; typedef mar_uint16_t mar_verno_t; typedef mar_uint16_t mar_isize_t; typedef mar_uint16_t mar_msize_t; typedef mar_uint32_t mar_usize_t; #define MAR_UINT16_MAX 0xffffU #define MAR_UINT32_MAX 0xffffffffU #define MAR_ISIZE_MAX MAR_UINT16_MAX #define MAR_MSIZE_MAX MAR_UINT16_MAX #define MAR_USIZE_MAX MAR_UINT32_MAX #define MAR_HEAD 0 #define MAR_HEAD_SIZE (sizeof(mar_verno_t) + sizeof(mar_isize_t)) #define MAR_VERNO_OFFSET 0 #define MAR_VERNO (MAR_HEAD + MAR_VERNO_OFFSET) #define MAR_ISIZE_OFFSET sizeof(mar_verno_t) #define MAR_ISIZE (MAR_HEAD + MAR_ISIZE_OFFSET) #define MAR_PAIR_SIZE (sizeof(mar_key_t) + sizeof(mar_msize_t)) #define MAR_PAIR(ord) (MAR_PAIR_SIZE * (ord)) #define MAR_KEY(ord) MAR_PAIR(ord) #define MAR_MSIZE(ord) (MAR_PAIR(ord) + sizeof(mar_key_t)) #define MAR_INDEX (MAR_HEAD + MAR_HEAD_SIZE) #define MAR_INDEX_SIZE(isize) (MAR_PAIR_SIZE * (isize)) #define MAR_USER(isize) (MAR_INDEX + MAR_INDEX_SIZE(isize)) #define MAR_USER_SIZE(usize) (sizeof(mar_usize_t) + usize) #define MAR_USIZE_OFFSET 0 #define MAR_USIZE(isize) (MAR_USER(isize) + MAR_USIZE_OFFSET) #define MAR_UDATA_OFFSET sizeof(mar_usize_t) #define MAR_UDATA(isize) (MAR_USER(isize) + MAR_UDATA_OFFSET) #define MAR_META(isize, usize) (MAR_USER(isize) + MAR_USER_SIZE(usize)) #define MAR_META_SIZE(msize) (msize) #define MAR_MDATA_OFFSET 0 #define MAR_MDATA(isize, usize) (MAR_META(isize, udata) + MAR_MDATA_OFFSET) #define MAR_INIT_SIZE (MAR_HEAD_SIZE + sizeof(mar_usize_t)) MAR_EXTERN mar_uint16_t mar_decode16_(const mar_byte_t* ptr); MAR_EXTERN mar_uint32_t mar_decode32_(const mar_byte_t* ptr); MAR_EXTERN void mar_encode16_(mar_byte_t* ptr, mar_uint16_t i); MAR_EXTERN void mar_encode32_(mar_byte_t* ptr, mar_uint32_t i); #endif /* INCLUDED_MAR_FORMAT_C */