#ifndef PAKFIRE_PROBLEM_H
#define PAKFIRE_PROBLEM_H
-#include <solv/pool.h>
-#include <solv/queue.h>
-
#include <pakfire/request.h>
PakfireProblem pakfire_problem_create(PakfireRequest request, Id id);
const char* pakfire_problem_to_string(PakfireProblem problem);
+PakfireRequest pakfire_problem_get_request(PakfireProblem problem);
PakfireSolution pakfire_problem_get_solutions(PakfireProblem problem);
#ifdef PAKFIRE_PRIVATE
-struct _PakfireProblem {
- PakfireRequest request;
- Id id;
- char* string;
+#include <solv/pooltypes.h>
- PakfireProblem next;
- int nrefs;
-};
+Id pakfire_problem_get_id(PakfireProblem problem);
#endif
#include <pakfire/solution.h>
#include <pakfire/util.h>
+struct _PakfireProblem {
+ PakfireRequest request;
+ Id id;
+ char* string;
+
+ PakfireProblem next;
+ int nrefs;
+};
+
static char* to_string(PakfireProblem problem) {
Solver* solver = pakfire_request_get_solver(problem->request);
Pool* pool = solver->pool;
return problem->string;
}
+Id pakfire_problem_get_id(PakfireProblem problem) {
+ return problem->id;
+}
+
+PAKFIRE_EXPORT PakfireRequest pakfire_problem_get_request(PakfireProblem problem) {
+ return pakfire_request_ref(problem->request);
+}
+
PAKFIRE_EXPORT PakfireSolution pakfire_problem_get_solutions(PakfireProblem problem) {
PakfireSolution ret = NULL;
Solver* solver = pakfire_request_get_solver(problem->request);
};
static void import_elements(PakfireSolution solution) {
- Solver* solver = pakfire_request_get_solver(solution->problem->request);
+ PakfireRequest request = pakfire_problem_get_request(solution->problem);
+
+ Solver* solver = pakfire_request_get_solver(request);
Pool* pool = solver->pool;
// Reserve memory
- unsigned int num = solver_solutionelement_count(solver, solution->problem->id, solution->id);
+ unsigned int num = solver_solutionelement_count(solver, pakfire_problem_get_id(solution->problem), solution->id);
char** elements = solution->elements = pakfire_calloc(num + 1, sizeof(*elements));
Id p;
Id rp;
Id element = 0;
- while ((element = solver_next_solutionelement(solver, solution->problem->id, solution->id, element, &p, &rp)) != 0) {
+ while ((element = solver_next_solutionelement(solver, pakfire_problem_get_id(solution->problem), solution->id, element, &p, &rp)) != 0) {
char line[STRING_SIZE];
if (p == SOLVER_SOLUTION_JOB || p == SOLVER_SOLUTION_POOLJOB) {
// Terminate array
*elements = NULL;
+
+ pakfire_request_unref(request);
}
PAKFIRE_EXPORT PakfireSolution pakfire_solution_create(PakfireProblem problem, Id id) {