]> ruderich.org/simon Gitweb - nsscash/nsscash.git/blob - nss/search.h
nss: Makefile: build libcash_test.so in tests/
[nsscash/nsscash.git] / nss / search.h
1 /*
2  * Search entries in nsscash files by using indices and binary search (header)
3  *
4  * Copyright (C) 2019  Simon Ruderich
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
18  */
19
20 #ifndef SEARCH_H
21 #define SEARCH_H
22
23 #include <stdint.h>
24
25
26 struct search_key {
27     const char *name; // if name != NULL search for a string
28     const uint64_t *id; // if name == NULL search for an id
29
30     // The actual data with all entries; this is where the full entry
31     // including name/id is located (the index holds an offset into data for
32     // each entry)
33     const void *data;
34     // Static offset to the search key (name/id) inside the entry; after it
35     // was located by using the index's offset into data
36     uint64_t offset;
37 };
38
39 uint64_t *search(const struct search_key *key, const void *index, uint64_t count) __attribute__((visibility("hidden")));
40
41 #endif