Mercurial > minori
view dep/animia/src/strategist.cc @ 150:ffa535b6d630
*: avoid usage of std::[pair,tuple]
https://arne-mertz.de/2017/03/smelly-pair-tuple/
it's better to use real structures and such where variables are easily known...
also apparently using [] on structs is actually valid? I had no idea.
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Tue, 14 Nov 2023 16:27:33 -0500 |
parents | aa4df5a84338 |
children | 54744a48a7d7 |
line wrap: on
line source
#include "animia/strategies.h" #include "animia/util.h" #include "animia/fd.h" #include "animia.h" namespace animia::internal { class Strategist { public: Strategist(Result& result) : result_(result) {} bool ApplyStrategies(); private: bool AddMedia(const MediaInfo media_information); bool ApplyOpenFilesStrategy(); Result& result_; }; bool Strategist::ApplyStrategies() { bool success = false; for (const auto strategy : result_.player.strategies) { switch (strategy) { case Strategy::OpenFiles: success |= ApplyOpenFilesStrategy(); break; } } return success; } bool ApplyStrategies(std::vector<Result>& results) { bool success = false; for (auto& result : results) { Strategist strategist(result); success |= strategist.ApplyStrategies(); } return success; } //////////////////////////////////////////////////////////////////////////////// bool Strategist::ApplyOpenFilesStrategy() { bool success = false; const std::set<pid_t> pids{result_.process.pid}; std::vector<OpenFile> files; fd.EnumerateOpenFiles(pids, files); for (const auto& file : files) { success |= AddMedia({MediaInfoType::File, file.path}); } return success; } //////////////////////////////////////////////////////////////////////////////// bool Strategist::AddMedia(const MediaInfo media_information) { if (media_information.value.empty()) return false; Media media; media.information.push_back(media_information); result_.media.push_back(std::move(media)); return true; } }