| 174 | } |
| 175 | |
| 176 | Object::VTable Object::createInternalVTable(InterfaceName interfaceName, std::vector<VTableItem> vtable) |
| 177 | { |
| 178 | VTable internalVTable; |
| 179 | |
| 180 | internalVTable.interfaceName = std::move(interfaceName); |
| 181 | |
| 182 | for (auto& vtableItem : vtable) |
| 183 | { |
| 184 | std::visit( overload{ [&](InterfaceFlagsVTableItem&& interfaceFlags){ writeInterfaceFlagsToVTable(std::move(interfaceFlags), internalVTable); } |
| 185 | , [&](MethodVTableItem&& method){ writeMethodRecordToVTable(std::move(method), internalVTable); } |
| 186 | , [&](SignalVTableItem&& signal){ writeSignalRecordToVTable(std::move(signal), internalVTable); } |
| 187 | , [&](PropertyVTableItem&& property){ writePropertyRecordToVTable(std::move(property), internalVTable); } } |
| 188 | , std::move(vtableItem) ); |
| 189 | } |
| 190 | |
| 191 | // Sort arrays so we can do fast searching for an item in sd-bus callback handlers |
| 192 | std::sort(internalVTable.methods.begin(), internalVTable.methods.end(), [](const auto& lhs, const auto& rhs){ return lhs.name < rhs.name; }); |
| 193 | std::sort(internalVTable.signals.begin(), internalVTable.signals.end(), [](const auto& lhs, const auto& rhs){ return lhs.name < rhs.name; }); |
| 194 | std::sort(internalVTable.properties.begin(), internalVTable.properties.end(), [](const auto& lhs, const auto& rhs){ return lhs.name < rhs.name; }); |
| 195 | |
| 196 | internalVTable.object = this; |
| 197 | |
| 198 | return internalVTable; |
| 199 | } |
| 200 | |
| 201 | void Object::writeInterfaceFlagsToVTable(InterfaceFlagsVTableItem flags, VTable& vtable) |
| 202 | { |
nothing calls this directly
no outgoing calls
no test coverage detected