diff options
Diffstat (limited to 'toolsrc/src/StatusParagraphs.cpp')
| -rw-r--r-- | toolsrc/src/StatusParagraphs.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/toolsrc/src/StatusParagraphs.cpp b/toolsrc/src/StatusParagraphs.cpp new file mode 100644 index 000000000..463e3e3b8 --- /dev/null +++ b/toolsrc/src/StatusParagraphs.cpp @@ -0,0 +1,67 @@ +#include "StatusParagraphs.h" +#include <algorithm> +#include "vcpkg_Checks.h" + +namespace vcpkg +{ + StatusParagraphs::StatusParagraphs() = default; + + StatusParagraphs::StatusParagraphs(std::vector<std::unique_ptr<StatusParagraph>>&& ps) + : paragraphs(std::move(ps)) + { + }; + + StatusParagraphs::const_iterator StatusParagraphs::find(const std::string& name, const triplet& target_triplet) const + { + return std::find_if(begin(), end(), [&](const auto& pgh) + { + return pgh->package.name == name && pgh->package.target_triplet == target_triplet; + }); + } + + StatusParagraphs::iterator StatusParagraphs::find(const std::string& name, const triplet& target_triplet) + { + return std::find_if(begin(), end(), [&](const auto& pgh) + { + return pgh->package.name == name && pgh->package.target_triplet == target_triplet; + }); + } + + StatusParagraphs::iterator StatusParagraphs::find_installed(const std::string& name, const triplet& target_triplet) + { + auto it = find(name, target_triplet); + if (it != end() && (*it)->want == want_t::install) + { + return it; + } + + return end(); + } + + StatusParagraphs::iterator StatusParagraphs::insert(std::unique_ptr<StatusParagraph> pgh) + { + Checks::check_throw(pgh != nullptr, "Inserted null paragraph"); + auto ptr = find(pgh->package.name, pgh->package.target_triplet); + if (ptr == end()) + { + paragraphs.push_back(std::move(pgh)); + return paragraphs.rbegin(); + } + else + { + // consume data from provided pgh. + **ptr = std::move(*pgh); + return ptr; + } + } + + std::ostream& vcpkg::operator<<(std::ostream& os, const StatusParagraphs& l) + { + for (auto& pgh : l.paragraphs) + { + os << *pgh; + os << "\n"; + } + return os; + } +} |
