Mercurial > minori
annotate dep/animia/src/strategist.cc @ 148:aa4df5a84338
dep/animia: use std::pair instead of std::tuple
| author | Paper <mrpapersonic@gmail.com> | 
|---|---|
| date | Tue, 14 Nov 2023 13:27:13 -0500 | 
| parents | 1e696863b54c | 
| children | ffa535b6d630 | 
| rev | line source | 
|---|---|
| 138 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 1 #include "animia/strategies.h" | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 2 #include "animia/util.h" | 
| 139 
478f3b366199
dep/animia: separate lots of things, use base class for OS stuff
 Paper <mrpapersonic@gmail.com> parents: 
138diff
changeset | 3 #include "animia/fd.h" | 
| 138 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 4 #include "animia.h" | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 5 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 6 namespace animia::internal { | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 7 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 8 class Strategist { | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 9 public: | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 10 Strategist(Result& result) : result_(result) {} | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 11 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 12 bool ApplyStrategies(); | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 13 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 14 private: | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 15 bool AddMedia(const MediaInfo media_information); | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 16 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 17 bool ApplyOpenFilesStrategy(); | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 18 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 19 Result& result_; | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 20 }; | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 21 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 22 bool Strategist::ApplyStrategies() { | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 23 bool success = false; | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 24 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 25 for (const auto strategy : result_.player.strategies) { | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 26 switch (strategy) { | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 27 case Strategy::OpenFiles: | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 28 success |= ApplyOpenFilesStrategy(); | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 29 break; | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 30 } | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 31 } | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 32 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 33 return success; | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 34 } | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 35 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 36 bool ApplyStrategies(std::vector<Result>& results) { | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 37 bool success = false; | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 38 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 39 for (auto& result : results) { | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 40 Strategist strategist(result); | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 41 success |= strategist.ApplyStrategies(); | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 42 } | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 43 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 44 return success; | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 45 } | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 46 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 47 //////////////////////////////////////////////////////////////////////////////// | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 48 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 49 bool Strategist::ApplyOpenFilesStrategy() { | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 50 bool success = false; | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 51 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 52 const std::set<pid_t> pids{result_.process.pid}; | 
| 148 
aa4df5a84338
dep/animia: use std::pair instead of std::tuple
 Paper <mrpapersonic@gmail.com> parents: 
140diff
changeset | 53 std::vector<std::pair<pid_t, std::string>> files; | 
| 138 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 54 | 
| 139 
478f3b366199
dep/animia: separate lots of things, use base class for OS stuff
 Paper <mrpapersonic@gmail.com> parents: 
138diff
changeset | 55 fd.EnumerateOpenFiles(pids, files); | 
| 138 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 56 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 57 for (const auto& [pid, file] : files) { | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 58 success |= AddMedia({MediaInfoType::File, file}); | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 59 } | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 60 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 61 return success; | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 62 } | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 63 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 64 //////////////////////////////////////////////////////////////////////////////// | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 65 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 66 bool Strategist::AddMedia(const MediaInfo media_information) { | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 67 if (media_information.value.empty()) | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 68 return false; | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 69 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 70 Media media; | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 71 media.information.push_back(media_information); | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 72 result_.media.push_back(std::move(media)); | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 73 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 74 return true; | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 75 } | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 76 | 
| 
28842a8d0c6b
dep/animia: huge refactor (again...)
 Paper <mrpapersonic@gmail.com> parents: diff
changeset | 77 } | 
