8f8074125411615991a8e626684f46e14360a8d6
[platform/upstream/rpm.git] / lib / rpmal.h
1 #ifndef H_RPMAL
2 #define H_RPMAL
3
4 /** \ingroup rpmdep rpmtrans
5  * \file lib/rpmal.h
6  * Structures used for managing added/available package lists.
7  */
8
9 /**
10  * A package from an availableList.
11  */
12 typedef /*@abstract@*/ struct availablePackage_s * availablePackage;
13
14 /**
15  * Return number of packages in list.
16  * @param al            available list
17  * @return              no. of packages in list
18  */
19 int alGetSize(const availableList al)
20         /*@*/;
21
22 #ifdef  DYING
23 /**
24  * Return available package multiLib flag.
25  * @param al            available list
26  * @param pkgKey        available package key
27  * @return              available package multiLib flag
28  */
29 int alGetMultiLib(/*@null@*/ const availableList al, /*@null@*/ alKey pkgKey)
30         /*@*/;
31 #endif
32
33 #ifndef DYING
34 /**
35  * Return available package files count.
36  * @param al            available list
37  * @param pkgKey        available package key
38  * @return              available package files count
39  */
40 int alGetFilesCount(/*@null@*/ const availableList al, /*@null@*/ alKey pkgKey)
41         /*@*/;
42 #endif
43
44 /**
45  * Return available package provides.
46  * @param al            available list
47  * @param pkgKey        available package key
48  * @return              available package provides
49  */
50 /*@null@*/
51 rpmDepSet alGetProvides(/*@null@*/ const availableList al, /*@null@*/ alKey pkgKey)
52         /*@*/;
53
54 /**
55  * Return available package requires.
56  * @param al            available list
57  * @param pkgKey        available package key
58  * @return              available package requires
59  */
60 /*@null@*/
61 rpmDepSet alGetRequires(/*@null@*/ const availableList al, /*@null@*/ alKey pkgKey)
62         /*@*/;
63
64 /**
65  * Return available package header.
66  * @param al            available list
67  * @param pkgKey        available package key
68  * @param unlink        Should alp->h be unlinked?
69  * @return              available package header
70  */
71 Header alGetHeader(/*@null@*/ availableList al, /*@null@*/ alKey pkgKey,
72                 int unlink)
73         /*@modifies al @*/;
74
75 /**
76  * Return available package.
77  * @param al            available list
78  * @param pkgKey        available package key
79  * @return              available package pointer
80  */
81 /*@-exportlocal@*/
82 /*@dependent@*/ /*@null@*/
83 availablePackage alGetPkg(/*@null@*/ availableList al, /*@null@*/ alKey pkgKey)
84         /*@*/;
85 /*@=exportlocal@*/
86
87 /**
88  * Return (malloc'd) available package name-version-release string.
89  * @param al            available list
90  * @param pkgKey        available package key
91  * @return              name-version-release string
92  */
93 /*@only@*/ /*@null@*/
94 char * alGetNVR(/*@null@*/const availableList al, /*@null@*/ alKey pkgKey)
95         /*@*/;
96
97 /**
98  * Initialize available packckages, items, and directory list.
99  * @param delta         no. of entries to add on each realloc
100  * @return al           new available list
101  */
102 /*@only@*/
103 availableList alCreate(int delta)
104         /*@*/;
105
106 /**
107  * Free available packages, items, and directory members.
108  * @param al            available list
109  * @return              NULL always
110  */
111 /*@null@*/
112 availableList alFree(/*@only@*/ /*@null@*/ availableList al)
113         /*@modifies al @*/;
114
115 /**
116  * Delete package from available list.
117  * @param al            available list
118  * @param pkgKey        package key
119  */
120 /*@-exportlocal@*/
121 void alDelPackage(availableList al, /*@null@*/ alKey pkgKey)
122         /*@modifies al @*/;
123 /*@=exportlocal@*/
124
125 /**
126  * Add package to available list.
127  * @param al            available list
128  * @param pkgKey        package key, RPMAL_NOMATCH to force an append
129  * @param h             package header
130  * @return              available package index
131  */
132 alKey alAddPackage(availableList al, /*@null@*/ alKey pkgKey, Header h)
133         /*@modifies al, h @*/;
134
135 /**
136  * Add package provides to available list index.
137  * @param al            available list
138  * @param pkgKey        package key
139  * @param provides      added package provides
140  */
141 /*@-exportlocal@*/
142 void alAddProvides(availableList al, /*@null@*/ alKey pkgKey,
143                 /*@null@*/ rpmDepSet provides)
144         /*@modifies al, provides @*/;
145 /*@=exportlocal@*/
146
147 /**
148  * Generate index for available list.
149  * @param al            available list
150  */
151 void alMakeIndex(availableList al)
152         /*@modifies al @*/;
153
154 /**
155  * Check added package file lists for package(s) that provide a file.
156  * @param al            available list
157  * @param ds            dependency set
158  * @return              available package pointer
159  */
160 /*@-exportlocal@*/
161 /*@only@*/ /*@null@*/
162 alKey * alAllFileSatisfiesDepend(const availableList al, const rpmDepSet ds)
163         /*@globals fileSystem @*/
164         /*@modifies al, fileSystem @*/;
165 /*@=exportlocal@*/
166
167 /**
168  * Check added package file lists for package(s) that have a provide.
169  * @param al            available list
170  * @param ds            dependency set
171  * @return              available package keys
172  */
173 /*@only@*/ /*@null@*/
174 alKey * alAllSatisfiesDepend(const availableList al, const rpmDepSet ds)
175         /*@globals fileSystem @*/
176         /*@modifies al, fileSystem @*/;
177
178 /**
179  * Check added package file lists for first package that has a provide.
180  * @todo Eliminate.
181  * @param al            available list
182  * @param ds            dependency set
183  * @return              available package index, -1 on not found
184  */
185 alKey alSatisfiesDepend(const availableList al, const rpmDepSet ds)
186         /*@globals fileSystem @*/
187         /*@modifies al, fileSystem @*/;
188
189 #ifdef __cplusplus
190 }
191 #endif
192
193 #endif  /* H_RPMAL */