.. _program_listing_file_include_ndef-lite_util.hpp: Program Listing for File util.hpp ================================= |exhale_lsh| :ref:`Return to documentation for file ` (``include/ndef-lite/util.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef UTIL_H #define UTIL_H #include #include #include #include #include #include "exceptions.hpp" namespace util { // clang-format off #define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c" #define BYTE_TO_BINARY(byte) \ (byte & 0x80 ? '1' : '0'), \ (byte & 0x40 ? '1' : '0'), \ (byte & 0x20 ? '1' : '0'), \ (byte & 0x10 ? '1' : '0'), \ (byte & 0x08 ? '1' : '0'), \ (byte & 0x04 ? '1' : '0'), \ (byte & 0x02 ? '1' : '0'), \ (byte & 0x01 ? '1' : '0') // clang-format on template inline T pop_front(std::deque& queue) { // Get front byte value and then remove it from queue auto byte = queue.front(); queue.pop_front(); return byte; } template inline std::vector drain_deque(std::deque& queue, size_t n) { // Store values that have been "popped" std::vector retVals{ queue.begin(), queue.begin() + n }; // Remove values from queue queue.erase(queue.begin(), queue.begin() + n); return retVals; } constexpr inline uint32_t uint32FromBEBytes(uint8_t bytes[4]) { return static_cast(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3] << 0); } template void assertHasValues(std::deque queue, size_t n, std::string item) { if (queue.size() < n) { throw NDEFException("Too few elements in queue for " + item + " field: " + "require " + std::to_string(n) + " have " + std::to_string(queue.size())); } // Number of elements >= n, no exception tossing today boys return; } template void assertHasValue(std::deque queue, std::string item) { // That's all we need to know if (queue.size() > 0) return; // Oh brother, there are 0 elements in the queue... throw NDEFException("Too few elements in queue for " + item + " field: require 1 have 0"); } } // namespace util #endif // UTIL_H