
    [
#gT              
          d dl mZmZ d dlmZmZmZ ddedededefdZdedefdZ	dedefd	Z
	 ddddee   dedej
                  j                  fdZddddedefdZdej
                  j                  dedeeej
                  j                  f   dej                   j"                  dej
                  j                  f
dZy
)    )OptionalUnion)
interfacesobjects	constantsvaluecountmax_bitsreturnc                 F    d|z  dz
  }| ||z  z  |z  | |z  |||z  z
  z	  z  S )z#A rotate-left instruction in Python    )r   r	   r
   max_bits_masks       W/home/panchajanya/Development/work/volatility3/volatility3/framework/objects/utility.pyrolr   
   sC    (]a'MUX%%6		H0@$AB     c                 @    | dz  dz  | dz	  dz  z  } | dz  | dz	  z  dz  S )N   l    ~ i         r   )r   s    r   bswap_32r      s6    qjJ&EQJ*+DEEb[Ub[)Z77r   c                 P    t        | dz	        }t        | dz        }|dz  |z  dz  S )N    r   l    )r   )r   lowhighs      r   bswap_64r      s4    
ERK
!CUZ')DRZ3"444r   Narrayzobjects.Arrayerrorsc                     || j                   j                  }t        | t        j                        st        d      | j                  d||      S )z<Takes a volatility Array of characters and returns a string.z&Array_to_string takes an Array of charstring
max_lengthr   )volr	   
isinstancer   Array	TypeErrorcast)r   r	   r   s      r   array_to_stringr(      sE    
 }		eW]]+@AA::h5:@@r   pointerzobjects.Pointerc                     t        | t        j                        st        d      |dk  rt	        d      | j                         }|j                  d||      S )z>Takes a volatility Pointer to characters and returns a string.z!pointer_to_string takes a Pointerr   z+pointer_to_string requires a positive countr    r!   )r$   r   Pointerr&   
ValueErrordereferencer'   )r)   r	   r   chars       r   pointer_to_stringr/   ,   sR    gw/;<<qyFGG D99X%9??r   subtypecontextc                    | j                   j                  j                  t        j                        d   }t        |t              r||j                  j                  |      }t        |t        j                  j                        r|t        d      |j                  j                  |t        j                  z   dz         j                         }|j                  |       | j                  d||      S )zCTakes an object, and recasts it as an array of pointers to subtype.r   zGSubtype must be a valid template (or string name of an object template)r)   )r0   r   )r	   r0   )r#   	type_namesplitr   BANGr$   strsymbol_spaceget_typer   r   Templater&   clone
update_volr'   )r   r	   r0   r1   symbol_tablesubtype_pointers         r   array_of_pointersr>   6   s     99&&,,Y^^<Q?L'3G$7&&//8gz11::;wU
 	
 **33y~~%	1eg  w/::gUO:DDr   )@   )Nreplace)r@   )typingr   r   volatility3.frameworkr   r   r   intr   r   r   r6   ObjectInterfacer(   r/   r9   r1   ContextInterfacer>   r   r   r   <module>rF      s*  
 # @ @s 3 # s 8C 8C 85C 5C 5 HQ
A
A#+C=
AAD
A''
A@0 @ @c @E--EE 3
**3334E 00	E
 ''Er   