solvable.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /*
  2. * Copyright (c) 2007-2012, Novell Inc.
  3. *
  4. * This program is licensed under the BSD license, read LICENSE.BSD
  5. * for further information
  6. */
  7. /*
  8. * solvable.h
  9. *
  10. * A solvable represents an object with name-epoch:version-release.arch
  11. * and dependencies
  12. */
  13. #ifndef LIBSOLV_SOLVABLE_H
  14. #define LIBSOLV_SOLVABLE_H
  15. #include "pooltypes.h"
  16. #include "queue.h"
  17. #include "bitmap.h"
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif
  21. struct s_Repo;
  22. typedef struct s_Solvable {
  23. Id name;
  24. Id arch;
  25. Id evr; /* epoch:version-release */
  26. Id vendor;
  27. struct s_Repo *repo; /* repo we belong to */
  28. /* dependencies are offsets into repo->idarraydata */
  29. /* the ifdef resolves "requires" conflicting with a C++20 keyword */
  30. #ifdef LIBSOLV_SOLVABLE_PREPEND_DEP
  31. Offset dep_provides; /* terminated with Id 0 */
  32. Offset dep_obsoletes;
  33. Offset dep_conflicts;
  34. Offset dep_requires;
  35. Offset dep_recommends;
  36. Offset dep_suggests;
  37. Offset dep_supplements;
  38. Offset dep_enhances;
  39. #else
  40. Offset provides; /* terminated with Id 0 */
  41. Offset obsoletes;
  42. Offset conflicts;
  43. Offset requires;
  44. Offset recommends;
  45. Offset suggests;
  46. Offset supplements;
  47. Offset enhances;
  48. #endif
  49. } Solvable;
  50. /* lookup functions */
  51. Id solvable_lookup_type(Solvable *s, Id keyname);
  52. Id solvable_lookup_id(Solvable *s, Id keyname);
  53. unsigned long long solvable_lookup_num(Solvable *s, Id keyname, unsigned long long notfound);
  54. unsigned long long solvable_lookup_sizek(Solvable *s, Id keyname, unsigned long long notfound);
  55. const char *solvable_lookup_str(Solvable *s, Id keyname);
  56. const char *solvable_lookup_str_poollang(Solvable *s, Id keyname);
  57. const char *solvable_lookup_str_lang(Solvable *s, Id keyname, const char *lang, int usebase);
  58. int solvable_lookup_bool(Solvable *s, Id keyname);
  59. int solvable_lookup_void(Solvable *s, Id keyname);
  60. const char *solvable_get_location(Solvable *s, unsigned int *medianrp); /* old name */
  61. const char *solvable_lookup_location(Solvable *s, unsigned int *medianrp);
  62. const char *solvable_lookup_sourcepkg(Solvable *s);
  63. const unsigned char *solvable_lookup_bin_checksum(Solvable *s, Id keyname, Id *typep);
  64. const char *solvable_lookup_checksum(Solvable *s, Id keyname, Id *typep);
  65. int solvable_lookup_idarray(Solvable *s, Id keyname, Queue *q);
  66. int solvable_lookup_deparray(Solvable *s, Id keyname, Queue *q, Id marker);
  67. unsigned int solvable_lookup_count(Solvable *s, Id keyname); /* internal */
  68. /* setter functions */
  69. void solvable_set_id(Solvable *s, Id keyname, Id id);
  70. void solvable_set_num(Solvable *s, Id keyname, unsigned long long num);
  71. void solvable_set_str(Solvable *s, Id keyname, const char *str);
  72. void solvable_set_poolstr(Solvable *s, Id keyname, const char *str);
  73. void solvable_add_poolstr_array(Solvable *s, Id keyname, const char *str);
  74. void solvable_add_idarray(Solvable *s, Id keyname, Id id);
  75. void solvable_add_deparray(Solvable *s, Id keyname, Id dep, Id marker);
  76. void solvable_set_idarray(Solvable *s, Id keyname, Queue *q);
  77. void solvable_set_deparray(Solvable *s, Id keyname, Queue *q, Id marker);
  78. void solvable_unset(Solvable *s, Id keyname);
  79. int solvable_identical(Solvable *s1, Solvable *s2);
  80. Id solvable_selfprovidedep(Solvable *s);
  81. int solvable_matchesdep(Solvable *s, Id keyname, Id dep, int marker);
  82. int solvable_matchessolvable(Solvable *s, Id keyname, Id solvid, Queue *depq, int marker);
  83. /* internal */
  84. int solvable_matchessolvable_int(Solvable *s, Id keyname, int marker, Id solvid, Map *solvidmap, Queue *depq, Map *missc, int reloff, Queue *outdepq);
  85. /* weird suse stuff */
  86. int solvable_is_irrelevant_patch(Solvable *s, Map *installedmap);
  87. int solvable_trivial_installable_map(Solvable *s, Map *installedmap, Map *conflictsmap, Map *multiversionmap);
  88. int solvable_trivial_installable_queue(Solvable *s, Queue *installed, Map *multiversionmap);
  89. int solvable_trivial_installable_repo(Solvable *s, struct s_Repo *installed, Map *multiversionmap);
  90. #ifdef __cplusplus
  91. }
  92. #endif
  93. #endif /* LIBSOLV_SOLVABLE_H */