Line data Source code
1 : /*------------------------------------------------------------------------- 2 : * 3 : * kwlookup.h 4 : * Key word lookup for PostgreSQL 5 : * 6 : * 7 : * Portions Copyright (c) 1996-2024, 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 * 39 11483138 : GetScanKeyword(int n, const ScanKeywordList *keywords) 40 : { 41 11483138 : return keywords->kw_string + keywords->kw_offsets[n]; 42 : } 43 : 44 : #endif /* KWLOOKUP_H */