25#ifndef SRC_XRDZIP_XRDZIPUTILS_HH_
26#define SRC_XRDZIP_XRDZIPUTILS_HH_
37#include <libkern/OSByteOrder.h>
42#if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || \
43 defined(__IEEE_BIG_ENDIAN) || \
44 (defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN)
45#define XrdZip_Big_Endian
51 inline static uint16_t
BSwap(uint16_t x) {
return OSSwapInt16(x); }
52 inline static uint32_t
BSwap(uint32_t x) {
return OSSwapInt32(x); }
53 inline static uint64_t
BSwap(uint64_t x) {
return OSSwapInt64(x); }
55 inline static uint16_t
BSwap(uint16_t x) {
return bswap_16(x); }
56 inline static uint32_t
BSwap(uint32_t x) {
return bswap_32(x); }
57 inline static uint64_t
BSwap(uint64_t x) {
return bswap_64(x); }
68 template<
typename UINT>
82 template<
typename INT>
85 const char *begin =
reinterpret_cast<const char*
>( &value );
86 const char *end = begin +
sizeof( INT );
87#ifdef XrdZip_Big_Endian
88 std::reverse_copy( begin, end, std::back_inserter( buffer ) );
90 std::copy( begin, end, std::back_inserter( buffer ) );
98 template<
typename INT>
99 inline static void from_buffer( INT &var,
const char *&buffer )
101 memcpy( &var, buffer,
sizeof( INT ) );
102#ifdef XrdZip_Big_Endian
105 buffer +=
sizeof( INT );
111 template<
typename INT>
112 inline static INT
to(
const char *buffer )
115 memcpy( &value, buffer,
sizeof( INT ) );
116#ifdef XrdZip_Big_Endian
117 value =
BSwap(value);
132 const std::time_t now = std::time(
nullptr );
133 const std::tm calendar_time = *std::localtime( std::addressof( now ) );
149 const std::tm calendar_time = *std::localtime( std::addressof( timestmp ) );
Definition XrdZipCDFH.hh:40
static uint16_t BSwap(uint16_t x)
Definition XrdZipUtils.hh:55
static INT to(const char *buffer)
Definition XrdZipUtils.hh:112
static void from_buffer(INT &var, const char *&buffer)
Definition XrdZipUtils.hh:99
std::vector< char > buffer_t
Definition XrdZipUtils.hh:77
static void copy_bytes(const INT value, buffer_t &buffer)
Definition XrdZipUtils.hh:83
Definition XrdZipUtils.hh:63
Definition XrdZipUtils.hh:126
static const uint8_t mon_shift
Definition XrdZipUtils.hh:183
uint16_t time
Definition XrdZipUtils.hh:163
static const uint8_t hour_shift
Definition XrdZipUtils.hh:171
static const uint8_t day_shift
Definition XrdZipUtils.hh:182
uint16_t date
Definition XrdZipUtils.hh:176
static const uint16_t day_mask
Definition XrdZipUtils.hh:178
static const uint16_t sec_mask
Definition XrdZipUtils.hh:165
static const uint8_t min_shift
Definition XrdZipUtils.hh:170
dos_timestmp(time_t timestmp)
Definition XrdZipUtils.hh:147
static const uint16_t min_mask
Definition XrdZipUtils.hh:166
static const uint16_t year_mask
Definition XrdZipUtils.hh:180
static const uint16_t mon_mask
Definition XrdZipUtils.hh:179
static const uint8_t year_shift
Definition XrdZipUtils.hh:184
static const uint8_t sec_shift
Definition XrdZipUtils.hh:169
static const uint16_t hour_mask
Definition XrdZipUtils.hh:167
dos_timestmp()
Definition XrdZipUtils.hh:130
Definition XrdZipUtils.hh:70
static const UINT value
Definition XrdZipUtils.hh:71