From 7ed9c43e9556219a76120db44365788f3266f4d2 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Thu, 6 Feb 2014 15:50:14 +0400 Subject: [PATCH] DataTypeDescriptor, DataTypeHash --- .../include/uavcan/internal/data_type.hpp | 67 +++++++++++++++++++ .../uavcan/internal/transport/transfer.hpp | 6 -- .../transport/transfer_id_registry.hpp | 1 + 3 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 libuavcan/include/uavcan/internal/data_type.hpp diff --git a/libuavcan/include/uavcan/internal/data_type.hpp b/libuavcan/include/uavcan/internal/data_type.hpp new file mode 100644 index 0000000000..c9a2afaca2 --- /dev/null +++ b/libuavcan/include/uavcan/internal/data_type.hpp @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2014 Pavel Kirienko + */ + +#pragma once + +#include + +namespace uavcan +{ + +enum DataTypeKind +{ + DATA_TYPE_KIND_SERVICE, + DATA_TYPE_KIND_MESSAGE, + NUM_DATA_TYPE_KINDS +}; + + +struct DataTypeHash +{ + enum { BYTES = 16 }; + uint8_t value[BYTES]; + + DataTypeHash() + { + std::fill(value, value + BYTES, 0); + } + + DataTypeHash(const uint8_t source[BYTES]) + { + std::copy(source, source + BYTES, value); + } + + bool operator!=(const DataTypeHash& rhs) const { return !operator==(rhs); } + bool operator==(const DataTypeHash& rhs) const + { + return std::equal(value, value + BYTES, rhs.value); + } +}; + + +struct DataTypeDescriptor +{ + DataTypeKind kind; + uint16_t id; + DataTypeHash hash; + + DataTypeDescriptor() + : kind(DataTypeKind(0)) + , id(0) + { } + + DataTypeDescriptor(DataTypeKind kind, uint16_t id, const DataTypeHash& hash) + : kind(kind) + , id(id) + , hash(hash) + { } + + bool operator!=(const DataTypeDescriptor& rhs) const { return !operator==(rhs); } + bool operator==(const DataTypeDescriptor& rhs) const + { + return (kind == rhs.kind) && (id == rhs.id) && (hash == rhs.hash); + } +}; + +} diff --git a/libuavcan/include/uavcan/internal/transport/transfer.hpp b/libuavcan/include/uavcan/internal/transport/transfer.hpp index 39712ffac8..e78353c296 100644 --- a/libuavcan/include/uavcan/internal/transport/transfer.hpp +++ b/libuavcan/include/uavcan/internal/transport/transfer.hpp @@ -27,12 +27,6 @@ enum TransferType NUM_TRANSFER_TYPES = 4 }; -enum DataTypeKind -{ - DATA_TYPE_KIND_SERVICE, - DATA_TYPE_KIND_MESSAGE, - NUM_DATA_TYPE_KINDS -}; class TransferID { diff --git a/libuavcan/include/uavcan/internal/transport/transfer_id_registry.hpp b/libuavcan/include/uavcan/internal/transport/transfer_id_registry.hpp index ccf59b9651..fa611ac8c4 100644 --- a/libuavcan/include/uavcan/internal/transport/transfer_id_registry.hpp +++ b/libuavcan/include/uavcan/internal/transport/transfer_id_registry.hpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include