| | |
| | | |
| | | inline uint16_t Get8(const void *p) |
| | | { |
| | | return static_cast<const uint8_t*>(p)[0]; |
| | | return static_cast<const uint8_t *>(p)[0]; |
| | | } |
| | | inline void Put8(void *p, uint8_t u) |
| | | { |
| | |
| | | |
| | | inline uint16_t Get16(const void *p) |
| | | { |
| | | auto ptr = static_cast<const uint8_t*>(p); |
| | | return (((uint16_t)ptr[0]) << 8u) | |
| | | (((uint16_t)ptr[1])); |
| | | auto ptr = static_cast<const uint8_t *>(p); |
| | | return (((uint16_t) ptr[0]) << 8u) | |
| | | (((uint16_t) ptr[1])); |
| | | } |
| | | inline void Put16(void *p, uint16_t u) |
| | | { |
| | |
| | | |
| | | inline uint32_t Get32(const void *p) |
| | | { |
| | | auto ptr = static_cast<const uint8_t*>(p); |
| | | return (((uint32_t)ptr[0]) << 24u) | |
| | | (((uint32_t)ptr[1]) << 16u) | |
| | | (((uint32_t)ptr[2]) << 8u) | |
| | | (((uint32_t)ptr[3])); |
| | | auto ptr = static_cast<const uint8_t *>(p); |
| | | return (((uint32_t) ptr[0]) << 24u) | |
| | | (((uint32_t) ptr[1]) << 16u) | |
| | | (((uint32_t) ptr[2]) << 8u) | |
| | | (((uint32_t) ptr[3])); |
| | | } |
| | | inline void Put32(void *p, uint32_t u) |
| | | { |
| | |
| | | ptr[3] = (uint8_t)(u); |
| | | } |
| | | |
| | | inline uint64_t Get64(const void *p) |
| | | inline uint64_t Get64(const void *p) |
| | | { |
| | | auto ptr = static_cast<const uint8_t*>(p); |
| | | return (((uint64_t)ptr[0]) << 56u) | |
| | | (((uint64_t)ptr[1]) << 48u) | |
| | | (((uint64_t)ptr[2]) << 40u) | |
| | | (((uint64_t)ptr[3]) << 32u) | |
| | | (((uint64_t)ptr[4]) << 24u) | |
| | | (((uint64_t)ptr[5]) << 16u) | |
| | | (((uint64_t)ptr[6]) << 8u) | |
| | | ((uint64_t)ptr[7]); |
| | | auto ptr = static_cast<const uint8_t *>(p); |
| | | return (((uint64_t) ptr[0]) << 56u) | |
| | | (((uint64_t) ptr[1]) << 48u) | |
| | | (((uint64_t) ptr[2]) << 40u) | |
| | | (((uint64_t) ptr[3]) << 32u) | |
| | | (((uint64_t) ptr[4]) << 24u) | |
| | | (((uint64_t) ptr[5]) << 16u) | |
| | | (((uint64_t) ptr[6]) << 8u) | |
| | | ((uint64_t) ptr[7]); |
| | | } |
| | | inline void Put64(void *p, uint64_t u) |
| | | { |
| | |
| | | |
| | | class ExitCall |
| | | { |
| | | typedef std::function<void(void)> func_t; |
| | | func_t m_func; |
| | | typedef std::function<void(void)> func_t; |
| | | func_t m_func; |
| | | |
| | | public: |
| | | explicit ExitCall(func_t f): m_func(f) {} |
| | | ~ExitCall() { if (m_func) { m_func(); } } |
| | | explicit ExitCall(func_t f) : |
| | | m_func(f) {} |
| | | ~ExitCall() |
| | | { |
| | | if (m_func) { m_func(); } |
| | | } |
| | | }; |
| | | |
| | | // macro helper |
| | | #define JOIN_IMPL(a, b) a ## b |
| | | #define JOIN(a, b) JOIN_IMPL(a , b) |
| | | #define JOIN_IMPL(a, b) a##b |
| | | #define JOIN(a, b) JOIN_IMPL(a, b) |
| | | // defer function / lambda. |
| | | #define DEFERF(func) ExitCall JOIN(defer_ , __LINE__)(func) |
| | | #define DEFERF(func) ExitCall JOIN(defer_, __LINE__)(func) |
| | | // defer simple expression |
| | | #define DEFER1(expr) DEFERF([&](){ expr; }) |
| | | |
| | | #define DEFER1(expr) DEFERF([&]() { expr; }) |
| | | |
| | | #endif /* end of include guard: BH_UTIL_SOXWOK67 */ |