#pragma once #include #include namespace base { /// Type system magic enum class FourCC32_t : u32 {}; template consteval FourCC32_t FourCC32() { static_assert(fccString.Length() == 4, "Provided string is not a FourCC"); switch(Endian) { case std::endian::little: return static_cast((fccString[0]) | (fccString[1] << 8) | (fccString[2] << 16) | (fccString[3] << 24)); case std::endian::big: return static_cast((fccString[0] << 24) | (fccString[1] << 16) | (fccString[2] << 8) | fccString[3]); // endian::native is practically implemented in most standard libraries // by aliasing the native endian enumerator, so that it will match // one of the two cases here. therefore this code is literally useless // and i have no idea why i even wrote it 4 years ago :') //default: // throw "Invalid endian provided? How'd you do that?"; // NOLINT } } // TODO: 64-bit version which returns a u64 (if required?) } // namespace base