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

📄 regex_internal.h

📁 硬盘各项性能的测试,如温度容量版本健康度型号
💻 H
📖 第 1 页 / 共 2 页
字号:
  ((pstr)->wcs[idx] != WEOF && ((pstr)->len == (idx) \				|| (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))#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;  /* `node_idx' is the index in dfa->nodes, if `type' == 0.     Otherwise `type' indicate the type of this node.  */  re_token_type_t type;  int node_idx;  int first;  int next;  re_node_set eclosure;};typedef struct bin_tree_t bin_tree_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{  unsigned int hash;  re_node_set nodes;  re_node_set *entrance_nodes;  struct re_dfastate_t **trtable;  struct re_dfastate_t **trtable_search;  /* If this state is a special state.     A state is a special state if the state is the halt state, or     a anchor.  */  unsigned int context : 2;  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;typedef struct{  /* start <= node < end  */  int start;  int end;} re_subexp_t;struct re_state_table_entry{  int num;  int alloc;  re_dfastate_t **array;};/* Array type used in re_sub_match_last_t and re_sub_match_top_t.  */typedef struct{  int next_idx;  int alloc;  re_dfastate_t **array;} state_array_t;/* Store information about the node NODE whose type is OP_CLOSE_SUBEXP.  */typedef struct{  int node;  int 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{  int str_idx;  int node;  int next_last_offset;  state_array_t *path;  int alasts; /* Allocation size of LASTS.  */  int nlasts; /* The number of LASTS.  */  re_sub_match_last_t **lasts;} re_sub_match_top_t;struct re_backref_cache_entry{  int node;  int str_idx;  int subexp_from;  int subexp_to;  int flag;};typedef struct{  /* EFLAGS of the argument of regexec.  */  int eflags;  /* Where the matching ends.  */  int match_last;  int last_node;  /* The string object corresponding to the input string.  */  re_string_t *input;  /* The state log used by the matcher.  */  re_dfastate_t **state_log;  int state_log_top;  /* Back reference cache.  */  int nbkref_ents;  int abkref_ents;  struct re_backref_cache_entry *bkref_ents;  int max_mb_elem_len;  int nsub_tops;  int asub_tops;  re_sub_match_top_t **sub_tops;} re_match_context_t;typedef struct{  int cur_bkref;  int cls_subexp_idx;  re_dfastate_t **sifted_states;  re_dfastate_t **limited_states;  re_node_set limits;  int last_node;  int last_str_idx;  int check_subexp;} re_sift_context_t;struct re_fail_stack_ent_t{  int idx;  int node;  regmatch_t *regs;  re_node_set eps_via_nodes;};struct re_fail_stack_t{  int num;  int alloc;  struct re_fail_stack_ent_t *stack;};struct re_dfa_t{  re_bitset_ptr_t word_char;  /* number of subexpressions `re_nsub' is in regex_t.  */  int subexps_alloc;  re_subexp_t *subexps;  re_token_t *nodes;  int nodes_alloc;  int nodes_len;  bin_tree_t *str_tree;  int *nexts;  int *org_indices;  re_node_set *edests;  re_node_set *eclosures;  re_node_set *inveclosures;  struct re_state_table_entry *state_table;  unsigned int state_hash_mask;  re_dfastate_t *init_state;  re_dfastate_t *init_state_word;  re_dfastate_t *init_state_nl;  re_dfastate_t *init_state_begbuf;  int states_alloc;  int init_node;  int nbackref; /* The number of backreference in this dfa.  */  /* Bitmap expressing which backreference is used.  */  unsigned int used_bkref_map;#ifdef DEBUG  char* re_str;#endif  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;};typedef struct re_dfa_t re_dfa_t;static reg_errcode_t re_node_set_alloc (re_node_set *set, int size);static reg_errcode_t re_node_set_init_1 (re_node_set *set, int elem);static reg_errcode_t re_node_set_init_2 (re_node_set *set, int elem1,					 int elem2);#define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set))static reg_errcode_t re_node_set_init_copy (re_node_set *dest,					    const re_node_set *src);static reg_errcode_t re_node_set_add_intersect (re_node_set *dest,						const re_node_set *src1,						const re_node_set *src2);static reg_errcode_t re_node_set_init_union (re_node_set *dest,					     const re_node_set *src1,					     const re_node_set *src2);static reg_errcode_t re_node_set_merge (re_node_set *dest,					const re_node_set *src);static int re_node_set_insert (re_node_set *set, int elem);static int re_node_set_compare (const re_node_set *set1,				const re_node_set *set2);static int re_node_set_contains (const re_node_set *set, int elem);static void re_node_set_remove_at (re_node_set *set, int idx);#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)static int re_dfa_add_node (re_dfa_t *dfa, re_token_t token, int mode);static re_dfastate_t *re_acquire_state (reg_errcode_t *err, re_dfa_t *dfa,					const re_node_set *nodes);static re_dfastate_t *re_acquire_state_context (reg_errcode_t *err,						re_dfa_t *dfa,						const re_node_set *nodes,						unsigned int context);static void free_state (re_dfastate_t *state);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 operation.  */static inline voidbitset_not (set)     bitset set;{  int bitset_i;  for (bitset_i = 0; bitset_i < BITSET_UINTS; ++bitset_i)    set[bitset_i] = ~set[bitset_i];}static inline voidbitset_merge (dest, src)     bitset dest;     const bitset src;{  int bitset_i;  for (bitset_i = 0; bitset_i < BITSET_UINTS; ++bitset_i)    dest[bitset_i] |= src[bitset_i];}static inline voidbitset_not_merge (dest, src)     bitset dest;     const bitset src;{  int i;  for (i = 0; i < BITSET_UINTS; ++i)    dest[i] |= ~src[i];}#ifdef RE_ENABLE_I18N/* Inline functions for re_string.  */static inline intre_string_char_size_at (pstr, idx)     const re_string_t *pstr;     int idx;{  int byte_idx;  if (MB_CUR_MAX == 1)    return 1;  for (byte_idx = 1; idx + byte_idx < pstr->len; ++byte_idx)    if (pstr->wcs[idx + byte_idx] != WEOF)      break;  return byte_idx;}static inline wint_tre_string_wchar_at (pstr, idx)     const re_string_t *pstr;     int idx;{  if (MB_CUR_MAX == 1)    return (wint_t) pstr->mbs[idx];  return (wint_t) pstr->wcs[idx];}static intre_string_elem_size_at (pstr, idx)     const re_string_t *pstr;     int 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 + -