1 #ifndef LIBDNF_PACKAGE_HPP 2 #define LIBDNF_PACKAGE_HPP 3 4 #include <vector> 5 #include <solv/solvable.h> 6 #include <solv/repo.h> 7 8 9 #include "libdnf/hy-types.h" 10 #include "libdnf/hy-repo-private.hpp" 11 12 #include "Dependency.hpp" 13 14 namespace libdnf { 15 16 struct Package 17 { 18 public: 19 Package(DnfSack *sack, Id id); 20 Package(const Package &package); 21 virtual ~Package(); 22 23 std::shared_ptr<DependencyContainer> getConflicts() const; 24 std::shared_ptr<DependencyContainer> getEnhances() const; 25 std::shared_ptr<DependencyContainer> getObsoletes() const; 26 std::shared_ptr<DependencyContainer> getProvides() const; 27 std::shared_ptr<DependencyContainer> getRecommends() const; 28 std::shared_ptr<DependencyContainer> getRequires() const; 29 std::shared_ptr<DependencyContainer> getRequiresPre() const; 30 std::shared_ptr<DependencyContainer> getSuggests() const; 31 std::shared_ptr<DependencyContainer> getSupplements() const; 32 Id getId() const; 33 34 virtual const char *getName() const = 0; 35 virtual const char *getVersion() const = 0; 36 const char *getArch() const; 37 38 protected: 39 Package(DnfSack *sack, HyRepo repo, const char *name, const char *version, const char *arch, bool createSolvable = true); 40 Package(DnfSack *sack, HyRepo repo, const std::string &name, const std::string &version, const std::string &arch, bool createSolvable = true); 41 42 void addConflicts(std::shared_ptr<Dependency> dependency); 43 void addEnhances(std::shared_ptr<Dependency> dependency); 44 void addObsoletes(std::shared_ptr<Dependency> dependency); 45 void addProvides(std::shared_ptr<Dependency> dependency); 46 void addRecommends(std::shared_ptr<Dependency> dependency); 47 void addRequires(std::shared_ptr<Dependency> dependency); 48 void addRequiresPre(std::shared_ptr<Dependency> dependency); 49 void addSuggests(std::shared_ptr<Dependency> dependency); 50 void addSupplements(std::shared_ptr<Dependency> dependency); 51 52 const char *getSolvableName() const; 53 const char *getSolvableEvr() const; 54 const char *getSolvableVendor() const; 55 void setSolvableVendor(const char *vendor); 56 57 private: 58 void createSolvable(HyRepo repo); 59 void fillSolvableData(const char *name, const char *version, const char *arch) const; 60 std::shared_ptr<DependencyContainer> getDependencies(Id type, Id marker = -1) const; 61 void addDependency(std::shared_ptr<Dependency> dependency, int type, Id marker = -1); 62 Queue *getDependencyQueue(Id type, Id marker) const; 63 64 DnfSack *sack; 65 Id id; 66 }; 67 68 } 69 70 #endif //LIBDNF_PACKAGE_HPP 71