2 * Copyright (c) 2007, Novell Inc.
4 * This program is licensed under the BSD license, read LICENSE.BSD
5 * for further information
16 #include "pooltypes.h"
19 typedef struct _Repo {
21 struct _Pool *pool; /* pool containing repo data */
22 int start; /* start of this repo solvables within pool->solvables */
23 int end; /* last solvable + 1 of this repo */
24 int nsolvables; /* number of solvables repo is contributing to pool */
26 int priority; /* priority of this repo */
28 Id *idarraydata; /* array of metadata Ids, solvable dependencies are offsets into this array */
35 extern Repo *repo_create(Pool *pool, const char *name);
36 extern void repo_free(Repo *repo, int reuseids);
37 extern void repo_freeallrepos(Pool *pool, int reuseids);
39 extern Offset repo_addid(Repo *repo, Offset olddeps, Id id);
40 extern Offset repo_addid_dep(Repo *repo, Offset olddeps, Id id, int isreq);
41 extern Offset repo_reserve_ids(Repo *repo, Offset olddeps, int num);
42 extern Offset repo_fix_legacy(Repo *repo, Offset provides, Offset supplements);
44 static inline const char *repo_name(const Repo *repo)
49 static inline Id repo_add_solvable(Repo *repo)
51 extern Id pool_add_solvable(Pool *pool);
52 Id p = pool_add_solvable(repo->pool);
53 if (!repo->start || repo->start == repo->end)
62 if (p + 1 > repo->end)
66 repo->pool->solvables[p].repo = repo;
70 static inline Id repo_add_solvable_block(Repo *repo, int count)
72 extern Id pool_add_solvable_block(Pool *pool, int count);
77 p = pool_add_solvable_block(repo->pool, count);
78 if (!repo->start || repo->start == repo->end)
81 repo->end = p + count;
87 if (p + count > repo->end)
88 repo->end = p + count;
90 repo->nsolvables += count;
91 for (s = repo->pool->solvables + p; count--; s++)
96 static inline void repo_free_solvable_block(Repo *repo, Id start, int count, int reuseids)
98 extern void pool_free_solvable_block(Pool *pool, Id start, int count, int reuseids);
101 if (start + count == repo->end)
103 repo->nsolvables -= count;
104 for (s = repo->pool->solvables + start, i = count; i--; s++)
106 pool_free_solvable_block(repo->pool, start, count, reuseids);