From 3dc52735572624b42566745474f9e91622a4b38f Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 15 Jan 2018 15:17:18 +0100 Subject: [PATCH] libpakfire: Make Problem obscure Signed-off-by: Michael Tremer --- src/libpakfire/include/pakfire/problem.h | 13 +++---------- src/libpakfire/problem.c | 17 +++++++++++++++++ src/libpakfire/solution.c | 10 +++++++--- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/libpakfire/include/pakfire/problem.h b/src/libpakfire/include/pakfire/problem.h index 20c357ee6..cecb056bb 100644 --- a/src/libpakfire/include/pakfire/problem.h +++ b/src/libpakfire/include/pakfire/problem.h @@ -21,9 +21,6 @@ #ifndef PAKFIRE_PROBLEM_H #define PAKFIRE_PROBLEM_H -#include -#include - #include PakfireProblem pakfire_problem_create(PakfireRequest request, Id id); @@ -35,18 +32,14 @@ void pakfire_problem_append(PakfireProblem problem, PakfireProblem new_problem); 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 - PakfireProblem next; - int nrefs; -}; +Id pakfire_problem_get_id(PakfireProblem problem); #endif diff --git a/src/libpakfire/problem.c b/src/libpakfire/problem.c index a9f18f6cd..e38385913 100644 --- a/src/libpakfire/problem.c +++ b/src/libpakfire/problem.c @@ -27,6 +27,15 @@ #include #include +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; @@ -253,6 +262,14 @@ PAKFIRE_EXPORT const char* pakfire_problem_to_string(PakfireProblem problem) { 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); diff --git a/src/libpakfire/solution.c b/src/libpakfire/solution.c index dc12ea79d..403fc60dd 100644 --- a/src/libpakfire/solution.c +++ b/src/libpakfire/solution.c @@ -41,17 +41,19 @@ struct _PakfireSolution { }; 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) { @@ -112,6 +114,8 @@ static void import_elements(PakfireSolution solution) { // Terminate array *elements = NULL; + + pakfire_request_unref(request); } PAKFIRE_EXPORT PakfireSolution pakfire_solution_create(PakfireProblem problem, Id id) { -- 2.39.5