blob: 63a731842f07701c8e03b8035f2557542853ac82 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#pragma once
#include <basis/seadTypes.h>
#include <tuple>
#include "KingSystem/Utils/Types.h"
namespace ksys {
class MessageReceiver;
struct MesTransceiverId {
MesTransceiverId() : receiver(), self_ref() { reset(); }
MesTransceiverId(const MesTransceiverId& other) { *this = other; }
MesTransceiverId(u32& id, MessageReceiver* receiver)
: id(++id), receiver(receiver), self_ref() {}
~MesTransceiverId() { reset(); }
void reset() {
queue_id = 0xffffffff;
id = 0xffffffff;
receiver = nullptr;
self_ref = nullptr;
}
MesTransceiverId& operator=(const MesTransceiverId& other) {
queue_id = other.queue_id;
id = other.id;
receiver = other.receiver;
self_ref = other.self_ref;
return *this;
}
bool isRegistered() const {
if (!self_ref || !*self_ref)
return false;
const auto fields = [](const MesTransceiverId& i) { return std::tie(i.queue_id, i.id); };
return fields(*this) == fields(**self_ref);
}
u32 queue_id = 0xffffffff;
u32 id = 0xffffffff;
MessageReceiver* receiver;
/// If registered, this points to a pointer that points to this object.
/// Otherwise, this value is nullptr.
MesTransceiverId** self_ref;
};
KSYS_CHECK_SIZE_NX150(MesTransceiverId, 0x18);
} // namespace ksys
|