mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-12-24 03:06:17 +00:00
util::IntrusiveList: assert member referencing is correct
This commit is contained in:
parent
0751db5d12
commit
769a57526c
4 changed files with 11 additions and 5 deletions
|
@ -22,11 +22,11 @@ namespace ams::os::impl {
|
|||
class WaitableManagerImpl;
|
||||
|
||||
class WaitableHolderBase {
|
||||
private:
|
||||
WaitableManagerImpl *manager = nullptr;
|
||||
public:
|
||||
util::IntrusiveListNode manager_node;
|
||||
util::IntrusiveListNode object_list_node;
|
||||
private:
|
||||
WaitableManagerImpl *manager = nullptr;
|
||||
public:
|
||||
/* Gets whether the held waitable is currently signaled. */
|
||||
virtual TriBool IsSignaled() const = 0;
|
||||
|
|
|
@ -561,6 +561,9 @@ namespace ams::util {
|
|||
static constexpr Derived const &GetParent(IntrusiveListNode const &node) {
|
||||
return util::GetParentReference<Member, Derived>(&node);
|
||||
}
|
||||
private:
|
||||
static constexpr TYPED_STORAGE(Derived) DerivedStorage = {};
|
||||
static_assert(std::addressof(GetParent(GetNode(GetReference(DerivedStorage)))) == GetPointer(DerivedStorage));
|
||||
};
|
||||
|
||||
template<class Derived>
|
||||
|
|
|
@ -250,11 +250,11 @@ namespace ams::util {
|
|||
friend class IntrusiveRedBlackTree;
|
||||
|
||||
static constexpr IntrusiveRedBlackTreeNode *GetNode(Derived *parent) {
|
||||
return &(parent->*Member);
|
||||
return std::addressof(parent->*Member);
|
||||
}
|
||||
|
||||
static constexpr IntrusiveRedBlackTreeNode const *GetNode(Derived const *parent) {
|
||||
return &(parent->*Member);
|
||||
return std::addressof(parent->*Member);
|
||||
}
|
||||
|
||||
static constexpr Derived *GetParent(IntrusiveRedBlackTreeNode *node) {
|
||||
|
@ -264,6 +264,9 @@ namespace ams::util {
|
|||
static constexpr Derived const *GetParent(IntrusiveRedBlackTreeNode const *node) {
|
||||
return util::GetParentPointer<Member, Derived>(node);
|
||||
}
|
||||
private:
|
||||
static constexpr TYPED_STORAGE(Derived) DerivedStorage = {};
|
||||
static_assert(std::addressof(GetParent(GetNode(GetPointer(DerivedStorage)))) == GetPointer(DerivedStorage));
|
||||
};
|
||||
|
||||
template<class Derived>
|
||||
|
|
|
@ -169,7 +169,7 @@ namespace ams::util {
|
|||
|
||||
/* Defines, for use by other code. */
|
||||
|
||||
#define OFFSETOF(parent, member) (::ams::util::OffsetOf<&parent::member, parent>)
|
||||
#define OFFSETOF(parent, member) (::ams::util::impl::OffsetOf<&parent::member, parent>)
|
||||
|
||||
#define GET_PARENT_PTR(parent, member, _arg) (::ams::util::GetParentPointer<&parent::member, parent>(_arg))
|
||||
|
||||
|
|
Loading…
Reference in a new issue