upgrade rpm version to 4.14.1
[platform/upstream/rpm.git] / lib / backend / dbiset.h
1 #ifndef _DBISET_H
2 #define _DBISET_H
3
4 #include <rpm/rpmutil.h>
5
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 */
10 } * dbiIndexItem;
11
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 */
17 } * dbiIndexSet;
18
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22
23 /* Create an empty index set, optionally with sizehint reservation for recs */
24 RPM_GNUC_INTERNAL
25 dbiIndexSet dbiIndexSetNew(unsigned int sizehint);
26
27 /* Reserve space for at least nrecs new records */
28 RPM_GNUC_INTERNAL
29 void dbiIndexSetGrow(dbiIndexSet set, unsigned int nrecs);
30
31 /* Sort an index set */
32 RPM_GNUC_INTERNAL
33 void dbiIndexSetSort(dbiIndexSet set);
34
35 /* Uniq an index set */
36 RPM_GNUC_INTERNAL
37 void dbiIndexSetUniq(dbiIndexSet set, int sorted);
38
39 /* Append an index set to another */
40 RPM_GNUC_INTERNAL
41 int dbiIndexSetAppendSet(dbiIndexSet set, dbiIndexSet oset, int sortset);
42
43 /**
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)
50  */
51 RPM_GNUC_INTERNAL
52 int dbiIndexSetAppend(dbiIndexSet set, dbiIndexItem recs,
53                       unsigned int nrecs, int sortset);
54
55 /**
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)
62   */
63 RPM_GNUC_INTERNAL
64 int dbiIndexSetAppendOne(dbiIndexSet set, unsigned int hdrNum,
65                          unsigned int tagNum, int sortset);
66
67 /**
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)
74  */
75 RPM_GNUC_INTERNAL
76 int dbiIndexSetPrune(dbiIndexSet set, dbiIndexItem recs,
77                      unsigned int nrecs, int sorted);
78
79 /**
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)
85  */
86 RPM_GNUC_INTERNAL
87 int dbiIndexSetPruneSet(dbiIndexSet set, dbiIndexSet oset, int sorted);
88
89 /**
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)
96  */
97 RPM_GNUC_INTERNAL
98 int dbiIndexSetFilter(dbiIndexSet set, dbiIndexItem recs,
99                       unsigned int nrecs, int sorted);
100
101 /**
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)
107  */
108 RPM_GNUC_INTERNAL
109 int dbiIndexSetFilterSet(dbiIndexSet set, dbiIndexSet oset, int sorted);
110
111 /* Count items in index database set. */
112 RPM_GNUC_INTERNAL
113 unsigned int dbiIndexSetCount(dbiIndexSet set);
114
115 /* Return record offset of header from element in index database set. */
116 RPM_GNUC_INTERNAL
117 unsigned int dbiIndexRecordOffset(dbiIndexSet set, unsigned int recno);
118
119 /* Return file index from element in index database set. */
120 RPM_GNUC_INTERNAL
121 unsigned int dbiIndexRecordFileNumber(dbiIndexSet set, unsigned int recno);
122
123 /* Destroy set of index database items */
124 RPM_GNUC_INTERNAL
125 dbiIndexSet dbiIndexSetFree(dbiIndexSet set);
126
127 #ifdef __cplusplus
128 }
129 #endif
130 #endif