)uyc4ddlZddlmZ ddlmZmZmZmZmZmZm Z m Z m Z m Z e dZ n #e$rdZ YnwxYwdZGddeZeZd ZGd d ee ZGd d ee ZGddeZdS)N) ReferenceType) IterableOptionalGenericDictListIteratorTypeVar TYPE_CHECKINGAnyCallableTFc| |ndSN)refs ./usr/lib/python3/dist-packages/debian/_util.py resolve_refrsO33555-cJeZdZdZdgZerfdZdZdZdZ dZ dZ xZ S) _CaseInsensitiveStringzCase insensitive string. str_lowercftt||d|_dS)N)superr__init__r)selfs __class__s rrz_CaseInsensitiveString.__init__s- ($ / / 8 8 ; ; ;DNNNrcnt||}||_|Sr)str__new__lowerr)clsstr_rs rr"z_CaseInsensitiveString.__new__#s) KKT " "jjll rc*t|jSr)hashrrs r__hash__z_CaseInsensitiveString.__hash__)sDN###rc` |j|kS#t$rYdSwxYw)NF)rr#AttributeErrorrothers r__eq__z_CaseInsensitiveString.__eq__-s> >U[[]]2 2   55 s  --c||k Srrr,s r__ne__z_CaseInsensitiveString.__ne__4s5=  rc|jSr)rr(s rr#z_CaseInsensitiveString.lower8s ~r) __name__ __module__ __qualname____doc__ __slots__r rr"r)r.r0r# __classcell__)rs@rrrs I       $$$!!!rrc*|Sr)r#)xs rdefault_field_sort_keyr:@s 7799rceZdZdZdZedZejdZdZdddZ ddd Z e d Z e d Z d Zd ZdS)LinkedListNode)_previous_nodevalue next_node __weakref__c0d|_d|_||_dSr)r=r?r>rr>s rrzLinkedListNode.__init__Is" rc*t|jSr)rr=r(s r previous_nodezLinkedListNode.previous_nodeOs4.///rc@|tj|nd|_dSr)weakrefrr=rnodes rrDzLinkedListNode.previous_nodeTs&483Cgk$///rcvt|j|jd|_d|_|jSr)r< link_nodesrDr?r>r(s rremovezLinkedListNode.removeYs4!!$"4dnEEE!zrF) skip_currentc#BK|r|jn|}|r|V|j}| dSdSr)r?rrLrHs r iter_nextzLinkedListNode.iter_next`sN".7t~~4 "JJJ>D " " " " "rc#BK|r|jn|}|r|V|j}| dSdSr)rDrNs r iter_previouszLinkedListNode.iter_previousisQ&2;t!!t &JJJ%D & & & & &rc.|r||_|r ||_dSdSrrDr?rSs rrJzLinkedListNode.link_nodesrs4  4&3I #  0&/M # # # 0 0rcrt||t||dSr)r<rJ) first_nodenew_node last_nodes r _insert_linkzLinkedListNode._insert_linkzs6 !!*h777!!(I66666rcf||ur ||jusJt|j||dSr)rDr<rXrrVs r insert_beforezLinkedListNode.insert_beforesA8##8J(J(J(J(J##D$6$GGGGGrcf||ur ||jusJt|||jdSr)r?r<rXrZs r insert_afterzLinkedListNode.insert_afters?8##(F(F(F(F##D(DNCCCCCrN)r2r3r4r6rpropertyrDsetterrKrOrQ staticmethodrJrXr[r]rrrr<r<Es GI 00X0NNN %"""""$)&&&&&00\077\7HHH DDDDDrr<ceZdZdZdZddZdZdZedZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdS) LinkedListavSpecialized linked list implementation to support the deb822 parser needs We deliberately trade "encapsulation" for features needed by this library to facilitate their implementation. Notably, we allow nodes to leak and assume well-behaved calls to remove_node - because that makes it easier to implement components like Deb822InvalidParagraphElement.  head_node tail_node_sizeNcbd|_d|_d|_|||dSdSNr)rdrerfextend)rvaluess rrzLinkedList.__init__s=   KK       rc|jduSr)rdr(s r__bool__zLinkedList.__bool__s~T))rc|jSr)rfr(s r__len__zLinkedList.__len__s zrc,|j |jjndSr)rer>r(s rtailzLinkedList.tails(,~'At~##tKrcf|jtd||jdS)Nzpop from empty list)re IndexError remove_noder(s rpopzLinkedList.pops5 > !233 3 (((((rc#TK|j}|dS|Ed{VdSr)rdrO)rrds r iter_nodeszLinkedList.iter_nodessBN   F&&(((((((((((rc#RKd|DEd{VdS)Nc3$K|] }|jV dSrr>).0rHs r z&LinkedList.__iter__..s$==4DJ======r)rvr(s r__iter__zLinkedList.__iter__s<==4??+<+<============rc#hK|j}|dSd|DEd{VdS)Nc3$K|] }|jV dSrry)rzns rr{z*LinkedList.__reversed__..s$??AG??????r)rerQ)rres r __reversed__zLinkedList.__reversed__sPN   F??Y%<%<%>%>????????????rc||jur|j|_|jd|_n||jur|j|_|jJ|jdksJ|xjdzc_|dS)Nr)rdr?rerDrfrKrGs rrszLinkedList.remove_nodes~ 4> ! !!^DN~%!% T^ # #!/DN>---zA~~~~ a  rcp|j||S|||jSr)rdappendr[rBs rinsert_at_headzLinkedList.insert_at_heads4 > !;;u%% %!!%888rct|}|j||_||_n3|jJ|j|usJ|j|_||j_||_|xjdz c_|S)Nr)r<rdrerDr?rf)rr>rHs rrzLinkedList.appends{e$$ > !!DN!DNN>--->----!%D '+DN $!DN a  rcH|t||Sr)insert_node_beforer<rr> existing_nodes rr[zLinkedList.insert_befores &&~e'<' !KLL L   )X-C-OEFF F##H--- DN * *%DN a rc|jtd|j|jtd||||jur||_|xjdz c_|Sr)rerr?rDr]rfrs rrzLinkedList.insert_node_aftersu > !KLL L   )X-C-OEFF F""8,,, DN * *%DN a rc:|D]}||dSr)r)rrjvs rrizLinkedList.extends,  A KKNNNN  rc0d|_d|_d|_dSrhrcr(s rclearzLinkedList.clears rr)r2r3r4r5r6rrlrnr^rprtrvr|rrsrrr[r]rrrirrrrrbrbsA4I    ***LLXL))) )))>>>@@@   999 &MMMLLL       rrbcfeZdZdZddZdZdZdZdZdZ d Z eZ d Z d Z d Zd ZdZdZdS) OrderedSetzA set-like object that preserves order when iterating over it We use this to keep track of keys in Deb822Dict, because it's much faster to look up if a key is in a set than in a list. Ncvi|_t|_|g}|D]}||dSr)_OrderedSet__tablerb_OrderedSet__orderaddriterableitems rrzOrderedSet.__init__!sK !||  H  D HHTNNNN  rc||vrP|j|} ||j|<dS#t$r|j|wxYwdSr)rrr ExceptionrsrrrHs rrzOrderedSet.add/sw t   <&&t,,D %) T"""    ((...   s ,&Acd|j|}|j|=|j|dSr)rrrsrs rrKzOrderedSet.remove=s6|D! L    &&&&&rc*t|jSr)iterrr(s rr|zOrderedSet.__iter__EsDL!!!rcDtt|jSr)rreversedrr(s rrzOrderedSet.__reversed__JsHT\**+++rc*t|jSr)lenrr(s rrnzOrderedSet.__len__Os4<   rc||jvSr)rrrs r __contains__zOrderedSet.__contains__Sst|##rc:|D]}||dSr)rrs rrizOrderedSet.extend\s,  D HHTNNNN  rcF|||jjdS)z2Re-order the given item so it is "last" in the setN)_reorderrrrs r order_lastzOrderedSet.order_lastbs# dDL/00000rcF|||jjdS)z3Re-order the given item so it is "first" in the setN)rrrrs r order_firstzOrderedSet.order_firstgs# dDL788888rc||krtdj||fddS)zTRe-order the given item so appears directly after the reference item in the sequence*Cannot re-order an item relative to itselfc:j|Sr)rr[r9reference_noders rz)OrderedSet.order_before..rsdl&@&@N&S&SrNrrrrrreference_itemrs` @r order_beforezOrderedSet.order_beforelsS > ! !IJJ Jn5 dSSSSSTTTTTrc||krtdj||fddS)zURe-order the given item so appears directly before the reference item in the sequencerc:j|Sr)rr]rs rrz(OrderedSet.order_after..zsdl&?&?>&R&RrNrrs` @r order_afterzOrderedSet.order_aftertsS > ! !IJJ Jn5 dRRRRRSSSSSrc|j|}|j|||j}||j|<dSr)rrrsr>)rr reinserterrHrVs rrzOrderedSet._reorder|sI |D!   &&&:dj))% Trr)r2r3r4r5rrrKr|rrnrrrirrrrrrrrrrs       '''""" ,,, !!!$$$F 111 999 UUUTTT&&&&&rr)rFrtypingrrrrrr r r r r r ImportErrorrr!r_strIr:r<rbobjectrrrrrs!!!!!!   AAMMM... #####S###L  FDFDFDFDFDWQZFDFDFDRIIIIIIIIXj&j&j&j&j&j&j&j&j&j&s #0::