Ë
    oj'  ã                   óÎ   — d Z ddlmZmZ ddlmZ  G d„ d«      Z G d„ de«      Z G d„ d	e«      Z G d
„ de«      Z	 G d„ d«      Z
 G d„ de«      ZddlmZ  G d„ dee   e«      Zy)z7
Utility classes for dealing with circular references.
é    )ÚlogÚreflect)Ú_constructMethodc                   ó(   — e Zd Zd„ Zd„ ZdZd„ Zd„ Zy)ÚNotKnownc                 ó    — g | _         d| _        y ©Nr   )Ú
dependantsÚresolved©Úselfs    ú</usr/lib/python3/dist-packages/twisted/persisted/crefutil.pyÚ__init__zNotKnown.__init__   s   € ØˆŒØˆ�ó    c                 óZ   — | j                   rJ ‚| j                  j                  ||f«       y ©N)r   r
   Úappend)r   ÚmutableObjectÚkeys      r   ÚaddDependantzNotKnown.addDependant   s&   € Ø—=’=Ð Ð Ø�‰×Ñ ¨sÐ3Õ4r   Nc                 óR   — d| _         || _        | j                  D ]
  \  }}|||<   Œ y )Né   )r   ÚresolvedObjectr
   )r   Ú	newObjectÚmutr   s       r   ÚresolveDependantszNotKnown.resolveDependants   s1   € ØˆŒØ'ˆÔØŸ™ò 	!‰HˆC�Ø ˆC�ŠHñ	!r   c                 ó   — J d«       ‚)Nz(I am not to be used as a dictionary key.© r   s    r   Ú__hash__zNotKnown.__hash__!   s   € Ø<Ð<Ó<ˆqr   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r   r      s   „ òò5ð €Nò!ó=r   r   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú
_ContainerzK
    Helper class to resolve circular references on container objects.
    c                 ó¶  — t         j                  | «       || _        || _        t	        t        t        |«      «      «      | _        t        t        |«      «      D ]F  }t        ||   t         «      s| j                  j                  |«       Œ2||   j                  | |«       ŒH | j                  s+| j                  | j                  | j                  «      «       yy)zÌ
        @param l: The list of object which may contain some not yet referenced
        objects.

        @param containerType: A type of container objects (e.g., C{tuple} or
            C{set}).
        N)r   r   ÚcontainerTypeÚlÚlistÚrangeÚlenÚlocsÚ
isinstanceÚremover   r   )r   r'   r&   Úidxs       r   r   z_Container.__init__*   s«   € ô 	×Ñ˜$ÔØ*ˆÔØˆŒÜœœs 1›v›Ó'ˆŒ	Üœ˜Q›“=ò 	/ˆCÜ˜a ™f¤hÔ/Ø—	‘	× Ñ  Õ%à�#‘×#Ñ# D¨#Õ.ð		/ð
 �yŠyØ×"Ñ" 4×#5Ñ#5°d·f±fÓ#=Õ>ð r   c                 óè   — || j                   |<   t        |t        «      sS| j                  j	                  |«       | j                  s+| j                  | j                  | j                   «      «       yyy)z€
        Change the value of one contained objects, and resolve references if
        all objects have been referenced.
        N)r'   r,   r   r+   r-   r   r&   ©r   ÚnÚobjs      r   Ú__setitem__z_Container.__setitem__>   s[   € ð
 ˆ�‰ˆq‰	Ü˜#œxÔ(Ø�I‰I×Ñ˜QÔØ—9’9Ø×&Ñ& t×'9Ñ'9¸$¿&¹&Ó'AÕBð ð )r   N)r    r!   r"   Ú__doc__r   r3   r   r   r   r$   r$   %   s   „ ñò?ó(	Cr   r$   c                   ó   — e Zd ZdZd„ Zy)Ú_Tupleza
    Manage tuple containing circular references. Deprecated: use C{_Container}
    instead.
    c                 ó:   — t         j                  | |t        «       y)zi
        @param l: The list of object which may contain some not yet referenced
        objects.
        N)r$   r   Útuple)r   r'   s     r   r   z_Tuple.__init__P   s   € ô
 	×Ñ˜D !¤UÕ+r   N)r    r!   r"   r4   r   r   r   r   r6   r6   J   s   „ ñó
,r   r6   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Ú_InstanceMethodc                 ón   — t         j                  | «       || _        || _        |j	                  | d«       y r	   )r   r   Úmy_classÚnamer   )r   Úim_nameÚim_selfÚim_classs       r   r   z_InstanceMethod.__init__Y   s.   € Ü×Ñ˜$ÔØ ˆŒØˆŒ	à×Ñ˜T 1Õ%r   c                 ó  — dd l }t        j                  dt        j                  | j
                  «      › d| j                  › �«       t        j                  d|›d|›�«       |j                  t        j                  ¬«       J ‚)Nr   zinstance method ú.zbeing called with ú )Úfile)	Ú	tracebackr   Úmsgr   Úqualr<   r=   Úprint_stackÚlogfile)r   ÚargsÚkwrE   s       r   Ú__call__z_InstanceMethod.__call__`   se   € Ûä�‰Ð"¤7§<¡<°·±Ó#>Ð"?¸qÀÇÁÀÐLÔMÜ�‰Ð$ T H¨A¨b¨VÐ4Ô5Ø×Ñ¤3§;¡;ÐÔ/Øˆqr   c                 ó¢   — |dk(  sJ d«       ‚t        |t        «      s3t        | j                  | j                  |«      }| j                  |«       y y )Nr   zonly zero index allowed)r,   r   r   r<   r=   r   )r   r1   r2   Úmethods       r   r3   z_InstanceMethod.__setitem__h   sG   € Ø�AŠvÐ0Ð0Ó0ˆvÜ˜#œxÔ(Ü% d§m¡m°T·Y±YÀÓDˆFØ×"Ñ" 6Õ*ð )r   N)r    r!   r"   r   rL   r3   r   r   r   r:   r:   X   s   „ ò&òó+r   r:   c                   ó   — e Zd Zd„ Zd„ Zy)Ú_DictKeyAndValuec                 ó   — || _         y r   )Údict)r   rR   s     r   r   z_DictKeyAndValue.__init__p   s	   € Øˆ�	r   c                 ó¾   — |dvrt        d«      ‚|r|| _        n|| _        t        | d«      r1t        | d«      r$| j                  | j                  | j                  <   y y y )N)r   r   z6DictKeyAndValue should only ever be called with 0 or 1r   Úvalue)ÚRuntimeErrorrT   r   ÚhasattrrR   r0   s      r   r3   z_DictKeyAndValue.__setitem__s   sW   € Ø�F‰?ÜÐWÓXÐXÙØˆD�JàˆDŒHÜ�4˜Ô¤G¨D°'Ô$:Ø"&§*¡*ˆD�I‰I�d—h‘hÒð %;Ðr   N)r    r!   r"   r   r3   r   r   r   rP   rP   o   s   „ òó-r   rP   c                   ó   — e Zd Zd„ Zy)Ú_Dereferencec                 ó<   — t         j                  | «       || _        y r   )r   r   Úid)r   rZ   s     r   r   z_Dereference.__init__   s   € Ü×Ñ˜$ÔØˆ�r   N)r    r!   r"   r   r   r   r   rX   rX   ~   s   „ ór   rX   )ÚDeferredc                   ó"   — e Zd Zd„ ZdZd„ Zd„ Zy)Ú_Deferc                 óx   — t        j                  | «       t        j                  | «       | j                  «        y r   )r[   r   r   Úpauser   s    r   r   z_Defer.__init__ˆ   s'   € Ü×Ñ˜$ÔÜ×Ñ˜$ÔØ�
‰
�r   r   c                 ó‚   — | j                   rt        dj                  ||«      «      ‚d| _         | j                  |«       y )Nz8setitem should only be called once, setting {!r} to {!r}r   )ÚwassetrU   ÚformatÚcallbackr0   s      r   r3   z_Defer.__setitem__�   s>   € Ø�;Š;ÜØJ×QÑQØ�sóóð ð ˆDŒKØ�‰�cÕr   c                 óŒ   — t         j                  | ||«       | j                  «        | j                  }| j	                  |«       y r   )r   r   ÚunpauseÚresultr   )r   Údepr   Úresovds       r   r   z_Defer.addDependantš   s6   € ô 	×Ñ˜d C¨Ô-Ø�‰ŒØ—‘ˆØ×Ñ˜vÕ&r   N)r    r!   r"   r   ra   r3   r   r   r   r   r]   r]   ‡   s   „ òð
 €Fò	ó'r   r]   N)r4   Útwisted.pythonr   r   Útwisted.python.compatr   r   r$   r6   r:   rP   rX   Útwisted.internet.deferr[   Úobjectr]   r   r   r   ú<module>rm      sq   ðñ÷
 (Ý 2÷=ñ =ô*"C�ô "CôJ,ˆZô ,ô+�hô +÷.-ñ -ô�8ô õ ,ô'ˆX�fÑ˜xõ 'r   