Skip to content
Snippets Groups Projects
Commit f1a2e347 authored by Jupp Tscheak's avatar Jupp Tscheak
Browse files

Interface function IEntityRepository::Get is returning an optional reference to query an IEntity.


In order to check whether an IEntity with a certain name/id exists, function IEntityRepository::Contains could be used to query this information. If IEntityRepository::Get is called on a non-existing name/id, the function would throw, so for defensive programming reasons a IEntityRepository::Contains should always be done before actually calling IEntityRepository::Get. The good thing about plain old C-pointers is that assignment and existence check can be done in one call. Since C++17 the same functionality is managed by std::optional.

Another disadvantage of using a plain reference to IEntity is when it is used as a class member, where it needs to be initialized when an object of that class is defined. It might be that during construction time this IEntity is not known/existing yet. Of cource, a plain old C-pointer could be used in this case, but it wouldn't be a consistant usage.

The proposal is to use std::optional<std::reference_wrapper<IEntity>> as return value for IEntityRepository::Get.

Signed-off-by: default avatarJupp Tscheak <jupp.tscheak@daimler.com>
parent de97eb02
No related branches found
No related tags found
1 merge request!9Interface function IEntityRepository::Get is returning an optional reference to query an IEntity.
......@@ -18,6 +18,8 @@
#include <MantleAPI/Traffic/entity_properties.h>
#include <MantleAPI/Traffic/i_entity.h>
#include <functional>
#include <optional>
#include <string>
#include <vector>
......@@ -35,8 +37,8 @@ class IEntityRepository
virtual IStaticObject& Create(UniqueId id, const std::string& name, const StaticObjectProperties& properties) = 0;
virtual IVehicle& GetHost() = 0;
virtual IEntity& Get(const std::string& name) = 0;
virtual IEntity& Get(UniqueId id) = 0;
virtual std::optional<std::reference_wrapper<IEntity>> Get(const std::string& name) = 0;
virtual std::optional<std::reference_wrapper<IEntity>> Get(UniqueId id) = 0;
virtual bool Contains(UniqueId id) const = 0;
virtual void Delete(const std::string& name) = 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment