19            _impl{ a_v1, a_v2, a_v3, a_v4 }
 
 
   25        [[nodiscard]] 
constexpr decltype(
auto) 
begin() 
const noexcept { 
return _impl.begin(); }
 
   26        [[nodiscard]] 
constexpr decltype(
auto) 
cbegin() 
const noexcept { 
return _impl.cbegin(); }
 
   27        [[nodiscard]] 
constexpr decltype(
auto) 
end() 
const noexcept { 
return _impl.end(); }
 
   28        [[nodiscard]] 
constexpr decltype(
auto) 
cend() 
const noexcept { 
return _impl.cend(); }
 
   30        [[nodiscard]] std::strong_ordering 
constexpr compare(
const Version& a_rhs) 
const noexcept 
   32            for (std::size_t i = 0; i < _impl.size(); ++i) {
 
   33                if ((*
this)[i] != a_rhs[i]) {
 
   34                    return (*
this)[i] < a_rhs[i] ? std::strong_ordering::less : std::strong_ordering::greater;
 
   37            return std::strong_ordering::equal;
 
 
   40        [[nodiscard]] 
constexpr std::uint32_t 
pack() const noexcept
 
   42            return static_cast<std::uint32_t
>(
 
   43                (_impl[0] & 0x0FF) << 24u |
 
   44                (_impl[1] & 0x0FF) << 16u |
 
   45                (_impl[2] & 0xFFF) << 4u |
 
   46                (_impl[3] & 0x00F) << 0u);
 
 
   49        [[nodiscard]] std::string 
string()
 const 
   52            for (
auto&& ver : _impl) {
 
 
   60        [[nodiscard]] std::wstring 
wstring()
 const 
   63            for (
auto&& ver : _impl) {
 
   64                result += std::to_wstring(ver);
 
 
   71        [[nodiscard]] 
static constexpr Version unpack(std::uint32_t a_packedVersion) 
noexcept 
   74                static_cast<value_type>((a_packedVersion >> 24) & 0x0FF),
 
   75                static_cast<value_type>((a_packedVersion >> 16) & 0x0FF),
 
   76                static_cast<value_type>((a_packedVersion >> 4) & 0xFFF),
 
   77                static_cast<value_type>(a_packedVersion & 0x0F)
 
 
   82        std::array<value_type, 4> _impl{ 0, 0, 0, 0 };
 
 
   86    [[nodiscard]] 
constexpr std::strong_ordering 
operator<=>(
const Version& a_lhs, 
const Version& a_rhs) 
noexcept { 
return a_lhs.compare(a_rhs); }
 
   91#ifdef __cpp_lib_format 
   93struct std::formatter<
REL::Version, CharT> : formatter<std::string, CharT>
 
   95    template <
class FormatContext>
 
   96    constexpr auto format(
const REL::Version a_version, FormatContext& a_ctx)
 const 
   98        return formatter<std::string, CharT>::format(a_version.
string(), a_ctx);
 
  104template <
class CharT>
 
  105struct fmt::formatter<
REL::Version, CharT> : formatter<std::string, CharT>
 
  107    template <
class FormatContext>
 
  108    auto format(
const REL::Version a_version, FormatContext& a_ctx)
 const 
  110        return formatter<std::string, CharT>::format(a_version.
string(), a_ctx);
 
constexpr decltype(auto) end() const noexcept
Definition Version.h:27
constexpr Version(value_type a_v1, value_type a_v2=0, value_type a_v3=0, value_type a_v4=0) noexcept
Definition Version.h:18
constexpr reference operator[](std::size_t a_idx) noexcept
Definition Version.h:22
std::strong_ordering constexpr compare(const Version &a_rhs) const noexcept
Definition Version.h:30
constexpr decltype(auto) cbegin() const noexcept
Definition Version.h:26
std::string string() const
Definition Version.h:49
constexpr std::uint32_t pack() const noexcept
Definition Version.h:40
constexpr const_reference operator[](std::size_t a_idx) const noexcept
Definition Version.h:23
static constexpr Version unpack(std::uint32_t a_packedVersion) noexcept
Definition Version.h:71
std::uint16_t value_type
Definition Version.h:8
constexpr decltype(auto) cend() const noexcept
Definition Version.h:28
value_type & reference
Definition Version.h:9
const value_type & const_reference
Definition Version.h:10
constexpr Version() noexcept=default
constexpr decltype(auto) begin() const noexcept
Definition Version.h:25
std::wstring wstring() const
Definition Version.h:60
std::optional< Version > GetFileVersion(stl::zwstring a_filename)
constexpr std::strong_ordering operator<=>(const Version &a_lhs, const Version &a_rhs) noexcept
Definition Version.h:86
constexpr bool operator==(const Version &a_lhs, const Version &a_rhs) noexcept
Definition Version.h:85
basic_zstring< wchar_t > zwstring
Definition PCH.h:82
Definition EffectArchetypes.h:65
std::string to_string(RE::EffectArchetype a_archetype)
Definition EffectArchetypes.h:66