
    Xf                     >    d dl Z d dlmZmZmZ  G d de          ZdS )    N)	GeneratorListTuplec                   d    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dS )MultiRegexpz$Algorithm for multi-string matching.returnNc                 F    g | _         t          j        d          | _        d S )N    )_pattern_stringsrecompile_regexselfs    c/home/panchajanya/Development/work/volatility3/volatility3/framework/layers/scanners/multiregexp.py__init__zMultiRegexp.__init__   s    -/joor
   patternc                 :    | j                             |           d S )N)r   append)r   r   s     r   add_patternzMultiRegexp.add_pattern   s    $$W-----r
   c                     | j         st          d          t          j        d                    t          t          j        | j                                       | _        d S )Nz/No strings to compile into a regular expression   |)r   
ValueErrorr   r   joinmapescaper   r   s    r   
preprocesszMultiRegexp.preprocess   sM    $ 	PNOOOj3ry$:O+P+P!Q!QRRr
   haystackc              #     K   t          |t                    st          d          | j        j        st          d          t          j        | j        |          D ]-}|                    d          |	                                fV  .d S )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   s      (E** 	ECDDD{" 	P   [h77 	2 	2E;;q>>5;;==11111	2 	2r
   )r   N)__name__
__module____qualname____doc__r   r!   r   r   r   r   intr'    r
   r   r   r   	   s        ..& & & &.5 .T . . . .S S S S
2u 25e3DdD3P)Q 2 2 2 2 2 2r
   r   )r   typingr   r   r   objectr   r-   r
   r   <module>r0      sb   
 
			 ) ) ) ) ) ) ) ) ) )2 2 2 2 2& 2 2 2 2 2r
   