Age Owner TLA Line data Source code
1 : /*-------------------------------------------------------------------------
2 : *
3 : * kwlookup.h
4 : * Key word lookup for PostgreSQL
5 : *
6 : *
7 : * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
8 : * Portions Copyright (c) 1994, Regents of the University of California
9 : *
10 : * src/include/common/kwlookup.h
11 : *
12 : *-------------------------------------------------------------------------
13 : */
14 : #ifndef KWLOOKUP_H
15 : #define KWLOOKUP_H
16 :
17 : /* Hash function used by ScanKeywordLookup */
18 : typedef int (*ScanKeywordHashFunc) (const void *key, size_t keylen);
19 :
20 : /*
21 : * This struct contains the data needed by ScanKeywordLookup to perform a
22 : * search within a set of keywords. The contents are typically generated by
23 : * src/tools/gen_keywordlist.pl from a header containing PG_KEYWORD macros.
24 : */
25 : typedef struct ScanKeywordList
26 : {
27 : const char *kw_string; /* all keywords in order, separated by \0 */
28 : const uint16 *kw_offsets; /* offsets to the start of each keyword */
29 : ScanKeywordHashFunc hash; /* perfect hash function for keywords */
30 : int num_keywords; /* number of keywords */
31 : int max_kw_len; /* length of longest keyword */
32 : } ScanKeywordList;
33 :
34 :
35 : extern int ScanKeywordLookup(const char *str, const ScanKeywordList *keywords);
36 :
37 : /* Code that wants to retrieve the text of the N'th keyword should use this. */
38 : static inline const char *
2435 tgl@sss.pgh.pa.us 39 CBC 6539416 : GetScanKeyword(int n, const ScanKeywordList *keywords)
40 : {
41 6539416 : return keywords->kw_string + keywords->kw_offsets[n];
42 : }
43 :
44 : #endif /* KWLOOKUP_H */
|