4 #include <rpm/rpmutil.h>
6 /* A single item from an index database (i.e. the "data returned"). */
7 typedef struct dbiIndexItem_s {
8 unsigned int hdrNum; /*!< header instance in db */
9 unsigned int tagNum; /*!< tag index in header */
12 /* Items retrieved from the index database.*/
13 typedef struct dbiIndexSet_s {
14 dbiIndexItem recs; /*!< array of records */
15 unsigned int count; /*!< number of records */
16 size_t alloced; /*!< alloced size */
23 /* Create an empty index set, optionally with sizehint reservation for recs */
25 dbiIndexSet dbiIndexSetNew(unsigned int sizehint);
27 /* Reserve space for at least nrecs new records */
29 void dbiIndexSetGrow(dbiIndexSet set, unsigned int nrecs);
31 /* Sort an index set */
33 void dbiIndexSetSort(dbiIndexSet set);
35 /* Uniq an index set */
37 void dbiIndexSetUniq(dbiIndexSet set, int sorted);
39 /* Append an index set to another */
41 int dbiIndexSetAppendSet(dbiIndexSet set, dbiIndexSet oset, int sortset);
44 * Append element(s) to set of index database items.
45 * @param set set of index database items
46 * @param recs array of items to append to set
47 * @param nrecs number of items
48 * @param sortset should resulting set be sorted?
49 * @return 0 success, 1 failure (bad args)
52 int dbiIndexSetAppend(dbiIndexSet set, dbiIndexItem recs,
53 unsigned int nrecs, int sortset);
56 * Append a single element to a set of index database items.
57 * @param set set of index database items
58 * @param hdrNum header instance in db
59 * @param tagNum tag index in header
60 * @param sortset should resulting set be sorted?
61 * @return 0 success, 1 failure (bad args)
64 int dbiIndexSetAppendOne(dbiIndexSet set, unsigned int hdrNum,
65 unsigned int tagNum, int sortset);
68 * Remove element(s) from set of index database items.
69 * @param set set of index database items
70 * @param recs array of items to remove from set
71 * @param nrecs number of items
72 * @param sorted array is already sorted?
73 * @return 0 success, 1 failure (no items found)
76 int dbiIndexSetPrune(dbiIndexSet set, dbiIndexItem recs,
77 unsigned int nrecs, int sorted);
80 * Remove an index set from another.
81 * @param set set of index database items
82 * @param oset set of entries that should be removed
83 * @param sorted oset is already sorted?
84 * @return 0 success, 1 failure (no items found)
87 int dbiIndexSetPruneSet(dbiIndexSet set, dbiIndexSet oset, int sorted);
90 * Filter element(s) from set of index database items.
91 * @param set set of index database items
92 * @param recs array of items to remove from set
93 * @param nrecs number of items
94 * @param sorted recs array is already sorted?
95 * @return 0 success, 1 failure (no items removed)
98 int dbiIndexSetFilter(dbiIndexSet set, dbiIndexItem recs,
99 unsigned int nrecs, int sorted);
102 * Filter (intersect) an index set with another.
103 * @param set set of index database items
104 * @param oset set of entries that should be intersected
105 * @param sorted oset is already sorted?
106 * @return 0 success, 1 failure (no items removed)
109 int dbiIndexSetFilterSet(dbiIndexSet set, dbiIndexSet oset, int sorted);
111 /* Count items in index database set. */
113 unsigned int dbiIndexSetCount(dbiIndexSet set);
115 /* Return record offset of header from element in index database set. */
117 unsigned int dbiIndexRecordOffset(dbiIndexSet set, unsigned int recno);
119 /* Return file index from element in index database set. */
121 unsigned int dbiIndexRecordFileNumber(dbiIndexSet set, unsigned int recno);
123 /* Destroy set of index database items */
125 dbiIndexSet dbiIndexSetFree(dbiIndexSet set);