Skip to content

Commit

Permalink
bink: Bump to C++23
Browse files Browse the repository at this point in the history
  • Loading branch information
dimhotepus committed Jun 27, 2024
1 parent d845b4d commit 57327c7
Show file tree
Hide file tree
Showing 12 changed files with 76 additions and 56 deletions.
12 changes: 6 additions & 6 deletions bink_media_player/bink_media_player.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,9 @@
<TreatWarningAsError>true</TreatWarningAsError>
<AdditionalIncludeDirectories>$(SolutionDir)</AdditionalIncludeDirectories>
<ControlFlowGuard>Guard</ControlFlowGuard>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard_C>stdc11</LanguageStandard_C>
<LanguageStandard_C>stdc17</LanguageStandard_C>
<DebugInformationFormat>OldStyle</DebugInformationFormat>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand Down Expand Up @@ -144,9 +144,9 @@ copy /B "$(SolutionDir)out\binkmp\$(Platform)\$(Configuration)\binkmp.dll" "$(Ou
<TreatWarningAsError>true</TreatWarningAsError>
<AdditionalIncludeDirectories>$(SolutionDir)</AdditionalIncludeDirectories>
<ControlFlowGuard>Guard</ControlFlowGuard>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard_C>stdc11</LanguageStandard_C>
<LanguageStandard_C>stdc17</LanguageStandard_C>
<DebugInformationFormat>OldStyle</DebugInformationFormat>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand Down Expand Up @@ -188,8 +188,8 @@ copy /B "$(SolutionDir)out\binkmp\$(Platform)\$(Configuration)\binkmp.dll" "$(Ou
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
<ControlFlowGuard>Guard</ControlFlowGuard>
<LanguageStandard_C>stdc17</LanguageStandard_C>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard_C>stdc11</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand Down Expand Up @@ -233,8 +233,8 @@ copy /B "$(SolutionDir)out\binkmp\$(Platform)\$(Configuration)\binkmp.dll" "$(Ou
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
<ControlFlowGuard>Guard</ControlFlowGuard>
<LanguageStandard_C>stdc17</LanguageStandard_C>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard_C>stdc11</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand Down
25 changes: 12 additions & 13 deletions bink_media_player/bink_media_player_host.cc
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,12 @@ namespace bink {
}

auto mss_create_result = bink::MssDigitalDriverFactory::Create(mss_settings);
if (auto *error = std::get_if<const char *>(&mss_create_result))
[[unlikely]] {
return NewResult{*error};
if (!mss_create_result.has_value()) [[unlikely]] {
return NewResult{std::unexpect, mss_create_result.error()};
}

auto mss_digital_driver = std::move(
std::get<std::unique_ptr<bink::IMssDigitalDriver>>(mss_create_result));
std::unique_ptr<bink::IMssDigitalDriver> &mss_digital_driver =
mss_create_result.value();

auto bink_create_result =
bink::BinkMediaPlayerFactory::Create(bink::BinkMediaPlayerSettings{
Expand All @@ -96,13 +95,12 @@ namespace bink {
.sound_output_system = bink::BinkSoundOutputSystem::Miles,
.miles_driver_or_direct_sound = mss_digital_driver->native_handle(),
.used_cpus_count = player_settings.used_cpus_count});
if (const auto *error = std::get_if<const char *>(&bink_create_result))
[[unlikely]] {
return NewResult{*error};
if (!bink_create_result.has_value()) [[unlikely]] {
return NewResult{std::unexpect, bink_create_result.error()};
}

std::unique_ptr<bink::IBinkMediaPlayer> bink_media_player = std::move(
std::get<std::unique_ptr<bink::IBinkMediaPlayer>>(bink_create_result));
std::unique_ptr<bink::IBinkMediaPlayer> &bink_media_player =
bink_create_result.value();

if (maybe_general_settings.has_value()) {
const auto &audio_controls = bink_media_player->GetAudioControls();
Expand Down Expand Up @@ -131,16 +129,17 @@ BinkMediaPlayerHost &BinkMediaPlayerHost::operator=(
return *this;
}

[[nodiscard]] BinkMediaPlayerHostTickResult BinkMediaPlayerHost::Tick() const noexcept {
[[nodiscard]] BinkMediaPlayerHostTickResult BinkMediaPlayerHost::Tick()
const noexcept {
// Is it time for a new Bink frame?
if (bink_media_player_->CanPresent()) {
// Yup, draw the next frame.
bink_media_player_->Present(false);

// Check player has frames to present.
return bink_media_player_->HasFrames()
? BinkMediaPlayerHostTickResult::HasFrames
: BinkMediaPlayerHostTickResult::NoFrames;
? BinkMediaPlayerHostTickResult::HasFrames
: BinkMediaPlayerHostTickResult::NoFrames;
}

// Nope, give the rest of the system a chance to run.
Expand Down
2 changes: 1 addition & 1 deletion bink_media_player/bink_media_player_host.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ class BinkMediaPlayerHost {
/**
* @brief Bink media player host creation result.
*/
using NewResult = std::variant<BinkMediaPlayerHost, const char *>;
using NewResult = std::expected<BinkMediaPlayerHost, const char *>;

/**
* @brief Creates bink media player host.
Expand Down
21 changes: 10 additions & 11 deletions bink_media_player/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -285,8 +285,8 @@ int WINAPI WinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE,
bink::ScopedComInitializerFlags::kApartmentThreaded |
bink::ScopedComInitializerFlags::kDisableOle1Dde |
bink::ScopedComInitializerFlags::kSpeedOverMemory);
if (const auto *rc = std::get_if<std::error_code>(&scoped_com_initializer)) {
std::string error{rc->message()};
if (!scoped_com_initializer.has_value()) {
std::string error{scoped_com_initializer.error().message()};
error.insert(0, "Component Object Model initialization failed: ");

MessageBoxA(0, error.c_str(), "Bink Media Player - COM Initialize Error",
Expand Down Expand Up @@ -331,18 +331,17 @@ int WINAPI WinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE,
.window = window,
.bink_flags = kBinkFlags,
.used_cpus_count = good_enough_decoder_cpu_cores_count});
if (const auto *error =
std::get_if<const char *>(&bink_media_player_result)) {
::MessageBoxA(window, *error, "Bink Media Player - Media Open Error",
MB_OK | MB_ICONSTOP);
if (!bink_media_player_result.has_value()) {
::MessageBoxA(window, bink_media_player_result.error(),
"Bink Media Player - Media Open Error", MB_OK | MB_ICONSTOP);
return 4; //-V112
}

auto maybe_bink_media_player = std::optional{
std::get<bink::BinkMediaPlayerHost>(std::move(bink_media_player_result))};
auto maybe_bink_media_player =
std::optional{std::move(*bink_media_player_result)};
bink_media_player_host.swap(maybe_bink_media_player);

bink::BinkMediaInfo media_info;
bink::BinkMediaInfo media_info = {0};
if (!bink_media_player_host->GetMediaInfo(media_info)) {
::MessageBoxA(window, "Unable to get media info.",
"Bink Media Player - Media Open Error", MB_OK | MB_ICONSTOP);
Expand All @@ -367,8 +366,8 @@ int WINAPI WinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE,

// Has Bink presented something?
if (tick_result != bink::BinkMediaPlayerHostTickResult::NotReady) {
const auto has_frames = tick_result ==
bink::BinkMediaPlayerHostTickResult::HasFrames;
const auto has_frames =
tick_result == bink::BinkMediaPlayerHostTickResult::HasFrames;

// No frames, lets close.
if (!has_frames) ::DestroyWindow(window);
Expand Down
3 changes: 2 additions & 1 deletion bink_media_player/scoped_com_initializer.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ class ScopedComInitializer {
auto init = ScopedComInitializer{flags};
return !init.error_code()
? SystemResult<ScopedComInitializer>{std::move(init)}
: SystemResult<ScopedComInitializer>{init.error_code()};
: SystemResult<ScopedComInitializer>{std::unexpect,
init.error_code()};
}

ScopedComInitializer(ScopedComInitializer&& i) noexcept
Expand Down
9 changes: 5 additions & 4 deletions binkmp/bink_media_player_factory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,13 @@ CreateResult<IBinkMediaPlayer> BinkMediaPlayerFactory::Create(
#endif
)
};
if (setup_error) return CreateResult<IBinkMediaPlayer>{setup_error};
if (setup_error)
return CreateResult<IBinkMediaPlayer>{std::unexpect, setup_error};

auto player = std::make_unique<BinkMediaPlayer>(settings);
return player->IsOpened()
? CreateResult<IBinkMediaPlayer>{std::move(player)}
: CreateResult<IBinkMediaPlayer>{player->GetLastError()};
return player->IsOpened() ? CreateResult<IBinkMediaPlayer>{std::move(player)}
: CreateResult<IBinkMediaPlayer>{
std::unexpect, player->GetLastError()};
}

} // namespace bink
16 changes: 8 additions & 8 deletions binkmp/binkmp.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,9 @@
<ConformanceMode>true</ConformanceMode>
<TreatWarningAsError>true</TreatWarningAsError>
<AdditionalIncludeDirectories>$(SolutionDir)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpplatest</LanguageStandard>
<LanguageStandard_C>stdc17</LanguageStandard_C>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard_C>stdc11</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand Down Expand Up @@ -167,9 +167,9 @@ if "$(PlatformShortName)" == "x86" (
<ConformanceMode>true</ConformanceMode>
<TreatWarningAsError>true</TreatWarningAsError>
<AdditionalIncludeDirectories>$(SolutionDir)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpplatest</LanguageStandard>
<LanguageStandard_C>stdc17</LanguageStandard_C>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard_C>stdc11</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand Down Expand Up @@ -201,9 +201,9 @@ if "$(PlatformShortName)" == "x86" (
<ConformanceMode>true</ConformanceMode>
<TreatWarningAsError>true</TreatWarningAsError>
<AdditionalIncludeDirectories>$(SolutionDir)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpplatest</LanguageStandard>
<LanguageStandard_C>stdc17</LanguageStandard_C>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard_C>stdc11</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand Down Expand Up @@ -238,9 +238,9 @@ if "$(PlatformShortName)" == "x86" (
<ConformanceMode>true</ConformanceMode>
<TreatWarningAsError>true</TreatWarningAsError>
<AdditionalIncludeDirectories>$(SolutionDir)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpplatest</LanguageStandard>
<LanguageStandard_C>stdc17</LanguageStandard_C>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard_C>stdc11</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand Down
6 changes: 3 additions & 3 deletions binkmp/include/bink_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#include <cassert>
#include <memory>
#include <system_error>
#include <variant>
#include <expected>

/*
* Checks x is set in debug mode.
Expand Down Expand Up @@ -44,13 +44,13 @@ namespace bink {
* @brief Bink media player create result.
*/
template <typename T>
using CreateResult = std::variant<std::unique_ptr<T>, const char*>;
using CreateResult = std::expected<std::unique_ptr<T>, const char*>;

/**
* @brief Error code result.
*/
template <typename T>
using SystemResult = std::variant<T, std::error_code>;
using SystemResult = std::expected<T, std::error_code>;

} // namespace bink

Expand Down
4 changes: 2 additions & 2 deletions binkmp/include/ibink_audio_controls.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,14 @@ struct BINK_ATTRIBUTE_NO_VTABLE IBinkAudioControls {
* @brief Get tracks count.
* @return Tracks count.
*/
virtual [[nodiscard]] uint32_t GetTracksCount() const noexcept = 0;
[[nodiscard]] virtual uint32_t GetTracksCount() const noexcept = 0;

/**
* @brief Get track by id.
* @param track_id Track id.
* @return Track if any.
*/
virtual [[nodiscard]] std::unique_ptr<IBinkAudioTrack> GetTrackById(
[[nodiscard]] virtual std::unique_ptr<IBinkAudioTrack> GetTrackById(
AudioTrackId track_id) const noexcept = 0;

/**
Expand Down
6 changes: 3 additions & 3 deletions binkmp/mss_digital_driver_factory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ CreateResult<IMssDigitalDriver> MssDigitalDriverFactory::Create(
auto driver = std::make_unique<MssDigitalDriver>(
settings.frequency, settings.bits_per_sample, settings.channels_count,
settings.flags);
return driver->IsOpened()
? CreateResult<IMssDigitalDriver>{std::move(driver)}
: CreateResult<IMssDigitalDriver>{driver->GetLastError()};
return driver->IsOpened() ? CreateResult<IMssDigitalDriver>{std::move(driver)}
: CreateResult<IMssDigitalDriver>{
std::unexpect, driver->GetLastError()};
}

} // namespace bink
16 changes: 12 additions & 4 deletions binkw/binkw.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,11 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>__RADINDLL__;_DEBUG;BINKW_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard>stdcpplatest</LanguageStandard>
<DisableSpecificWarnings>4100</DisableSpecificWarnings>
<TreatWarningAsError>true</TreatWarningAsError>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard_C>stdc17</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -122,9 +124,11 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>__RADINDLL__;WIN32;_DEBUG;BINKW_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard>stdcpplatest</LanguageStandard>
<DisableSpecificWarnings>4100</DisableSpecificWarnings>
<TreatWarningAsError>true</TreatWarningAsError>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard_C>stdc17</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -144,9 +148,11 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>__RADINDLL__;WIN32;NDEBUG;BINKW_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard>stdcpplatest</LanguageStandard>
<DisableSpecificWarnings>4100</DisableSpecificWarnings>
<TreatWarningAsError>true</TreatWarningAsError>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard_C>stdc17</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -168,9 +174,11 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>__RADINDLL__;NDEBUG;BINKW_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard>stdcpplatest</LanguageStandard>
<DisableSpecificWarnings>4100</DisableSpecificWarnings>
<TreatWarningAsError>true</TreatWarningAsError>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard_C>stdc17</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand Down
12 changes: 12 additions & 0 deletions mss/mss.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@
<ConformanceMode>true</ConformanceMode>
<DisableSpecificWarnings>4100</DisableSpecificWarnings>
<TreatWarningAsError>true</TreatWarningAsError>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpplatest</LanguageStandard>
<LanguageStandard_C>stdc17</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -120,6 +123,9 @@
<ConformanceMode>true</ConformanceMode>
<DisableSpecificWarnings>4100</DisableSpecificWarnings>
<TreatWarningAsError>true</TreatWarningAsError>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpplatest</LanguageStandard>
<LanguageStandard_C>stdc17</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -139,6 +145,9 @@
<ConformanceMode>true</ConformanceMode>
<DisableSpecificWarnings>4100</DisableSpecificWarnings>
<TreatWarningAsError>true</TreatWarningAsError>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpplatest</LanguageStandard>
<LanguageStandard_C>stdc17</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -160,6 +169,9 @@
<ConformanceMode>true</ConformanceMode>
<DisableSpecificWarnings>4100</DisableSpecificWarnings>
<TreatWarningAsError>true</TreatWarningAsError>
<EnforceTypeConversionRules>true</EnforceTypeConversionRules>
<LanguageStandard>stdcpplatest</LanguageStandard>
<LanguageStandard_C>stdc17</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand Down

0 comments on commit 57327c7

Please sign in to comment.