LeechCraft
0.6.70-18808-g3467692359
Modular cross-platform feature rich live environment.
Toggle main menu visibility
Loading...
Searching...
No Matches
trackingpointer.h
Go to the documentation of this file.
1
/**********************************************************************
2
* LeechCraft - modular cross-platform feature rich internet client.
3
* Copyright (C) 2006-2014 Georg Rudoy
4
*
5
* Distributed under the Boost Software License, Version 1.0.
6
* (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7
**********************************************************************/
8
9
#pragma once
10
11
#include <functional>
12
#include <stdexcept>
13
#include <QObject>
14
#include <QPointer>
15
#include "
sllconfig.h
"
16
17
namespace
LC::Util
18
{
19
struct
UTIL_SLL_API
BadTrackingPointerAccess
: std::runtime_error
20
{
21
BadTrackingPointerAccess
();
22
};
23
24
[[noreturn, gnu::cold]]
25
UTIL_SLL_API
void
ReportBadAccess
();
26
27
template
<
typename
T, auto QObjectGetter = &T::GetQObject>
28
class
TrackingPointer
29
{
30
T *Ptr_ =
nullptr
;
31
QPointer<const QObject> Guard_;
32
public
:
33
TrackingPointer
() =
default
;
34
35
explicit
(
false
)
TrackingPointer
(T *ptr)
36
: Ptr_ { ptr }
37
, Guard_ { ptr ? std::invoke (QObjectGetter, ptr) : nullptr }
38
{
39
}
40
41
TrackingPointer
(
const
TrackingPointer
&) =
default
;
42
TrackingPointer
(
TrackingPointer
&&) =
default
;
43
TrackingPointer
& operator= (
const
TrackingPointer
&) =
default
;
44
TrackingPointer
& operator= (
TrackingPointer
&&) =
default
;
45
~TrackingPointer
() =
default
;
46
47
bool
operator==
(
const
TrackingPointer
& other)
const
48
{
49
return
Ptr_ == other.Ptr_;
50
}
51
52
explicit
operator
bool ()
const
53
{
54
return
Guard_;
55
}
56
57
T*
UnsafeGet
()
const
58
{
59
return
Ptr_;
60
}
61
62
T* operator-> ()
const
63
{
64
if
(!Guard_)
65
ReportBadAccess
();
66
return
Ptr_;
67
}
68
69
T&
operator*
()
const
70
{
71
if
(!Guard_)
72
ReportBadAccess
();
73
return
*Ptr_;
74
}
75
};
76
}
LC::Util::TrackingPointer::~TrackingPointer
~TrackingPointer()=default
LC::Util::TrackingPointer::TrackingPointer
TrackingPointer(TrackingPointer &&)=default
LC::Util::TrackingPointer::TrackingPointer
TrackingPointer(const TrackingPointer &)=default
LC::Util::TrackingPointer::UnsafeGet
T * UnsafeGet() const
Definition
trackingpointer.h:57
LC::Util::TrackingPointer::TrackingPointer
TrackingPointer()=default
LC::Util
Definition
icoreproxy.h:34
LC::Util::operator==
bool operator==(const ModelIterator &left, const ModelIterator &right)
Definition
modeliterator.cpp:68
LC::Util::operator*
auto operator*(const F &function, const T &functor) -> decltype(Fmap(functor, function))
An operator-style alias for Fmap().
Definition
functor.h:154
LC::Util::ReportBadAccess
void ReportBadAccess()
Definition
trackingpointer.cpp:18
sllconfig.h
UTIL_SLL_API
#define UTIL_SLL_API
Definition
sllconfig.h:16
LC::Util::BadTrackingPointerAccess::BadTrackingPointerAccess
BadTrackingPointerAccess()
Definition
trackingpointer.cpp:13
src
util
sll
trackingpointer.h
Generated by
1.17.0