Skip to content

Commit bce731b

Browse files
committed
Update use of itineraries for vector
1 parent f918de6 commit bce731b

File tree

1 file changed

+30
-22
lines changed

1 file changed

+30
-22
lines changed

src/dsm/headers/Dynamics.hpp

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ namespace dsm {
3535

3636
using TimePoint = long long unsigned int;
3737

38+
template <typename T>
39+
std::unique_ptr<T> clone(const std::unique_ptr<T>& ptr) {
40+
return std::make_unique<T>(*ptr);
41+
}
42+
3843
/// @brief The Measurement struct represents the mean of a quantity and its standard deviation
3944
/// @tparam T The type of the quantity
4045
/// @param mean The mean
@@ -415,7 +420,7 @@ namespace dsm {
415420
requires(is_numeric_v<Delay>)
416421
Id Dynamics<Delay>::m_nextStreetId(Id agentId, Id nodeId, std::optional<Id> streetId) {
417422
auto possibleMoves = m_graph.adjMatrix().getRow(nodeId, true);
418-
if (this->m_itineraries.size() > 0 &&
423+
if (!this->m_itineraries.empty() &&
419424
this->m_uniformDist(this->m_generator) > this->m_errorProbability) {
420425
const auto& it = this->m_itineraries[this->m_agents[agentId]->itineraryId()];
421426
if (it->destination() != nodeId) {
@@ -664,9 +669,10 @@ namespace dsm {
664669
template <typename Delay>
665670
requires(is_numeric_v<Delay>)
666671
void Dynamics<Delay>::setItineraries(std::span<Itinerary> itineraries) {
667-
std::ranges::for_each(itineraries, [this](const auto& itinerary) {
668-
this->m_itineraries.insert(std::make_unique<Itinerary>(itinerary));
669-
});
672+
std::transform(itineraries.cbegin(),
673+
itineraries.cend(),
674+
m_itineraries.begin(),
675+
[this](const auto& pItinerary) { return clone(pItinerary); });
670676
}
671677

672678
template <typename Delay>
@@ -704,15 +710,17 @@ namespace dsm {
704710
requires(is_numeric_v<Delay>)
705711
void Dynamics<Delay>::setDestinationNodes(const std::span<Id>& destinationNodes,
706712
bool updatePaths) {
707-
m_itineraries.clear();
708-
m_itineraries.reserve(destinationNodes.size());
709-
for (const auto& nodeId : destinationNodes) {
710-
if (!m_graph.nodeSet().contains(nodeId)) {
711-
throw std::invalid_argument(
712-
buildLog(std::format("Node with id {} not found", nodeId)));
713-
}
714-
this->addItinerary(Itinerary{nodeId});
715-
}
713+
m_itineraries.resize(destinationNodes.size());
714+
std::transform(
715+
destinationNodes.cbegin(),
716+
destinationNodes.cend(),
717+
m_itineraries.begin()[m_graph](auto nodeId) {
718+
if (!m_graph.nodeSet().contains(nodeId)) {
719+
throw std::invalid_argument(
720+
buildLog(std::format("Node with id {} not found", nodeId)));
721+
}
722+
this->addItinerary(Itinerary{nodeId});
723+
});
716724
if (updatePaths) {
717725
this->updatePaths();
718726
}
@@ -721,12 +729,12 @@ namespace dsm {
721729
template <typename Delay>
722730
requires(is_numeric_v<Delay>)
723731
const std::unique_ptr<Itinerary>& Dynamics<Delay>::itinerary(Id destination) const {
724-
for (auto const& pItinerary : m_itineraries) {
725-
if (pItinerary->destination() == destination) {
726-
return pItinerary;
727-
}
728-
}
729-
return nullptr;
732+
auto foundIt = std::find_if(m_itineraries.begin(),
733+
m_itineraries.end(),
734+
[destination](const auto& pItinerary) {
735+
pItinerary->destination() == destination;
736+
});
737+
return (foundIt == m_itineraries.end()) ? nullptr : *foundIt;
730738
}
731739

732740
template <typename Delay>
@@ -1157,13 +1165,13 @@ namespace dsm {
11571165
template <typename Delay>
11581166
requires(is_numeric_v<Delay>)
11591167
void Dynamics<Delay>::addItinerary(const Itinerary& itinerary) {
1160-
m_itineraries.emplace_back(std::make_unique<Itinerary>(itinerary));
1168+
m_itineraries.push_back(std::make_unique<Itinerary>(itinerary));
11611169
}
11621170

11631171
template <typename Delay>
11641172
requires(is_numeric_v<Delay>)
11651173
void Dynamics<Delay>::addItinerary(std::unique_ptr<Itinerary> itinerary) {
1166-
m_itineraries.emplace_back(std::move(itinerary));
1174+
m_itineraries.push_back(std::move(itinerary));
11671175
}
11681176

11691177
template <typename Delay>
@@ -1178,7 +1186,7 @@ namespace dsm {
11781186
requires(is_numeric_v<Delay>)
11791187
void Dynamics<Delay>::addItineraries(std::span<Itinerary> itineraries) {
11801188
std::ranges::for_each(itineraries, [this](const auto& itinerary) -> void {
1181-
this->m_itineraries.insert(std::make_unique<Itinerary>(itinerary));
1189+
this->m_itineraries.push_back(std::make_unique<Itinerary>(itinerary));
11821190
});
11831191
}
11841192

0 commit comments

Comments
 (0)