Acl::ControlDataAddress
Acl::ControlDataAddress Class Reference
A class representing an address within the control protocol. The address consists of an internal list of UUIDs, which all represent a component that needs to be passed to reach the final address. An address might end with a wildcard, which is represented by the omni UUID (i.e. all digits set to 0xF) and will then match all addresses with the same UUID sequence in the start.
#include <ControlDataAddress.h>
Public Functions
| Name | |
|---|---|
| ControlDataAddress() =default Default constructor for an empty address. | |
| ControlDataAddress(const UUID & destinationUUID) Constructor which creates an address with the final destination UUID. | |
| size_t | size() const Returns the number of parts of the address that is currently stored. |
| bool | empty() const Check if address is empty or contains any parts. |
| bool | extend(const UUID & uuid) Extend the address with a new UUID that must be passed to get to the next UUID in the address. |
| bool | extend(const ControlDataAddress & address) Extend the address with all UUIDs in another ControlDataAddress. The UUIDs will be added in the same order as in the other ControlDataAddress to the beginning of this ControlDataAddress (i.e. the UUIDs in the other ControlDataAddress must be passed before the UUIDs in this ControlDataAddress to reach the final destination) |
| bool | hasWildcard() const |
| bool | currentUuidIsWildcard() const |
| bool | currentUuidMatch(const UUID & uuid) const Check if the uuid match the first UUID of the address. |
| bool | fullAddressMatch(const ControlDataAddress & other) const Check if another address matches this address. This check might pass in two ways: |
| std::optional< UUID > | getCurrentUuid() const |
| std::optional< UUID > | moveToAndGetNextUuid() Move to the next UUID in the address, by removing the current one, and return the next UUID of the address. In case there was at least one UUID in the address, the size of the address will be decreased by one. |
| std::vector< uint8_t > | pack() const Pack a ControlDataAddress into a byte vector. |
| std::string | toString() const |
| bool | operator==(const ControlDataAddress & other) const Compare this ControlDataAddress for equality to another ControlDataAddress. |
| bool | operator!=(const ControlDataAddress & other) const Compare this ControlDataAddress for non-equality to another ControlDataAddress. |
| std::optional< ControlDataAddress > | unpack(const std::vector< uint8_t >::const_iterator & packedBegin, const std::vector< uint8_t >::const_iterator & packedEnd) Unpack a packed ControlDataAddress, the size of packedEnd - packedBegin must be a multiple of UUID::kUUIDSize to be able to unpack anything. |
| std::optional< ControlDataAddress > | unpack(const uint8_t * packedBegin, const uint8_t * packedEnd) Unpack a packed ControlDataAddress, the size of packedEnd - packedBegin must be a multiple of UUID::kUUIDSize to be able to unpack anything. |
Friends
| Name | |
|---|---|
| std::ostream & | operator«(std::ostream & stream, const ControlDataAddress & address) Print this ControlDataAddress to an output stream, UUIDs separated with ‘:’. |
Public Functions Documentation
function ControlDataAddress
ControlDataAddress() =default
Default constructor for an empty address.
function ControlDataAddress
explicit ControlDataAddress(
const UUID & destinationUUID
)
Constructor which creates an address with the final destination UUID.
Parameters:
- destinationUUID The destination UUID of the address
function size
size_t size() const
Returns the number of parts of the address that is currently stored.
Return: The number of parts of the address that is currently stored
function empty
bool empty() const
Check if address is empty or contains any parts.
Return: True if there are no parts left in the address, false otherwise.
function extend
bool extend(
const UUID & uuid
)
Extend the address with a new UUID that must be passed to get to the next UUID in the address.
Parameters:
- uuid The new UUID to add to the address.
Return: False in case an omni UUID is passed to a non-empty ControlDataAddress
function extend
bool extend(
const ControlDataAddress & address
)
Extend the address with all UUIDs in another ControlDataAddress. The UUIDs will be added in the same order as in the other ControlDataAddress to the beginning of this ControlDataAddress (i.e. the UUIDs in the other ControlDataAddress must be passed before the UUIDs in this ControlDataAddress to reach the final destination)
Parameters:
- address The ControlDataAddress with UUIDs to add to this address.
Return: False in case @address contains an omni UUID
function hasWildcard
bool hasWildcard() const
Return: True if the address ends with a wildcard UUID (the special omni UUID), false otherwise.
function currentUuidIsWildcard
bool currentUuidIsWildcard() const
Return: True if the first UUID in the address is a wildcard UUID (the special omni UUID), false otherwise.
function currentUuidMatch
bool currentUuidMatch(
const UUID & uuid
) const
Check if the uuid match the first UUID of the address.
Parameters:
- uuid The UUID to match against
Return: True if the UUID is the same as the first UUID in the address, or in case the first UUID of the address is a wildcard UUID, false otherwise.
function fullAddressMatch
bool fullAddressMatch(
const ControlDataAddress & other
) const
Check if another address matches this address. This check might pass in two ways:
- Both addresses are identical
- At least one of the addresses includes a wildcard, and the other address is identical up to that wildcard otherThe address to match against.
True if the addresses match either because they are equal, or in case they are equal up to a wildcard in either address, false otherwise.
function getCurrentUuid
std::optional< UUID > getCurrentUuid() const
Return: The first UUID of the address, or an empty optional in case there are no more UUIDs in the address.
function moveToAndGetNextUuid
std::optional< UUID > moveToAndGetNextUuid()
Move to the next UUID in the address, by removing the current one, and return the next UUID of the address. In case there was at least one UUID in the address, the size of the address will be decreased by one.
Return: The next UUID of the address, or an empty optional in case there are no more UUIDs in the address.
function pack
std::vector< uint8_t > pack() const
Pack a ControlDataAddress into a byte vector.
Return: A vector with the packed message address.
function toString
std::string toString() const
Return: A string representation of the ControlDataAddress with ‘:’ separated UUIDs.
function operator==
bool operator==(
const ControlDataAddress & other
) const
Compare this ControlDataAddress for equality to another ControlDataAddress.
Parameters:
- other The other ControlDataAddress to compare this ControlDataAddress to
Return: True if the ControlDataAddresses are identical, false otherwise
function operator!=
bool operator!=(
const ControlDataAddress & other
) const
Compare this ControlDataAddress for non-equality to another ControlDataAddress.
Parameters:
- other The other ControlDataAddress to compare this ControlDataAddress to
Return: False if the ControlDataAddresses are identical, true otherwise
function unpack
static std::optional< ControlDataAddress > unpack(
const std::vector< uint8_t >::const_iterator & packedBegin,
const std::vector< uint8_t >::const_iterator & packedEnd
)
Unpack a packed ControlDataAddress, the size of packedEnd - packedBegin must be a multiple of UUID::kUUIDSize to be able to unpack anything.
Parameters:
- packedBegin Iterator to the start of the vector to unpack.
- packedEnd Iterator to the end of the vector to unpack.
Return: A ControlDataAddress if unpack was successful, std::nullopt if it failed.
function unpack
static std::optional< ControlDataAddress > unpack(
const uint8_t * packedBegin,
const uint8_t * packedEnd
)
Unpack a packed ControlDataAddress, the size of packedEnd - packedBegin must be a multiple of UUID::kUUIDSize to be able to unpack anything.
Parameters:
- packedBegin Pointer to the first byte of the address to unpack
- packedEnd Pointer to the last byte of the address to unpack
Return: A ControlDataAddress if unpack was successful, std::nullopt if it failed.
Friends
friend operator«
friend std::ostream & operator<<(
std::ostream & stream,
const ControlDataAddress & address
);
Print this ControlDataAddress to an output stream, UUIDs separated with ‘:’.
Parameters:
- stream The stream to print to
- address The address to print
Return: Reference to the output stream