Mercurial > minori
view dep/animia/src/strategist.cc @ 146:d8a61e7e2a36
dep/animia: move fd stuff to a new fd.cc, don't force the user
to include windows.h
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Mon, 13 Nov 2023 13:52:58 -0500 |
parents | 1e696863b54c |
children | aa4df5a84338 |
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<std::tuple<pid_t, std::string>> files; fd.EnumerateOpenFiles(pids, files); for (const auto& [pid, file] : files) { success |= AddMedia({MediaInfoType::File, file}); } 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; } }