10#include <promeki/config.h>
11#if PROMEKI_ENABLE_CORE
17PROMEKI_NAMESPACE_BEGIN
36 using List = ::promeki::List<FourCC>;
45 constexpr FourCC(
char c0,
char c1,
char c2,
char c3)
46 : d((static_cast<uint32_t>(c0) << 24) | (static_cast<uint32_t>(c1) << 16) |
47 (static_cast<uint32_t>(c2) << 8) | static_cast<uint32_t>(c3)) {}
54 template <
size_t N>
constexpr FourCC(
const char (&str)[N]) : FourCC(str[0], str[1], str[2], str[3]) {
55 static_assert(N == 5,
"FourCC string must have exactly 4 characters");
62 constexpr uint32_t value()
const {
return d; }
65 friend constexpr bool operator==(
const FourCC &a,
const FourCC &b) {
return a.d == b.d; }
68 friend constexpr bool operator!=(
const FourCC &a,
const FourCC &b) {
return a.d != b.d; }
71 friend constexpr bool operator<(
const FourCC &a,
const FourCC &b) {
return a.d < b.d; }
74 friend constexpr bool operator>(
const FourCC &a,
const FourCC &b) {
return a.d > b.d; }
77 friend constexpr bool operator<=(
const FourCC &a,
const FourCC &b) {
return a.d <= b.d; }
80 friend constexpr bool operator>=(
const FourCC &a,
const FourCC &b) {
return a.d >= b.d; }