| 1 | // SPDX-License-Identifier: GPL-3.0-or-later |
|---|---|
| 2 | |
| 3 | #pragma once |
| 4 | |
| 5 | #include <iomanip> |
| 6 | #include <ostream> |
| 7 | #include <string.h> |
| 8 | |
| 9 | struct UUID |
| 10 | { |
| 11 | explicit UUID(const unsigned char full[16]) : full{} |
| 12 | { |
| 13 | memcpy(dest: this->full, src: full, size: 16); |
| 14 | } |
| 15 | |
| 16 | friend std::ostream &operator<<(std::ostream &os, const UUID &guid) |
| 17 | { |
| 18 | const auto flags = os.flags(); |
| 19 | os << std::uppercase << std::hex; |
| 20 | |
| 21 | for (size_t i : { 3, 2, 1, 0, /**/ 5, 4, /**/ 7, 6, /**/ 8, 9, /**/ 10, 11, 12, 13, 14, 15 }) // little endian |
| 22 | { |
| 23 | if (i == 5 || i == 7 || i == 8 || i == 10) |
| 24 | os << '-'; |
| 25 | |
| 26 | os << std::setw(2) << std::setfill('0') << (int) guid.full[i]; |
| 27 | } |
| 28 | |
| 29 | return os << std::resetiosflags(mask: flags); |
| 30 | } |
| 31 | |
| 32 | private: |
| 33 | unsigned char full[16]; |
| 34 | }; |
| 35 |