actions: use shared_ptr to store actions

This commit is contained in:
Andrzej Rybczak
2016-12-07 19:02:47 +01:00
parent 59197f23d0
commit 56cb940a12
8 changed files with 47 additions and 35 deletions

View File

@@ -76,7 +76,7 @@ namespace ph = std::placeholders;
namespace {
std::vector<std::unique_ptr<Actions::BaseAction>> AvailableActions;
std::vector<std::shared_ptr<Actions::BaseAction>> AvailableActions;
void populateActions();
@@ -281,22 +281,26 @@ BaseAction &get(Actions::Type at)
{
if (AvailableActions.empty())
populateActions();
BaseAction *action = AvailableActions.at(static_cast<size_t>(at)).get();
// action should be always present if action type in queried
assert(action != nullptr);
return *action;
return *AvailableActions.at(static_cast<size_t>(at));
}
BaseAction *get(const std::string &name)
std::shared_ptr<BaseAction> get_(Actions::Type at)
{
BaseAction *result = nullptr;
if (AvailableActions.empty())
populateActions();
return AvailableActions.at(static_cast<size_t>(at));
}
std::shared_ptr<BaseAction> get_(const std::string &name)
{
std::shared_ptr<BaseAction> result;
if (AvailableActions.empty())
populateActions();
for (const auto &action : AvailableActions)
{
if (action->name() == name)
{
result = action.get();
result = action;
break;
}
}