
    Xf                     6    d dl Z d dlmZmZmZ  G d de      Zy)    N)	GeneratorListTuplec                   V    e Zd ZdZd
dZdeddfdZd
dZdedee	e
ef   ddf   fd	Zy)MultiRegexpz$Algorithm for multi-string matching.returnNc                 F    g | _         t        j                  d      | _        y )N    )_pattern_stringsrecompile_regexselfs    c/home/panchajanya/Development/work/volatility3/volatility3/framework/layers/scanners/multiregexp.py__init__zMultiRegexp.__init__   s    -/jjor
   patternc                 :    | j                   j                  |       y )N)r   append)r   r   s     r   add_patternzMultiRegexp.add_pattern   s    $$W-r
   c                     | j                   st        d      t        j                  dj	                  t        t        j                  | j                                     | _        y )Nz/No strings to compile into a regular expression   |)r   
ValueErrorr   r   joinmapescaper   r   s    r   
preprocesszMultiRegexp.preprocess   sA    $$NOOjj3ryy$:O:O+P!QRr
   haystackc              #     K   t        |t              st        d      | j                  j                  st        d      t        j                  | j                  |      D ]%  }|j                  d      |j                         f ' y w)Nz%Search haystack must be a byte stringz>MultiRegexp cannot be used with an empty set of search stringsr   )

isinstancebytes	TypeErrorr   r   r   r   finditerstartgroup)r   r   matchs      r   searchzMultiRegexp.search   sr     (E*CDD{{""P  [[h7 	2E;;q>5;;=11	2s   BB)r   N)__name__
__module____qualname____doc__r   r!   r   r   r   r   intr'    r
   r   r   r   	   sK    .&.5 .T .S
2u 25e3DdD3P)Q 2r
   r   )r   typingr   r   r   objectr   r-   r
   r   <module>r0      s   
 
 ) )2& 2r
   