#include <Python.h>
#include <pakfire/problem.h>
+#include <pakfire/solution.h>
#include "problem.h"
#include "solution.h"
static PyObject* Problem_get_solutions(ProblemObject* self) {
PyObject* list = PyList_New(0);
- PakfireSolution solution = pakfire_problem_get_solutions(self->problem);
+ struct pakfire_solution* solution = pakfire_problem_get_solutions(self->problem);
while (solution) {
PyObject* s = new_solution(solution);
PyList_Append(list, s);
#include "solution.h"
-static SolutionObject* Solution_new_core(PyTypeObject* type, PakfireSolution solution) {
+static SolutionObject* Solution_new_core(PyTypeObject* type, struct pakfire_solution* solution) {
SolutionObject* self = (SolutionObject *)type->tp_alloc(type, 0);
if (self) {
self->solution = solution;
return self;
}
-PyObject* new_solution(PakfireSolution solution) {
+PyObject* new_solution(struct pakfire_solution* solution) {
SolutionObject* s = Solution_new_core(&SolutionType, solution);
return (PyObject*)s;
typedef struct {
PyObject_HEAD
- PakfireSolution solution;
+ struct pakfire_solution* solution;
} SolutionObject;
extern PyTypeObject SolutionType;
-PyObject* new_solution(PakfireSolution solution);
+PyObject* new_solution(struct pakfire_solution* solution);
#endif /* PYTHON_PAKFIRE_SOLUTION_H */
#ifndef PAKFIRE_PROBLEM_H
#define PAKFIRE_PROBLEM_H
-#include <pakfire/types.h>
-
struct pakfire_problem;
+#include <pakfire/solution.h>
+#include <pakfire/types.h>
+
struct pakfire_problem* pakfire_problem_ref(struct pakfire_problem* problem);
struct pakfire_problem* pakfire_problem_unref(struct pakfire_problem* problem);
const char* pakfire_problem_to_string(struct pakfire_problem* problem);
struct pakfire_request* pakfire_problem_get_request(struct pakfire_problem* problem);
-PakfireSolution pakfire_problem_get_solutions(struct pakfire_problem* problem);
+struct pakfire_solution* pakfire_problem_get_solutions(struct pakfire_problem* problem);
#ifdef PAKFIRE_PRIVATE
#include <solv/pooltypes.h>
+struct pakfire_solution;
+
#include <pakfire/problem.h>
-PakfireSolution pakfire_solution_create(struct pakfire_problem* problem, Id id);
-PakfireSolution pakfire_solution_ref(PakfireSolution solution);
-PakfireSolution pakfire_solution_unref(PakfireSolution solution);
+struct pakfire_solution* pakfire_solution_create(struct pakfire_problem* problem, Id id);
+struct pakfire_solution* pakfire_solution_ref(struct pakfire_solution* solution);
+struct pakfire_solution* pakfire_solution_unref(struct pakfire_solution* solution);
-PakfireSolution pakfire_solution_next(PakfireSolution solution);
-void pakfire_solution_append(PakfireSolution solution, PakfireSolution new_solution);
+struct pakfire_solution* pakfire_solution_next(struct pakfire_solution* solution);
+void pakfire_solution_append(struct pakfire_solution* solution, struct pakfire_solution* new_solution);
-char* pakfire_solution_to_string(PakfireSolution solution);
+char* pakfire_solution_to_string(struct pakfire_solution* solution);
#endif /* PAKFIRE_SOLUTION_H */
typedef struct _PakfireArchiveSignature* PakfireArchiveSignature;
typedef struct _PakfireFilelist* PakfireFilelist;
typedef struct _PakfireKey* PakfireKey;
-typedef struct _PakfireSolution* PakfireSolution;
#endif /* PAKFIRE_TYPES_H */
return pakfire_request_ref(problem->request);
}
-PAKFIRE_EXPORT PakfireSolution pakfire_problem_get_solutions(struct pakfire_problem* problem) {
- PakfireSolution ret = NULL;
+PAKFIRE_EXPORT struct pakfire_solution* pakfire_problem_get_solutions(struct pakfire_problem* problem) {
+ struct pakfire_solution* ret = NULL;
Solver* solver = pakfire_request_get_solver(problem->request);
Id solution = 0;
while ((solution = solver_next_solution(solver, problem->id, solution)) != 0) {
- PakfireSolution s = pakfire_solution_create(problem, solution);
+ struct pakfire_solution* s = pakfire_solution_create(problem, solution);
if (ret)
pakfire_solution_append(ret, s);
#include <pakfire/solution.h>
#include <pakfire/util.h>
-struct _PakfireSolution {
+struct pakfire_solution {
Pakfire pakfire;
+ int nrefs;
+
struct pakfire_problem* problem;
Id id;
char** elements;
- PakfireSolution next;
- int nrefs;
+ struct pakfire_solution* next;
};
-static void import_elements(PakfireSolution solution) {
+static void import_elements(struct pakfire_solution* solution) {
struct pakfire_request* request = pakfire_problem_get_request(solution->problem);
Solver* solver = pakfire_request_get_solver(request);
pakfire_request_unref(request);
}
-PAKFIRE_EXPORT PakfireSolution pakfire_solution_create(struct pakfire_problem* problem, Id id) {
+PAKFIRE_EXPORT struct pakfire_solution* pakfire_solution_create(struct pakfire_problem* problem, Id id) {
Pakfire pakfire = pakfire_problem_get_pakfire(problem);
- PakfireSolution solution = calloc(1, sizeof(*solution));
+ struct pakfire_solution* solution = calloc(1, sizeof(*solution));
if (solution) {
DEBUG(pakfire, "Allocated Solution at %p\n", solution);
solution->pakfire = pakfire_ref(pakfire);
return solution;
}
-PAKFIRE_EXPORT PakfireSolution pakfire_solution_ref(PakfireSolution solution) {
+PAKFIRE_EXPORT struct pakfire_solution* pakfire_solution_ref(struct pakfire_solution* solution) {
solution->nrefs++;
return solution;
}
-static void pakfire_solution_free(PakfireSolution solution) {
+static void pakfire_solution_free(struct pakfire_solution* solution) {
DEBUG(solution->pakfire, "Releasing Solution at %p\n", solution);
pakfire_unref(solution->pakfire);
free(solution);
}
-PAKFIRE_EXPORT PakfireSolution pakfire_solution_unref(PakfireSolution solution) {
+PAKFIRE_EXPORT struct pakfire_solution* pakfire_solution_unref(struct pakfire_solution* solution) {
if (!solution)
return NULL;
return NULL;
}
-PAKFIRE_EXPORT PakfireSolution pakfire_solution_next(PakfireSolution solution) {
+PAKFIRE_EXPORT struct pakfire_solution* pakfire_solution_next(struct pakfire_solution* solution) {
return solution->next;
}
-PAKFIRE_EXPORT void pakfire_solution_append(PakfireSolution solution, PakfireSolution new_solution) {
- PakfireSolution next;
+PAKFIRE_EXPORT void pakfire_solution_append(struct pakfire_solution* solution, struct pakfire_solution* new_solution) {
+ struct pakfire_solution* next;
// Go to last problem in list
while ((next = pakfire_solution_next(solution)) != NULL) {
solution->next = pakfire_solution_ref(new_solution);
}
-static size_t count_elements_length(PakfireSolution solution) {
+static size_t count_elements_length(struct pakfire_solution* solution) {
size_t length = 0;
char** elements = solution->elements;
return length;
}
-PAKFIRE_EXPORT char* pakfire_solution_to_string(PakfireSolution solution) {
+PAKFIRE_EXPORT char* pakfire_solution_to_string(struct pakfire_solution* solution) {
// Determine length of output string
size_t length = count_elements_length(solution);