⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regex_internal.h

📁 gnu tar 源码包。 tar 软件是 Unix 系统下的一个打包软件
💻 H
📖 第 1 页 / 共 2 页
字号:
#endifstatic reg_errcode_t re_string_realloc_buffers (re_string_t *pstr,						Idx new_buf_len)     internal_function;#ifdef RE_ENABLE_I18Nstatic void build_wcs_buffer (re_string_t *pstr) internal_function;static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr)     internal_function;#endif /* RE_ENABLE_I18N */static void build_upper_buffer (re_string_t *pstr) internal_function;static void re_string_translate_buffer (re_string_t *pstr) internal_function;static unsigned int re_string_context_at (const re_string_t *input, Idx idx,					  int eflags)     internal_function __attribute ((pure));#define re_string_peek_byte(pstr, offset) \  ((pstr)->mbs[(pstr)->cur_idx + offset])#define re_string_fetch_byte(pstr) \  ((pstr)->mbs[(pstr)->cur_idx++])#define re_string_first_byte(pstr, idx) \  ((idx) == (pstr)->valid_len || (pstr)->wcs[idx] != WEOF)#define re_string_is_single_byte_char(pstr, idx) \  ((pstr)->wcs[idx] != WEOF && ((pstr)->valid_len == (idx) + 1 \				|| (pstr)->wcs[(idx) + 1] != WEOF))#define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx)#define re_string_cur_idx(pstr) ((pstr)->cur_idx)#define re_string_get_buffer(pstr) ((pstr)->mbs)#define re_string_length(pstr) ((pstr)->len)#define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx])#define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx))#define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx))#include <alloca.h>#ifndef _LIBC# if HAVE_ALLOCA/* The OS usually guarantees only one guard page at the bottom of the stack,   and a page size can be as small as 4096 bytes.  So we cannot safely   allocate anything larger than 4096 bytes.  Also care for the possibility   of a few compiler-allocated temporary stack slots.  */#  define __libc_use_alloca(n) ((n) < 4032)# else/* alloca is implemented with malloc, so just use malloc.  */#  define __libc_use_alloca(n) 0# endif#endif#ifndef MAX# define MAX(a,b) ((a) < (b) ? (b) : (a))#endif#define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t)))#define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t)))#define re_free(p) free (p)struct bin_tree_t{  struct bin_tree_t *parent;  struct bin_tree_t *left;  struct bin_tree_t *right;  struct bin_tree_t *first;  struct bin_tree_t *next;  re_token_t token;  /* `node_idx' is the index in dfa->nodes, if `type' == 0.     Otherwise `type' indicate the type of this node.  */  Idx node_idx;};typedef struct bin_tree_t bin_tree_t;#define BIN_TREE_STORAGE_SIZE \  ((1024 - sizeof (void *)) / sizeof (bin_tree_t))struct bin_tree_storage_t{  struct bin_tree_storage_t *next;  bin_tree_t data[BIN_TREE_STORAGE_SIZE];};typedef struct bin_tree_storage_t bin_tree_storage_t;#define CONTEXT_WORD 1#define CONTEXT_NEWLINE (CONTEXT_WORD << 1)#define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1)#define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1)#define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD)#define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE)#define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF)#define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF)#define IS_ORDINARY_CONTEXT(c) ((c) == 0)#define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_')#define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR)#define IS_WIDE_WORD_CHAR(ch) (iswalnum (ch) || (ch) == L'_')#define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR)#define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \ ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \  || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \  || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\  || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context)))#define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \ ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \  || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \  || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \  || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context)))struct re_dfastate_t{  re_hashval_t hash;  re_node_set nodes;  re_node_set non_eps_nodes;  re_node_set inveclosure;  re_node_set *entrance_nodes;  struct re_dfastate_t **trtable, **word_trtable;  unsigned int context : 4;  unsigned int halt : 1;  /* If this state can accept `multi byte'.     Note that we refer to multibyte characters, and multi character     collating elements as `multi byte'.  */  unsigned int accept_mb : 1;  /* If this state has backreference node(s).  */  unsigned int has_backref : 1;  unsigned int has_constraint : 1;};typedef struct re_dfastate_t re_dfastate_t;struct re_state_table_entry{  Idx num;  Idx alloc;  re_dfastate_t **array;};/* Array type used in re_sub_match_last_t and re_sub_match_top_t.  */typedef struct{  Idx next_idx;  Idx alloc;  re_dfastate_t **array;} state_array_t;/* Store information about the node NODE whose type is OP_CLOSE_SUBEXP.  */typedef struct{  Idx node;  Idx str_idx; /* The position NODE match at.  */  state_array_t path;} re_sub_match_last_t;/* Store information about the node NODE whose type is OP_OPEN_SUBEXP.   And information about the node, whose type is OP_CLOSE_SUBEXP,   corresponding to NODE is stored in LASTS.  */typedef struct{  Idx str_idx;  Idx node;  state_array_t *path;  Idx alasts; /* Allocation size of LASTS.  */  Idx nlasts; /* The number of LASTS.  */  re_sub_match_last_t **lasts;} re_sub_match_top_t;struct re_backref_cache_entry{  Idx node;  Idx str_idx;  Idx subexp_from;  Idx subexp_to;  char more;  char unused;  unsigned short int eps_reachable_subexps_map;};typedef struct{  /* The string object corresponding to the input string.  */  re_string_t input;#if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)  const re_dfa_t *const dfa;#else  const re_dfa_t *dfa;#endif  /* EFLAGS of the argument of regexec.  */  int eflags;  /* Where the matching ends.  */  Idx match_last;  Idx last_node;  /* The state log used by the matcher.  */  re_dfastate_t **state_log;  Idx state_log_top;  /* Back reference cache.  */  Idx nbkref_ents;  Idx abkref_ents;  struct re_backref_cache_entry *bkref_ents;  int max_mb_elem_len;  Idx nsub_tops;  Idx asub_tops;  re_sub_match_top_t **sub_tops;} re_match_context_t;typedef struct{  re_dfastate_t **sifted_states;  re_dfastate_t **limited_states;  Idx last_node;  Idx last_str_idx;  re_node_set limits;} re_sift_context_t;struct re_fail_stack_ent_t{  Idx idx;  Idx node;  regmatch_t *regs;  re_node_set eps_via_nodes;};struct re_fail_stack_t{  Idx num;  Idx alloc;  struct re_fail_stack_ent_t *stack;};struct re_dfa_t{  re_token_t *nodes;  size_t nodes_alloc;  size_t nodes_len;  Idx *nexts;  Idx *org_indices;  re_node_set *edests;  re_node_set *eclosures;  re_node_set *inveclosures;  struct re_state_table_entry *state_table;  re_dfastate_t *init_state;  re_dfastate_t *init_state_word;  re_dfastate_t *init_state_nl;  re_dfastate_t *init_state_begbuf;  bin_tree_t *str_tree;  bin_tree_storage_t *str_tree_storage;  re_bitset_ptr_t sb_char;  int str_tree_storage_idx;  /* number of subexpressions `re_nsub' is in regex_t.  */  re_hashval_t state_hash_mask;  Idx init_node;  Idx nbackref; /* The number of backreference in this dfa.  */  /* Bitmap expressing which backreference is used.  */  bitset_word_t used_bkref_map;  bitset_word_t completed_bkref_map;  unsigned int has_plural_match : 1;  /* If this dfa has "multibyte node", which is a backreference or     a node which can accept multibyte character or multi character     collating element.  */  unsigned int has_mb_node : 1;  unsigned int is_utf8 : 1;  unsigned int map_notascii : 1;  unsigned int word_ops_used : 1;  int mb_cur_max;  bitset_t word_char;  reg_syntax_t syntax;  Idx *subexp_map;#ifdef DEBUG  char* re_str;#endif#ifdef _LIBC  __libc_lock_define (, lock)#endif};#define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set))#define re_node_set_remove(set,id) \  (re_node_set_remove_at (set, re_node_set_contains (set, id) - 1))#define re_node_set_empty(p) ((p)->nelem = 0)#define re_node_set_free(set) re_free ((set)->elems)typedef enum{  SB_CHAR,  MB_CHAR,  EQUIV_CLASS,  COLL_SYM,  CHAR_CLASS} bracket_elem_type;typedef struct{  bracket_elem_type type;  union  {    unsigned char ch;    unsigned char *name;    wchar_t wch;  } opr;} bracket_elem_t;/* Inline functions for bitset_t operation.  */static inline voidbitset_set (bitset_t set, Idx i){  set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS;}static inline voidbitset_clear (bitset_t set, Idx i){  set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS);}static inline boolbitset_contain (const bitset_t set, Idx i){  return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1;}static inline voidbitset_empty (bitset_t set){  memset (set, '\0', sizeof (bitset_t));}static inline voidbitset_set_all (bitset_t set){  memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS));  if (SBC_MAX % BITSET_WORD_BITS != 0)    set[BITSET_WORDS - 1] =      ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1;}static inline voidbitset_copy (bitset_t dest, const bitset_t src){  memcpy (dest, src, sizeof (bitset_t));}static inline voidbitset_not (bitset_t set){  int bitset_i;  for (bitset_i = 0; bitset_i < SBC_MAX / BITSET_WORD_BITS; ++bitset_i)    set[bitset_i] = ~set[bitset_i];  if (SBC_MAX % BITSET_WORD_BITS != 0)    set[BITSET_WORDS - 1] =      ((((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1)       & ~set[BITSET_WORDS - 1]);}static inline voidbitset_merge (bitset_t dest, const bitset_t src){  int bitset_i;  for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i)    dest[bitset_i] |= src[bitset_i];}static inline voidbitset_mask (bitset_t dest, const bitset_t src){  int bitset_i;  for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i)    dest[bitset_i] &= src[bitset_i];}#ifdef RE_ENABLE_I18N/* Inline functions for re_string.  */static inline intinternal_function __attribute ((pure))re_string_char_size_at (const re_string_t *pstr, Idx idx){  int byte_idx;  if (pstr->mb_cur_max == 1)    return 1;  for (byte_idx = 1; idx + byte_idx < pstr->valid_len; ++byte_idx)    if (pstr->wcs[idx + byte_idx] != WEOF)      break;  return byte_idx;}static inline wint_tinternal_function __attribute ((pure))re_string_wchar_at (const re_string_t *pstr, Idx idx){  if (pstr->mb_cur_max == 1)    return (wint_t) pstr->mbs[idx];  return (wint_t) pstr->wcs[idx];}static intinternal_function __attribute ((pure))re_string_elem_size_at (const re_string_t *pstr, Idx idx){# ifdef _LIBC  const unsigned char *p, *extra;  const int32_t *table, *indirect;  int32_t tmp;#  include <locale/weight.h>  uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);  if (nrules != 0)    {      table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);      extra = (const unsigned char *)	_NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);      indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,						_NL_COLLATE_INDIRECTMB);      p = pstr->mbs + idx;      tmp = findidx (&p);      return p - pstr->mbs - idx;    }  else# endif /* _LIBC */    return 1;}#endif /* RE_ENABLE_I18N */#endif /*  _REGEX_INTERNAL_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -