Skip to content

Commit

Permalink
AK: Add ConstPeekType to Traits
Browse files Browse the repository at this point in the history
Also, the PeekType of smart pointers is now T* instead of const T*.

Note: This commit doesn't compile, it breaks HashMap::get() for some
types. Fixed in the next commit.
  • Loading branch information
itamar8910 authored and awesomekling committed May 8, 2021
1 parent 77d4624 commit b816bd0
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 3 deletions.
3 changes: 2 additions & 1 deletion AK/NonnullOwnPtr.h
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,8 @@ make(Args&&... args)

template<typename T>
struct Traits<NonnullOwnPtr<T>> : public GenericTraits<NonnullOwnPtr<T>> {
using PeekType = const T*;
using PeekType = T*;
using ConstPeekType = const T*;
static unsigned hash(const NonnullOwnPtr<T>& p) { return int_hash((u32)p.ptr()); }
static bool equals(const NonnullOwnPtr<T>& a, const NonnullOwnPtr<T>& b) { return a.ptr() == b.ptr(); }
};
Expand Down
3 changes: 2 additions & 1 deletion AK/OwnPtr.h
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,8 @@ inline void swap(OwnPtr<T>& a, OwnPtr<U>& b)

template<typename T>
struct Traits<OwnPtr<T>> : public GenericTraits<OwnPtr<T>> {
using PeekType = const T*;
using PeekType = T*;
using ConstPeekType = const T*;
static unsigned hash(const OwnPtr<T>& p) { return ptr_hash(p.ptr()); }
static bool equals(const OwnPtr<T>& a, const OwnPtr<T>& b) { return a.ptr() == b.ptr(); }
};
Expand Down
3 changes: 2 additions & 1 deletion AK/RefPtr.h
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,8 @@ struct Formatter<RefPtr<T>> : Formatter<const T*> {

template<typename T>
struct Traits<RefPtr<T>> : public GenericTraits<RefPtr<T>> {
using PeekType = const T*;
using PeekType = T*;
using ConstPeekType = const T*;
static unsigned hash(const RefPtr<T>& p) { return ptr_hash(p.ptr()); }
static bool equals(const RefPtr<T>& a, const RefPtr<T>& b) { return a.ptr() == b.ptr(); }
};
Expand Down
1 change: 1 addition & 0 deletions AK/Traits.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ namespace AK {
template<typename T>
struct GenericTraits {
using PeekType = T;
using ConstPeekType = T;
static constexpr bool is_trivial() { return false; }
static constexpr bool equals(const T& a, const T& b) { return a == b; }
};
Expand Down

0 comments on commit b816bd0

Please sign in to comment.