#pragma once #include #include "package_spec_parse_result.h" #include "triplet.h" #include "expected.h" namespace vcpkg { struct package_spec { static expected from_string(const std::string& spec, const triplet& default_target_triplet); std::string name; triplet target_triplet; std::string dir() const; }; std::string to_string(const package_spec& spec); std::string to_printf_arg(const package_spec& spec); bool operator==(const package_spec& left, const package_spec& right); std::ostream& operator<<(std::ostream& os, const package_spec& spec); } //namespace vcpkg namespace std { template <> struct hash { size_t operator()(const vcpkg::package_spec& value) const { size_t hash = 17; hash = hash * 31 + std::hash()(value.name); hash = hash * 31 + std::hash()(value.target_triplet); return hash; } }; template <> struct equal_to { bool operator()(const vcpkg::package_spec& left, const vcpkg::package_spec& right) const { return left == right; } }; } // namespace std