diff --git a/CMakeLists.txt b/CMakeLists.txt index cc47701..12db5f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,7 +47,22 @@ add_library(SimCore STATIC include/SimCore/Messages/Protos/Control.pb.cc include/SimCore/Messages/Protos/GeocentricPosition.pb.cc - include/SimCore/Messages/Protos/Identifier.pb.cc + include/SimCore/Messages/Protos/Identifier.pb.cc + + + include/SimCore/Messages/SystemStateUpdate.hpp + src/SimCore/Messages/SystemStateUpdate.cpp + include/SimCore/Messages/Protos/SystemStateUpdate.pb.cc + + include/SimCore/Messages/TracklistUpdate.hpp + src/SimCore/Messages/TracklistUpdate.cpp + include/SimCore/Messages/Protos/TracklistUpdate.pb.cc + + include/SimCore/SensorData.hpp + src/SimCore/SensorData.cpp + + include/SimCore/EffectorData.hpp + src/SimCore/EffectorData.cpp include/SimCore/data.hpp @@ -146,4 +161,14 @@ IF (${TEST_SIMCORE_LIBRARY}) target_link_libraries(test_TrackClass Catch2::Catch2 SimCore loguru) catch_discover_tests(test_TrackClass) + + add_executable(test_SystemStateUpdate tests/test_SystemStateUpdate.cpp) + target_link_libraries(test_SystemStateUpdate Catch2::Catch2 SimCore loguru) + catch_discover_tests(test_SystemStateUpdate) + + add_executable(test_TracklistUpdate tests/test_TracklistUpdate.cpp) + target_link_libraries(test_TracklistUpdate Catch2::Catch2 SimCore loguru) + catch_discover_tests(test_TracklistUpdate) + + ENDIF() diff --git a/include/SimCore/EffectorData.hpp b/include/SimCore/EffectorData.hpp new file mode 100644 index 0000000..9e097a5 --- /dev/null +++ b/include/SimCore/EffectorData.hpp @@ -0,0 +1,20 @@ +#pragma once + + +#include "SimCore/Identifier.hpp" +#include "SimCore/data.hpp" +namespace SimCore +{ + + class EffectorData + { + public: + EffectorData(const SimCore::Identifier effctorID, const std::string name); + + + const SimCore::Identifier EffectorID; + Data Name; + + }; + +} \ No newline at end of file diff --git a/include/SimCore/Messages/Protos/SystemStateUpdate.pb.cc b/include/SimCore/Messages/Protos/SystemStateUpdate.pb.cc new file mode 100644 index 0000000..7cfebb2 --- /dev/null +++ b/include/SimCore/Messages/Protos/SystemStateUpdate.pb.cc @@ -0,0 +1,1225 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: SystemStateUpdate.proto + +#include "SystemStateUpdate.pb.h" + +#include +#include "google/protobuf/io/coded_stream.h" +#include "google/protobuf/extension_set.h" +#include "google/protobuf/wire_format_lite.h" +#include "google/protobuf/descriptor.h" +#include "google/protobuf/generated_message_reflection.h" +#include "google/protobuf/reflection_ops.h" +#include "google/protobuf/wire_format.h" +#include "google/protobuf/generated_message_tctable_impl.h" +// @@protoc_insertion_point(includes) + +// Must be included last. +#include "google/protobuf/port_def.inc" +PROTOBUF_PRAGMA_INIT_SEG +namespace _pb = ::google::protobuf; +namespace _pbi = ::google::protobuf::internal; +namespace _fl = ::google::protobuf::internal::field_layout; +namespace messages { +namespace data { + +inline constexpr Sensor::Impl_::Impl_( + ::_pbi::ConstantInitialized) noexcept + : _cached_size_{0}, + name_( + &::google::protobuf::internal::fixed_address_empty_string, + ::_pbi::ConstantInitialized()), + id_{nullptr}, + range_{0}, + kind_{0u}, + status_{0u} {} + +template +PROTOBUF_CONSTEXPR Sensor::Sensor(::_pbi::ConstantInitialized) + : _impl_(::_pbi::ConstantInitialized()) {} +struct SensorDefaultTypeInternal { + PROTOBUF_CONSTEXPR SensorDefaultTypeInternal() : _instance(::_pbi::ConstantInitialized{}) {} + ~SensorDefaultTypeInternal() {} + union { + Sensor _instance; + }; +}; + +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT + PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 SensorDefaultTypeInternal _Sensor_default_instance_; + +inline constexpr Effector::Impl_::Impl_( + ::_pbi::ConstantInitialized) noexcept + : _cached_size_{0}, + name_( + &::google::protobuf::internal::fixed_address_empty_string, + ::_pbi::ConstantInitialized()), + id_{nullptr}, + range_{0}, + ammunition_{0}, + maxammunition_{0}, + status_{0u} {} + +template +PROTOBUF_CONSTEXPR Effector::Effector(::_pbi::ConstantInitialized) + : _impl_(::_pbi::ConstantInitialized()) {} +struct EffectorDefaultTypeInternal { + PROTOBUF_CONSTEXPR EffectorDefaultTypeInternal() : _instance(::_pbi::ConstantInitialized{}) {} + ~EffectorDefaultTypeInternal() {} + union { + Effector _instance; + }; +}; + +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT + PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 EffectorDefaultTypeInternal _Effector_default_instance_; + +inline constexpr SystemStateUpdate::Impl_::Impl_( + ::_pbi::ConstantInitialized) noexcept + : _cached_size_{0}, + sensors_{}, + effectors_{}, + ownid_{nullptr} {} + +template +PROTOBUF_CONSTEXPR SystemStateUpdate::SystemStateUpdate(::_pbi::ConstantInitialized) + : _impl_(::_pbi::ConstantInitialized()) {} +struct SystemStateUpdateDefaultTypeInternal { + PROTOBUF_CONSTEXPR SystemStateUpdateDefaultTypeInternal() : _instance(::_pbi::ConstantInitialized{}) {} + ~SystemStateUpdateDefaultTypeInternal() {} + union { + SystemStateUpdate _instance; + }; +}; + +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT + PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 SystemStateUpdateDefaultTypeInternal _SystemStateUpdate_default_instance_; +} // namespace data +} // namespace messages +static ::_pb::Metadata file_level_metadata_SystemStateUpdate_2eproto[3]; +static constexpr const ::_pb::EnumDescriptor** + file_level_enum_descriptors_SystemStateUpdate_2eproto = nullptr; +static constexpr const ::_pb::ServiceDescriptor** + file_level_service_descriptors_SystemStateUpdate_2eproto = nullptr; +const ::uint32_t + TableStruct_SystemStateUpdate_2eproto::offsets[] ABSL_ATTRIBUTE_SECTION_VARIABLE( + protodesc_cold) = { + PROTOBUF_FIELD_OFFSET(::messages::data::SystemStateUpdate, _impl_._has_bits_), + PROTOBUF_FIELD_OFFSET(::messages::data::SystemStateUpdate, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + ~0u, // no _split_ + ~0u, // no sizeof(Split) + PROTOBUF_FIELD_OFFSET(::messages::data::SystemStateUpdate, _impl_.ownid_), + PROTOBUF_FIELD_OFFSET(::messages::data::SystemStateUpdate, _impl_.sensors_), + PROTOBUF_FIELD_OFFSET(::messages::data::SystemStateUpdate, _impl_.effectors_), + 0, + ~0u, + ~0u, + PROTOBUF_FIELD_OFFSET(::messages::data::Sensor, _impl_._has_bits_), + PROTOBUF_FIELD_OFFSET(::messages::data::Sensor, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + ~0u, // no _split_ + ~0u, // no sizeof(Split) + PROTOBUF_FIELD_OFFSET(::messages::data::Sensor, _impl_.id_), + PROTOBUF_FIELD_OFFSET(::messages::data::Sensor, _impl_.name_), + PROTOBUF_FIELD_OFFSET(::messages::data::Sensor, _impl_.range_), + PROTOBUF_FIELD_OFFSET(::messages::data::Sensor, _impl_.kind_), + PROTOBUF_FIELD_OFFSET(::messages::data::Sensor, _impl_.status_), + 0, + ~0u, + ~0u, + ~0u, + ~0u, + PROTOBUF_FIELD_OFFSET(::messages::data::Effector, _impl_._has_bits_), + PROTOBUF_FIELD_OFFSET(::messages::data::Effector, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + ~0u, // no _split_ + ~0u, // no sizeof(Split) + PROTOBUF_FIELD_OFFSET(::messages::data::Effector, _impl_.id_), + PROTOBUF_FIELD_OFFSET(::messages::data::Effector, _impl_.name_), + PROTOBUF_FIELD_OFFSET(::messages::data::Effector, _impl_.range_), + PROTOBUF_FIELD_OFFSET(::messages::data::Effector, _impl_.ammunition_), + PROTOBUF_FIELD_OFFSET(::messages::data::Effector, _impl_.maxammunition_), + PROTOBUF_FIELD_OFFSET(::messages::data::Effector, _impl_.status_), + 0, + ~0u, + ~0u, + ~0u, + ~0u, + ~0u, +}; + +static const ::_pbi::MigrationSchema + schemas[] ABSL_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { + {0, 11, -1, sizeof(::messages::data::SystemStateUpdate)}, + {14, 27, -1, sizeof(::messages::data::Sensor)}, + {32, 46, -1, sizeof(::messages::data::Effector)}, +}; + +static const ::_pb::Message* const file_default_instances[] = { + &::messages::data::_SystemStateUpdate_default_instance_._instance, + &::messages::data::_Sensor_default_instance_._instance, + &::messages::data::_Effector_default_instance_._instance, +}; +const char descriptor_table_protodef_SystemStateUpdate_2eproto[] ABSL_ATTRIBUTE_SECTION_VARIABLE( + protodesc_cold) = { + "\n\027SystemStateUpdate.proto\022\rmessages.data" + "\032\020Identifier.proto\"\222\001\n\021SystemStateUpdate" + "\022)\n\005OwnID\030\001 \001(\0132\032.messages.track.Identif" + "ier\022&\n\007sensors\030\002 \003(\0132\025.messages.data.Sen" + "sor\022*\n\teffectors\030\003 \003(\0132\027.messages.data.E" + "ffector\"k\n\006Sensor\022&\n\002ID\030\001 \001(\0132\032.messages" + ".track.Identifier\022\014\n\004name\030\002 \001(\t\022\r\n\005range" + "\030\003 \001(\001\022\014\n\004kind\030\004 \001(\r\022\016\n\006Status\030\005 \001(\r\"\212\001\n" + "\010Effector\022&\n\002ID\030\001 \001(\0132\032.messages.track.I" + "dentifier\022\014\n\004name\030\002 \001(\t\022\r\n\005range\030\003 \001(\001\022\022" + "\n\nammunition\030\004 \001(\005\022\025\n\rmaxammunition\030\006 \001(" + "\005\022\016\n\006Status\030\007 \001(\rb\006proto3" +}; +static const ::_pbi::DescriptorTable* const descriptor_table_SystemStateUpdate_2eproto_deps[1] = + { + &::descriptor_table_Identifier_2eproto, +}; +static ::absl::once_flag descriptor_table_SystemStateUpdate_2eproto_once; +const ::_pbi::DescriptorTable descriptor_table_SystemStateUpdate_2eproto = { + false, + false, + 465, + descriptor_table_protodef_SystemStateUpdate_2eproto, + "SystemStateUpdate.proto", + &descriptor_table_SystemStateUpdate_2eproto_once, + descriptor_table_SystemStateUpdate_2eproto_deps, + 1, + 3, + schemas, + file_default_instances, + TableStruct_SystemStateUpdate_2eproto::offsets, + file_level_metadata_SystemStateUpdate_2eproto, + file_level_enum_descriptors_SystemStateUpdate_2eproto, + file_level_service_descriptors_SystemStateUpdate_2eproto, +}; + +// This function exists to be marked as weak. +// It can significantly speed up compilation by breaking up LLVM's SCC +// in the .pb.cc translation units. Large translation units see a +// reduction of more than 35% of walltime for optimized builds. Without +// the weak attribute all the messages in the file, including all the +// vtables and everything they use become part of the same SCC through +// a cycle like: +// GetMetadata -> descriptor table -> default instances -> +// vtables -> GetMetadata +// By adding a weak function here we break the connection from the +// individual vtables back into the descriptor table. +PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_SystemStateUpdate_2eproto_getter() { + return &descriptor_table_SystemStateUpdate_2eproto; +} +// Force running AddDescriptors() at dynamic initialization time. +PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 +static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_SystemStateUpdate_2eproto(&descriptor_table_SystemStateUpdate_2eproto); +namespace messages { +namespace data { +// =================================================================== + +class SystemStateUpdate::_Internal { + public: + using HasBits = decltype(std::declval()._impl_._has_bits_); + static constexpr ::int32_t kHasBitsOffset = + 8 * PROTOBUF_FIELD_OFFSET(SystemStateUpdate, _impl_._has_bits_); + static const ::messages::track::Identifier& ownid(const SystemStateUpdate* msg); + static void set_has_ownid(HasBits* has_bits) { + (*has_bits)[0] |= 1u; + } +}; + +const ::messages::track::Identifier& SystemStateUpdate::_Internal::ownid(const SystemStateUpdate* msg) { + return *msg->_impl_.ownid_; +} +void SystemStateUpdate::clear_ownid() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (_impl_.ownid_ != nullptr) _impl_.ownid_->Clear(); + _impl_._has_bits_[0] &= ~0x00000001u; +} +SystemStateUpdate::SystemStateUpdate(::google::protobuf::Arena* arena) + : ::google::protobuf::Message(arena) { + SharedCtor(arena); + // @@protoc_insertion_point(arena_constructor:messages.data.SystemStateUpdate) +} +inline PROTOBUF_NDEBUG_INLINE SystemStateUpdate::Impl_::Impl_( + ::google::protobuf::internal::InternalVisibility visibility, ::google::protobuf::Arena* arena, + const Impl_& from) + : _has_bits_{from._has_bits_}, + _cached_size_{0}, + sensors_{visibility, arena, from.sensors_}, + effectors_{visibility, arena, from.effectors_} {} + +SystemStateUpdate::SystemStateUpdate( + ::google::protobuf::Arena* arena, + const SystemStateUpdate& from) + : ::google::protobuf::Message(arena) { + SystemStateUpdate* const _this = this; + (void)_this; + _internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>( + from._internal_metadata_); + new (&_impl_) Impl_(internal_visibility(), arena, from._impl_); + ::uint32_t cached_has_bits = _impl_._has_bits_[0]; + _impl_.ownid_ = (cached_has_bits & 0x00000001u) + ? CreateMaybeMessage<::messages::track::Identifier>(arena, *from._impl_.ownid_) + : nullptr; + + // @@protoc_insertion_point(copy_constructor:messages.data.SystemStateUpdate) +} +inline PROTOBUF_NDEBUG_INLINE SystemStateUpdate::Impl_::Impl_( + ::google::protobuf::internal::InternalVisibility visibility, + ::google::protobuf::Arena* arena) + : _cached_size_{0}, + sensors_{visibility, arena}, + effectors_{visibility, arena} {} + +inline void SystemStateUpdate::SharedCtor(::_pb::Arena* arena) { + new (&_impl_) Impl_(internal_visibility(), arena); + _impl_.ownid_ = {}; +} +SystemStateUpdate::~SystemStateUpdate() { + // @@protoc_insertion_point(destructor:messages.data.SystemStateUpdate) + _internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>(); + SharedDtor(); +} +inline void SystemStateUpdate::SharedDtor() { + ABSL_DCHECK(GetArena() == nullptr); + delete _impl_.ownid_; + _impl_.~Impl_(); +} + +const ::google::protobuf::MessageLite::ClassData* +SystemStateUpdate::GetClassData() const { + PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData + _data_ = { + SystemStateUpdate::MergeImpl, + nullptr, // OnDemandRegisterArenaDtor + &::google::protobuf::Message::kDescriptorMethods, + PROTOBUF_FIELD_OFFSET(SystemStateUpdate, _impl_._cached_size_), + }; + return &_data_; +} +PROTOBUF_NOINLINE void SystemStateUpdate::Clear() { +// @@protoc_insertion_point(message_clear_start:messages.data.SystemStateUpdate) + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ::uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.sensors_.Clear(); + _impl_.effectors_.Clear(); + cached_has_bits = _impl_._has_bits_[0]; + if (cached_has_bits & 0x00000001u) { + ABSL_DCHECK(_impl_.ownid_ != nullptr); + _impl_.ownid_->Clear(); + } + _impl_._has_bits_.Clear(); + _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>(); +} + +const char* SystemStateUpdate::_InternalParse( + const char* ptr, ::_pbi::ParseContext* ctx) { + ptr = ::_pbi::TcParser::ParseLoop(this, ptr, ctx, &_table_.header); + return ptr; +} + + +PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 +const ::_pbi::TcParseTable<2, 3, 3, 0, 2> SystemStateUpdate::_table_ = { + { + PROTOBUF_FIELD_OFFSET(SystemStateUpdate, _impl_._has_bits_), + 0, // no _extensions_ + 3, 24, // max_field_number, fast_idx_mask + offsetof(decltype(_table_), field_lookup_table), + 4294967288, // skipmap + offsetof(decltype(_table_), field_entries), + 3, // num_field_entries + 3, // num_aux_entries + offsetof(decltype(_table_), aux_entries), + &_SystemStateUpdate_default_instance_._instance, + ::_pbi::TcParser::GenericFallback, // fallback + }, {{ + {::_pbi::TcParser::MiniParse, {}}, + // .messages.track.Identifier OwnID = 1; + {::_pbi::TcParser::FastMtS1, + {10, 0, 0, PROTOBUF_FIELD_OFFSET(SystemStateUpdate, _impl_.ownid_)}}, + // repeated .messages.data.Sensor sensors = 2; + {::_pbi::TcParser::FastMtR1, + {18, 63, 1, PROTOBUF_FIELD_OFFSET(SystemStateUpdate, _impl_.sensors_)}}, + // repeated .messages.data.Effector effectors = 3; + {::_pbi::TcParser::FastMtR1, + {26, 63, 2, PROTOBUF_FIELD_OFFSET(SystemStateUpdate, _impl_.effectors_)}}, + }}, {{ + 65535, 65535 + }}, {{ + // .messages.track.Identifier OwnID = 1; + {PROTOBUF_FIELD_OFFSET(SystemStateUpdate, _impl_.ownid_), _Internal::kHasBitsOffset + 0, 0, + (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)}, + // repeated .messages.data.Sensor sensors = 2; + {PROTOBUF_FIELD_OFFSET(SystemStateUpdate, _impl_.sensors_), -1, 1, + (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)}, + // repeated .messages.data.Effector effectors = 3; + {PROTOBUF_FIELD_OFFSET(SystemStateUpdate, _impl_.effectors_), -1, 2, + (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)}, + }}, {{ + {::_pbi::TcParser::GetTable<::messages::track::Identifier>()}, + {::_pbi::TcParser::GetTable<::messages::data::Sensor>()}, + {::_pbi::TcParser::GetTable<::messages::data::Effector>()}, + }}, {{ + }}, +}; + +::uint8_t* SystemStateUpdate::_InternalSerialize( + ::uint8_t* target, + ::google::protobuf::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:messages.data.SystemStateUpdate) + ::uint32_t cached_has_bits = 0; + (void)cached_has_bits; + + cached_has_bits = _impl_._has_bits_[0]; + // .messages.track.Identifier OwnID = 1; + if (cached_has_bits & 0x00000001u) { + target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage( + 1, _Internal::ownid(this), + _Internal::ownid(this).GetCachedSize(), target, stream); + } + + // repeated .messages.data.Sensor sensors = 2; + for (unsigned i = 0, + n = static_cast(this->_internal_sensors_size()); i < n; i++) { + const auto& repfield = this->_internal_sensors().Get(i); + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessage(2, repfield, repfield.GetCachedSize(), target, stream); + } + + // repeated .messages.data.Effector effectors = 3; + for (unsigned i = 0, + n = static_cast(this->_internal_effectors_size()); i < n; i++) { + const auto& repfield = this->_internal_effectors().Get(i); + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessage(3, repfield, repfield.GetCachedSize(), target, stream); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = + ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:messages.data.SystemStateUpdate) + return target; +} + +::size_t SystemStateUpdate::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:messages.data.SystemStateUpdate) + ::size_t total_size = 0; + + ::uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // repeated .messages.data.Sensor sensors = 2; + total_size += 1UL * this->_internal_sensors_size(); + for (const auto& msg : this->_internal_sensors()) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSize(msg); + } + // repeated .messages.data.Effector effectors = 3; + total_size += 1UL * this->_internal_effectors_size(); + for (const auto& msg : this->_internal_effectors()) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSize(msg); + } + // .messages.track.Identifier OwnID = 1; + cached_has_bits = _impl_._has_bits_[0]; + if (cached_has_bits & 0x00000001u) { + total_size += + 1 + ::google::protobuf::internal::WireFormatLite::MessageSize(*_impl_.ownid_); + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + + +void SystemStateUpdate::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:messages.data.SystemStateUpdate) + ABSL_DCHECK_NE(&from, _this); + ::uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + _this->_internal_mutable_sensors()->MergeFrom( + from._internal_sensors()); + _this->_internal_mutable_effectors()->MergeFrom( + from._internal_effectors()); + if ((from._impl_._has_bits_[0] & 0x00000001u) != 0) { + _this->_internal_mutable_ownid()->::messages::track::Identifier::MergeFrom( + from._internal_ownid()); + } + _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_); +} + +void SystemStateUpdate::CopyFrom(const SystemStateUpdate& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:messages.data.SystemStateUpdate) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +PROTOBUF_NOINLINE bool SystemStateUpdate::IsInitialized() const { + return true; +} + +void SystemStateUpdate::InternalSwap(SystemStateUpdate* PROTOBUF_RESTRICT other) { + using std::swap; + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]); + _impl_.sensors_.InternalSwap(&other->_impl_.sensors_); + _impl_.effectors_.InternalSwap(&other->_impl_.effectors_); + swap(_impl_.ownid_, other->_impl_.ownid_); +} + +::google::protobuf::Metadata SystemStateUpdate::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_SystemStateUpdate_2eproto_getter, &descriptor_table_SystemStateUpdate_2eproto_once, + file_level_metadata_SystemStateUpdate_2eproto[0]); +} +// =================================================================== + +class Sensor::_Internal { + public: + using HasBits = decltype(std::declval()._impl_._has_bits_); + static constexpr ::int32_t kHasBitsOffset = + 8 * PROTOBUF_FIELD_OFFSET(Sensor, _impl_._has_bits_); + static const ::messages::track::Identifier& id(const Sensor* msg); + static void set_has_id(HasBits* has_bits) { + (*has_bits)[0] |= 1u; + } +}; + +const ::messages::track::Identifier& Sensor::_Internal::id(const Sensor* msg) { + return *msg->_impl_.id_; +} +void Sensor::clear_id() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (_impl_.id_ != nullptr) _impl_.id_->Clear(); + _impl_._has_bits_[0] &= ~0x00000001u; +} +Sensor::Sensor(::google::protobuf::Arena* arena) + : ::google::protobuf::Message(arena) { + SharedCtor(arena); + // @@protoc_insertion_point(arena_constructor:messages.data.Sensor) +} +inline PROTOBUF_NDEBUG_INLINE Sensor::Impl_::Impl_( + ::google::protobuf::internal::InternalVisibility visibility, ::google::protobuf::Arena* arena, + const Impl_& from) + : _has_bits_{from._has_bits_}, + _cached_size_{0}, + name_(arena, from.name_) {} + +Sensor::Sensor( + ::google::protobuf::Arena* arena, + const Sensor& from) + : ::google::protobuf::Message(arena) { + Sensor* const _this = this; + (void)_this; + _internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>( + from._internal_metadata_); + new (&_impl_) Impl_(internal_visibility(), arena, from._impl_); + ::uint32_t cached_has_bits = _impl_._has_bits_[0]; + _impl_.id_ = (cached_has_bits & 0x00000001u) + ? CreateMaybeMessage<::messages::track::Identifier>(arena, *from._impl_.id_) + : nullptr; + ::memcpy(reinterpret_cast(&_impl_) + + offsetof(Impl_, range_), + reinterpret_cast(&from._impl_) + + offsetof(Impl_, range_), + offsetof(Impl_, status_) - + offsetof(Impl_, range_) + + sizeof(Impl_::status_)); + + // @@protoc_insertion_point(copy_constructor:messages.data.Sensor) +} +inline PROTOBUF_NDEBUG_INLINE Sensor::Impl_::Impl_( + ::google::protobuf::internal::InternalVisibility visibility, + ::google::protobuf::Arena* arena) + : _cached_size_{0}, + name_(arena) {} + +inline void Sensor::SharedCtor(::_pb::Arena* arena) { + new (&_impl_) Impl_(internal_visibility(), arena); + ::memset(reinterpret_cast(&_impl_) + + offsetof(Impl_, id_), + 0, + offsetof(Impl_, status_) - + offsetof(Impl_, id_) + + sizeof(Impl_::status_)); +} +Sensor::~Sensor() { + // @@protoc_insertion_point(destructor:messages.data.Sensor) + _internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>(); + SharedDtor(); +} +inline void Sensor::SharedDtor() { + ABSL_DCHECK(GetArena() == nullptr); + _impl_.name_.Destroy(); + delete _impl_.id_; + _impl_.~Impl_(); +} + +const ::google::protobuf::MessageLite::ClassData* +Sensor::GetClassData() const { + PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData + _data_ = { + Sensor::MergeImpl, + nullptr, // OnDemandRegisterArenaDtor + &::google::protobuf::Message::kDescriptorMethods, + PROTOBUF_FIELD_OFFSET(Sensor, _impl_._cached_size_), + }; + return &_data_; +} +PROTOBUF_NOINLINE void Sensor::Clear() { +// @@protoc_insertion_point(message_clear_start:messages.data.Sensor) + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ::uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.name_.ClearToEmpty(); + cached_has_bits = _impl_._has_bits_[0]; + if (cached_has_bits & 0x00000001u) { + ABSL_DCHECK(_impl_.id_ != nullptr); + _impl_.id_->Clear(); + } + ::memset(&_impl_.range_, 0, static_cast<::size_t>( + reinterpret_cast(&_impl_.status_) - + reinterpret_cast(&_impl_.range_)) + sizeof(_impl_.status_)); + _impl_._has_bits_.Clear(); + _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>(); +} + +const char* Sensor::_InternalParse( + const char* ptr, ::_pbi::ParseContext* ctx) { + ptr = ::_pbi::TcParser::ParseLoop(this, ptr, ctx, &_table_.header); + return ptr; +} + + +PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 +const ::_pbi::TcParseTable<3, 5, 1, 33, 2> Sensor::_table_ = { + { + PROTOBUF_FIELD_OFFSET(Sensor, _impl_._has_bits_), + 0, // no _extensions_ + 5, 56, // max_field_number, fast_idx_mask + offsetof(decltype(_table_), field_lookup_table), + 4294967264, // skipmap + offsetof(decltype(_table_), field_entries), + 5, // num_field_entries + 1, // num_aux_entries + offsetof(decltype(_table_), aux_entries), + &_Sensor_default_instance_._instance, + ::_pbi::TcParser::GenericFallback, // fallback + }, {{ + {::_pbi::TcParser::MiniParse, {}}, + // .messages.track.Identifier ID = 1; + {::_pbi::TcParser::FastMtS1, + {10, 0, 0, PROTOBUF_FIELD_OFFSET(Sensor, _impl_.id_)}}, + // string name = 2; + {::_pbi::TcParser::FastUS1, + {18, 63, 0, PROTOBUF_FIELD_OFFSET(Sensor, _impl_.name_)}}, + // double range = 3; + {::_pbi::TcParser::FastF64S1, + {25, 63, 0, PROTOBUF_FIELD_OFFSET(Sensor, _impl_.range_)}}, + // uint32 kind = 4; + {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(Sensor, _impl_.kind_), 63>(), + {32, 63, 0, PROTOBUF_FIELD_OFFSET(Sensor, _impl_.kind_)}}, + // uint32 Status = 5; + {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(Sensor, _impl_.status_), 63>(), + {40, 63, 0, PROTOBUF_FIELD_OFFSET(Sensor, _impl_.status_)}}, + {::_pbi::TcParser::MiniParse, {}}, + {::_pbi::TcParser::MiniParse, {}}, + }}, {{ + 65535, 65535 + }}, {{ + // .messages.track.Identifier ID = 1; + {PROTOBUF_FIELD_OFFSET(Sensor, _impl_.id_), _Internal::kHasBitsOffset + 0, 0, + (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)}, + // string name = 2; + {PROTOBUF_FIELD_OFFSET(Sensor, _impl_.name_), -1, 0, + (0 | ::_fl::kFcSingular | ::_fl::kUtf8String | ::_fl::kRepAString)}, + // double range = 3; + {PROTOBUF_FIELD_OFFSET(Sensor, _impl_.range_), -1, 0, + (0 | ::_fl::kFcSingular | ::_fl::kDouble)}, + // uint32 kind = 4; + {PROTOBUF_FIELD_OFFSET(Sensor, _impl_.kind_), -1, 0, + (0 | ::_fl::kFcSingular | ::_fl::kUInt32)}, + // uint32 Status = 5; + {PROTOBUF_FIELD_OFFSET(Sensor, _impl_.status_), -1, 0, + (0 | ::_fl::kFcSingular | ::_fl::kUInt32)}, + }}, {{ + {::_pbi::TcParser::GetTable<::messages::track::Identifier>()}, + }}, {{ + "\24\0\4\0\0\0\0\0" + "messages.data.Sensor" + "name" + }}, +}; + +::uint8_t* Sensor::_InternalSerialize( + ::uint8_t* target, + ::google::protobuf::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:messages.data.Sensor) + ::uint32_t cached_has_bits = 0; + (void)cached_has_bits; + + cached_has_bits = _impl_._has_bits_[0]; + // .messages.track.Identifier ID = 1; + if (cached_has_bits & 0x00000001u) { + target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage( + 1, _Internal::id(this), + _Internal::id(this).GetCachedSize(), target, stream); + } + + // string name = 2; + if (!this->_internal_name().empty()) { + const std::string& _s = this->_internal_name(); + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + _s.data(), static_cast(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "messages.data.Sensor.name"); + target = stream->WriteStringMaybeAliased(2, _s, target); + } + + // double range = 3; + static_assert(sizeof(::uint64_t) == sizeof(double), + "Code assumes ::uint64_t and double are the same size."); + double tmp_range = this->_internal_range(); + ::uint64_t raw_range; + memcpy(&raw_range, &tmp_range, sizeof(tmp_range)); + if (raw_range != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteDoubleToArray( + 3, this->_internal_range(), target); + } + + // uint32 kind = 4; + if (this->_internal_kind() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteUInt32ToArray( + 4, this->_internal_kind(), target); + } + + // uint32 Status = 5; + if (this->_internal_status() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteUInt32ToArray( + 5, this->_internal_status(), target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = + ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:messages.data.Sensor) + return target; +} + +::size_t Sensor::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:messages.data.Sensor) + ::size_t total_size = 0; + + ::uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // string name = 2; + if (!this->_internal_name().empty()) { + total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize( + this->_internal_name()); + } + + // .messages.track.Identifier ID = 1; + cached_has_bits = _impl_._has_bits_[0]; + if (cached_has_bits & 0x00000001u) { + total_size += + 1 + ::google::protobuf::internal::WireFormatLite::MessageSize(*_impl_.id_); + } + + // double range = 3; + static_assert(sizeof(::uint64_t) == sizeof(double), + "Code assumes ::uint64_t and double are the same size."); + double tmp_range = this->_internal_range(); + ::uint64_t raw_range; + memcpy(&raw_range, &tmp_range, sizeof(tmp_range)); + if (raw_range != 0) { + total_size += 9; + } + + // uint32 kind = 4; + if (this->_internal_kind() != 0) { + total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne( + this->_internal_kind()); + } + + // uint32 Status = 5; + if (this->_internal_status() != 0) { + total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne( + this->_internal_status()); + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + + +void Sensor::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:messages.data.Sensor) + ABSL_DCHECK_NE(&from, _this); + ::uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + if (!from._internal_name().empty()) { + _this->_internal_set_name(from._internal_name()); + } + if ((from._impl_._has_bits_[0] & 0x00000001u) != 0) { + _this->_internal_mutable_id()->::messages::track::Identifier::MergeFrom( + from._internal_id()); + } + static_assert(sizeof(::uint64_t) == sizeof(double), + "Code assumes ::uint64_t and double are the same size."); + double tmp_range = from._internal_range(); + ::uint64_t raw_range; + memcpy(&raw_range, &tmp_range, sizeof(tmp_range)); + if (raw_range != 0) { + _this->_internal_set_range(from._internal_range()); + } + if (from._internal_kind() != 0) { + _this->_internal_set_kind(from._internal_kind()); + } + if (from._internal_status() != 0) { + _this->_internal_set_status(from._internal_status()); + } + _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_); +} + +void Sensor::CopyFrom(const Sensor& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:messages.data.Sensor) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +PROTOBUF_NOINLINE bool Sensor::IsInitialized() const { + return true; +} + +void Sensor::InternalSwap(Sensor* PROTOBUF_RESTRICT other) { + using std::swap; + auto* arena = GetArena(); + ABSL_DCHECK_EQ(arena, other->GetArena()); + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]); + ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.name_, &other->_impl_.name_, arena); + ::google::protobuf::internal::memswap< + PROTOBUF_FIELD_OFFSET(Sensor, _impl_.status_) + + sizeof(Sensor::_impl_.status_) + - PROTOBUF_FIELD_OFFSET(Sensor, _impl_.id_)>( + reinterpret_cast(&_impl_.id_), + reinterpret_cast(&other->_impl_.id_)); +} + +::google::protobuf::Metadata Sensor::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_SystemStateUpdate_2eproto_getter, &descriptor_table_SystemStateUpdate_2eproto_once, + file_level_metadata_SystemStateUpdate_2eproto[1]); +} +// =================================================================== + +class Effector::_Internal { + public: + using HasBits = decltype(std::declval()._impl_._has_bits_); + static constexpr ::int32_t kHasBitsOffset = + 8 * PROTOBUF_FIELD_OFFSET(Effector, _impl_._has_bits_); + static const ::messages::track::Identifier& id(const Effector* msg); + static void set_has_id(HasBits* has_bits) { + (*has_bits)[0] |= 1u; + } +}; + +const ::messages::track::Identifier& Effector::_Internal::id(const Effector* msg) { + return *msg->_impl_.id_; +} +void Effector::clear_id() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (_impl_.id_ != nullptr) _impl_.id_->Clear(); + _impl_._has_bits_[0] &= ~0x00000001u; +} +Effector::Effector(::google::protobuf::Arena* arena) + : ::google::protobuf::Message(arena) { + SharedCtor(arena); + // @@protoc_insertion_point(arena_constructor:messages.data.Effector) +} +inline PROTOBUF_NDEBUG_INLINE Effector::Impl_::Impl_( + ::google::protobuf::internal::InternalVisibility visibility, ::google::protobuf::Arena* arena, + const Impl_& from) + : _has_bits_{from._has_bits_}, + _cached_size_{0}, + name_(arena, from.name_) {} + +Effector::Effector( + ::google::protobuf::Arena* arena, + const Effector& from) + : ::google::protobuf::Message(arena) { + Effector* const _this = this; + (void)_this; + _internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>( + from._internal_metadata_); + new (&_impl_) Impl_(internal_visibility(), arena, from._impl_); + ::uint32_t cached_has_bits = _impl_._has_bits_[0]; + _impl_.id_ = (cached_has_bits & 0x00000001u) + ? CreateMaybeMessage<::messages::track::Identifier>(arena, *from._impl_.id_) + : nullptr; + ::memcpy(reinterpret_cast(&_impl_) + + offsetof(Impl_, range_), + reinterpret_cast(&from._impl_) + + offsetof(Impl_, range_), + offsetof(Impl_, status_) - + offsetof(Impl_, range_) + + sizeof(Impl_::status_)); + + // @@protoc_insertion_point(copy_constructor:messages.data.Effector) +} +inline PROTOBUF_NDEBUG_INLINE Effector::Impl_::Impl_( + ::google::protobuf::internal::InternalVisibility visibility, + ::google::protobuf::Arena* arena) + : _cached_size_{0}, + name_(arena) {} + +inline void Effector::SharedCtor(::_pb::Arena* arena) { + new (&_impl_) Impl_(internal_visibility(), arena); + ::memset(reinterpret_cast(&_impl_) + + offsetof(Impl_, id_), + 0, + offsetof(Impl_, status_) - + offsetof(Impl_, id_) + + sizeof(Impl_::status_)); +} +Effector::~Effector() { + // @@protoc_insertion_point(destructor:messages.data.Effector) + _internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>(); + SharedDtor(); +} +inline void Effector::SharedDtor() { + ABSL_DCHECK(GetArena() == nullptr); + _impl_.name_.Destroy(); + delete _impl_.id_; + _impl_.~Impl_(); +} + +const ::google::protobuf::MessageLite::ClassData* +Effector::GetClassData() const { + PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData + _data_ = { + Effector::MergeImpl, + nullptr, // OnDemandRegisterArenaDtor + &::google::protobuf::Message::kDescriptorMethods, + PROTOBUF_FIELD_OFFSET(Effector, _impl_._cached_size_), + }; + return &_data_; +} +PROTOBUF_NOINLINE void Effector::Clear() { +// @@protoc_insertion_point(message_clear_start:messages.data.Effector) + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ::uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.name_.ClearToEmpty(); + cached_has_bits = _impl_._has_bits_[0]; + if (cached_has_bits & 0x00000001u) { + ABSL_DCHECK(_impl_.id_ != nullptr); + _impl_.id_->Clear(); + } + ::memset(&_impl_.range_, 0, static_cast<::size_t>( + reinterpret_cast(&_impl_.status_) - + reinterpret_cast(&_impl_.range_)) + sizeof(_impl_.status_)); + _impl_._has_bits_.Clear(); + _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>(); +} + +const char* Effector::_InternalParse( + const char* ptr, ::_pbi::ParseContext* ctx) { + ptr = ::_pbi::TcParser::ParseLoop(this, ptr, ctx, &_table_.header); + return ptr; +} + + +PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 +const ::_pbi::TcParseTable<3, 6, 1, 35, 2> Effector::_table_ = { + { + PROTOBUF_FIELD_OFFSET(Effector, _impl_._has_bits_), + 0, // no _extensions_ + 7, 56, // max_field_number, fast_idx_mask + offsetof(decltype(_table_), field_lookup_table), + 4294967184, // skipmap + offsetof(decltype(_table_), field_entries), + 6, // num_field_entries + 1, // num_aux_entries + offsetof(decltype(_table_), aux_entries), + &_Effector_default_instance_._instance, + ::_pbi::TcParser::GenericFallback, // fallback + }, {{ + {::_pbi::TcParser::MiniParse, {}}, + // .messages.track.Identifier ID = 1; + {::_pbi::TcParser::FastMtS1, + {10, 0, 0, PROTOBUF_FIELD_OFFSET(Effector, _impl_.id_)}}, + // string name = 2; + {::_pbi::TcParser::FastUS1, + {18, 63, 0, PROTOBUF_FIELD_OFFSET(Effector, _impl_.name_)}}, + // double range = 3; + {::_pbi::TcParser::FastF64S1, + {25, 63, 0, PROTOBUF_FIELD_OFFSET(Effector, _impl_.range_)}}, + // int32 ammunition = 4; + {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(Effector, _impl_.ammunition_), 63>(), + {32, 63, 0, PROTOBUF_FIELD_OFFSET(Effector, _impl_.ammunition_)}}, + {::_pbi::TcParser::MiniParse, {}}, + // int32 maxammunition = 6; + {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(Effector, _impl_.maxammunition_), 63>(), + {48, 63, 0, PROTOBUF_FIELD_OFFSET(Effector, _impl_.maxammunition_)}}, + // uint32 Status = 7; + {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(Effector, _impl_.status_), 63>(), + {56, 63, 0, PROTOBUF_FIELD_OFFSET(Effector, _impl_.status_)}}, + }}, {{ + 65535, 65535 + }}, {{ + // .messages.track.Identifier ID = 1; + {PROTOBUF_FIELD_OFFSET(Effector, _impl_.id_), _Internal::kHasBitsOffset + 0, 0, + (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)}, + // string name = 2; + {PROTOBUF_FIELD_OFFSET(Effector, _impl_.name_), -1, 0, + (0 | ::_fl::kFcSingular | ::_fl::kUtf8String | ::_fl::kRepAString)}, + // double range = 3; + {PROTOBUF_FIELD_OFFSET(Effector, _impl_.range_), -1, 0, + (0 | ::_fl::kFcSingular | ::_fl::kDouble)}, + // int32 ammunition = 4; + {PROTOBUF_FIELD_OFFSET(Effector, _impl_.ammunition_), -1, 0, + (0 | ::_fl::kFcSingular | ::_fl::kInt32)}, + // int32 maxammunition = 6; + {PROTOBUF_FIELD_OFFSET(Effector, _impl_.maxammunition_), -1, 0, + (0 | ::_fl::kFcSingular | ::_fl::kInt32)}, + // uint32 Status = 7; + {PROTOBUF_FIELD_OFFSET(Effector, _impl_.status_), -1, 0, + (0 | ::_fl::kFcSingular | ::_fl::kUInt32)}, + }}, {{ + {::_pbi::TcParser::GetTable<::messages::track::Identifier>()}, + }}, {{ + "\26\0\4\0\0\0\0\0" + "messages.data.Effector" + "name" + }}, +}; + +::uint8_t* Effector::_InternalSerialize( + ::uint8_t* target, + ::google::protobuf::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:messages.data.Effector) + ::uint32_t cached_has_bits = 0; + (void)cached_has_bits; + + cached_has_bits = _impl_._has_bits_[0]; + // .messages.track.Identifier ID = 1; + if (cached_has_bits & 0x00000001u) { + target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage( + 1, _Internal::id(this), + _Internal::id(this).GetCachedSize(), target, stream); + } + + // string name = 2; + if (!this->_internal_name().empty()) { + const std::string& _s = this->_internal_name(); + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + _s.data(), static_cast(_s.length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, "messages.data.Effector.name"); + target = stream->WriteStringMaybeAliased(2, _s, target); + } + + // double range = 3; + static_assert(sizeof(::uint64_t) == sizeof(double), + "Code assumes ::uint64_t and double are the same size."); + double tmp_range = this->_internal_range(); + ::uint64_t raw_range; + memcpy(&raw_range, &tmp_range, sizeof(tmp_range)); + if (raw_range != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteDoubleToArray( + 3, this->_internal_range(), target); + } + + // int32 ammunition = 4; + if (this->_internal_ammunition() != 0) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteInt32ToArrayWithField<4>( + stream, this->_internal_ammunition(), target); + } + + // int32 maxammunition = 6; + if (this->_internal_maxammunition() != 0) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteInt32ToArrayWithField<6>( + stream, this->_internal_maxammunition(), target); + } + + // uint32 Status = 7; + if (this->_internal_status() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteUInt32ToArray( + 7, this->_internal_status(), target); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = + ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:messages.data.Effector) + return target; +} + +::size_t Effector::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:messages.data.Effector) + ::size_t total_size = 0; + + ::uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // string name = 2; + if (!this->_internal_name().empty()) { + total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize( + this->_internal_name()); + } + + // .messages.track.Identifier ID = 1; + cached_has_bits = _impl_._has_bits_[0]; + if (cached_has_bits & 0x00000001u) { + total_size += + 1 + ::google::protobuf::internal::WireFormatLite::MessageSize(*_impl_.id_); + } + + // double range = 3; + static_assert(sizeof(::uint64_t) == sizeof(double), + "Code assumes ::uint64_t and double are the same size."); + double tmp_range = this->_internal_range(); + ::uint64_t raw_range; + memcpy(&raw_range, &tmp_range, sizeof(tmp_range)); + if (raw_range != 0) { + total_size += 9; + } + + // int32 ammunition = 4; + if (this->_internal_ammunition() != 0) { + total_size += ::_pbi::WireFormatLite::Int32SizePlusOne( + this->_internal_ammunition()); + } + + // int32 maxammunition = 6; + if (this->_internal_maxammunition() != 0) { + total_size += ::_pbi::WireFormatLite::Int32SizePlusOne( + this->_internal_maxammunition()); + } + + // uint32 Status = 7; + if (this->_internal_status() != 0) { + total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne( + this->_internal_status()); + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + + +void Effector::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:messages.data.Effector) + ABSL_DCHECK_NE(&from, _this); + ::uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + if (!from._internal_name().empty()) { + _this->_internal_set_name(from._internal_name()); + } + if ((from._impl_._has_bits_[0] & 0x00000001u) != 0) { + _this->_internal_mutable_id()->::messages::track::Identifier::MergeFrom( + from._internal_id()); + } + static_assert(sizeof(::uint64_t) == sizeof(double), + "Code assumes ::uint64_t and double are the same size."); + double tmp_range = from._internal_range(); + ::uint64_t raw_range; + memcpy(&raw_range, &tmp_range, sizeof(tmp_range)); + if (raw_range != 0) { + _this->_internal_set_range(from._internal_range()); + } + if (from._internal_ammunition() != 0) { + _this->_internal_set_ammunition(from._internal_ammunition()); + } + if (from._internal_maxammunition() != 0) { + _this->_internal_set_maxammunition(from._internal_maxammunition()); + } + if (from._internal_status() != 0) { + _this->_internal_set_status(from._internal_status()); + } + _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_); +} + +void Effector::CopyFrom(const Effector& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:messages.data.Effector) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +PROTOBUF_NOINLINE bool Effector::IsInitialized() const { + return true; +} + +void Effector::InternalSwap(Effector* PROTOBUF_RESTRICT other) { + using std::swap; + auto* arena = GetArena(); + ABSL_DCHECK_EQ(arena, other->GetArena()); + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]); + ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.name_, &other->_impl_.name_, arena); + ::google::protobuf::internal::memswap< + PROTOBUF_FIELD_OFFSET(Effector, _impl_.status_) + + sizeof(Effector::_impl_.status_) + - PROTOBUF_FIELD_OFFSET(Effector, _impl_.id_)>( + reinterpret_cast(&_impl_.id_), + reinterpret_cast(&other->_impl_.id_)); +} + +::google::protobuf::Metadata Effector::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_SystemStateUpdate_2eproto_getter, &descriptor_table_SystemStateUpdate_2eproto_once, + file_level_metadata_SystemStateUpdate_2eproto[2]); +} +// @@protoc_insertion_point(namespace_scope) +} // namespace data +} // namespace messages +namespace google { +namespace protobuf { +} // namespace protobuf +} // namespace google +// @@protoc_insertion_point(global_scope) +#include "google/protobuf/port_undef.inc" diff --git a/include/SimCore/Messages/Protos/SystemStateUpdate.pb.h b/include/SimCore/Messages/Protos/SystemStateUpdate.pb.h new file mode 100644 index 0000000..d4de216 --- /dev/null +++ b/include/SimCore/Messages/Protos/SystemStateUpdate.pb.h @@ -0,0 +1,1454 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: SystemStateUpdate.proto +// Protobuf C++ Version: 4.24.0-main + +#ifndef GOOGLE_PROTOBUF_INCLUDED_SystemStateUpdate_2eproto_2epb_2eh +#define GOOGLE_PROTOBUF_INCLUDED_SystemStateUpdate_2eproto_2epb_2eh + +#include +#include +#include +#include + +#include "google/protobuf/port_def.inc" +#if PROTOBUF_VERSION < 4025000 +#error "This file was generated by a newer version of protoc which is" +#error "incompatible with your Protocol Buffer headers. Please update" +#error "your headers." +#endif // PROTOBUF_VERSION + +#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION +#error "This file was generated by an older version of protoc which is" +#error "incompatible with your Protocol Buffer headers. Please" +#error "regenerate this file with a newer version of protoc." +#endif // PROTOBUF_MIN_PROTOC_VERSION +#include "google/protobuf/port_undef.inc" +#include "google/protobuf/io/coded_stream.h" +#include "google/protobuf/arena.h" +#include "google/protobuf/arenastring.h" +#include "google/protobuf/generated_message_tctable_decl.h" +#include "google/protobuf/generated_message_util.h" +#include "google/protobuf/metadata_lite.h" +#include "google/protobuf/generated_message_reflection.h" +#include "google/protobuf/message.h" +#include "google/protobuf/repeated_field.h" // IWYU pragma: export +#include "google/protobuf/extension_set.h" // IWYU pragma: export +#include "google/protobuf/unknown_field_set.h" +#include "Identifier.pb.h" +// @@protoc_insertion_point(includes) + +// Must be included last. +#include "google/protobuf/port_def.inc" + +#define PROTOBUF_INTERNAL_EXPORT_SystemStateUpdate_2eproto + +namespace google { +namespace protobuf { +namespace internal { +class AnyMetadata; +} // namespace internal +} // namespace protobuf +} // namespace google + +// Internal implementation detail -- do not use these members. +struct TableStruct_SystemStateUpdate_2eproto { + static const ::uint32_t offsets[]; +}; +extern const ::google::protobuf::internal::DescriptorTable + descriptor_table_SystemStateUpdate_2eproto; +namespace messages { +namespace data { +class Effector; +struct EffectorDefaultTypeInternal; +extern EffectorDefaultTypeInternal _Effector_default_instance_; +class Sensor; +struct SensorDefaultTypeInternal; +extern SensorDefaultTypeInternal _Sensor_default_instance_; +class SystemStateUpdate; +struct SystemStateUpdateDefaultTypeInternal; +extern SystemStateUpdateDefaultTypeInternal _SystemStateUpdate_default_instance_; +} // namespace data +} // namespace messages +namespace google { +namespace protobuf { +} // namespace protobuf +} // namespace google + +namespace messages { +namespace data { + +// =================================================================== + + +// ------------------------------------------------------------------- + +class Sensor final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:messages.data.Sensor) */ { + public: + inline Sensor() : Sensor(nullptr) {} + ~Sensor() override; + template + explicit PROTOBUF_CONSTEXPR Sensor(::google::protobuf::internal::ConstantInitialized); + + inline Sensor(const Sensor& from) + : Sensor(nullptr, from) {} + Sensor(Sensor&& from) noexcept + : Sensor() { + *this = ::std::move(from); + } + + inline Sensor& operator=(const Sensor& from) { + CopyFrom(from); + return *this; + } + inline Sensor& operator=(Sensor&& from) noexcept { + if (this == &from) return *this; + if (GetArena() == from.GetArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const + ABSL_ATTRIBUTE_LIFETIME_BOUND { + return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance); + } + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() + ABSL_ATTRIBUTE_LIFETIME_BOUND { + return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>(); + } + + static const ::google::protobuf::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::google::protobuf::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::google::protobuf::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const Sensor& default_instance() { + return *internal_default_instance(); + } + static inline const Sensor* internal_default_instance() { + return reinterpret_cast( + &_Sensor_default_instance_); + } + static constexpr int kIndexInFileMessages = + 1; + + friend void swap(Sensor& a, Sensor& b) { + a.Swap(&b); + } + inline void Swap(Sensor* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetArena() != nullptr && + GetArena() == other->GetArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetArena() == other->GetArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::google::protobuf::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(Sensor* other) { + if (other == this) return; + ABSL_DCHECK(GetArena() == other->GetArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + Sensor* New(::google::protobuf::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::google::protobuf::Message::CopyFrom; + void CopyFrom(const Sensor& from); + using ::google::protobuf::Message::MergeFrom; + void MergeFrom( const Sensor& from) { + Sensor::MergeImpl(*this, from); + } + private: + static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg); + public: + ABSL_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + ::size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final; + ::uint8_t* _InternalSerialize( + ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::google::protobuf::Arena* arena); + void SharedDtor(); + void InternalSwap(Sensor* other); + + private: + friend class ::google::protobuf::internal::AnyMetadata; + static ::absl::string_view FullMessageName() { + return "messages.data.Sensor"; + } + protected: + explicit Sensor(::google::protobuf::Arena* arena); + Sensor(::google::protobuf::Arena* arena, const Sensor& from); + const ::google::protobuf::MessageLite::ClassData* GetClassData() const final; + public: + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kNameFieldNumber = 2, + kIDFieldNumber = 1, + kRangeFieldNumber = 3, + kKindFieldNumber = 4, + kStatusFieldNumber = 5, + }; + // string name = 2; + void clear_name() ; + const std::string& name() const; + template + void set_name(Arg_&& arg, Args_... args); + std::string* mutable_name(); + PROTOBUF_NODISCARD std::string* release_name(); + void set_allocated_name(std::string* value); + + private: + const std::string& _internal_name() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_name( + const std::string& value); + std::string* _internal_mutable_name(); + + public: + // .messages.track.Identifier ID = 1; + bool has_id() const; + void clear_id() ; + const ::messages::track::Identifier& id() const; + PROTOBUF_NODISCARD ::messages::track::Identifier* release_id(); + ::messages::track::Identifier* mutable_id(); + void set_allocated_id(::messages::track::Identifier* value); + void unsafe_arena_set_allocated_id(::messages::track::Identifier* value); + ::messages::track::Identifier* unsafe_arena_release_id(); + + private: + const ::messages::track::Identifier& _internal_id() const; + ::messages::track::Identifier* _internal_mutable_id(); + + public: + // double range = 3; + void clear_range() ; + double range() const; + void set_range(double value); + + private: + double _internal_range() const; + void _internal_set_range(double value); + + public: + // uint32 kind = 4; + void clear_kind() ; + ::uint32_t kind() const; + void set_kind(::uint32_t value); + + private: + ::uint32_t _internal_kind() const; + void _internal_set_kind(::uint32_t value); + + public: + // uint32 Status = 5; + void clear_status() ; + ::uint32_t status() const; + void set_status(::uint32_t value); + + private: + ::uint32_t _internal_status() const; + void _internal_set_status(::uint32_t value); + + public: + // @@protoc_insertion_point(class_scope:messages.data.Sensor) + private: + class _Internal; + + friend class ::google::protobuf::internal::TcParser; + static const ::google::protobuf::internal::TcParseTable< + 3, 5, 1, + 33, 2> + _table_; + friend class ::google::protobuf::MessageLite; + friend class ::google::protobuf::Arena; + template + friend class ::google::protobuf::Arena::InternalHelper; + using InternalArenaConstructable_ = void; + using DestructorSkippable_ = void; + struct Impl_ { + + inline explicit constexpr Impl_( + ::google::protobuf::internal::ConstantInitialized) noexcept; + inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility, + ::google::protobuf::Arena* arena); + inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility, + ::google::protobuf::Arena* arena, const Impl_& from); + ::google::protobuf::internal::HasBits<1> _has_bits_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + ::google::protobuf::internal::ArenaStringPtr name_; + ::messages::track::Identifier* id_; + double range_; + ::uint32_t kind_; + ::uint32_t status_; + PROTOBUF_TSAN_DECLARE_MEMBER + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_SystemStateUpdate_2eproto; +};// ------------------------------------------------------------------- + +class Effector final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:messages.data.Effector) */ { + public: + inline Effector() : Effector(nullptr) {} + ~Effector() override; + template + explicit PROTOBUF_CONSTEXPR Effector(::google::protobuf::internal::ConstantInitialized); + + inline Effector(const Effector& from) + : Effector(nullptr, from) {} + Effector(Effector&& from) noexcept + : Effector() { + *this = ::std::move(from); + } + + inline Effector& operator=(const Effector& from) { + CopyFrom(from); + return *this; + } + inline Effector& operator=(Effector&& from) noexcept { + if (this == &from) return *this; + if (GetArena() == from.GetArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const + ABSL_ATTRIBUTE_LIFETIME_BOUND { + return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance); + } + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() + ABSL_ATTRIBUTE_LIFETIME_BOUND { + return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>(); + } + + static const ::google::protobuf::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::google::protobuf::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::google::protobuf::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const Effector& default_instance() { + return *internal_default_instance(); + } + static inline const Effector* internal_default_instance() { + return reinterpret_cast( + &_Effector_default_instance_); + } + static constexpr int kIndexInFileMessages = + 2; + + friend void swap(Effector& a, Effector& b) { + a.Swap(&b); + } + inline void Swap(Effector* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetArena() != nullptr && + GetArena() == other->GetArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetArena() == other->GetArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::google::protobuf::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(Effector* other) { + if (other == this) return; + ABSL_DCHECK(GetArena() == other->GetArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + Effector* New(::google::protobuf::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::google::protobuf::Message::CopyFrom; + void CopyFrom(const Effector& from); + using ::google::protobuf::Message::MergeFrom; + void MergeFrom( const Effector& from) { + Effector::MergeImpl(*this, from); + } + private: + static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg); + public: + ABSL_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + ::size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final; + ::uint8_t* _InternalSerialize( + ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::google::protobuf::Arena* arena); + void SharedDtor(); + void InternalSwap(Effector* other); + + private: + friend class ::google::protobuf::internal::AnyMetadata; + static ::absl::string_view FullMessageName() { + return "messages.data.Effector"; + } + protected: + explicit Effector(::google::protobuf::Arena* arena); + Effector(::google::protobuf::Arena* arena, const Effector& from); + const ::google::protobuf::MessageLite::ClassData* GetClassData() const final; + public: + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kNameFieldNumber = 2, + kIDFieldNumber = 1, + kRangeFieldNumber = 3, + kAmmunitionFieldNumber = 4, + kMaxammunitionFieldNumber = 6, + kStatusFieldNumber = 7, + }; + // string name = 2; + void clear_name() ; + const std::string& name() const; + template + void set_name(Arg_&& arg, Args_... args); + std::string* mutable_name(); + PROTOBUF_NODISCARD std::string* release_name(); + void set_allocated_name(std::string* value); + + private: + const std::string& _internal_name() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_name( + const std::string& value); + std::string* _internal_mutable_name(); + + public: + // .messages.track.Identifier ID = 1; + bool has_id() const; + void clear_id() ; + const ::messages::track::Identifier& id() const; + PROTOBUF_NODISCARD ::messages::track::Identifier* release_id(); + ::messages::track::Identifier* mutable_id(); + void set_allocated_id(::messages::track::Identifier* value); + void unsafe_arena_set_allocated_id(::messages::track::Identifier* value); + ::messages::track::Identifier* unsafe_arena_release_id(); + + private: + const ::messages::track::Identifier& _internal_id() const; + ::messages::track::Identifier* _internal_mutable_id(); + + public: + // double range = 3; + void clear_range() ; + double range() const; + void set_range(double value); + + private: + double _internal_range() const; + void _internal_set_range(double value); + + public: + // int32 ammunition = 4; + void clear_ammunition() ; + ::int32_t ammunition() const; + void set_ammunition(::int32_t value); + + private: + ::int32_t _internal_ammunition() const; + void _internal_set_ammunition(::int32_t value); + + public: + // int32 maxammunition = 6; + void clear_maxammunition() ; + ::int32_t maxammunition() const; + void set_maxammunition(::int32_t value); + + private: + ::int32_t _internal_maxammunition() const; + void _internal_set_maxammunition(::int32_t value); + + public: + // uint32 Status = 7; + void clear_status() ; + ::uint32_t status() const; + void set_status(::uint32_t value); + + private: + ::uint32_t _internal_status() const; + void _internal_set_status(::uint32_t value); + + public: + // @@protoc_insertion_point(class_scope:messages.data.Effector) + private: + class _Internal; + + friend class ::google::protobuf::internal::TcParser; + static const ::google::protobuf::internal::TcParseTable< + 3, 6, 1, + 35, 2> + _table_; + friend class ::google::protobuf::MessageLite; + friend class ::google::protobuf::Arena; + template + friend class ::google::protobuf::Arena::InternalHelper; + using InternalArenaConstructable_ = void; + using DestructorSkippable_ = void; + struct Impl_ { + + inline explicit constexpr Impl_( + ::google::protobuf::internal::ConstantInitialized) noexcept; + inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility, + ::google::protobuf::Arena* arena); + inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility, + ::google::protobuf::Arena* arena, const Impl_& from); + ::google::protobuf::internal::HasBits<1> _has_bits_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + ::google::protobuf::internal::ArenaStringPtr name_; + ::messages::track::Identifier* id_; + double range_; + ::int32_t ammunition_; + ::int32_t maxammunition_; + ::uint32_t status_; + PROTOBUF_TSAN_DECLARE_MEMBER + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_SystemStateUpdate_2eproto; +};// ------------------------------------------------------------------- + +class SystemStateUpdate final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:messages.data.SystemStateUpdate) */ { + public: + inline SystemStateUpdate() : SystemStateUpdate(nullptr) {} + ~SystemStateUpdate() override; + template + explicit PROTOBUF_CONSTEXPR SystemStateUpdate(::google::protobuf::internal::ConstantInitialized); + + inline SystemStateUpdate(const SystemStateUpdate& from) + : SystemStateUpdate(nullptr, from) {} + SystemStateUpdate(SystemStateUpdate&& from) noexcept + : SystemStateUpdate() { + *this = ::std::move(from); + } + + inline SystemStateUpdate& operator=(const SystemStateUpdate& from) { + CopyFrom(from); + return *this; + } + inline SystemStateUpdate& operator=(SystemStateUpdate&& from) noexcept { + if (this == &from) return *this; + if (GetArena() == from.GetArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const + ABSL_ATTRIBUTE_LIFETIME_BOUND { + return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance); + } + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() + ABSL_ATTRIBUTE_LIFETIME_BOUND { + return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>(); + } + + static const ::google::protobuf::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::google::protobuf::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::google::protobuf::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const SystemStateUpdate& default_instance() { + return *internal_default_instance(); + } + static inline const SystemStateUpdate* internal_default_instance() { + return reinterpret_cast( + &_SystemStateUpdate_default_instance_); + } + static constexpr int kIndexInFileMessages = + 0; + + friend void swap(SystemStateUpdate& a, SystemStateUpdate& b) { + a.Swap(&b); + } + inline void Swap(SystemStateUpdate* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetArena() != nullptr && + GetArena() == other->GetArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetArena() == other->GetArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::google::protobuf::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(SystemStateUpdate* other) { + if (other == this) return; + ABSL_DCHECK(GetArena() == other->GetArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + SystemStateUpdate* New(::google::protobuf::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::google::protobuf::Message::CopyFrom; + void CopyFrom(const SystemStateUpdate& from); + using ::google::protobuf::Message::MergeFrom; + void MergeFrom( const SystemStateUpdate& from) { + SystemStateUpdate::MergeImpl(*this, from); + } + private: + static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg); + public: + ABSL_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + ::size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final; + ::uint8_t* _InternalSerialize( + ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::google::protobuf::Arena* arena); + void SharedDtor(); + void InternalSwap(SystemStateUpdate* other); + + private: + friend class ::google::protobuf::internal::AnyMetadata; + static ::absl::string_view FullMessageName() { + return "messages.data.SystemStateUpdate"; + } + protected: + explicit SystemStateUpdate(::google::protobuf::Arena* arena); + SystemStateUpdate(::google::protobuf::Arena* arena, const SystemStateUpdate& from); + const ::google::protobuf::MessageLite::ClassData* GetClassData() const final; + public: + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kSensorsFieldNumber = 2, + kEffectorsFieldNumber = 3, + kOwnIDFieldNumber = 1, + }; + // repeated .messages.data.Sensor sensors = 2; + int sensors_size() const; + private: + int _internal_sensors_size() const; + + public: + void clear_sensors() ; + ::messages::data::Sensor* mutable_sensors(int index); + ::google::protobuf::RepeatedPtrField< ::messages::data::Sensor >* + mutable_sensors(); + private: + const ::google::protobuf::RepeatedPtrField<::messages::data::Sensor>& _internal_sensors() const; + ::google::protobuf::RepeatedPtrField<::messages::data::Sensor>* _internal_mutable_sensors(); + public: + const ::messages::data::Sensor& sensors(int index) const; + ::messages::data::Sensor* add_sensors(); + const ::google::protobuf::RepeatedPtrField< ::messages::data::Sensor >& + sensors() const; + // repeated .messages.data.Effector effectors = 3; + int effectors_size() const; + private: + int _internal_effectors_size() const; + + public: + void clear_effectors() ; + ::messages::data::Effector* mutable_effectors(int index); + ::google::protobuf::RepeatedPtrField< ::messages::data::Effector >* + mutable_effectors(); + private: + const ::google::protobuf::RepeatedPtrField<::messages::data::Effector>& _internal_effectors() const; + ::google::protobuf::RepeatedPtrField<::messages::data::Effector>* _internal_mutable_effectors(); + public: + const ::messages::data::Effector& effectors(int index) const; + ::messages::data::Effector* add_effectors(); + const ::google::protobuf::RepeatedPtrField< ::messages::data::Effector >& + effectors() const; + // .messages.track.Identifier OwnID = 1; + bool has_ownid() const; + void clear_ownid() ; + const ::messages::track::Identifier& ownid() const; + PROTOBUF_NODISCARD ::messages::track::Identifier* release_ownid(); + ::messages::track::Identifier* mutable_ownid(); + void set_allocated_ownid(::messages::track::Identifier* value); + void unsafe_arena_set_allocated_ownid(::messages::track::Identifier* value); + ::messages::track::Identifier* unsafe_arena_release_ownid(); + + private: + const ::messages::track::Identifier& _internal_ownid() const; + ::messages::track::Identifier* _internal_mutable_ownid(); + + public: + // @@protoc_insertion_point(class_scope:messages.data.SystemStateUpdate) + private: + class _Internal; + + friend class ::google::protobuf::internal::TcParser; + static const ::google::protobuf::internal::TcParseTable< + 2, 3, 3, + 0, 2> + _table_; + friend class ::google::protobuf::MessageLite; + friend class ::google::protobuf::Arena; + template + friend class ::google::protobuf::Arena::InternalHelper; + using InternalArenaConstructable_ = void; + using DestructorSkippable_ = void; + struct Impl_ { + + inline explicit constexpr Impl_( + ::google::protobuf::internal::ConstantInitialized) noexcept; + inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility, + ::google::protobuf::Arena* arena); + inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility, + ::google::protobuf::Arena* arena, const Impl_& from); + ::google::protobuf::internal::HasBits<1> _has_bits_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + ::google::protobuf::RepeatedPtrField< ::messages::data::Sensor > sensors_; + ::google::protobuf::RepeatedPtrField< ::messages::data::Effector > effectors_; + ::messages::track::Identifier* ownid_; + PROTOBUF_TSAN_DECLARE_MEMBER + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_SystemStateUpdate_2eproto; +}; + +// =================================================================== + + + + +// =================================================================== + + +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstrict-aliasing" +#endif // __GNUC__ +// ------------------------------------------------------------------- + +// SystemStateUpdate + +// .messages.track.Identifier OwnID = 1; +inline bool SystemStateUpdate::has_ownid() const { + bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; + PROTOBUF_ASSUME(!value || _impl_.ownid_ != nullptr); + return value; +} +inline const ::messages::track::Identifier& SystemStateUpdate::_internal_ownid() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + const ::messages::track::Identifier* p = _impl_.ownid_; + return p != nullptr ? *p : reinterpret_cast(::messages::track::_Identifier_default_instance_); +} +inline const ::messages::track::Identifier& SystemStateUpdate::ownid() const ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_get:messages.data.SystemStateUpdate.OwnID) + return _internal_ownid(); +} +inline void SystemStateUpdate::unsafe_arena_set_allocated_ownid(::messages::track::Identifier* value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (GetArena() == nullptr) { + delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.ownid_); + } + _impl_.ownid_ = reinterpret_cast<::messages::track::Identifier*>(value); + if (value != nullptr) { + _impl_._has_bits_[0] |= 0x00000001u; + } else { + _impl_._has_bits_[0] &= ~0x00000001u; + } + // @@protoc_insertion_point(field_unsafe_arena_set_allocated:messages.data.SystemStateUpdate.OwnID) +} +inline ::messages::track::Identifier* SystemStateUpdate::release_ownid() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + + _impl_._has_bits_[0] &= ~0x00000001u; + ::messages::track::Identifier* released = _impl_.ownid_; + _impl_.ownid_ = nullptr; +#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE + auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released); + released = ::google::protobuf::internal::DuplicateIfNonNull(released); + if (GetArena() == nullptr) { + delete old; + } +#else // PROTOBUF_FORCE_COPY_IN_RELEASE + if (GetArena() != nullptr) { + released = ::google::protobuf::internal::DuplicateIfNonNull(released); + } +#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE + return released; +} +inline ::messages::track::Identifier* SystemStateUpdate::unsafe_arena_release_ownid() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + // @@protoc_insertion_point(field_release:messages.data.SystemStateUpdate.OwnID) + + _impl_._has_bits_[0] &= ~0x00000001u; + ::messages::track::Identifier* temp = _impl_.ownid_; + _impl_.ownid_ = nullptr; + return temp; +} +inline ::messages::track::Identifier* SystemStateUpdate::_internal_mutable_ownid() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_._has_bits_[0] |= 0x00000001u; + if (_impl_.ownid_ == nullptr) { + auto* p = CreateMaybeMessage<::messages::track::Identifier>(GetArena()); + _impl_.ownid_ = reinterpret_cast<::messages::track::Identifier*>(p); + } + return _impl_.ownid_; +} +inline ::messages::track::Identifier* SystemStateUpdate::mutable_ownid() ABSL_ATTRIBUTE_LIFETIME_BOUND { + ::messages::track::Identifier* _msg = _internal_mutable_ownid(); + // @@protoc_insertion_point(field_mutable:messages.data.SystemStateUpdate.OwnID) + return _msg; +} +inline void SystemStateUpdate::set_allocated_ownid(::messages::track::Identifier* value) { + ::google::protobuf::Arena* message_arena = GetArena(); + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (message_arena == nullptr) { + delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.ownid_); + } + + if (value != nullptr) { + ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::MessageLite*>(value)->GetArena(); + if (message_arena != submessage_arena) { + value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena); + } + _impl_._has_bits_[0] |= 0x00000001u; + } else { + _impl_._has_bits_[0] &= ~0x00000001u; + } + + _impl_.ownid_ = reinterpret_cast<::messages::track::Identifier*>(value); + // @@protoc_insertion_point(field_set_allocated:messages.data.SystemStateUpdate.OwnID) +} + +// repeated .messages.data.Sensor sensors = 2; +inline int SystemStateUpdate::_internal_sensors_size() const { + return _internal_sensors().size(); +} +inline int SystemStateUpdate::sensors_size() const { + return _internal_sensors_size(); +} +inline void SystemStateUpdate::clear_sensors() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.sensors_.Clear(); +} +inline ::messages::data::Sensor* SystemStateUpdate::mutable_sensors(int index) + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_mutable:messages.data.SystemStateUpdate.sensors) + return _internal_mutable_sensors()->Mutable(index); +} +inline ::google::protobuf::RepeatedPtrField<::messages::data::Sensor>* SystemStateUpdate::mutable_sensors() + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_mutable_list:messages.data.SystemStateUpdate.sensors) + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + return _internal_mutable_sensors(); +} +inline const ::messages::data::Sensor& SystemStateUpdate::sensors(int index) const + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_get:messages.data.SystemStateUpdate.sensors) + return _internal_sensors().Get(index); +} +inline ::messages::data::Sensor* SystemStateUpdate::add_sensors() ABSL_ATTRIBUTE_LIFETIME_BOUND { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ::messages::data::Sensor* _add = _internal_mutable_sensors()->Add(); + // @@protoc_insertion_point(field_add:messages.data.SystemStateUpdate.sensors) + return _add; +} +inline const ::google::protobuf::RepeatedPtrField<::messages::data::Sensor>& SystemStateUpdate::sensors() const + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_list:messages.data.SystemStateUpdate.sensors) + return _internal_sensors(); +} +inline const ::google::protobuf::RepeatedPtrField<::messages::data::Sensor>& +SystemStateUpdate::_internal_sensors() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.sensors_; +} +inline ::google::protobuf::RepeatedPtrField<::messages::data::Sensor>* +SystemStateUpdate::_internal_mutable_sensors() { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return &_impl_.sensors_; +} + +// repeated .messages.data.Effector effectors = 3; +inline int SystemStateUpdate::_internal_effectors_size() const { + return _internal_effectors().size(); +} +inline int SystemStateUpdate::effectors_size() const { + return _internal_effectors_size(); +} +inline void SystemStateUpdate::clear_effectors() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.effectors_.Clear(); +} +inline ::messages::data::Effector* SystemStateUpdate::mutable_effectors(int index) + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_mutable:messages.data.SystemStateUpdate.effectors) + return _internal_mutable_effectors()->Mutable(index); +} +inline ::google::protobuf::RepeatedPtrField<::messages::data::Effector>* SystemStateUpdate::mutable_effectors() + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_mutable_list:messages.data.SystemStateUpdate.effectors) + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + return _internal_mutable_effectors(); +} +inline const ::messages::data::Effector& SystemStateUpdate::effectors(int index) const + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_get:messages.data.SystemStateUpdate.effectors) + return _internal_effectors().Get(index); +} +inline ::messages::data::Effector* SystemStateUpdate::add_effectors() ABSL_ATTRIBUTE_LIFETIME_BOUND { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ::messages::data::Effector* _add = _internal_mutable_effectors()->Add(); + // @@protoc_insertion_point(field_add:messages.data.SystemStateUpdate.effectors) + return _add; +} +inline const ::google::protobuf::RepeatedPtrField<::messages::data::Effector>& SystemStateUpdate::effectors() const + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_list:messages.data.SystemStateUpdate.effectors) + return _internal_effectors(); +} +inline const ::google::protobuf::RepeatedPtrField<::messages::data::Effector>& +SystemStateUpdate::_internal_effectors() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.effectors_; +} +inline ::google::protobuf::RepeatedPtrField<::messages::data::Effector>* +SystemStateUpdate::_internal_mutable_effectors() { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return &_impl_.effectors_; +} + +// ------------------------------------------------------------------- + +// Sensor + +// .messages.track.Identifier ID = 1; +inline bool Sensor::has_id() const { + bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; + PROTOBUF_ASSUME(!value || _impl_.id_ != nullptr); + return value; +} +inline const ::messages::track::Identifier& Sensor::_internal_id() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + const ::messages::track::Identifier* p = _impl_.id_; + return p != nullptr ? *p : reinterpret_cast(::messages::track::_Identifier_default_instance_); +} +inline const ::messages::track::Identifier& Sensor::id() const ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_get:messages.data.Sensor.ID) + return _internal_id(); +} +inline void Sensor::unsafe_arena_set_allocated_id(::messages::track::Identifier* value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (GetArena() == nullptr) { + delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.id_); + } + _impl_.id_ = reinterpret_cast<::messages::track::Identifier*>(value); + if (value != nullptr) { + _impl_._has_bits_[0] |= 0x00000001u; + } else { + _impl_._has_bits_[0] &= ~0x00000001u; + } + // @@protoc_insertion_point(field_unsafe_arena_set_allocated:messages.data.Sensor.ID) +} +inline ::messages::track::Identifier* Sensor::release_id() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + + _impl_._has_bits_[0] &= ~0x00000001u; + ::messages::track::Identifier* released = _impl_.id_; + _impl_.id_ = nullptr; +#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE + auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released); + released = ::google::protobuf::internal::DuplicateIfNonNull(released); + if (GetArena() == nullptr) { + delete old; + } +#else // PROTOBUF_FORCE_COPY_IN_RELEASE + if (GetArena() != nullptr) { + released = ::google::protobuf::internal::DuplicateIfNonNull(released); + } +#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE + return released; +} +inline ::messages::track::Identifier* Sensor::unsafe_arena_release_id() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + // @@protoc_insertion_point(field_release:messages.data.Sensor.ID) + + _impl_._has_bits_[0] &= ~0x00000001u; + ::messages::track::Identifier* temp = _impl_.id_; + _impl_.id_ = nullptr; + return temp; +} +inline ::messages::track::Identifier* Sensor::_internal_mutable_id() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_._has_bits_[0] |= 0x00000001u; + if (_impl_.id_ == nullptr) { + auto* p = CreateMaybeMessage<::messages::track::Identifier>(GetArena()); + _impl_.id_ = reinterpret_cast<::messages::track::Identifier*>(p); + } + return _impl_.id_; +} +inline ::messages::track::Identifier* Sensor::mutable_id() ABSL_ATTRIBUTE_LIFETIME_BOUND { + ::messages::track::Identifier* _msg = _internal_mutable_id(); + // @@protoc_insertion_point(field_mutable:messages.data.Sensor.ID) + return _msg; +} +inline void Sensor::set_allocated_id(::messages::track::Identifier* value) { + ::google::protobuf::Arena* message_arena = GetArena(); + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (message_arena == nullptr) { + delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.id_); + } + + if (value != nullptr) { + ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::MessageLite*>(value)->GetArena(); + if (message_arena != submessage_arena) { + value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena); + } + _impl_._has_bits_[0] |= 0x00000001u; + } else { + _impl_._has_bits_[0] &= ~0x00000001u; + } + + _impl_.id_ = reinterpret_cast<::messages::track::Identifier*>(value); + // @@protoc_insertion_point(field_set_allocated:messages.data.Sensor.ID) +} + +// string name = 2; +inline void Sensor::clear_name() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.name_.ClearToEmpty(); +} +inline const std::string& Sensor::name() const + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_get:messages.data.Sensor.name) + return _internal_name(); +} +template +inline PROTOBUF_ALWAYS_INLINE void Sensor::set_name(Arg_&& arg, + Args_... args) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.name_.Set(static_cast(arg), args..., GetArena()); + // @@protoc_insertion_point(field_set:messages.data.Sensor.name) +} +inline std::string* Sensor::mutable_name() ABSL_ATTRIBUTE_LIFETIME_BOUND { + std::string* _s = _internal_mutable_name(); + // @@protoc_insertion_point(field_mutable:messages.data.Sensor.name) + return _s; +} +inline const std::string& Sensor::_internal_name() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.name_.Get(); +} +inline void Sensor::_internal_set_name(const std::string& value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.name_.Set(value, GetArena()); +} +inline std::string* Sensor::_internal_mutable_name() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + return _impl_.name_.Mutable( GetArena()); +} +inline std::string* Sensor::release_name() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + // @@protoc_insertion_point(field_release:messages.data.Sensor.name) + return _impl_.name_.Release(); +} +inline void Sensor::set_allocated_name(std::string* value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.name_.SetAllocated(value, GetArena()); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.name_.IsDefault()) { + _impl_.name_.Set("", GetArena()); + } + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:messages.data.Sensor.name) +} + +// double range = 3; +inline void Sensor::clear_range() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.range_ = 0; +} +inline double Sensor::range() const { + // @@protoc_insertion_point(field_get:messages.data.Sensor.range) + return _internal_range(); +} +inline void Sensor::set_range(double value) { + _internal_set_range(value); + // @@protoc_insertion_point(field_set:messages.data.Sensor.range) +} +inline double Sensor::_internal_range() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.range_; +} +inline void Sensor::_internal_set_range(double value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.range_ = value; +} + +// uint32 kind = 4; +inline void Sensor::clear_kind() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.kind_ = 0u; +} +inline ::uint32_t Sensor::kind() const { + // @@protoc_insertion_point(field_get:messages.data.Sensor.kind) + return _internal_kind(); +} +inline void Sensor::set_kind(::uint32_t value) { + _internal_set_kind(value); + // @@protoc_insertion_point(field_set:messages.data.Sensor.kind) +} +inline ::uint32_t Sensor::_internal_kind() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.kind_; +} +inline void Sensor::_internal_set_kind(::uint32_t value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.kind_ = value; +} + +// uint32 Status = 5; +inline void Sensor::clear_status() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.status_ = 0u; +} +inline ::uint32_t Sensor::status() const { + // @@protoc_insertion_point(field_get:messages.data.Sensor.Status) + return _internal_status(); +} +inline void Sensor::set_status(::uint32_t value) { + _internal_set_status(value); + // @@protoc_insertion_point(field_set:messages.data.Sensor.Status) +} +inline ::uint32_t Sensor::_internal_status() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.status_; +} +inline void Sensor::_internal_set_status(::uint32_t value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.status_ = value; +} + +// ------------------------------------------------------------------- + +// Effector + +// .messages.track.Identifier ID = 1; +inline bool Effector::has_id() const { + bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; + PROTOBUF_ASSUME(!value || _impl_.id_ != nullptr); + return value; +} +inline const ::messages::track::Identifier& Effector::_internal_id() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + const ::messages::track::Identifier* p = _impl_.id_; + return p != nullptr ? *p : reinterpret_cast(::messages::track::_Identifier_default_instance_); +} +inline const ::messages::track::Identifier& Effector::id() const ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_get:messages.data.Effector.ID) + return _internal_id(); +} +inline void Effector::unsafe_arena_set_allocated_id(::messages::track::Identifier* value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (GetArena() == nullptr) { + delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.id_); + } + _impl_.id_ = reinterpret_cast<::messages::track::Identifier*>(value); + if (value != nullptr) { + _impl_._has_bits_[0] |= 0x00000001u; + } else { + _impl_._has_bits_[0] &= ~0x00000001u; + } + // @@protoc_insertion_point(field_unsafe_arena_set_allocated:messages.data.Effector.ID) +} +inline ::messages::track::Identifier* Effector::release_id() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + + _impl_._has_bits_[0] &= ~0x00000001u; + ::messages::track::Identifier* released = _impl_.id_; + _impl_.id_ = nullptr; +#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE + auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released); + released = ::google::protobuf::internal::DuplicateIfNonNull(released); + if (GetArena() == nullptr) { + delete old; + } +#else // PROTOBUF_FORCE_COPY_IN_RELEASE + if (GetArena() != nullptr) { + released = ::google::protobuf::internal::DuplicateIfNonNull(released); + } +#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE + return released; +} +inline ::messages::track::Identifier* Effector::unsafe_arena_release_id() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + // @@protoc_insertion_point(field_release:messages.data.Effector.ID) + + _impl_._has_bits_[0] &= ~0x00000001u; + ::messages::track::Identifier* temp = _impl_.id_; + _impl_.id_ = nullptr; + return temp; +} +inline ::messages::track::Identifier* Effector::_internal_mutable_id() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_._has_bits_[0] |= 0x00000001u; + if (_impl_.id_ == nullptr) { + auto* p = CreateMaybeMessage<::messages::track::Identifier>(GetArena()); + _impl_.id_ = reinterpret_cast<::messages::track::Identifier*>(p); + } + return _impl_.id_; +} +inline ::messages::track::Identifier* Effector::mutable_id() ABSL_ATTRIBUTE_LIFETIME_BOUND { + ::messages::track::Identifier* _msg = _internal_mutable_id(); + // @@protoc_insertion_point(field_mutable:messages.data.Effector.ID) + return _msg; +} +inline void Effector::set_allocated_id(::messages::track::Identifier* value) { + ::google::protobuf::Arena* message_arena = GetArena(); + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (message_arena == nullptr) { + delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.id_); + } + + if (value != nullptr) { + ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::MessageLite*>(value)->GetArena(); + if (message_arena != submessage_arena) { + value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena); + } + _impl_._has_bits_[0] |= 0x00000001u; + } else { + _impl_._has_bits_[0] &= ~0x00000001u; + } + + _impl_.id_ = reinterpret_cast<::messages::track::Identifier*>(value); + // @@protoc_insertion_point(field_set_allocated:messages.data.Effector.ID) +} + +// string name = 2; +inline void Effector::clear_name() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.name_.ClearToEmpty(); +} +inline const std::string& Effector::name() const + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_get:messages.data.Effector.name) + return _internal_name(); +} +template +inline PROTOBUF_ALWAYS_INLINE void Effector::set_name(Arg_&& arg, + Args_... args) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.name_.Set(static_cast(arg), args..., GetArena()); + // @@protoc_insertion_point(field_set:messages.data.Effector.name) +} +inline std::string* Effector::mutable_name() ABSL_ATTRIBUTE_LIFETIME_BOUND { + std::string* _s = _internal_mutable_name(); + // @@protoc_insertion_point(field_mutable:messages.data.Effector.name) + return _s; +} +inline const std::string& Effector::_internal_name() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.name_.Get(); +} +inline void Effector::_internal_set_name(const std::string& value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.name_.Set(value, GetArena()); +} +inline std::string* Effector::_internal_mutable_name() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + return _impl_.name_.Mutable( GetArena()); +} +inline std::string* Effector::release_name() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + // @@protoc_insertion_point(field_release:messages.data.Effector.name) + return _impl_.name_.Release(); +} +inline void Effector::set_allocated_name(std::string* value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.name_.SetAllocated(value, GetArena()); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.name_.IsDefault()) { + _impl_.name_.Set("", GetArena()); + } + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:messages.data.Effector.name) +} + +// double range = 3; +inline void Effector::clear_range() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.range_ = 0; +} +inline double Effector::range() const { + // @@protoc_insertion_point(field_get:messages.data.Effector.range) + return _internal_range(); +} +inline void Effector::set_range(double value) { + _internal_set_range(value); + // @@protoc_insertion_point(field_set:messages.data.Effector.range) +} +inline double Effector::_internal_range() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.range_; +} +inline void Effector::_internal_set_range(double value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.range_ = value; +} + +// int32 ammunition = 4; +inline void Effector::clear_ammunition() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.ammunition_ = 0; +} +inline ::int32_t Effector::ammunition() const { + // @@protoc_insertion_point(field_get:messages.data.Effector.ammunition) + return _internal_ammunition(); +} +inline void Effector::set_ammunition(::int32_t value) { + _internal_set_ammunition(value); + // @@protoc_insertion_point(field_set:messages.data.Effector.ammunition) +} +inline ::int32_t Effector::_internal_ammunition() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.ammunition_; +} +inline void Effector::_internal_set_ammunition(::int32_t value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.ammunition_ = value; +} + +// int32 maxammunition = 6; +inline void Effector::clear_maxammunition() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.maxammunition_ = 0; +} +inline ::int32_t Effector::maxammunition() const { + // @@protoc_insertion_point(field_get:messages.data.Effector.maxammunition) + return _internal_maxammunition(); +} +inline void Effector::set_maxammunition(::int32_t value) { + _internal_set_maxammunition(value); + // @@protoc_insertion_point(field_set:messages.data.Effector.maxammunition) +} +inline ::int32_t Effector::_internal_maxammunition() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.maxammunition_; +} +inline void Effector::_internal_set_maxammunition(::int32_t value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.maxammunition_ = value; +} + +// uint32 Status = 7; +inline void Effector::clear_status() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.status_ = 0u; +} +inline ::uint32_t Effector::status() const { + // @@protoc_insertion_point(field_get:messages.data.Effector.Status) + return _internal_status(); +} +inline void Effector::set_status(::uint32_t value) { + _internal_set_status(value); + // @@protoc_insertion_point(field_set:messages.data.Effector.Status) +} +inline ::uint32_t Effector::_internal_status() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.status_; +} +inline void Effector::_internal_set_status(::uint32_t value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.status_ = value; +} + +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif // __GNUC__ + +// @@protoc_insertion_point(namespace_scope) +} // namespace data +} // namespace messages + + +// @@protoc_insertion_point(global_scope) + +#include "google/protobuf/port_undef.inc" + +#endif // GOOGLE_PROTOBUF_INCLUDED_SystemStateUpdate_2eproto_2epb_2eh diff --git a/include/SimCore/Messages/Protos/SystemStateUpdate.proto b/include/SimCore/Messages/Protos/SystemStateUpdate.proto new file mode 100644 index 0000000..2a3cac4 --- /dev/null +++ b/include/SimCore/Messages/Protos/SystemStateUpdate.proto @@ -0,0 +1,33 @@ +syntax = "proto3"; +package messages.data; + +import "Identifier.proto"; + + +message SystemStateUpdate +{ +messages.track.Identifier OwnID = 1; +repeated Sensor sensors = 2; +repeated Effector effectors = 3; + +} + +message Sensor +{ +messages.track.Identifier ID = 1; +string name = 2; +double range = 3; +uint32 kind = 4; +uint32 Status = 5; + +} +message Effector +{ +messages.track.Identifier ID = 1; +string name = 2; +double range = 3; +int32 ammunition = 4; +int32 maxammunition =6; +uint32 Status = 7; + +} \ No newline at end of file diff --git a/include/SimCore/Messages/Protos/TracklistUpdate.pb.cc b/include/SimCore/Messages/Protos/TracklistUpdate.pb.cc new file mode 100644 index 0000000..ea7ab35 --- /dev/null +++ b/include/SimCore/Messages/Protos/TracklistUpdate.pb.cc @@ -0,0 +1,475 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: TracklistUpdate.proto + +#include "TracklistUpdate.pb.h" + +#include +#include "google/protobuf/io/coded_stream.h" +#include "google/protobuf/extension_set.h" +#include "google/protobuf/wire_format_lite.h" +#include "google/protobuf/descriptor.h" +#include "google/protobuf/generated_message_reflection.h" +#include "google/protobuf/reflection_ops.h" +#include "google/protobuf/wire_format.h" +#include "google/protobuf/generated_message_tctable_impl.h" +// @@protoc_insertion_point(includes) + +// Must be included last. +#include "google/protobuf/port_def.inc" +PROTOBUF_PRAGMA_INIT_SEG +namespace _pb = ::google::protobuf; +namespace _pbi = ::google::protobuf::internal; +namespace _fl = ::google::protobuf::internal::field_layout; +namespace messages { +namespace data { + +inline constexpr TracklistUpdate::Impl_::Impl_( + ::_pbi::ConstantInitialized) noexcept + : _cached_size_{0}, + tracks_{}, + ownid_{nullptr}, + timestamp_{nullptr}, + trackscount_{0u} {} + +template +PROTOBUF_CONSTEXPR TracklistUpdate::TracklistUpdate(::_pbi::ConstantInitialized) + : _impl_(::_pbi::ConstantInitialized()) {} +struct TracklistUpdateDefaultTypeInternal { + PROTOBUF_CONSTEXPR TracklistUpdateDefaultTypeInternal() : _instance(::_pbi::ConstantInitialized{}) {} + ~TracklistUpdateDefaultTypeInternal() {} + union { + TracklistUpdate _instance; + }; +}; + +PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT + PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 TracklistUpdateDefaultTypeInternal _TracklistUpdate_default_instance_; +} // namespace data +} // namespace messages +static ::_pb::Metadata file_level_metadata_TracklistUpdate_2eproto[1]; +static constexpr const ::_pb::EnumDescriptor** + file_level_enum_descriptors_TracklistUpdate_2eproto = nullptr; +static constexpr const ::_pb::ServiceDescriptor** + file_level_service_descriptors_TracklistUpdate_2eproto = nullptr; +const ::uint32_t + TableStruct_TracklistUpdate_2eproto::offsets[] ABSL_ATTRIBUTE_SECTION_VARIABLE( + protodesc_cold) = { + PROTOBUF_FIELD_OFFSET(::messages::data::TracklistUpdate, _impl_._has_bits_), + PROTOBUF_FIELD_OFFSET(::messages::data::TracklistUpdate, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + ~0u, // no _inlined_string_donated_ + ~0u, // no _split_ + ~0u, // no sizeof(Split) + PROTOBUF_FIELD_OFFSET(::messages::data::TracklistUpdate, _impl_.ownid_), + PROTOBUF_FIELD_OFFSET(::messages::data::TracklistUpdate, _impl_.timestamp_), + PROTOBUF_FIELD_OFFSET(::messages::data::TracklistUpdate, _impl_.trackscount_), + PROTOBUF_FIELD_OFFSET(::messages::data::TracklistUpdate, _impl_.tracks_), + 0, + 1, + ~0u, + ~0u, +}; + +static const ::_pbi::MigrationSchema + schemas[] ABSL_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { + {0, 12, -1, sizeof(::messages::data::TracklistUpdate)}, +}; + +static const ::_pb::Message* const file_default_instances[] = { + &::messages::data::_TracklistUpdate_default_instance_._instance, +}; +const char descriptor_table_protodef_TracklistUpdate_2eproto[] ABSL_ATTRIBUTE_SECTION_VARIABLE( + protodesc_cold) = { + "\n\025TracklistUpdate.proto\022\rmessages.data\032\020" + "Identifier.proto\032\037google/protobuf/timest" + "amp.proto\032\016SimTrack.proto\"\255\001\n\017TracklistU" + "pdate\022)\n\005OwnID\030\001 \001(\0132\032.messages.track.Id" + "entifier\022-\n\ttimestamp\030\002 \001(\0132\032.google.pro" + "tobuf.Timestamp\022\023\n\013TracksCount\030\003 \001(\r\022+\n\006" + "tracks\030\004 \003(\0132\033.messages.SimTrack.SimTrac" + "kb\006proto3" +}; +static const ::_pbi::DescriptorTable* const descriptor_table_TracklistUpdate_2eproto_deps[3] = + { + &::descriptor_table_Identifier_2eproto, + &::descriptor_table_SimTrack_2eproto, + &::descriptor_table_google_2fprotobuf_2ftimestamp_2eproto, +}; +static ::absl::once_flag descriptor_table_TracklistUpdate_2eproto_once; +const ::_pbi::DescriptorTable descriptor_table_TracklistUpdate_2eproto = { + false, + false, + 289, + descriptor_table_protodef_TracklistUpdate_2eproto, + "TracklistUpdate.proto", + &descriptor_table_TracklistUpdate_2eproto_once, + descriptor_table_TracklistUpdate_2eproto_deps, + 3, + 1, + schemas, + file_default_instances, + TableStruct_TracklistUpdate_2eproto::offsets, + file_level_metadata_TracklistUpdate_2eproto, + file_level_enum_descriptors_TracklistUpdate_2eproto, + file_level_service_descriptors_TracklistUpdate_2eproto, +}; + +// This function exists to be marked as weak. +// It can significantly speed up compilation by breaking up LLVM's SCC +// in the .pb.cc translation units. Large translation units see a +// reduction of more than 35% of walltime for optimized builds. Without +// the weak attribute all the messages in the file, including all the +// vtables and everything they use become part of the same SCC through +// a cycle like: +// GetMetadata -> descriptor table -> default instances -> +// vtables -> GetMetadata +// By adding a weak function here we break the connection from the +// individual vtables back into the descriptor table. +PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_TracklistUpdate_2eproto_getter() { + return &descriptor_table_TracklistUpdate_2eproto; +} +// Force running AddDescriptors() at dynamic initialization time. +PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 +static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_TracklistUpdate_2eproto(&descriptor_table_TracklistUpdate_2eproto); +namespace messages { +namespace data { +// =================================================================== + +class TracklistUpdate::_Internal { + public: + using HasBits = decltype(std::declval()._impl_._has_bits_); + static constexpr ::int32_t kHasBitsOffset = + 8 * PROTOBUF_FIELD_OFFSET(TracklistUpdate, _impl_._has_bits_); + static const ::messages::track::Identifier& ownid(const TracklistUpdate* msg); + static void set_has_ownid(HasBits* has_bits) { + (*has_bits)[0] |= 1u; + } + static const ::google::protobuf::Timestamp& timestamp(const TracklistUpdate* msg); + static void set_has_timestamp(HasBits* has_bits) { + (*has_bits)[0] |= 2u; + } +}; + +const ::messages::track::Identifier& TracklistUpdate::_Internal::ownid(const TracklistUpdate* msg) { + return *msg->_impl_.ownid_; +} +const ::google::protobuf::Timestamp& TracklistUpdate::_Internal::timestamp(const TracklistUpdate* msg) { + return *msg->_impl_.timestamp_; +} +void TracklistUpdate::clear_ownid() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (_impl_.ownid_ != nullptr) _impl_.ownid_->Clear(); + _impl_._has_bits_[0] &= ~0x00000001u; +} +void TracklistUpdate::clear_timestamp() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (_impl_.timestamp_ != nullptr) _impl_.timestamp_->Clear(); + _impl_._has_bits_[0] &= ~0x00000002u; +} +void TracklistUpdate::clear_tracks() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.tracks_.Clear(); +} +TracklistUpdate::TracklistUpdate(::google::protobuf::Arena* arena) + : ::google::protobuf::Message(arena) { + SharedCtor(arena); + // @@protoc_insertion_point(arena_constructor:messages.data.TracklistUpdate) +} +inline PROTOBUF_NDEBUG_INLINE TracklistUpdate::Impl_::Impl_( + ::google::protobuf::internal::InternalVisibility visibility, ::google::protobuf::Arena* arena, + const Impl_& from) + : _has_bits_{from._has_bits_}, + _cached_size_{0}, + tracks_{visibility, arena, from.tracks_} {} + +TracklistUpdate::TracklistUpdate( + ::google::protobuf::Arena* arena, + const TracklistUpdate& from) + : ::google::protobuf::Message(arena) { + TracklistUpdate* const _this = this; + (void)_this; + _internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>( + from._internal_metadata_); + new (&_impl_) Impl_(internal_visibility(), arena, from._impl_); + ::uint32_t cached_has_bits = _impl_._has_bits_[0]; + _impl_.ownid_ = (cached_has_bits & 0x00000001u) + ? CreateMaybeMessage<::messages::track::Identifier>(arena, *from._impl_.ownid_) + : nullptr; + _impl_.timestamp_ = (cached_has_bits & 0x00000002u) + ? CreateMaybeMessage<::google::protobuf::Timestamp>(arena, *from._impl_.timestamp_) + : nullptr; + _impl_.trackscount_ = from._impl_.trackscount_; + + // @@protoc_insertion_point(copy_constructor:messages.data.TracklistUpdate) +} +inline PROTOBUF_NDEBUG_INLINE TracklistUpdate::Impl_::Impl_( + ::google::protobuf::internal::InternalVisibility visibility, + ::google::protobuf::Arena* arena) + : _cached_size_{0}, + tracks_{visibility, arena} {} + +inline void TracklistUpdate::SharedCtor(::_pb::Arena* arena) { + new (&_impl_) Impl_(internal_visibility(), arena); + ::memset(reinterpret_cast(&_impl_) + + offsetof(Impl_, ownid_), + 0, + offsetof(Impl_, trackscount_) - + offsetof(Impl_, ownid_) + + sizeof(Impl_::trackscount_)); +} +TracklistUpdate::~TracklistUpdate() { + // @@protoc_insertion_point(destructor:messages.data.TracklistUpdate) + _internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>(); + SharedDtor(); +} +inline void TracklistUpdate::SharedDtor() { + ABSL_DCHECK(GetArena() == nullptr); + delete _impl_.ownid_; + delete _impl_.timestamp_; + _impl_.~Impl_(); +} + +const ::google::protobuf::MessageLite::ClassData* +TracklistUpdate::GetClassData() const { + PROTOBUF_CONSTINIT static const ::google::protobuf::MessageLite::ClassData + _data_ = { + TracklistUpdate::MergeImpl, + nullptr, // OnDemandRegisterArenaDtor + &::google::protobuf::Message::kDescriptorMethods, + PROTOBUF_FIELD_OFFSET(TracklistUpdate, _impl_._cached_size_), + }; + return &_data_; +} +PROTOBUF_NOINLINE void TracklistUpdate::Clear() { +// @@protoc_insertion_point(message_clear_start:messages.data.TracklistUpdate) + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ::uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + _impl_.tracks_.Clear(); + cached_has_bits = _impl_._has_bits_[0]; + if (cached_has_bits & 0x00000003u) { + if (cached_has_bits & 0x00000001u) { + ABSL_DCHECK(_impl_.ownid_ != nullptr); + _impl_.ownid_->Clear(); + } + if (cached_has_bits & 0x00000002u) { + ABSL_DCHECK(_impl_.timestamp_ != nullptr); + _impl_.timestamp_->Clear(); + } + } + _impl_.trackscount_ = 0u; + _impl_._has_bits_.Clear(); + _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>(); +} + +const char* TracklistUpdate::_InternalParse( + const char* ptr, ::_pbi::ParseContext* ctx) { + ptr = ::_pbi::TcParser::ParseLoop(this, ptr, ctx, &_table_.header); + return ptr; +} + + +PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 +const ::_pbi::TcParseTable<2, 4, 3, 0, 2> TracklistUpdate::_table_ = { + { + PROTOBUF_FIELD_OFFSET(TracklistUpdate, _impl_._has_bits_), + 0, // no _extensions_ + 4, 24, // max_field_number, fast_idx_mask + offsetof(decltype(_table_), field_lookup_table), + 4294967280, // skipmap + offsetof(decltype(_table_), field_entries), + 4, // num_field_entries + 3, // num_aux_entries + offsetof(decltype(_table_), aux_entries), + &_TracklistUpdate_default_instance_._instance, + ::_pbi::TcParser::GenericFallback, // fallback + }, {{ + // repeated .messages.SimTrack.SimTrack tracks = 4; + {::_pbi::TcParser::FastMtR1, + {34, 63, 2, PROTOBUF_FIELD_OFFSET(TracklistUpdate, _impl_.tracks_)}}, + // .messages.track.Identifier OwnID = 1; + {::_pbi::TcParser::FastMtS1, + {10, 0, 0, PROTOBUF_FIELD_OFFSET(TracklistUpdate, _impl_.ownid_)}}, + // .google.protobuf.Timestamp timestamp = 2; + {::_pbi::TcParser::FastMtS1, + {18, 1, 1, PROTOBUF_FIELD_OFFSET(TracklistUpdate, _impl_.timestamp_)}}, + // uint32 TracksCount = 3; + {::_pbi::TcParser::SingularVarintNoZag1<::uint32_t, offsetof(TracklistUpdate, _impl_.trackscount_), 63>(), + {24, 63, 0, PROTOBUF_FIELD_OFFSET(TracklistUpdate, _impl_.trackscount_)}}, + }}, {{ + 65535, 65535 + }}, {{ + // .messages.track.Identifier OwnID = 1; + {PROTOBUF_FIELD_OFFSET(TracklistUpdate, _impl_.ownid_), _Internal::kHasBitsOffset + 0, 0, + (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)}, + // .google.protobuf.Timestamp timestamp = 2; + {PROTOBUF_FIELD_OFFSET(TracklistUpdate, _impl_.timestamp_), _Internal::kHasBitsOffset + 1, 1, + (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)}, + // uint32 TracksCount = 3; + {PROTOBUF_FIELD_OFFSET(TracklistUpdate, _impl_.trackscount_), -1, 0, + (0 | ::_fl::kFcSingular | ::_fl::kUInt32)}, + // repeated .messages.SimTrack.SimTrack tracks = 4; + {PROTOBUF_FIELD_OFFSET(TracklistUpdate, _impl_.tracks_), -1, 2, + (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)}, + }}, {{ + {::_pbi::TcParser::GetTable<::messages::track::Identifier>()}, + {::_pbi::TcParser::GetTable<::google::protobuf::Timestamp>()}, + {::_pbi::TcParser::GetTable<::messages::SimTrack::SimTrack>()}, + }}, {{ + }}, +}; + +::uint8_t* TracklistUpdate::_InternalSerialize( + ::uint8_t* target, + ::google::protobuf::io::EpsCopyOutputStream* stream) const { + // @@protoc_insertion_point(serialize_to_array_start:messages.data.TracklistUpdate) + ::uint32_t cached_has_bits = 0; + (void)cached_has_bits; + + cached_has_bits = _impl_._has_bits_[0]; + // .messages.track.Identifier OwnID = 1; + if (cached_has_bits & 0x00000001u) { + target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage( + 1, _Internal::ownid(this), + _Internal::ownid(this).GetCachedSize(), target, stream); + } + + // .google.protobuf.Timestamp timestamp = 2; + if (cached_has_bits & 0x00000002u) { + target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage( + 2, _Internal::timestamp(this), + _Internal::timestamp(this).GetCachedSize(), target, stream); + } + + // uint32 TracksCount = 3; + if (this->_internal_trackscount() != 0) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteUInt32ToArray( + 3, this->_internal_trackscount(), target); + } + + // repeated .messages.SimTrack.SimTrack tracks = 4; + for (unsigned i = 0, + n = static_cast(this->_internal_tracks_size()); i < n; i++) { + const auto& repfield = this->_internal_tracks().Get(i); + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessage(4, repfield, repfield.GetCachedSize(), target, stream); + } + + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = + ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream); + } + // @@protoc_insertion_point(serialize_to_array_end:messages.data.TracklistUpdate) + return target; +} + +::size_t TracklistUpdate::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:messages.data.TracklistUpdate) + ::size_t total_size = 0; + + ::uint32_t cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // repeated .messages.SimTrack.SimTrack tracks = 4; + total_size += 1UL * this->_internal_tracks_size(); + for (const auto& msg : this->_internal_tracks()) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSize(msg); + } + cached_has_bits = _impl_._has_bits_[0]; + if (cached_has_bits & 0x00000003u) { + // .messages.track.Identifier OwnID = 1; + if (cached_has_bits & 0x00000001u) { + total_size += + 1 + ::google::protobuf::internal::WireFormatLite::MessageSize(*_impl_.ownid_); + } + + // .google.protobuf.Timestamp timestamp = 2; + if (cached_has_bits & 0x00000002u) { + total_size += + 1 + ::google::protobuf::internal::WireFormatLite::MessageSize(*_impl_.timestamp_); + } + + } + // uint32 TracksCount = 3; + if (this->_internal_trackscount() != 0) { + total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne( + this->_internal_trackscount()); + } + + return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); +} + + +void TracklistUpdate::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) { + auto* const _this = static_cast(&to_msg); + auto& from = static_cast(from_msg); + // @@protoc_insertion_point(class_specific_merge_from_start:messages.data.TracklistUpdate) + ABSL_DCHECK_NE(&from, _this); + ::uint32_t cached_has_bits = 0; + (void) cached_has_bits; + + _this->_internal_mutable_tracks()->MergeFrom( + from._internal_tracks()); + cached_has_bits = from._impl_._has_bits_[0]; + if (cached_has_bits & 0x00000003u) { + if (cached_has_bits & 0x00000001u) { + _this->_internal_mutable_ownid()->::messages::track::Identifier::MergeFrom( + from._internal_ownid()); + } + if (cached_has_bits & 0x00000002u) { + _this->_internal_mutable_timestamp()->::google::protobuf::Timestamp::MergeFrom( + from._internal_timestamp()); + } + } + if (from._internal_trackscount() != 0) { + _this->_internal_set_trackscount(from._internal_trackscount()); + } + _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_); +} + +void TracklistUpdate::CopyFrom(const TracklistUpdate& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:messages.data.TracklistUpdate) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +PROTOBUF_NOINLINE bool TracklistUpdate::IsInitialized() const { + return true; +} + +void TracklistUpdate::InternalSwap(TracklistUpdate* PROTOBUF_RESTRICT other) { + using std::swap; + _internal_metadata_.InternalSwap(&other->_internal_metadata_); + swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]); + _impl_.tracks_.InternalSwap(&other->_impl_.tracks_); + ::google::protobuf::internal::memswap< + PROTOBUF_FIELD_OFFSET(TracklistUpdate, _impl_.trackscount_) + + sizeof(TracklistUpdate::_impl_.trackscount_) + - PROTOBUF_FIELD_OFFSET(TracklistUpdate, _impl_.ownid_)>( + reinterpret_cast(&_impl_.ownid_), + reinterpret_cast(&other->_impl_.ownid_)); +} + +::google::protobuf::Metadata TracklistUpdate::GetMetadata() const { + return ::_pbi::AssignDescriptors( + &descriptor_table_TracklistUpdate_2eproto_getter, &descriptor_table_TracklistUpdate_2eproto_once, + file_level_metadata_TracklistUpdate_2eproto[0]); +} +// @@protoc_insertion_point(namespace_scope) +} // namespace data +} // namespace messages +namespace google { +namespace protobuf { +} // namespace protobuf +} // namespace google +// @@protoc_insertion_point(global_scope) +#include "google/protobuf/port_undef.inc" diff --git a/include/SimCore/Messages/Protos/TracklistUpdate.pb.h b/include/SimCore/Messages/Protos/TracklistUpdate.pb.h new file mode 100644 index 0000000..918f301 --- /dev/null +++ b/include/SimCore/Messages/Protos/TracklistUpdate.pb.h @@ -0,0 +1,587 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: TracklistUpdate.proto +// Protobuf C++ Version: 4.24.0-main + +#ifndef GOOGLE_PROTOBUF_INCLUDED_TracklistUpdate_2eproto_2epb_2eh +#define GOOGLE_PROTOBUF_INCLUDED_TracklistUpdate_2eproto_2epb_2eh + +#include +#include +#include +#include + +#include "google/protobuf/port_def.inc" +#if PROTOBUF_VERSION < 4025000 +#error "This file was generated by a newer version of protoc which is" +#error "incompatible with your Protocol Buffer headers. Please update" +#error "your headers." +#endif // PROTOBUF_VERSION + +#if 4025000 < PROTOBUF_MIN_PROTOC_VERSION +#error "This file was generated by an older version of protoc which is" +#error "incompatible with your Protocol Buffer headers. Please" +#error "regenerate this file with a newer version of protoc." +#endif // PROTOBUF_MIN_PROTOC_VERSION +#include "google/protobuf/port_undef.inc" +#include "google/protobuf/io/coded_stream.h" +#include "google/protobuf/arena.h" +#include "google/protobuf/arenastring.h" +#include "google/protobuf/generated_message_tctable_decl.h" +#include "google/protobuf/generated_message_util.h" +#include "google/protobuf/metadata_lite.h" +#include "google/protobuf/generated_message_reflection.h" +#include "google/protobuf/message.h" +#include "google/protobuf/repeated_field.h" // IWYU pragma: export +#include "google/protobuf/extension_set.h" // IWYU pragma: export +#include "google/protobuf/unknown_field_set.h" +#include "Identifier.pb.h" +#include "google/protobuf/timestamp.pb.h" +#include "SimTrack.pb.h" +// @@protoc_insertion_point(includes) + +// Must be included last. +#include "google/protobuf/port_def.inc" + +#define PROTOBUF_INTERNAL_EXPORT_TracklistUpdate_2eproto + +namespace google { +namespace protobuf { +namespace internal { +class AnyMetadata; +} // namespace internal +} // namespace protobuf +} // namespace google + +// Internal implementation detail -- do not use these members. +struct TableStruct_TracklistUpdate_2eproto { + static const ::uint32_t offsets[]; +}; +extern const ::google::protobuf::internal::DescriptorTable + descriptor_table_TracklistUpdate_2eproto; +namespace messages { +namespace data { +class TracklistUpdate; +struct TracklistUpdateDefaultTypeInternal; +extern TracklistUpdateDefaultTypeInternal _TracklistUpdate_default_instance_; +} // namespace data +} // namespace messages +namespace google { +namespace protobuf { +} // namespace protobuf +} // namespace google + +namespace messages { +namespace data { + +// =================================================================== + + +// ------------------------------------------------------------------- + +class TracklistUpdate final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:messages.data.TracklistUpdate) */ { + public: + inline TracklistUpdate() : TracklistUpdate(nullptr) {} + ~TracklistUpdate() override; + template + explicit PROTOBUF_CONSTEXPR TracklistUpdate(::google::protobuf::internal::ConstantInitialized); + + inline TracklistUpdate(const TracklistUpdate& from) + : TracklistUpdate(nullptr, from) {} + TracklistUpdate(TracklistUpdate&& from) noexcept + : TracklistUpdate() { + *this = ::std::move(from); + } + + inline TracklistUpdate& operator=(const TracklistUpdate& from) { + CopyFrom(from); + return *this; + } + inline TracklistUpdate& operator=(TracklistUpdate&& from) noexcept { + if (this == &from) return *this; + if (GetArena() == from.GetArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { + InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const + ABSL_ATTRIBUTE_LIFETIME_BOUND { + return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance); + } + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() + ABSL_ATTRIBUTE_LIFETIME_BOUND { + return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>(); + } + + static const ::google::protobuf::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::google::protobuf::Descriptor* GetDescriptor() { + return default_instance().GetMetadata().descriptor; + } + static const ::google::protobuf::Reflection* GetReflection() { + return default_instance().GetMetadata().reflection; + } + static const TracklistUpdate& default_instance() { + return *internal_default_instance(); + } + static inline const TracklistUpdate* internal_default_instance() { + return reinterpret_cast( + &_TracklistUpdate_default_instance_); + } + static constexpr int kIndexInFileMessages = + 0; + + friend void swap(TracklistUpdate& a, TracklistUpdate& b) { + a.Swap(&b); + } + inline void Swap(TracklistUpdate* other) { + if (other == this) return; + #ifdef PROTOBUF_FORCE_COPY_IN_SWAP + if (GetArena() != nullptr && + GetArena() == other->GetArena()) { + #else // PROTOBUF_FORCE_COPY_IN_SWAP + if (GetArena() == other->GetArena()) { + #endif // !PROTOBUF_FORCE_COPY_IN_SWAP + InternalSwap(other); + } else { + ::google::protobuf::internal::GenericSwap(this, other); + } + } + void UnsafeArenaSwap(TracklistUpdate* other) { + if (other == this) return; + ABSL_DCHECK(GetArena() == other->GetArena()); + InternalSwap(other); + } + + // implements Message ---------------------------------------------- + + TracklistUpdate* New(::google::protobuf::Arena* arena = nullptr) const final { + return CreateMaybeMessage(arena); + } + using ::google::protobuf::Message::CopyFrom; + void CopyFrom(const TracklistUpdate& from); + using ::google::protobuf::Message::MergeFrom; + void MergeFrom( const TracklistUpdate& from) { + TracklistUpdate::MergeImpl(*this, from); + } + private: + static void MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg); + public: + ABSL_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + ::size_t ByteSizeLong() const final; + const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final; + ::uint8_t* _InternalSerialize( + ::uint8_t* target, ::google::protobuf::io::EpsCopyOutputStream* stream) const final; + int GetCachedSize() const { return _impl_._cached_size_.Get(); } + + private: + void SharedCtor(::google::protobuf::Arena* arena); + void SharedDtor(); + void InternalSwap(TracklistUpdate* other); + + private: + friend class ::google::protobuf::internal::AnyMetadata; + static ::absl::string_view FullMessageName() { + return "messages.data.TracklistUpdate"; + } + protected: + explicit TracklistUpdate(::google::protobuf::Arena* arena); + TracklistUpdate(::google::protobuf::Arena* arena, const TracklistUpdate& from); + const ::google::protobuf::MessageLite::ClassData* GetClassData() const final; + public: + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + enum : int { + kTracksFieldNumber = 4, + kOwnIDFieldNumber = 1, + kTimestampFieldNumber = 2, + kTracksCountFieldNumber = 3, + }; + // repeated .messages.SimTrack.SimTrack tracks = 4; + int tracks_size() const; + private: + int _internal_tracks_size() const; + + public: + void clear_tracks() ; + ::messages::SimTrack::SimTrack* mutable_tracks(int index); + ::google::protobuf::RepeatedPtrField< ::messages::SimTrack::SimTrack >* + mutable_tracks(); + private: + const ::google::protobuf::RepeatedPtrField<::messages::SimTrack::SimTrack>& _internal_tracks() const; + ::google::protobuf::RepeatedPtrField<::messages::SimTrack::SimTrack>* _internal_mutable_tracks(); + public: + const ::messages::SimTrack::SimTrack& tracks(int index) const; + ::messages::SimTrack::SimTrack* add_tracks(); + const ::google::protobuf::RepeatedPtrField< ::messages::SimTrack::SimTrack >& + tracks() const; + // .messages.track.Identifier OwnID = 1; + bool has_ownid() const; + void clear_ownid() ; + const ::messages::track::Identifier& ownid() const; + PROTOBUF_NODISCARD ::messages::track::Identifier* release_ownid(); + ::messages::track::Identifier* mutable_ownid(); + void set_allocated_ownid(::messages::track::Identifier* value); + void unsafe_arena_set_allocated_ownid(::messages::track::Identifier* value); + ::messages::track::Identifier* unsafe_arena_release_ownid(); + + private: + const ::messages::track::Identifier& _internal_ownid() const; + ::messages::track::Identifier* _internal_mutable_ownid(); + + public: + // .google.protobuf.Timestamp timestamp = 2; + bool has_timestamp() const; + void clear_timestamp() ; + const ::google::protobuf::Timestamp& timestamp() const; + PROTOBUF_NODISCARD ::google::protobuf::Timestamp* release_timestamp(); + ::google::protobuf::Timestamp* mutable_timestamp(); + void set_allocated_timestamp(::google::protobuf::Timestamp* value); + void unsafe_arena_set_allocated_timestamp(::google::protobuf::Timestamp* value); + ::google::protobuf::Timestamp* unsafe_arena_release_timestamp(); + + private: + const ::google::protobuf::Timestamp& _internal_timestamp() const; + ::google::protobuf::Timestamp* _internal_mutable_timestamp(); + + public: + // uint32 TracksCount = 3; + void clear_trackscount() ; + ::uint32_t trackscount() const; + void set_trackscount(::uint32_t value); + + private: + ::uint32_t _internal_trackscount() const; + void _internal_set_trackscount(::uint32_t value); + + public: + // @@protoc_insertion_point(class_scope:messages.data.TracklistUpdate) + private: + class _Internal; + + friend class ::google::protobuf::internal::TcParser; + static const ::google::protobuf::internal::TcParseTable< + 2, 4, 3, + 0, 2> + _table_; + friend class ::google::protobuf::MessageLite; + friend class ::google::protobuf::Arena; + template + friend class ::google::protobuf::Arena::InternalHelper; + using InternalArenaConstructable_ = void; + using DestructorSkippable_ = void; + struct Impl_ { + + inline explicit constexpr Impl_( + ::google::protobuf::internal::ConstantInitialized) noexcept; + inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility, + ::google::protobuf::Arena* arena); + inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility, + ::google::protobuf::Arena* arena, const Impl_& from); + ::google::protobuf::internal::HasBits<1> _has_bits_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + ::google::protobuf::RepeatedPtrField< ::messages::SimTrack::SimTrack > tracks_; + ::messages::track::Identifier* ownid_; + ::google::protobuf::Timestamp* timestamp_; + ::uint32_t trackscount_; + PROTOBUF_TSAN_DECLARE_MEMBER + }; + union { Impl_ _impl_; }; + friend struct ::TableStruct_TracklistUpdate_2eproto; +}; + +// =================================================================== + + + + +// =================================================================== + + +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstrict-aliasing" +#endif // __GNUC__ +// ------------------------------------------------------------------- + +// TracklistUpdate + +// .messages.track.Identifier OwnID = 1; +inline bool TracklistUpdate::has_ownid() const { + bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0; + PROTOBUF_ASSUME(!value || _impl_.ownid_ != nullptr); + return value; +} +inline const ::messages::track::Identifier& TracklistUpdate::_internal_ownid() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + const ::messages::track::Identifier* p = _impl_.ownid_; + return p != nullptr ? *p : reinterpret_cast(::messages::track::_Identifier_default_instance_); +} +inline const ::messages::track::Identifier& TracklistUpdate::ownid() const ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_get:messages.data.TracklistUpdate.OwnID) + return _internal_ownid(); +} +inline void TracklistUpdate::unsafe_arena_set_allocated_ownid(::messages::track::Identifier* value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (GetArena() == nullptr) { + delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.ownid_); + } + _impl_.ownid_ = reinterpret_cast<::messages::track::Identifier*>(value); + if (value != nullptr) { + _impl_._has_bits_[0] |= 0x00000001u; + } else { + _impl_._has_bits_[0] &= ~0x00000001u; + } + // @@protoc_insertion_point(field_unsafe_arena_set_allocated:messages.data.TracklistUpdate.OwnID) +} +inline ::messages::track::Identifier* TracklistUpdate::release_ownid() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + + _impl_._has_bits_[0] &= ~0x00000001u; + ::messages::track::Identifier* released = _impl_.ownid_; + _impl_.ownid_ = nullptr; +#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE + auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released); + released = ::google::protobuf::internal::DuplicateIfNonNull(released); + if (GetArena() == nullptr) { + delete old; + } +#else // PROTOBUF_FORCE_COPY_IN_RELEASE + if (GetArena() != nullptr) { + released = ::google::protobuf::internal::DuplicateIfNonNull(released); + } +#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE + return released; +} +inline ::messages::track::Identifier* TracklistUpdate::unsafe_arena_release_ownid() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + // @@protoc_insertion_point(field_release:messages.data.TracklistUpdate.OwnID) + + _impl_._has_bits_[0] &= ~0x00000001u; + ::messages::track::Identifier* temp = _impl_.ownid_; + _impl_.ownid_ = nullptr; + return temp; +} +inline ::messages::track::Identifier* TracklistUpdate::_internal_mutable_ownid() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_._has_bits_[0] |= 0x00000001u; + if (_impl_.ownid_ == nullptr) { + auto* p = CreateMaybeMessage<::messages::track::Identifier>(GetArena()); + _impl_.ownid_ = reinterpret_cast<::messages::track::Identifier*>(p); + } + return _impl_.ownid_; +} +inline ::messages::track::Identifier* TracklistUpdate::mutable_ownid() ABSL_ATTRIBUTE_LIFETIME_BOUND { + ::messages::track::Identifier* _msg = _internal_mutable_ownid(); + // @@protoc_insertion_point(field_mutable:messages.data.TracklistUpdate.OwnID) + return _msg; +} +inline void TracklistUpdate::set_allocated_ownid(::messages::track::Identifier* value) { + ::google::protobuf::Arena* message_arena = GetArena(); + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (message_arena == nullptr) { + delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.ownid_); + } + + if (value != nullptr) { + ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::MessageLite*>(value)->GetArena(); + if (message_arena != submessage_arena) { + value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena); + } + _impl_._has_bits_[0] |= 0x00000001u; + } else { + _impl_._has_bits_[0] &= ~0x00000001u; + } + + _impl_.ownid_ = reinterpret_cast<::messages::track::Identifier*>(value); + // @@protoc_insertion_point(field_set_allocated:messages.data.TracklistUpdate.OwnID) +} + +// .google.protobuf.Timestamp timestamp = 2; +inline bool TracklistUpdate::has_timestamp() const { + bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0; + PROTOBUF_ASSUME(!value || _impl_.timestamp_ != nullptr); + return value; +} +inline const ::google::protobuf::Timestamp& TracklistUpdate::_internal_timestamp() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + const ::google::protobuf::Timestamp* p = _impl_.timestamp_; + return p != nullptr ? *p : reinterpret_cast(::google::protobuf::_Timestamp_default_instance_); +} +inline const ::google::protobuf::Timestamp& TracklistUpdate::timestamp() const ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_get:messages.data.TracklistUpdate.timestamp) + return _internal_timestamp(); +} +inline void TracklistUpdate::unsafe_arena_set_allocated_timestamp(::google::protobuf::Timestamp* value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (GetArena() == nullptr) { + delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.timestamp_); + } + _impl_.timestamp_ = reinterpret_cast<::google::protobuf::Timestamp*>(value); + if (value != nullptr) { + _impl_._has_bits_[0] |= 0x00000002u; + } else { + _impl_._has_bits_[0] &= ~0x00000002u; + } + // @@protoc_insertion_point(field_unsafe_arena_set_allocated:messages.data.TracklistUpdate.timestamp) +} +inline ::google::protobuf::Timestamp* TracklistUpdate::release_timestamp() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + + _impl_._has_bits_[0] &= ~0x00000002u; + ::google::protobuf::Timestamp* released = _impl_.timestamp_; + _impl_.timestamp_ = nullptr; +#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE + auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released); + released = ::google::protobuf::internal::DuplicateIfNonNull(released); + if (GetArena() == nullptr) { + delete old; + } +#else // PROTOBUF_FORCE_COPY_IN_RELEASE + if (GetArena() != nullptr) { + released = ::google::protobuf::internal::DuplicateIfNonNull(released); + } +#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE + return released; +} +inline ::google::protobuf::Timestamp* TracklistUpdate::unsafe_arena_release_timestamp() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + // @@protoc_insertion_point(field_release:messages.data.TracklistUpdate.timestamp) + + _impl_._has_bits_[0] &= ~0x00000002u; + ::google::protobuf::Timestamp* temp = _impl_.timestamp_; + _impl_.timestamp_ = nullptr; + return temp; +} +inline ::google::protobuf::Timestamp* TracklistUpdate::_internal_mutable_timestamp() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_._has_bits_[0] |= 0x00000002u; + if (_impl_.timestamp_ == nullptr) { + auto* p = CreateMaybeMessage<::google::protobuf::Timestamp>(GetArena()); + _impl_.timestamp_ = reinterpret_cast<::google::protobuf::Timestamp*>(p); + } + return _impl_.timestamp_; +} +inline ::google::protobuf::Timestamp* TracklistUpdate::mutable_timestamp() ABSL_ATTRIBUTE_LIFETIME_BOUND { + ::google::protobuf::Timestamp* _msg = _internal_mutable_timestamp(); + // @@protoc_insertion_point(field_mutable:messages.data.TracklistUpdate.timestamp) + return _msg; +} +inline void TracklistUpdate::set_allocated_timestamp(::google::protobuf::Timestamp* value) { + ::google::protobuf::Arena* message_arena = GetArena(); + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + if (message_arena == nullptr) { + delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.timestamp_); + } + + if (value != nullptr) { + ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::MessageLite*>(value)->GetArena(); + if (message_arena != submessage_arena) { + value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena); + } + _impl_._has_bits_[0] |= 0x00000002u; + } else { + _impl_._has_bits_[0] &= ~0x00000002u; + } + + _impl_.timestamp_ = reinterpret_cast<::google::protobuf::Timestamp*>(value); + // @@protoc_insertion_point(field_set_allocated:messages.data.TracklistUpdate.timestamp) +} + +// uint32 TracksCount = 3; +inline void TracklistUpdate::clear_trackscount() { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + _impl_.trackscount_ = 0u; +} +inline ::uint32_t TracklistUpdate::trackscount() const { + // @@protoc_insertion_point(field_get:messages.data.TracklistUpdate.TracksCount) + return _internal_trackscount(); +} +inline void TracklistUpdate::set_trackscount(::uint32_t value) { + _internal_set_trackscount(value); + // @@protoc_insertion_point(field_set:messages.data.TracklistUpdate.TracksCount) +} +inline ::uint32_t TracklistUpdate::_internal_trackscount() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.trackscount_; +} +inline void TracklistUpdate::_internal_set_trackscount(::uint32_t value) { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ; + _impl_.trackscount_ = value; +} + +// repeated .messages.SimTrack.SimTrack tracks = 4; +inline int TracklistUpdate::_internal_tracks_size() const { + return _internal_tracks().size(); +} +inline int TracklistUpdate::tracks_size() const { + return _internal_tracks_size(); +} +inline ::messages::SimTrack::SimTrack* TracklistUpdate::mutable_tracks(int index) + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_mutable:messages.data.TracklistUpdate.tracks) + return _internal_mutable_tracks()->Mutable(index); +} +inline ::google::protobuf::RepeatedPtrField<::messages::SimTrack::SimTrack>* TracklistUpdate::mutable_tracks() + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_mutable_list:messages.data.TracklistUpdate.tracks) + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + return _internal_mutable_tracks(); +} +inline const ::messages::SimTrack::SimTrack& TracklistUpdate::tracks(int index) const + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_get:messages.data.TracklistUpdate.tracks) + return _internal_tracks().Get(index); +} +inline ::messages::SimTrack::SimTrack* TracklistUpdate::add_tracks() ABSL_ATTRIBUTE_LIFETIME_BOUND { + PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race); + ::messages::SimTrack::SimTrack* _add = _internal_mutable_tracks()->Add(); + // @@protoc_insertion_point(field_add:messages.data.TracklistUpdate.tracks) + return _add; +} +inline const ::google::protobuf::RepeatedPtrField<::messages::SimTrack::SimTrack>& TracklistUpdate::tracks() const + ABSL_ATTRIBUTE_LIFETIME_BOUND { + // @@protoc_insertion_point(field_list:messages.data.TracklistUpdate.tracks) + return _internal_tracks(); +} +inline const ::google::protobuf::RepeatedPtrField<::messages::SimTrack::SimTrack>& +TracklistUpdate::_internal_tracks() const { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return _impl_.tracks_; +} +inline ::google::protobuf::RepeatedPtrField<::messages::SimTrack::SimTrack>* +TracklistUpdate::_internal_mutable_tracks() { + PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race); + return &_impl_.tracks_; +} + +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif // __GNUC__ + +// @@protoc_insertion_point(namespace_scope) +} // namespace data +} // namespace messages + + +// @@protoc_insertion_point(global_scope) + +#include "google/protobuf/port_undef.inc" + +#endif // GOOGLE_PROTOBUF_INCLUDED_TracklistUpdate_2eproto_2epb_2eh diff --git a/include/SimCore/Messages/Protos/TracklistUpdate.proto b/include/SimCore/Messages/Protos/TracklistUpdate.proto new file mode 100644 index 0000000..006c307 --- /dev/null +++ b/include/SimCore/Messages/Protos/TracklistUpdate.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; +package messages.data; + +import "Identifier.proto"; +// import "GeocentricPosition.proto"; +import "google/protobuf/timestamp.proto"; +import "SimTrack.proto"; + +message TracklistUpdate +{ +messages.track.Identifier OwnID = 1; +google.protobuf.Timestamp timestamp = 2; +uint32 TracksCount = 3; +repeated messages.SimTrack.SimTrack tracks = 4; + +} + + +// message TrackUpdate +// { +// messages.track.Identifier TrackID = 1; +// string Name = 2; +// messages.track.EntityGeocentricPosition position = 3; +// double distance = 4; +// double bearing = 5; +// } \ No newline at end of file diff --git a/include/SimCore/Messages/SimTrack.hpp b/include/SimCore/Messages/SimTrack.hpp index 9187129..9b660d5 100644 --- a/include/SimCore/Messages/SimTrack.hpp +++ b/include/SimCore/Messages/SimTrack.hpp @@ -29,7 +29,9 @@ namespace SimCore SimTrack(SimCore::Identifier id, WHISPER::SourceType sourcetype, SimCore::Kind::EntityKind entityKind,SimCore::Side::EntitySide Side); - ~SimTrack(); + SimTrack(messages::SimTrack::SimTrack message); + + // ~SimTrack(); /// @brief /// @param pos @@ -57,8 +59,10 @@ namespace SimCore /// @return returns the amout of emission size_t coutEmissions(); + /// @brief return the proto message for a simtrack + messages::SimTrack::SimTrack getSimTrackMessage(); + /// @brief return a WHISPER Message out of a simtrack object - /// @param parentID /// @return WHISPER::Message WHISPER::Message buildMessage(); @@ -72,6 +76,11 @@ namespace SimCore /// @return SimTrack Oject static std::unique_ptr unpack(std::string msgString); + /// @brief creates a SimTrack out of a string message + /// @param msg + /// @return SimTrack Oject + static std::unique_ptr unpack(messages::SimTrack::SimTrack message); + public: Data Name; Data Speed; diff --git a/include/SimCore/Messages/SystemStateUpdate.hpp b/include/SimCore/Messages/SystemStateUpdate.hpp new file mode 100644 index 0000000..372f810 --- /dev/null +++ b/include/SimCore/Messages/SystemStateUpdate.hpp @@ -0,0 +1,45 @@ +#pragma once + + +#include "SimCore/EffectorData.hpp" +#include "SimCore/Identifier.hpp" +#include "SimCore/SensorData.hpp" +#include "WHISPER/Messages/Message.hpp" +#include +#include + +namespace SimCore +{ + + + class SystemStateUpdate + { + public: + SystemStateUpdate(const SimCore::Identifier OwnID); + SimCore::Identifier getOwnID(); + + void addSensorData(SimCore::SensorData data); + + void addEffectorData(SimCore::EffectorData data); + + /// @brief return a WHISPER Message out of a simtrack object + /// @return WHISPER::Message + WHISPER::Message buildMessage(); + + /// @brief creates a SimTrack out of a whisper message + /// @param msg + /// @return SimTrack Oject + static std::unique_ptr unpack(WHISPER::Message msg); + + std::vector getSensorData(); + std::vector getEffectorData(); + + + private: + const SimCore::Identifier OwnID; + + std::vector SensorData_; + std::vector EffectorData_; + }; + +} \ No newline at end of file diff --git a/include/SimCore/Messages/TracklistUpdate.hpp b/include/SimCore/Messages/TracklistUpdate.hpp new file mode 100644 index 0000000..ea507f8 --- /dev/null +++ b/include/SimCore/Messages/TracklistUpdate.hpp @@ -0,0 +1,32 @@ +#pragma once + + +#include "SimCore/Identifier.hpp" +#include "SimCore/Messages/SimTrack.hpp" +#include +#include +namespace SimCore +{ + class TracklistUpdate + { + public: + TracklistUpdate(const SimCore::Identifier OwnID); + SimCore::Identifier getOwnID(); + void addTrack(SimCore::SimTrack track); + std::vector getTracks(); + + WHISPER::Message buildMessage(); + + /// @brief creates a SimTrack out of a whisper message + /// @param msg + /// @return SimTrack Oject + static std::unique_ptr unpack(WHISPER::Message msg); + + private: + const SimCore::Identifier OwnID_; + std::vector tracks_; + + + }; + +} \ No newline at end of file diff --git a/include/SimCore/Position.hpp b/include/SimCore/Position.hpp index dce0804..02aa988 100644 --- a/include/SimCore/Position.hpp +++ b/include/SimCore/Position.hpp @@ -47,7 +47,10 @@ namespace SimCore { std::tuple distanceBearingToPosition(Position &p2); + + bool operator== ( Position &lhs); + friend bool operator==(const Position& lhs, const Position& rhs); Position& operator=(const Position other); @@ -67,4 +70,6 @@ namespace SimCore { }; + + } \ No newline at end of file diff --git a/include/SimCore/SensorData.hpp b/include/SimCore/SensorData.hpp new file mode 100644 index 0000000..4c2ad8d --- /dev/null +++ b/include/SimCore/SensorData.hpp @@ -0,0 +1,27 @@ +#pragma once + + + +#include "SimCore/Identifier.hpp" +#include "SimCore/SimCore.hpp" +#include "SimCore/data.hpp" +#include +namespace SimCore +{ + class SensorData + { + public: + SensorData(const SimCore::Identifier sensorID, const std::string Name); + + + + + public: + const SimCore::Identifier SensorID; + Data Name; + Data Range; + Data SensorKind; + Data Status; + }; + +} \ No newline at end of file diff --git a/include/SimCore/SimCore.hpp b/include/SimCore/SimCore.hpp index 29ac945..51e8da8 100644 --- a/include/SimCore/SimCore.hpp +++ b/include/SimCore/SimCore.hpp @@ -84,6 +84,25 @@ namespace Kind { }; } +enum Status : std::uint32_t{ + ACTIVE, + OFF, + INTAKT, + DEFEKT, + DEGRADED + +}; + + + static std::map StatusMap = + { + {ACTIVE, "Active"}, + {OFF, "Off"}, + {INTAKT, "Intakt" }, + {DEFEKT, "Defekt"}, + {DEGRADED, "Degraded"}, + }; + enum SensorKinds : std::uint32_t { RADAR = 1, ELOKA, diff --git a/libs/whisper-com b/libs/whisper-com index 113b37b..f46706a 160000 --- a/libs/whisper-com +++ b/libs/whisper-com @@ -1 +1 @@ -Subproject commit 113b37b3e668fa896316e6dcf0e543028d30dbd8 +Subproject commit f46706aec7c190713e58576ab89e6c1a2790af96 diff --git a/src/SimCore/EffectorData.cpp b/src/SimCore/EffectorData.cpp new file mode 100644 index 0000000..c3da8ce --- /dev/null +++ b/src/SimCore/EffectorData.cpp @@ -0,0 +1,15 @@ +#include + +namespace SimCore +{ + + + EffectorData::EffectorData(const SimCore::Identifier effctorID, const std::string name) + :EffectorID(effctorID),Name(name) + { + + } + + + +} \ No newline at end of file diff --git a/src/SimCore/Messages/SimTrack.cpp b/src/SimCore/Messages/SimTrack.cpp index 51d97a7..352ff49 100644 --- a/src/SimCore/Messages/SimTrack.cpp +++ b/src/SimCore/Messages/SimTrack.cpp @@ -1,3 +1,4 @@ +#include "SimCore/Identifier.hpp" #include "SimCore/Position.hpp" #include "SimCore/SimCore.hpp" #include "WHISPER/Messages/Message.hpp" @@ -65,10 +66,117 @@ namespace SimCore RCS.setValue(0); } + SimTrack::SimTrack(messages::SimTrack::SimTrack trackMsg) + :ID_(SimCore::Identifier(trackMsg.entityidentifier())) + { + + WHISPER::SourceType sourcetype = (WHISPER::SourceType)trackMsg.contactsourcetype(); - SimTrack::~SimTrack() - { - } + SimCore::Kind::EntityKind entityKind = SimCore::Kind::UNKNOWN; + if (trackMsg.has_contactkind()) + { + entityKind = (SimCore::Kind::EntityKind)trackMsg.contactkind(); + } + + SimCore::Side::EntitySide entitySide = SimCore::Side::UNKNOWN; + if (trackMsg.has_contactside()) + { + entitySide = (SimCore::Side::EntitySide)trackMsg.contactside(); + } + + + // SimCore::SimTrack track(id,trackMsg.conatactname(),entityKind,entitySide); + + if (trackMsg.has_contactsourcetype()) + { + this->SourceType.setValue((WHISPER::SourceType)trackMsg.contactsourcetype()); + } + + if (trackMsg.has_geocentricposition()) + { + this->setPosition(trackMsg.mutable_geocentricposition()->x(), trackMsg.mutable_geocentricposition()->y(), trackMsg.mutable_geocentricposition()->z()); + }else + { + Position tmpPos; + tmpPos.setGeodesicPos(0, 0, 0); + this->setPosition(tmpPos); + } + + if (trackMsg.has_contactcourse()) + { + this->Course.setValue(trackMsg.contactcourse()); + }else + { + this->Course.setValue(0); + } + + if (trackMsg.has_contactspeed()) + { + this->Speed.setValue(trackMsg.contactspeed()); + }else + { + this->Speed.setValue(0); + } + + if (trackMsg.has_conactpitch()) + { + this->Pitch.setValue(trackMsg.conactpitch()); + }else { + this->Pitch.setValue(0); + } + + if (trackMsg.has_contactrcs()) + { + this->RCS.setValue(trackMsg.contactrcs()); + }else + { + switch (entityKind) + { + case SimCore::Kind::EntityKind::AIR: + { + this->RCS.setValue(RCS_AIR); + + break; + } + case SimCore::Kind::EntityKind::LAND: + { + this->RCS.setValue(RCS_LAND); + break; + } + case SimCore::Kind::EntityKind::SURFACE: + { + this->RCS.setValue(RCS_SURFACE); + break; + } + case SimCore::Kind::EntityKind::SPACE: + { + this->RCS.setValue(RCS_SPACE); + break; + } + + default: + { + this->RCS.setValue(RCS_DEFAULT); + break; + } + } + } + + + for (int i = 0; i < trackMsg.contactemissions_size(); i++) + { + const messages::SimTrack::Emission* emission = trackMsg.mutable_contactemissions(i); + auto obj = SimCore::Emission::unpackEmission(*emission); + this->addEmission(obj); + } + + + + } + + // SimTrack::~SimTrack() + // { + // } const SimCore::Identifier SimTrack::getIdentifier() { @@ -92,45 +200,53 @@ namespace SimCore return position_; } + messages::SimTrack::SimTrack SimTrack::getSimTrackMessage() + { + messages::SimTrack::SimTrack SimTrack; + + if (Name.isValid()) SimTrack.set_conatactname(Name.getValue()); + else SimTrack.set_conatactname(" "); + + if (position_.isValid()) + { + SimTrack.mutable_geocentricposition()->set_x(position_.getGeocentricPos()(SimCore::X)); + SimTrack.mutable_geocentricposition()->set_y(position_.getGeocentricPos()(SimCore::Y)); + SimTrack.mutable_geocentricposition()->set_z(position_.getGeocentricPos()(SimCore::Z)); + } + if(EntitySide.isValid()) SimTrack.set_contactside(this->EntitySide.getValue()); + if(EntityKind.isValid()) SimTrack.set_contactkind(this->EntitySide.getValue()); + + if(Speed.isValid()) SimTrack.set_contactspeed(this->Speed.getValue()); + if(Course.isValid()) SimTrack.set_contactcourse(this->Course.getValue()); + if(Pitch.isValid()) SimTrack.set_conactpitch(this->Pitch.getValue()); + if(RCS.isValid()) SimTrack.set_contactrcs(this->RCS.getValue()); + + + SimTrack.mutable_entityidentifier()->set_external((uint32_t)this->ID_.isExternal()); + SimTrack.mutable_entityidentifier()->set_uuid(this->ID_.getUUID()); + + std::vector>::iterator it; + for( it = EmissionList.begin(); it != EmissionList.end(); it++) + { + auto emissionMsg = it->get()->packEmission(); + SimTrack.add_contactemissions()->CopyFrom(emissionMsg); + } + // SimTrack.mutable_timestamp()->set_seconds(time(NULL)); + + + return SimTrack; + + } + + WHISPER::Message SimTrack::buildMessage() { WHISPER::Message msg(ID_.getUUID(),WHISPER::MsgTopics::TRACK , WHISPER::MsgType::SIM_TRACK); - messages::SimTrack::SimTrack SimTrack; + messages::SimTrack::SimTrack SimTrack = this->getSimTrackMessage(); - if (Name.isValid()) SimTrack.set_conatactname(Name.getValue()); - else SimTrack.set_conatactname(" "); - - - if (position_.isValid()) - { - SimTrack.mutable_geocentricposition()->set_x(position_.getGeocentricPos()(SimCore::X)); - SimTrack.mutable_geocentricposition()->set_y(position_.getGeocentricPos()(SimCore::Y)); - SimTrack.mutable_geocentricposition()->set_z(position_.getGeocentricPos()(SimCore::Z)); - } - if(EntitySide.isValid()) SimTrack.set_contactside(this->EntitySide.getValue()); - if(EntityKind.isValid()) SimTrack.set_contactkind(this->EntitySide.getValue()); - - if(Speed.isValid()) SimTrack.set_contactspeed(this->Speed.getValue()); - if(Course.isValid()) SimTrack.set_contactcourse(this->Course.getValue()); - if(Pitch.isValid()) SimTrack.set_conactpitch(this->Pitch.getValue()); - if(RCS.isValid()) SimTrack.set_contactrcs(this->RCS.getValue()); - - - SimTrack.mutable_entityidentifier()->set_external((uint32_t)this->ID_.isExternal()); - SimTrack.mutable_entityidentifier()->set_uuid(this->ID_.getUUID()); - - std::vector>::iterator it; - for( it = EmissionList.begin(); it != EmissionList.end(); it++) - { - - auto emissionMsg = it->get()->packEmission(); - SimTrack.add_contactemissions()->CopyFrom(emissionMsg); - - } - // SimTrack.mutable_timestamp()->set_seconds(time(NULL)); auto any = std::make_shared(); @@ -152,113 +268,9 @@ namespace SimCore if(m.payload().Is()) { m.payload().UnpackTo(&trackMsg); - } - - SimCore::Identifier id(*trackMsg.mutable_entityidentifier()); - - - WHISPER::SourceType sourcetype = (WHISPER::SourceType)trackMsg.contactsourcetype(); - - SimCore::Kind::EntityKind entityKind = SimCore::Kind::UNKNOWN; - if (trackMsg.has_contactkind()) - { - entityKind = (SimCore::Kind::EntityKind)trackMsg.contactkind(); - } - - SimCore::Side::EntitySide entitySide = SimCore::Side::UNKNOWN; - if (trackMsg.has_contactside()) - { - entitySide = (SimCore::Side::EntitySide)trackMsg.contactside(); - } - - - SimCore::SimTrack track(id,trackMsg.conatactname(),entityKind,entitySide); - - if (trackMsg.has_contactsourcetype()) - { - track.SourceType.setValue((WHISPER::SourceType)trackMsg.contactsourcetype()); - } - - if (trackMsg.has_geocentricposition()) - { - track.setPosition(trackMsg.mutable_geocentricposition()->x(), trackMsg.mutable_geocentricposition()->y(), trackMsg.mutable_geocentricposition()->z()); - }else - { - Position tmpPos; - tmpPos.setGeodesicPos(0, 0, 0); - track.setPosition(tmpPos); - } - - if (trackMsg.has_contactcourse()) - { - track.Course.setValue(trackMsg.contactcourse()); - }else - { - track.Course.setValue(0); - } - - if (trackMsg.has_contactspeed()) - { - track.Speed.setValue(trackMsg.contactspeed()); - }else - { - track.Speed.setValue(0); - } - - if (trackMsg.has_conactpitch()) - { - track.Pitch.setValue(trackMsg.conactpitch()); - }else { - track.Pitch.setValue(0); - } - - if (trackMsg.has_contactrcs()) - { - track.RCS.setValue(trackMsg.contactrcs()); - }else - { - switch (entityKind) - { - case SimCore::Kind::EntityKind::AIR: - { - track.RCS.setValue(RCS_AIR); - - break; - } - case SimCore::Kind::EntityKind::LAND: - { - track.RCS.setValue(RCS_LAND); - break; - } - case SimCore::Kind::EntityKind::SURFACE: - { - track.RCS.setValue(RCS_SURFACE); - break; - } - case SimCore::Kind::EntityKind::SPACE: - { - track.RCS.setValue(RCS_SPACE); - break; - } + } - default: - { - track.RCS.setValue(RCS_DEFAULT); - break; - } - } - - } - - for (int i = 0; i < trackMsg.contactemissions_size(); i++) - { - const messages::SimTrack::Emission* emission = trackMsg.mutable_contactemissions(i); - auto obj = SimCore::Emission::unpackEmission(*emission); - track.addEmission(obj); - } - - - return track; + return SimTrack(trackMsg); } @@ -275,6 +287,15 @@ namespace SimCore } + std::unique_ptr SimTrack::unpack(messages::SimTrack::SimTrack trackMsg) + { + + + return std::make_unique(trackMsg); + + } + + void SimTrack::addEmission(Emission emission) diff --git a/src/SimCore/Messages/SystemStateUpdate.cpp b/src/SimCore/Messages/SystemStateUpdate.cpp new file mode 100644 index 0000000..b199a99 --- /dev/null +++ b/src/SimCore/Messages/SystemStateUpdate.cpp @@ -0,0 +1,112 @@ +#include "SimCore/EffectorData.hpp" +#include "SimCore/Identifier.hpp" +#include "SimCore/Messages/Protos/SystemStateUpdate.pb.h" +#include "SimCore/SensorData.hpp" +#include +#include +#include + + +namespace SimCore { + + + SystemStateUpdate::SystemStateUpdate(const SimCore::Identifier ownID):OwnID(ownID) + { + + } + SimCore::Identifier SystemStateUpdate::getOwnID() + { + return OwnID; + } + + void SystemStateUpdate::addSensorData(SimCore::SensorData data) + { + SensorData_.push_back(data); + } + + void SystemStateUpdate::addEffectorData(SimCore::EffectorData data) + { + EffectorData_.push_back(data); + } + + + WHISPER::Message SystemStateUpdate::buildMessage() + { + WHISPER::Message msg(OwnID.getUUID(),WHISPER::MsgTopics::DATA , WHISPER::MsgType::SYSTEMSTATE_UPDATE); + + messages::data::SystemStateUpdate message; + message.mutable_ownid()->set_uuid(OwnID.getUUID()); + message.mutable_ownid()->set_external(OwnID.isExternal()); + + for(auto &sensor : SensorData_) + { + messages::data::Sensor *s = message.add_sensors(); + s->set_name(sensor.Name.getValue()); + s->mutable_id()->set_uuid(sensor.SensorID.getUUID()); + s->mutable_id()->set_external(sensor.SensorID.isExternal()); + s->set_kind(sensor.SensorKind.getValue()); + s->set_range(sensor.Range.getValue()); + s->set_status(sensor.Status.getValue()); + + } + for(auto &effector : EffectorData_) + { + messages::data::Effector *e = message.add_effectors(); + e->mutable_id()->set_uuid(effector.EffectorID.getUUID()); + e->set_name(effector.Name.getValue()); + + } + + auto any = std::make_shared(); + + any->PackFrom(message); + msg.addPayLoad(any); + + return msg; + + } + + + std::unique_ptr SystemStateUpdate::unpack(WHISPER::Message msg) + { + auto m = msg.getProtoMessage(); + + auto UpdateMessage = messages::data::SystemStateUpdate(); + if(!m.payload().Is()) + { + return nullptr; + } + m.payload().UnpackTo(&UpdateMessage); + + std::unique_ptr obj = std::make_unique(SimCore::Identifier( UpdateMessage.ownid())); + + for(auto sensor: UpdateMessage.sensors()) + { + SensorData data(SimCore::Identifier(sensor.id()),sensor.name()); + data.SensorKind.setValue(sensor.kind()); + data.Range.setValue(sensor.range()); + data.Status.setValue(sensor.status()); + obj->addSensorData(data); + } + + for(auto effector: UpdateMessage.effectors()) + { + EffectorData data(SimCore::Identifier(effector.id()),effector.name()); + + obj->addEffectorData(data); + + } + + return obj; + } + + std::vector SystemStateUpdate::getSensorData() + { + return this->SensorData_; + } + std::vector SystemStateUpdate::getEffectorData() + { + return this->EffectorData_; + } + +} diff --git a/src/SimCore/Messages/TracklistUpdate.cpp b/src/SimCore/Messages/TracklistUpdate.cpp new file mode 100644 index 0000000..d7cef5d --- /dev/null +++ b/src/SimCore/Messages/TracklistUpdate.cpp @@ -0,0 +1,76 @@ +#include "SimCore/Messages/SimTrack.hpp" +#include +#include + +namespace SimCore +{ + TracklistUpdate::TracklistUpdate(const SimCore::Identifier OwnID) + :OwnID_(OwnID) + { + + } + + SimCore::Identifier TracklistUpdate::getOwnID() + { + return OwnID_; + } + + void TracklistUpdate::addTrack(SimCore::SimTrack track) + { + tracks_.push_back(track); + } + + std::vector TracklistUpdate::getTracks() + { + return tracks_; + } + + WHISPER::Message TracklistUpdate::buildMessage() + { + WHISPER::Message msg(OwnID_.getUUID(),WHISPER::MsgTopics::DATA , WHISPER::MsgType::TRACKLIST_UPDATE); + messages::data::TracklistUpdate message; + message.mutable_ownid()->set_uuid(OwnID_.getUUID()); + message.mutable_ownid()->set_external(OwnID_.isExternal()); + + for(auto &track : tracks_) + { + message.mutable_tracks()->Add(track.getSimTrackMessage()); + } + + + auto any = std::make_shared(); + + any->PackFrom(message); + msg.addPayLoad(any); + + return msg; + + } + + + std::unique_ptr TracklistUpdate::unpack(WHISPER::Message msg) + { + auto m = msg.getProtoMessage(); + + auto UpdateMessage = messages::data::TracklistUpdate(); + if(!m.payload().Is()) + { + return nullptr; + } + m.payload().UnpackTo(&UpdateMessage); + + std::unique_ptr obj = std::make_unique(SimCore::Identifier( UpdateMessage.ownid())); + + for(auto track: UpdateMessage.tracks()) + { + obj->addTrack(SimTrack(track)); + } + + + + return obj; + } + + + +} \ No newline at end of file diff --git a/src/SimCore/Position.cpp b/src/SimCore/Position.cpp index 74cbb30..d7f249b 100644 --- a/src/SimCore/Position.cpp +++ b/src/SimCore/Position.cpp @@ -131,6 +131,18 @@ namespace SimCore { } + + bool operator==(const Position& lhs, const Position& rhs) + { + + if (lhs.GeocentricPos_ == rhs.GeocentricPos_) { + return true; + }else{ + return false; + } + } + + Position& Position::operator=(const Position other) { std::lock_guard lock(other.mx); diff --git a/src/SimCore/SensorData.cpp b/src/SimCore/SensorData.cpp new file mode 100644 index 0000000..dd08a35 --- /dev/null +++ b/src/SimCore/SensorData.cpp @@ -0,0 +1,11 @@ +#include + + + +namespace SimCore +{ + SensorData::SensorData(const SimCore::Identifier sensorID, const std::string Name): + SensorID(sensorID),Name(Name) + {} + +} \ No newline at end of file diff --git a/tests/test_DataClass.cpp b/tests/test_DataClass.cpp index ac62262..b8ae48c 100644 --- a/tests/test_DataClass.cpp +++ b/tests/test_DataClass.cpp @@ -1,4 +1,5 @@ +#include #define CATCH_CONFIG_MAIN #include @@ -24,7 +25,8 @@ SCENARIO("Testing the SimCore Sensor") THEN("check if Track attributes are correct") { REQUIRE(Name.getValue() == "hello world"); - REQUIRE(Name.getValidity() == true); + REQUIRE(Name.isValid() == true); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); REQUIRE(Name.getWriteTime() < std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count()); diff --git a/tests/test_PositionClass.cpp b/tests/test_PositionClass.cpp index 8ab84c8..baeefb2 100644 --- a/tests/test_PositionClass.cpp +++ b/tests/test_PositionClass.cpp @@ -41,7 +41,7 @@ SCENARIO("Testing the SimCorePositionClass") REQUIRE(std::abs(pos1b.getGeocentricPos()(SimCore::Z) - GeocentPos1(SimCore::Z)) <= 0.001); - REQUIRE(pos2.getGeocentricPos() == pos1.getGeocentricPos()); + REQUIRE(pos2 == pos1); REQUIRE(pos2.getGeodesicPos() == pos1.getGeodesicPos()); diff --git a/tests/test_SystemStateUpdate.cpp b/tests/test_SystemStateUpdate.cpp new file mode 100644 index 0000000..ba9991e --- /dev/null +++ b/tests/test_SystemStateUpdate.cpp @@ -0,0 +1,72 @@ + +#include "SimCore/EffectorData.hpp" +#include "SimCore/Identifier.hpp" +#include "SimCore/SimCore.hpp" +#include "WHISPER/Messages/Message.hpp" +#define CATCH_CONFIG_MAIN +#include + +#include + +#include + + +SCENARIO("Testing the SimCore Sensor") +{ + GIVEN("different Attributes for a Track in different forms") + { + + SimCore::Identifier OwnID; + + SimCore::SystemStateUpdate update(OwnID); + + SimCore::Identifier Idsensor1; + std::string NameSensor1 = "TRS3D"; + SimCore::SensorData sensor1(Idsensor1,NameSensor1); + sensor1.SensorKind.setValue(SimCore::SensorKinds::RADAR); + sensor1.Range.setValue(120000); + sensor1.Status.setValue(SimCore::Status::ACTIVE); + update.addSensorData(sensor1); + + + SimCore::Identifier Idsensor2; + std::string NameSensor2 = "Smart-S"; + SimCore::SensorData sensor2(Idsensor2,NameSensor2); + sensor1.SensorKind.setValue(SimCore::SensorKinds::RADAR); + sensor1.Range.setValue(90000); + sensor1.Status.setValue(SimCore::Status::OFF); + update.addSensorData(sensor1); + + SimCore::Identifier Ideffector1; + std::string NameEffector1 = "MLG"; + + SimCore::EffectorData effector1(Ideffector1,NameEffector1); + update.addEffectorData(effector1); + + + + + auto msg = update.buildMessage().serialize(); + + auto resMess = WHISPER::Message(msg); + auto resUpdate = SimCore::SystemStateUpdate::unpack(resMess); + WHEN("constructing Track Object with data") + { + + THEN("check if Track attributes are correct") + { + REQUIRE(resMess.msgType_ == WHISPER::MsgType::SYSTEMSTATE_UPDATE); + REQUIRE(resUpdate->getOwnID() == OwnID); + REQUIRE(resUpdate->getSensorData().size() == 2); + REQUIRE(resUpdate->getEffectorData().size() == 1); + REQUIRE(resUpdate->getEffectorData()[0].EffectorID == effector1.EffectorID); + REQUIRE(resUpdate->getEffectorData()[0].Name.getValue() == NameEffector1); + + + + + + } //THEN + } // WHEN + } // GIVEN +} //SCENARIO \ No newline at end of file diff --git a/tests/test_TracklistUpdate.cpp b/tests/test_TracklistUpdate.cpp new file mode 100644 index 0000000..7050d9f --- /dev/null +++ b/tests/test_TracklistUpdate.cpp @@ -0,0 +1,59 @@ + +#include "SimCore/Identifier.hpp" +#include "SimCore/Messages/SimTrack.hpp" +#include "SimCore/Position.hpp" +#define CATCH_CONFIG_MAIN +#include + +#include + +#include + + +SCENARIO("Testing the SimCore Sensor") +{ + GIVEN("different Attributes for a Track in different forms") + { + SimCore::Identifier OwnID; + SimCore::TracklistUpdate update(OwnID); + SimCore::SimTrack track1; + track1.Course.setValue(273); + track1.Speed.setValue(11); + track1.Pitch.setValue(45); + + SimCore::Position pos1; + pos1.setGeodesicPos(55, 10, 0); + track1.setPosition(pos1); + + update.addTrack(track1); + + + WHEN("constructing Track Object with data") + { + + auto msg = update.buildMessage().serialize(); + + auto resMess = WHISPER::Message(msg); + auto resUpdate = SimCore::TracklistUpdate::unpack(resMess); + + THEN("check if Track attributes are correct") + { + REQUIRE(update.getOwnID() == OwnID); + REQUIRE(update.getTracks().size() == 1); + REQUIRE(resMess.msgType_ == WHISPER::MsgType::TRACKLIST_UPDATE); + REQUIRE(resUpdate->getOwnID() == OwnID); + REQUIRE(resUpdate->getTracks().size() == 1); + REQUIRE(resUpdate->getTracks()[0].getIdentifier() == track1.getIdentifier()); + REQUIRE(resUpdate->getTracks()[0].Course.getValue() == 273); + REQUIRE(resUpdate->getTracks()[0].Speed.getValue() == 11); + REQUIRE(resUpdate->getTracks()[0].Pitch.getValue() == 45); + REQUIRE(resUpdate->getTracks()[0].getPosition() == pos1); + + + + + + } //THEN + } // WHEN + } // GIVEN +} //SCENARIO \ No newline at end of file