Add a pattern struct to encompass a pattern NFA and its size.
The size is necessary in free operations - unlike vectors and linked lists, sparse sets in libds are not dynamically resizable.
This commit is contained in:
		
							parent
							
								
									fbba562eb7
								
							
						
					
					
						commit
						19ca43d8e4
					
				@ -149,23 +149,39 @@ struct pattern_chain_s {
 | 
			
		||||
  struct pattern_node_s* tail;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents a single compiled pattern.
 | 
			
		||||
 */
 | 
			
		||||
struct pattern_s {
 | 
			
		||||
  /**
 | 
			
		||||
   * The first NFA state of the pattern.
 | 
			
		||||
   */
 | 
			
		||||
  struct pattern_node_s* head;
 | 
			
		||||
  /**
 | 
			
		||||
   * The number of NFA nodes in this pattern.
 | 
			
		||||
   */
 | 
			
		||||
  int size;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef enum pattern_node_type_e pattern_node_type;
 | 
			
		||||
typedef struct pattern_node_s pattern_node;
 | 
			
		||||
typedef struct pattern_chain_s pattern_chain;
 | 
			
		||||
typedef struct pattern_s pattern;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Compiles a string representation of a pattern into a pattern NFA,
 | 
			
		||||
 * and stores the first node of the new NFA in root.
 | 
			
		||||
 * @param root the node to store the resulting pattern into.
 | 
			
		||||
 * @param expression the pattern represented as a string.
 | 
			
		||||
 * @param id the id of the pattern.
 | 
			
		||||
 * @return LIBLEX_SUCCESS if all goes well, otherwise some other liblex_result.
 | 
			
		||||
 */
 | 
			
		||||
liblex_result pattern_compile(pattern_node** root, char* expression);
 | 
			
		||||
liblex_result pattern_compile(pattern* ptrn, char* expression, int id);
 | 
			
		||||
/**
 | 
			
		||||
 * Frees a pattern NFA allocated by pattern_compile.
 | 
			
		||||
 * @param root the root node to start freeing from.
 | 
			
		||||
 * @return LIBLEX_SUCCESS if all goes well, otherwise some other liblex_result.
 | 
			
		||||
 */
 | 
			
		||||
liblex_result pattern_free(pattern_node* root);
 | 
			
		||||
liblex_result pattern_free(pattern* ptrn);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user