PostgreSQL Source Code  git master
kwlookup.h
Go to the documentation of this file.
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 */
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 */
33 
34 
35 extern 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. */
38 static inline const char *
39 GetScanKeyword(int n, const ScanKeywordList *keywords)
40 {
41  return keywords->kw_string + keywords->kw_offsets[n];
42 }
43 
44 #endif /* KWLOOKUP_H */
const char * kw_string
Definition: kwlookup.h:27
const uint16 * kw_offsets
Definition: kwlookup.h:28
struct ScanKeywordList ScanKeywordList
int(* ScanKeywordHashFunc)(const void *key, size_t keylen)
Definition: kwlookup.h:18
static const char * GetScanKeyword(int n, const ScanKeywordList *keywords)
Definition: kwlookup.h:39
unsigned short uint16
Definition: c.h:358
ScanKeywordHashFunc hash
Definition: kwlookup.h:29
int num_keywords
Definition: kwlookup.h:30
int ScanKeywordLookup(const char *text, const ScanKeywordList *keywords)
Definition: kwlookup.c:38
Definition: c.h:550