/*
* dataiterator.h
- *
+ *
*/
#ifndef LIBSOLV_DATAITERATOR_H
#include "pooltypes.h"
#include "pool.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct _Repo;
typedef struct _KeyValue {
Id id;
const char *str;
- int num;
- int num2;
+ unsigned int num;
+ unsigned int num2;
int entry; /* array entry, starts with 0 */
int eof; /* last entry reached */
struct _KeyValue *parent;
} KeyValue;
+#define SOLV_KV_NUM64(kv) (((unsigned long long)((kv)->num2)) << 32 | (kv)->num)
+
/* search matcher flags */
#define SEARCH_STRINGMASK 15
#define SEARCH_STRING 1
int datamatcher_init(Datamatcher *ma, const char *match, int flags);
void datamatcher_free(Datamatcher *ma);
int datamatcher_match(Datamatcher *ma, const char *str);
+int datamatcher_checkbasename(Datamatcher *ma, const char *str);
/*
* Dataiterator
- *
+ *
* Iterator like interface to 'search' functionality
- *
+ *
* Dataiterator is per-pool, additional filters can be applied
* to limit the search domain. See dataiterator_init below.
- *
+ *
* Use these like:
* Dataiterator di;
* dataiterator_init(&di, repo->pool, repo, 0, 0, "bla", SEARCH_SUBSTRING);
} parents[3];
int nparents;
+ /* vertical data */
+ unsigned char *vert_ddp;
+ Id vert_off;
+ Id vert_len;
+ Id vert_storestate;
+
+ /* strdup data */
+ char *dupstr;
+ int dupstrn;
+
} Dataiterator;
/*
* Initialize dataiterator
- *
+ *
* di: Pointer to Dataiterator to be initialized
* pool: Search domain for the iterator
* repo: if non-null, limit search to this repo
void dataiterator_entersub(Dataiterator *di);
void dataiterator_clonepos(Dataiterator *di, Dataiterator *from);
void dataiterator_seek(Dataiterator *di, int whence);
+void dataiterator_strdup(Dataiterator *di);
#define DI_SEEK_STAY (1 << 16)
#define DI_SEEK_CHILD 1
#define DI_SEEK_PARENT 2
#define DI_SEEK_REWIND 3
+#ifdef __cplusplus
+}
+#endif
+
#endif /* LIBSOLV_DATAITERATOR_H */