diff --git a/score/mw/com/design/events_fields/event_lola_model.puml b/score/mw/com/design/events_fields/event_lola_model.puml index 62c534b39..3f43c6c15 100644 --- a/score/mw/com/design/events_fields/event_lola_model.puml +++ b/score/mw/com/design/events_fields/event_lola_model.puml @@ -39,7 +39,7 @@ abstract class SkeletonBinding { ' Concrete classes class lola::SkeletonEvent { -event_data_storage: EventDataStorage* - -event_data_control: score::cpp::optional + -event_data_control: score::cpp::optional> +SkeletonEvent(parent: Skeleton&, event_fqn: const ElementFqId, max_number_of_slots: const std::size_t, enforce_max_samples: const bool) +Send(SampleType const&): void +Send(SampleAllocateePtr): void @@ -71,7 +71,7 @@ class lola::Skeleton { +Skeleton(const InstanceIdentifier&, SkeletonEvents&) +PrepareOffer(): ResultBlank +PrepareStopOffer(): ResultBlank - +Register(ElementFqId, size_t numberOfSlots): std::pair + +Register(ElementFqId, size_t numberOfSlots): std::pair> +GetInstanceQualityType() const: QualityType } @@ -136,7 +136,7 @@ class lola::SampleAllocateePtr { -event_data_control_: EventDataControlComposite +SampleAllocateePtr() +SampleAllocateePtr(std::nullptr_t) - +SampleAllocateePtr(ptr: pointer, const EventDataControlComposite&, const EventDataControl::SlotIndexType) + +SampleAllocateePtr(ptr: pointer, const EventDataControlComposite<>&, const EventDataControl::SlotIndexType) +GetReferencedSlot() const: EventDataControl::SlotIndexType +get() const: SampleType* +reset(std::nullptr_t): void @@ -159,7 +159,7 @@ class lola::SamplePtr { -event_data_control_: EventDataControl* +SamplePtr() +SamplePtr(std::nullptr_t) - +SamplePtr(pointer ptr, const EventDataControlComposite&, const EventDataControl::SlotIndexType) + +SamplePtr(pointer ptr, const EventDataControlComposite<>&, const EventDataControl::SlotIndexType) +get() const: pointer +swap(): void } @@ -213,11 +213,11 @@ class "<>\nlola::EventSlotStatus" { +IsTimeStampBetween(EventTimeStamp min, EventTimeStamp max): bool } -class EventDataControlCompositeImpl { +class EventDataControlComposite { -asil_qm_control_: EventDataControl* -asil_b_control_: EventDataControl* - +EventDataControlCompositeImpl(asil_qm_control: EventDataControl* const) - +EventDataControlCompositeImpl(asil_qm_control: EventDataControl* const, asil_b_control: EventDataControl* const) + +EventDataControlComposite(asil_qm_control: EventDataControl* const) + +EventDataControlComposite(asil_qm_control: EventDataControl* const, asil_b_control: EventDataControl* const) +AllocateNextSlot(): std::optional +EventReady(EventDataControl::SlotIndexType, EventSlotStatus::EventTimeStamp): void +Discard(EventDataControl::SlotIndexType): void @@ -238,7 +238,7 @@ lola::Skeleton *-- SkeletonDataStorage : "1..1" lola::Skeleton *-- "<>\nlola::SkeletonDataControl" : "1..2" "<>\nlola::SkeletonDataControl" *-- "<>\nlola::EventDataControlImpl" : "0..n" lola::SkeletonEvent o-- "EventDataStorage" -lola::SkeletonEvent *-- EventDataControlCompositeImpl +lola::SkeletonEvent *-- EventDataControlComposite "<>\nlola::EventDataControlImpl" ..> "<>\nlola::EventSlotStatus" SampleAllocateePtr o-- lola::SampleAllocateePtr SamplePtr o-- lola::SamplePtr @@ -246,10 +246,10 @@ lola::ProxyEvent *-- lola::ProxyEventCommon lola::ProxyEventCommon *-- lola::SubscriptionStateMachine lola::ProxyEventCommon --* lola::SlotCollector ProxyEventBindingBase o-- SubscriptionState -lola::SampleAllocateePtr *-- EventDataControlCompositeImpl -EventDataControlCompositeImpl o-- "<>\nlola::EventDataControlImpl" : "2" +lola::SampleAllocateePtr *-- EventDataControlComposite +EventDataControlComposite o-- "<>\nlola::EventDataControlImpl" : "2" lola::Skeleton ..> lola::ShmPathBuilder : uses -lola::Skeleton ..> EventDataControlCompositeImpl +lola::Skeleton ..> EventDataControlComposite lola::SubscriptionStateMachine ..> lola::SlotCollector : <> SkeletonEventBinding ..> SampleAllocateePtr lola::ProxyEvent ..> lola::SamplePtr diff --git a/score/mw/com/design/partial_restart/transaction_log_model.puml b/score/mw/com/design/partial_restart/transaction_log_model.puml index 25343d571..d53ae3a69 100644 --- a/score/mw/com/design/partial_restart/transaction_log_model.puml +++ b/score/mw/com/design/partial_restart/transaction_log_model.puml @@ -46,7 +46,7 @@ class "lola::EventDataControlImpl" <> { +AllocateNextSlot(): std::optional +EventReady(SlotIndexType, EventTimestamp): void +Discard(SlotIndexType): void - +ReferenceNextEvent(lastSearchTime : EventTimestampType, upper_limit : const EventSlotStatus::EventTimeStamp = EventSlotStatus::TIMESTSCORE_LANGUAGE_FUTURECPP_MAX): std::optional + +ReferenceNextEvent(lastSearchTime : EventTimestampType, upper_limit : const EventSlotStatus::EventTimeStamp = EventSlotStatus::TIMESTAMP_MAX): std::optional +DereferenceEvent(SlotIndexType eventSlotIndex): void +GetNumNewEvents(reference_time : const EventSlotStatus::EventTimeStamp) const : std::size_t +GetTransactionLogSet() : TransactionLogSet& diff --git a/score/mw/com/design/skeleton_proxy/generic_proxy/README.md b/score/mw/com/design/skeleton_proxy/generic_proxy/README.md index f4babd7d2..cdb42bfb0 100644 --- a/score/mw/com/design/skeleton_proxy/generic_proxy/README.md +++ b/score/mw/com/design/skeleton_proxy/generic_proxy/README.md @@ -87,7 +87,7 @@ The map containing the meta-information gets initialized by the skeleton instanc the vectors containing the sample slots in ``` template -std::pair*, EventDataControlComposite> lola::Skeleton::Register(ElementFqId event_fqn, +std::pair*, EventDataControlComposite<>> lola::Skeleton::Register(ElementFqId event_fqn, std::size_t number_of_slots) ``` diff --git a/score/mw/com/design/skeleton_proxy/skeleton_binding_model.puml b/score/mw/com/design/skeleton_proxy/skeleton_binding_model.puml index ade6b6cac..dff2f8af4 100644 --- a/score/mw/com/design/skeleton_proxy/skeleton_binding_model.puml +++ b/score/mw/com/design/skeleton_proxy/skeleton_binding_model.puml @@ -150,7 +150,7 @@ class "lola::Skeleton" as lola_Skeleton { +PrepareStopOffer(): void template - +Register(ElementFqId, size_t num_slots): std::pair*,EventDataControlComposite> + +Register(ElementFqId, size_t num_slots): std::pair*,EventDataControlComposite<>> } class "lola::SkeletonEvent" as lola_SkeletonEvent { diff --git a/score/mw/com/design/skeleton_proxy/skeleton_proxy_binding_model.puml b/score/mw/com/design/skeleton_proxy/skeleton_proxy_binding_model.puml index 37fbe704f..421510d1f 100644 --- a/score/mw/com/design/skeleton_proxy/skeleton_proxy_binding_model.puml +++ b/score/mw/com/design/skeleton_proxy/skeleton_proxy_binding_model.puml @@ -35,7 +35,7 @@ class "lola::Skeleton" as LolaSkeleton { +PrepareOffer(SkeletonBinding::SkeletonEventBindings&, SkeletonBinding::SkeletonFieldBindings&): ResultBlank +PrepareStopOffer(): void - +template \n Register(ElementFqId, size_t num_slots): std::pair*, EventDataControlComposite> + +template \n Register(ElementFqId, size_t num_slots): std::pair*, EventDataControlComposite<>> } class "SkeletonBindingFactory" { diff --git a/score/mw/com/impl/bindings/lola/BUILD b/score/mw/com/impl/bindings/lola/BUILD index 731dddd39..26924a34c 100644 --- a/score/mw/com/impl/bindings/lola/BUILD +++ b/score/mw/com/impl/bindings/lola/BUILD @@ -216,24 +216,16 @@ cc_library( ) cc_library( - name = "shared_data_structures", - srcs = [ - "service_data_control.cpp", - "service_data_storage.cpp", - ], - hdrs = [ - "service_data_control.h", - "service_data_storage.h", - ], + name = "service_data_storage", + srcs = ["service_data_storage.cpp"], + hdrs = ["service_data_storage.h"], features = COMPILER_WARNING_FEATURES, tags = ["FFI"], visibility = [ "//score/mw/com/impl/bindings/lola/test_doubles:__pkg__", ], deps = [ - ":application_id_pid_mapping", ":element_fq_id", - ":event", ":event_meta_info", ":i_runtime", "//score/mw/com/impl:runtime", @@ -242,6 +234,24 @@ cc_library( ], ) +cc_library( + name = "service_data_control", + srcs = ["service_data_control.cpp"], + hdrs = ["service_data_control.h"], + features = COMPILER_WARNING_FEATURES, + tags = ["FFI"], + visibility = [ + "//score/mw/com/impl/bindings/lola/test_doubles:__pkg__", + ], + deps = [ + ":application_id_pid_mapping", + ":element_fq_id", + ":event_control", + ":event_meta_info", + "@score_baselibs//score/memory/shared", + ], +) + cc_library( name = "skeleton", srcs = [ @@ -268,7 +278,8 @@ cc_library( ":i_shm_path_builder", ":partial_restart_path_builder", ":proxy_instance_identifier", - ":shared_data_structures", + ":service_data_control", + ":service_data_storage", ":shm_path_builder", ":skeleton_instance_identifier", ":transaction_log_registration_guard", @@ -308,14 +319,6 @@ cc_library( "proxy_event.cpp", "proxy_event_common.cpp", "proxy_method.cpp", - "slot_collector.cpp", - "subscription_helpers.cpp", - "subscription_not_subscribed_states.cpp", - "subscription_state_base.cpp", - "subscription_state_machine.cpp", - "subscription_state_machine_states.cpp", - "subscription_subscribed_states.cpp", - "subscription_subscription_pending_states.cpp", ], hdrs = [ "generic_proxy_event.h", @@ -323,14 +326,6 @@ cc_library( "proxy_event.h", "proxy_event_common.h", "proxy_method.h", - "slot_collector.h", - "subscription_helpers.h", - "subscription_not_subscribed_states.h", - "subscription_state_base.h", - "subscription_state_machine.h", - "subscription_state_machine_states.h", - "subscription_subscribed_states.h", - "subscription_subscription_pending_states.h", ], features = COMPILER_WARNING_FEATURES, tags = ["FFI"], @@ -340,8 +335,11 @@ cc_library( ":event_control", ":event_subscription_control", ":proxy_instance_identifier", - ":shared_data_structures", + ":service_data_control", + ":service_data_storage", ":shm_path_builder", + ":slot_collector", + ":subscription_state_machine", ":transaction_log_id", ":transaction_log_registration_guard", ":transaction_log_rollback_executor", @@ -426,6 +424,54 @@ cc_library( ], ) +cc_library( + name = "subscription_state_machine", + srcs = [ + "subscription_helpers.cpp", + "subscription_not_subscribed_states.cpp", + "subscription_state_base.cpp", + "subscription_state_machine.cpp", + "subscription_state_machine_states.cpp", + "subscription_subscribed_states.cpp", + "subscription_subscription_pending_states.cpp", + ], + hdrs = [ + "subscription_helpers.h", + "subscription_not_subscribed_states.h", + "subscription_state_base.h", + "subscription_state_machine.h", + "subscription_state_machine_states.h", + "subscription_subscribed_states.h", + "subscription_subscription_pending_states.h", + ], + features = COMPILER_WARNING_FEATURES, + tags = ["FFI"], + deps = [ + ":event_control", + ":event_data_control", + ":i_runtime", + ":slot_collector", + ":transaction_log_id", + ":transaction_log_registration_guard", + "//score/mw/com/impl:runtime", + "//score/mw/com/impl:scoped_event_receive_handler", + "//score/mw/com/impl/bindings/lola/messaging:i_message_passing_service", + ], +) + +cc_library( + name = "slot_collector", + srcs = ["slot_collector.cpp"], + hdrs = ["slot_collector.h"], + features = COMPILER_WARNING_FEATURES, + tags = ["FFI"], + deps = [ + ":event_data_control", + ":event_slot_status", + ":transaction_log_set", + ], +) + cc_library( name = "application_id_pid_mapping", srcs = ["application_id_pid_mapping.cpp"], @@ -689,7 +735,7 @@ cc_library( tags = ["FFI"], visibility = ["//score/mw/com/impl/bindings/lola:__subpackages__"], deps = [ - ":shared_data_structures", + ":service_data_control", ":transaction_log_id", ":transaction_log_set", "//score/mw/com/impl:runtime", @@ -882,7 +928,7 @@ cc_unit_test( ) cc_test( - name = "event_data_control_unit_test", + name = "event_data_control_test", size = "small", timeout = "long", srcs = [ @@ -907,7 +953,7 @@ cc_test( ) cc_gtest_unit_test( - name = "event_data_control_composite_unit_test", + name = "event_data_control_composite_test", srcs = ["event_data_control_composite_test.cpp"], features = COMPILER_WARNING_FEATURES, deps = [ @@ -1170,7 +1216,7 @@ cc_gtest_unit_test( ":element_fq_id", ":event_meta_info", ":runtime_mock", - ":shared_data_structures", + ":service_data_storage", "//score/mw/com/impl:binding_type", "//score/mw/com/impl/test:runtime_mock_guard", "@score_baselibs//score/memory/shared:map", @@ -1213,7 +1259,7 @@ cc_gtest_unit_test( ], features = COMPILER_WARNING_FEATURES, deps = [ - ":proxy", + ":slot_collector", "//score/mw/com/impl/bindings/lola/test_doubles", ], ) @@ -1226,6 +1272,7 @@ cc_gtest_unit_test( features = COMPILER_WARNING_FEATURES, deps = [ ":event_data_control_test_resources", + ":subscription_state_machine", "//score/mw/com/impl/bindings/lola/test:proxy_event_test_resources", "//score/mw/com/impl/bindings/lola/test:transaction_log_test_resources", ], @@ -1238,6 +1285,7 @@ cc_gtest_unit_test( ], features = COMPILER_WARNING_FEATURES, deps = [ + ":subscription_state_machine", "//score/mw/com/impl/bindings/lola/test:proxy_event_test_resources", ], ) @@ -1249,7 +1297,7 @@ cc_gtest_unit_test( ], features = COMPILER_WARNING_FEATURES, deps = [ - ":proxy", + ":subscription_state_machine", ], ) @@ -1381,8 +1429,8 @@ cc_unit_test_suites_for_host_and_qnx( ":transaction_log_slot_test", ":transaction_log_test", ":dynamic_array_bounds_checking_test", - ":event_data_control_unit_test", - ":event_data_control_composite_unit_test", + ":event_data_control_test", + ":event_data_control_composite_test", ":generic_proxy_event_test", ":partial_restart_path_builder_test", ":proxy_instance_identifier_test", diff --git a/score/mw/com/impl/bindings/lola/event_data_control.cpp b/score/mw/com/impl/bindings/lola/event_data_control.cpp index a384bf0c8..adeb4bfce 100644 --- a/score/mw/com/impl/bindings/lola/event_data_control.cpp +++ b/score/mw/com/impl/bindings/lola/event_data_control.cpp @@ -106,7 +106,7 @@ template