blob: 28f03b5963199bf16baf3e498b2b7914c0f3fc62 [file] [log] [blame]
/* Copyright (c) 2015 Google Inc
* Davide Libenzi <dlibenzi@google.com>
* See LICENSE for details.
*/
#pragma once
#include <sys/types.h>
#include <stdint.h>
static inline const void *get_le_u16(const void *ptr, uint16_t *pvalue)
{
const uint8_t *p = (const uint8_t *) ptr;
*pvalue = (uint16_t) p[0] | ((uint16_t) p[1] << 8);
return p + sizeof(uint16_t);
}
static inline const void *get_le_u32(const void *ptr, uint32_t *pvalue)
{
const uint8_t *p = (const uint8_t *) ptr;
*pvalue = (uint32_t) p[0] | ((uint32_t) p[1] << 8) |
((uint32_t) p[2] << 16) | ((uint32_t) p[3] << 24);
return p + sizeof(uint32_t);
}
static inline const void *get_le_u64(const void *ptr, uint64_t *pvalue)
{
const uint8_t *p = (const uint8_t *) ptr;
*pvalue = (uint64_t) p[0] | ((uint64_t) p[1] << 8) |
((uint64_t) p[2] << 16) | ((uint64_t) p[3] << 24) |
((uint64_t) p[4] << 32) | ((uint64_t) p[5] << 40) |
((uint64_t) p[6] << 48) | ((uint64_t) p[7] << 56);
return p + sizeof(uint64_t);
}
static inline void *put_le_u16(void *ptr, uint16_t v)
{
uint8_t *p = (uint8_t *) ptr;
p[0] = (uint8_t) v;
p[1] = (uint8_t) (v >> 8);
return p + sizeof(uint16_t);
}
static inline void *put_le_u32(void *ptr, uint32_t v)
{
uint8_t *p = (uint8_t *) ptr;
p[0] = (uint8_t) v;
p[1] = (uint8_t) (v >> 8);
p[2] = (uint8_t) (v >> 16);
p[3] = (uint8_t) (v >> 24);
return p + sizeof(uint32_t);
}
static inline void *put_le_u64(void *ptr, uint64_t v)
{
uint8_t *p = (uint8_t *) ptr;
p[0] = (uint8_t) v;
p[1] = (uint8_t) (v >> 8);
p[2] = (uint8_t) (v >> 16);
p[3] = (uint8_t) (v >> 24);
p[4] = (uint8_t) (v >> 32);
p[5] = (uint8_t) (v >> 40);
p[6] = (uint8_t) (v >> 48);
p[7] = (uint8_t) (v >> 56);
return p + sizeof(uint64_t);
}