Skip to content

Commit 7f9c6de

Browse files
committed
Use a dereference type to access smart pointer objects with ranges
Instead of taking the address of standard member functions, which is invalid.
1 parent 2957d9b commit 7f9c6de

6 files changed

Lines changed: 21 additions & 14 deletions

File tree

alc/alc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1781,7 +1781,7 @@ auto UpdateDeviceParams(gsl::not_null<al::Device*> device,
17811781
* configuration in aluInitEffectPanning.
17821782
*/
17831783
std::ranges::for_each(context->mEffectSlotClusters
1784-
| std::views::transform(&ContextBase::EffectSlotCluster::operator*)
1784+
| std::views::transform(al::dereference{})
17851785
| std::views::join, [](EffectSlotBase &slot)
17861786
{
17871787
slot.mWetBuffer.clear();

alc/backends/pipewire.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1408,7 +1408,7 @@ void EventManager::removeCallback(uint32_t const id) noexcept
14081408
RemoveDevice(id);
14091409

14101410
auto node_end = std::ranges::remove_if(mNodeList, [id](NodeProxy const &node) noexcept
1411-
{ return node.mId == id; }, &std::unique_ptr<NodeProxy>::operator*);
1411+
{ return node.mId == id; }, al::dereference{});
14121412
mNodeList.erase(node_end.begin(), node_end.end());
14131413

14141414
if(mDefaultMetadata && mDefaultMetadata->mId == id)

alc/backends/wasapi.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1437,9 +1437,9 @@ FORCE_ALIGN void WasapiPlayback::mixerProc(SpatialDevice const &audio)
14371437
{
14381438
auto *buffer = LPBYTE{};
14391439
auto size = UINT32{};
1440-
obj.GetBuffer(&buffer, &size);
1440+
std::ignore = obj.GetBuffer(&buffer, &size);
14411441
return buffer;
1442-
}, &ComPtr<ISpatialAudioObject>::operator*);
1442+
}, al::dereference{});
14431443

14441444
if(!mResampler)
14451445
mDevice->renderSamples(buffers, framesToDo);

common/opthelpers.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,12 @@ template<typename T>
7474
constexpr std::underlying_type_t<T> to_underlying(T e) noexcept
7575
{ return static_cast<std::underlying_type_t<T>>(e); }
7676

77+
struct dereference {
78+
template<typename T> [[nodiscard]] constexpr
79+
auto operator()(T&& p) const noexcept(noexcept(*std::forward<T>(p))) -> decltype(auto)
80+
{ return *std::forward<T>(p); }
81+
};
82+
7783
/**
7884
* Gets a not_null<T*> from a not_null<SmartPtr<T>>, hopefully avoiding ths
7985
* extraneous null check from not_null's constructor.

router/alc.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include "altypes.hpp"
1919
#include "alstring.h"
20+
#include "opthelpers.h"
2021
#include "strutils.hpp"
2122

2223
#if HAVE_CXXMODULES
@@ -574,7 +575,7 @@ ALC_API auto ALC_APIENTRY alcOpenDevice(ALCchar const *const devicename) noexcep
574575
return true;
575576
}
576577
return false;
577-
}, &DriverIfacePtr::operator*);
578+
}, al::dereference{});
578579
if(iter == DriverList.end())
579580
{
580581
LastError.store(ALC_INVALID_DEVICE);
@@ -827,7 +828,7 @@ ALC_API auto ALC_APIENTRY alcGetString(ALCdevice *const device, ALCenum const pa
827828
|| drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT"))
828829
DevicesList.appendDeviceList(drv.alcGetString(nullptr, ALC_DEVICE_SPECIFIER), idx);
829830
++idx;
830-
}, &DriverIfacePtr::operator*);
831+
}, al::dereference{});
831832
DevicesList.finishEnumeration();
832833
return DevicesList.getNameData();
833834
}
@@ -851,7 +852,7 @@ ALC_API auto ALC_APIENTRY alcGetString(ALCdevice *const device, ALCenum const pa
851852
AllDevicesList.appendDeviceList(
852853
drv.alcGetString(nullptr, ALC_DEVICE_SPECIFIER), idx);
853854
++idx;
854-
}, &DriverIfacePtr::operator*);
855+
}, al::dereference{});
855856
AllDevicesList.finishEnumeration();
856857
return AllDevicesList.getNameData();
857858
}
@@ -869,7 +870,7 @@ ALC_API auto ALC_APIENTRY alcGetString(ALCdevice *const device, ALCenum const pa
869870
CaptureDevicesList.appendDeviceList(
870871
drv.alcGetString(nullptr, ALC_CAPTURE_DEVICE_SPECIFIER), idx);
871872
++idx;
872-
}, &DriverIfacePtr::operator*);
873+
}, al::dereference{});
873874
CaptureDevicesList.finishEnumeration();
874875
return CaptureDevicesList.getNameData();
875876
}
@@ -880,7 +881,7 @@ ALC_API auto ALC_APIENTRY alcGetString(ALCdevice *const device, ALCenum const pa
880881
{
881882
return drv.ALCVer >= MakeALCVer(1, 1)
882883
|| drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT");
883-
}, &DriverIfacePtr::operator*);
884+
}, al::dereference{});
884885
if(iter != DriverList.end())
885886
return (*iter)->alcGetString(nullptr, ALC_DEFAULT_DEVICE_SPECIFIER);
886887
return "";
@@ -891,7 +892,7 @@ ALC_API auto ALC_APIENTRY alcGetString(ALCdevice *const device, ALCenum const pa
891892
auto const iter = std::ranges::find_if(DriverList, [](const DriverIface &drv)
892893
{
893894
return drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATE_ALL_EXT") != ALC_FALSE;
894-
}, &DriverIfacePtr::operator*);
895+
}, al::dereference{});
895896
if(iter != DriverList.end())
896897
return (*iter)->alcGetString(nullptr, ALC_DEFAULT_ALL_DEVICES_SPECIFIER);
897898
return "";
@@ -903,7 +904,7 @@ ALC_API auto ALC_APIENTRY alcGetString(ALCdevice *const device, ALCenum const pa
903904
{
904905
return drv.ALCVer >= MakeALCVer(1, 1)
905906
|| drv.alcIsExtensionPresent(nullptr, "ALC_EXT_CAPTURE");
906-
}, &DriverIfacePtr::operator*);
907+
}, al::dereference{});
907908
if(iter != DriverList.end())
908909
return (*iter)->alcGetString(nullptr, ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER);
909910
return "";
@@ -1011,7 +1012,7 @@ ALC_API auto ALC_APIENTRY alcCaptureOpenDevice(ALCchar const *const devicename,
10111012
return true;
10121013
}
10131014
return false;
1014-
}, &DriverIfacePtr::operator*);
1015+
}, al::dereference{});
10151016
if(iter == DriverList.end())
10161017
{
10171018
LastError.store(ALC_INVALID_DEVICE);
@@ -1156,7 +1157,7 @@ ALC_API auto ALC_APIENTRY alcLoopbackOpenDeviceSOFT(ALCchar const *const deviceN
11561157
return true;
11571158
}
11581159
return false;
1159-
}, &DriverIfacePtr::operator*);
1160+
}, al::dereference{});
11601161
if(iter == DriverList.end())
11611162
{
11621163
LastError.store(ALC_INVALID_DEVICE);

router/router.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ void LoadDriverList()
417417
return drv.ALCVer >= MakeALCVer(1, 1)
418418
|| drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATE_ALL_EXT")
419419
|| drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT");
420-
}, &DriverIfacePtr::operator*);
420+
}, al::dereference{});
421421

422422
/* HACK: rapture3d_oal.dll isn't likely to work if it's one distributed for
423423
* specific games licensed to use it. It will enumerate a Rapture3D device

0 commit comments

Comments
 (0)