5#include <QtCore/private/qcore_ohos_p.h>
6#include <QtCore/private/qohoslogger_p.h>
21 if (registry.weakMap.IsEmpty())
22 registry.weakMap = QNapi::Reference<>::makePersistentFrom(
23 QNapi::makeNewInstance(Napi::Env(jsState.env()).Global(),
"WeakMap"));
25 auto weakMap = registry.weakMap.Value();
26 auto existingId = weakMap.eval(
"get(*)", {object});
27 if (existingId.IsNumber())
28 return QNapi::checkedCast<QNapi::Number>(existingId);
30 const auto id = registry.nextId++;
31 weakMap.eval(
"set(*)", {object, id});
37class QHarmonyJsObjectRef::Private
40 Private(QNapi::Reference<QNapi::Object> reference, std::int64_t identity)
41 : reference(std::move(reference))
46 QNapi::Reference<QNapi::Object> reference;
47 std::int64_t identity;
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
74
75
76QHarmonyJsObjectRef::QHarmonyJsObjectRef() =
default;
79
80
81QHarmonyJsObjectRef::QHarmonyJsObjectRef(
const QHarmonyJsObjectRef &other) =
default;
84
85
86
87QHarmonyJsObjectRef::QHarmonyJsObjectRef(QHarmonyJsObjectRef &&other)
noexcept =
default;
90
91
92
93QHarmonyJsObjectRef &QHarmonyJsObjectRef::operator=(
const QHarmonyJsObjectRef &other) =
default;
96
97
98
99QHarmonyJsObjectRef &QHarmonyJsObjectRef::operator=(QHarmonyJsObjectRef &&other)
noexcept =
default;
102
103
104
105QHarmonyJsObjectRef::~QHarmonyJsObjectRef() =
default;
108
109
110
111
112
113
114
115QHarmonyJsObjectRef QHarmonyJsObjectRef::fromValue(QHarmonyJsContext &jsContext, napi_value value)
117 QHarmonyJsObjectRef ref;
121 Napi::Value napiValue(jsContext.env(), value);
122 if (!napiValue.IsObject())
125 auto object = QNapi::checkedCast<QNapi::Object>(napiValue);
127 ref.d = QtOhos::makeProxyWithAsyncJsThreadDeleter(
128 std::make_shared<Private>(
129 QNapi::Reference<>::makePersistentFrom(object),
130 jsObjectIdentity(QOhosJsThreadOps::instance().jsState(), object)));
131 }
catch (
const Napi::Error &error) {
132 qOhosPrintfWarning(
"%s: creating the reference failed: %s", Q_FUNC_INFO, error.what());
139
140
141
142
143napi_value QHarmonyJsObjectRef::value(QHarmonyJsContext &jsContext)
const
146 return d ? d->reference.Value() : QNapi::Object();
150
151
152
153bool QHarmonyJsObjectRef::isNull()
const
158std::int64_t QHarmonyJsObjectRef::identity()
const noexcept
160 return d ? d->identity : 0;
164
165
166
167
168
169
170bool comparesEqual(
const QHarmonyJsObjectRef &lhs,
const QHarmonyJsObjectRef &rhs)
noexcept
172 return lhs.identity() == rhs.identity();
176
177
178
179
180
181
184 return qHash(key.identity(), seed);
std::int64_t jsObjectIdentity(QOhosJsState &jsState, QNapi::Object object)
bool comparesEqual(const QFileInfo &lhs, const QFileInfo &rhs)
constexpr size_t qHash(const QSize &s, size_t seed=0) noexcept
QNapi::Reference< QNapi::Object > weakMap