1/*-------------------------------------------------------------------------
2 *
3 * kwlookup.h
4 * Key word lookup for PostgreSQL
5 *
6 *
7 * Portions Copyright (c) 1996-2019, 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 */
18typedef 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 */
25typedef 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
35extern int ScanKeywordLookup(const char *text, const ScanKeywordList *keywords);
36
37/* Code that wants to retrieve the text of the N'th keyword should use this. */
38static inline const char *
39GetScanKeyword(int n, const ScanKeywordList *keywords)
40{
41 return keywords->kw_string + keywords->kw_offsets[n];
42}
43
44#endif /* KWLOOKUP_H */
45