dmtools/lib/base/FourCC.hpp

25 lines
795 B
C++
Raw Permalink Normal View History

// Copyright 2024 The DMBMX2Tools Authors
// SPDX-License-Identifier: MIT
#pragma once
#include <bit>
#include <base/FixedString.hpp>
#include <base/Types.hpp>
namespace dmtools {
/// strong type for FourCCs
enum class FourCCT : u32 {};
/// Compile-time FourCC generation
template <FixedString fccString, std::endian Endian = std::endian::big>
consteval FourCCT FourCC() {
static_assert(fccString.Length() == 4, "Provided string is not a FourCC");
switch(Endian) {
case std::endian::little: return static_cast<FourCCT>((fccString[0] << 24) | (fccString[1] << 16) | (fccString[2] << 8) | fccString[3]);
case std::endian::big: return static_cast<FourCCT>((fccString[0]) | (fccString[1] << 8) | (fccString[2] << 16) | (fccString[3] << 24));
}
}
} // namespace ssxtools::core