131 lines
4.1 KiB
C
131 lines
4.1 KiB
C
#ifndef _DBISET_H
|
|
#define _DBISET_H
|
|
|
|
#include <rpm/rpmutil.h>
|
|
|
|
/* A single item from an index database (i.e. the "data returned"). */
|
|
typedef struct dbiIndexItem_s {
|
|
unsigned int hdrNum; /*!< header instance in db */
|
|
unsigned int tagNum; /*!< tag index in header */
|
|
} * dbiIndexItem;
|
|
|
|
/* Items retrieved from the index database.*/
|
|
typedef struct dbiIndexSet_s {
|
|
dbiIndexItem recs; /*!< array of records */
|
|
unsigned int count; /*!< number of records */
|
|
size_t alloced; /*!< alloced size */
|
|
} * dbiIndexSet;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Create an empty index set, optionally with sizehint reservation for recs */
|
|
RPM_GNUC_INTERNAL
|
|
dbiIndexSet dbiIndexSetNew(unsigned int sizehint);
|
|
|
|
/* Reserve space for at least nrecs new records */
|
|
RPM_GNUC_INTERNAL
|
|
void dbiIndexSetGrow(dbiIndexSet set, unsigned int nrecs);
|
|
|
|
/* Sort an index set */
|
|
RPM_GNUC_INTERNAL
|
|
void dbiIndexSetSort(dbiIndexSet set);
|
|
|
|
/* Uniq an index set */
|
|
RPM_GNUC_INTERNAL
|
|
void dbiIndexSetUniq(dbiIndexSet set, int sorted);
|
|
|
|
/* Append an index set to another */
|
|
RPM_GNUC_INTERNAL
|
|
int dbiIndexSetAppendSet(dbiIndexSet set, dbiIndexSet oset, int sortset);
|
|
|
|
/**
|
|
* Append element(s) to set of index database items.
|
|
* @param set set of index database items
|
|
* @param recs array of items to append to set
|
|
* @param nrecs number of items
|
|
* @param sortset should resulting set be sorted?
|
|
* @return 0 success, 1 failure (bad args)
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int dbiIndexSetAppend(dbiIndexSet set, dbiIndexItem recs,
|
|
unsigned int nrecs, int sortset);
|
|
|
|
/**
|
|
* Append a single element to a set of index database items.
|
|
* @param set set of index database items
|
|
* @param hdrNum header instance in db
|
|
* @param tagNum tag index in header
|
|
* @param sortset should resulting set be sorted?
|
|
* @return 0 success, 1 failure (bad args)
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int dbiIndexSetAppendOne(dbiIndexSet set, unsigned int hdrNum,
|
|
unsigned int tagNum, int sortset);
|
|
|
|
/**
|
|
* Remove element(s) from set of index database items.
|
|
* @param set set of index database items
|
|
* @param recs array of items to remove from set
|
|
* @param nrecs number of items
|
|
* @param sorted array is already sorted?
|
|
* @return 0 success, 1 failure (no items found)
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int dbiIndexSetPrune(dbiIndexSet set, dbiIndexItem recs,
|
|
unsigned int nrecs, int sorted);
|
|
|
|
/**
|
|
* Remove an index set from another.
|
|
* @param set set of index database items
|
|
* @param oset set of entries that should be removed
|
|
* @param sorted oset is already sorted?
|
|
* @return 0 success, 1 failure (no items found)
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int dbiIndexSetPruneSet(dbiIndexSet set, dbiIndexSet oset, int sorted);
|
|
|
|
/**
|
|
* Filter element(s) from set of index database items.
|
|
* @param set set of index database items
|
|
* @param recs array of items to remove from set
|
|
* @param nrecs number of items
|
|
* @param sorted recs array is already sorted?
|
|
* @return 0 success, 1 failure (no items removed)
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int dbiIndexSetFilter(dbiIndexSet set, dbiIndexItem recs,
|
|
unsigned int nrecs, int sorted);
|
|
|
|
/**
|
|
* Filter (intersect) an index set with another.
|
|
* @param set set of index database items
|
|
* @param oset set of entries that should be intersected
|
|
* @param sorted oset is already sorted?
|
|
* @return 0 success, 1 failure (no items removed)
|
|
*/
|
|
RPM_GNUC_INTERNAL
|
|
int dbiIndexSetFilterSet(dbiIndexSet set, dbiIndexSet oset, int sorted);
|
|
|
|
/* Count items in index database set. */
|
|
RPM_GNUC_INTERNAL
|
|
unsigned int dbiIndexSetCount(dbiIndexSet set);
|
|
|
|
/* Return record offset of header from element in index database set. */
|
|
RPM_GNUC_INTERNAL
|
|
unsigned int dbiIndexRecordOffset(dbiIndexSet set, unsigned int recno);
|
|
|
|
/* Return file index from element in index database set. */
|
|
RPM_GNUC_INTERNAL
|
|
unsigned int dbiIndexRecordFileNumber(dbiIndexSet set, unsigned int recno);
|
|
|
|
/* Destroy set of index database items */
|
|
RPM_GNUC_INTERNAL
|
|
dbiIndexSet dbiIndexSetFree(dbiIndexSet set);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|