-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIterator.cpp
More file actions
109 lines (90 loc) · 2.84 KB
/
Iterator.cpp
File metadata and controls
109 lines (90 loc) · 2.84 KB
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include "DBusUtils.hpp"
UDBus::Iterator::~Iterator()
{
close_container();
}
UDBus::Iterator::operator DBusMessageIter*() noexcept
{
return &iterator;
}
UDBus::Iterator::Iterator(UDBus::Message& message, const int type, const char* contained_signature, UDBus::Iterator& it, const bool bInit) noexcept
{
setAppend(message, type, contained_signature, it, bInit);
}
bool UDBus::Iterator::append_basic(const int type, const void* value) noexcept
{
return dbus_message_iter_append_basic(&iterator, type, value);
}
bool UDBus::Iterator::append_fixed_array(const int element_type, const void* value, const int n_elements) noexcept
{
return dbus_message_iter_append_fixed_array(&iterator, element_type, value, n_elements);
}
void UDBus::Iterator::close_container() noexcept
{
if (inner != nullptr && iteratorType == APPEND_ITERATOR)
dbus_message_iter_close_container(&iterator, &inner->iterator);
inner = nullptr;
iteratorType = EMPTY;
}
void UDBus::Iterator::abandon_container() noexcept
{
dbus_message_iter_abandon_container(&iterator, &inner->iterator);
}
void UDBus::Iterator::abandon_container_if_open() noexcept
{
dbus_message_iter_abandon_container_if_open(&iterator, &inner->iterator);
}
bool UDBus::Iterator::has_next() noexcept
{
return dbus_message_iter_has_next(&iterator);
}
bool UDBus::Iterator::next() noexcept
{
return dbus_message_iter_next(&iterator);
}
char* UDBus::Iterator::get_signature() noexcept
{
return dbus_message_iter_get_signature(&iterator);
}
void UDBus::Iterator::setAppend(UDBus::Message& message, const int type, const char* contained_signature, UDBus::Iterator& it, const bool bInit) noexcept
{
iteratorType = APPEND_ITERATOR;
inner = ⁢
if (bInit)
dbus_message_iter_init_append(message, &iterator);
if (inner != nullptr)
dbus_message_iter_open_container(&iterator, type, contained_signature, &inner->iterator);
}
int UDBus::Iterator::get_arg_type() noexcept
{
return dbus_message_iter_get_arg_type(&iterator);
}
int UDBus::Iterator::get_element_type() noexcept
{
return dbus_message_iter_get_element_type(&iterator);
}
void UDBus::Iterator::recurse() noexcept
{
dbus_message_iter_recurse(&iterator, &inner->iterator);
}
void UDBus::Iterator::get_basic(void *value) noexcept
{
dbus_message_iter_get_basic(&iterator, value);
}
int UDBus::Iterator::get_element_count() noexcept
{
return dbus_message_iter_get_element_count(&iterator);
}
void UDBus::Iterator::get_fixed_array(void* value, int* n_elements) noexcept
{
dbus_message_iter_get_fixed_array(&iterator, value, n_elements);
}
void UDBus::Iterator::setGet(UDBus::Message& message, Iterator* it, const bool bInit) noexcept
{
iteratorType = GET_ITERATOR;
inner = it;
if (bInit)
dbus_message_iter_init(message, &iterator);
else if (it != nullptr)
recurse();
}