3 Àƒêgqã@sœddlZddlZddlZdZdd„Zdd„ZdZdd „ZGd d „d ejj ƒZ Gd d „d ejj ƒZ Gdd„de ƒZ Gdd„de ƒZGdd„de ƒZGdd„de ƒZGdd„de ƒZGdd„de ƒZGdd„dejjƒZGdd„dejj ƒZGdd„deƒZGd d!„d!eƒZGd"d#„d#eƒZGd$d%„d%eƒZGd&d'„d'eƒZGd(d)„d)eƒZGd*d+„d+ejjƒZGd,d-„d-ejjƒZGd.d/„d/eƒZGd0d1„d1eƒZGd2d3„d3ejjƒZ Gd4d5„d5ejj ƒZ!Gd6d7„d7e!ƒZ"Gd8d9„d9e!ƒZ#Gd:d;„d;e!ƒZ$Gdd?„d?ejjƒZ&Gd@dA„dAejj ƒZ'GdBdC„dCe'ƒZ(GdDdE„dEe'ƒZ)GdFdG„dGe'ƒZ*GdHdI„dIe'ƒZ+GdJdK„dKe'ƒZ,GdLdM„dMe'ƒZ-GdNdO„dOejjƒZ.GdPdQ„dQejj ƒZ/GdRdS„dSe/ƒZ0GdTdU„dUe/ƒZ1GdVdW„dWejjƒZ2GdXdY„dYejj ƒZ3GdZd[„d[e3ƒZ4Gd\d]„d]e3ƒZ5Gd^d_„d_ejjƒZ6Gd`da„daejj ƒZ7Gdbdc„dce7ƒZ8Gddde„dee7ƒZ9Gdfdg„dgejj ƒZ:Gdhdi„die:ƒZ;Gdjdk„dkejjƒZ$N)Ú isinstancerZTypeÚtagÚ_versioned_namespaceÚreÚmatch)ÚxZ template_namerrrÚis_specialization_of!s  rc@seZdZdd„ZdS)ÚLibStdCxxXMethodcCstjjj||ƒ||_dS)N)rÚxmethodÚXMethodÚ__init__Ú worker_class)ÚselfÚnamerrrrr.szLibStdCxxXMethod.__init__N)Ú__name__Ú __module__Ú __qualname__rrrrrr-src@seZdZdd„Zdd„ZdS)ÚArrayWorkerBasecCs||_||_dS)N)Ú _val_typeÚ_size)rÚval_typeÚsizerrrr6szArrayWorkerBase.__init__cCstjdƒ}|j|jjƒƒjƒS)Nz (void *) 0)rZparse_and_evalÚcastrÚpointerÚ dereference)rZnullptrrrrÚ null_value:s zArrayWorkerBase.null_valueN)rrrrr"rrrrr5src@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚArraySizeWorkercCstj|||ƒdS)N)rr)rrrrrrr@szArraySizeWorker.__init__cCsdS)Nr)rrrrÚ get_arg_typesCszArraySizeWorker.get_arg_typescCstƒS)N)r)rÚobjrrrÚget_result_typeFszArraySizeWorker.get_result_typecCs|jS)N)r)rr%rrrÚ__call__IszArraySizeWorker.__call__N)rrrrr$r&r'rrrrr#?sr#c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚArrayEmptyWorkercCstj|||ƒdS)N)rr)rrrrrrrNszArrayEmptyWorker.__init__cCsdS)Nr)rrrrr$QszArrayEmptyWorker.get_arg_typescCstƒS)N)r)rr%rrrr&Tsz ArrayEmptyWorker.get_result_typecCst|jƒdkS)Nr)Úintr)rr%rrrr'WszArrayEmptyWorker.__call__N)rrrrr$r&r'rrrrr(Msr(c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚArrayFrontWorkercCstj|||ƒdS)N)rr)rrrrrrr\szArrayFrontWorker.__init__cCsdS)Nr)rrrrr$_szArrayFrontWorker.get_arg_typescCs|jS)N)r)rr%rrrr&bsz ArrayFrontWorker.get_result_typecCs&t|jƒdkr|ddS|jƒSdS)NrÚ_M_elems)r)rr")rr%rrrr'es zArrayFrontWorker.__call__N)rrrrr$r&r'rrrrr*[sr*c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚArrayBackWorkercCstj|||ƒdS)N)rr)rrrrrrrmszArrayBackWorker.__init__cCsdS)Nr)rrrrr$pszArrayBackWorker.get_arg_typescCs|jS)N)r)rr%rrrr&sszArrayBackWorker.get_result_typecCs,t|jƒdkr |d|jdS|jƒSdS)Nrr+é)r)rr")rr%rrrr'vszArrayBackWorker.__call__N)rrrrr$r&r'rrrrr,lsr,c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú ArrayAtWorkercCstj|||ƒdS)N)rr)rrrrrrr~szArrayAtWorker.__init__cCstƒS)N)r)rrrrr$szArrayAtWorker.get_arg_typescCs|jS)N)r)rr%Úindexrrrr&„szArrayAtWorker.get_result_typecCs4t|ƒt|jƒkr(tdt|ƒ|jfƒ‚|d|S)Nz%Array index "%d" should not be >= %d.r+)r)rÚ IndexError)rr%r/rrrr'‡szArrayAtWorker.__call__N)rrrrr$r&r'rrrrr.}sr.c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚArraySubscriptWorkercCstj|||ƒdS)N)rr)rrrrrrrszArraySubscriptWorker.__init__cCstƒS)N)r)rrrrr$’sz"ArraySubscriptWorker.get_arg_typescCs|jS)N)r)rr%r/rrrr&•sz$ArraySubscriptWorker.get_result_typecCs&t|jƒdkr|d|S|jƒSdS)Nrr+)r)rr")rr%r/rrrr'˜s zArraySubscriptWorker.__call__N)rrrrr$r&r'rrrrr1Žsr1c@seZdZdd„Zdd„ZdS)ÚArrayMethodsMatchercsftjjjˆtdƒtdtƒtdtƒtdtƒtdt ƒtdt ƒtdt ƒdœˆ_ ‡fd d „ˆj Dƒˆ_ dS) NÚarrayrÚemptyÚfrontÚbackÚatz operator[])rr4r5r6r7z operator[]csg|]}ˆj|‘qSr)Ú _method_dict)Ú.0Úm)rrrú «sz0ArrayMethodsMatcher.__init__..)rrÚXMethodMatcherrÚmatcher_name_prefixrr#r(r*r,r.r1r8Úmethods)rr)rrr s  zArrayMethodsMatcher.__init__c Cs^t|dƒsdS|jj|ƒ}|dks*|j r.dSy|jdƒ}|jdƒ}Wn dS|j||ƒS)Nr3rr-)rr8ÚgetÚenabledÚtemplate_argumentr)rÚ class_typeÚ method_nameÚmethodZ value_typerrrrr ­s   zArrayMethodsMatcher.matchN)rrrrr rrrrr2Ÿs r2c@s$eZdZdd„Zdd„Zdd„ZdS)ÚDequeWorkerBasecCs||_d|jpd|_dS)Nir-)rÚsizeofÚ_bufsize)rrrrrr¿szDequeWorkerBase.__init__cCsf|dd}|dd}|d|dkr,dS|j|d|dd|d|d|d |dS) NÚ_M_implÚ_M_startÚ _M_finishÚ_M_currÚ_M_noder-Ú_M_firstÚ_M_last)rG)rr%ÚstartÚfinishrrrrÃs   zDequeWorkerBase.sizecCs`|dd}|d|d}||kr0|d|S||}|ddt|ƒ|j}|||jS)NrHrIrNrKrLr-)r)rG)rr%ÚidxrOZfirst_node_sizeZ index_noderrrr/Ís  zDequeWorkerBase.indexN)rrrrrr/rrrrrE¾s rEc@s$eZdZdd„Zdd„Zdd„ZdS)ÚDequeEmptyWorkercCsdS)Nr)rrrrr$ØszDequeEmptyWorker.get_arg_typescCstƒS)N)r)rr%rrrr&Ûsz DequeEmptyWorker.get_result_typecCs |ddd|dddkS)NrHrIrKrJr)rr%rrrr'ÞszDequeEmptyWorker.__call__N)rrrr$r&r'rrrrrR×srRc@s$eZdZdd„Zdd„Zdd„ZdS)ÚDequeSizeWorkercCsdS)Nr)rrrrr$äszDequeSizeWorker.get_arg_typescCstƒS)N)r)rr%rrrr&çszDequeSizeWorker.get_result_typecCs |j|ƒS)N)r)rr%rrrr'êszDequeSizeWorker.__call__N)rrrr$r&r'rrrrrSãsrSc@s$eZdZdd„Zdd„Zdd„ZdS)ÚDequeFrontWorkercCsdS)Nr)rrrrr$ïszDequeFrontWorker.get_arg_typescCs|jS)N)r)rr%rrrr&òsz DequeFrontWorker.get_result_typecCs|ddddS)NrHrIrKrr)rr%rrrr'õszDequeFrontWorker.__call__N)rrrr$r&r'rrrrrTîsrTc@s$eZdZdd„Zdd„Zdd„ZdS)ÚDequeBackWorkercCsdS)Nr)rrrrr$úszDequeBackWorker.get_arg_typescCs|jS)N)r)rr%rrrr&ýszDequeBackWorker.get_result_typecCs^|ddd|dddkrF|dddd}|d|jdS|ddddSdS) NrHrJrKrMrLr-réÿÿÿÿ)rG)rr%Ú prev_noderrrr's zDequeBackWorker.__call__N)rrrr$r&r'rrrrrUùsrUc@s$eZdZdd„Zdd„Zdd„ZdS)ÚDequeSubscriptWorkercCstƒS)N)r)rrrrr$ sz"DequeSubscriptWorker.get_arg_typescCs|jS)N)r)rr%Ú subscriptrrrr& sz$DequeSubscriptWorker.get_result_typecCs |j||ƒS)N)r/)rr%rYrrrr'szDequeSubscriptWorker.__call__N)rrrr$r&r'rrrrrX srXc@s$eZdZdd„Zdd„Zdd„ZdS)Ú DequeAtWorkercCstƒS)N)r)rrrrr$szDequeAtWorker.get_arg_typescCs|jS)N)r)rr%r/rrrr&szDequeAtWorker.get_result_typecCs@t|j|ƒƒ}t|ƒ|kr0tdt|ƒ|fƒ‚n |j||ƒSdS)Nz%Deque index "%d" should not be >= %d.)r)rr0r/)rr%r/Z deque_sizerrrr's  zDequeAtWorker.__call__N)rrrr$r&r'rrrrrZsrZc@seZdZdd„Zdd„ZdS)ÚDequeMethodsMatchercsftjjjˆtdƒtdtƒtdtƒtdtƒtdt ƒtdt ƒtdt ƒdœˆ_ ‡fd d „ˆj Dƒˆ_ dS) NÚdequer4rr5r6z operator[]r7)r4rr5r6z operator[]r7csg|]}ˆj|‘qSr)r8)r9r:)rrrr;0sz0DequeMethodsMatcher.__init__..)rrr<rr=rrRrSrTrUrXrZr8r>)rr)rrr%s  zDequeMethodsMatcher.__init__cCs>t|dƒsdS|jj|ƒ}|dks*|j r.dS|j|jdƒƒS)Nr\r)rr8r?r@rrA)rrBrCrDrrrr 2s   zDequeMethodsMatcher.matchN)rrrrr rrrrr[$s r[c@seZdZdd„Zdd„ZdS)ÚForwardListWorkerBasecCs||_||_dS)N)rÚ _node_type)rrÚ node_typerrrr>szForwardListWorkerBase.__init__cCsdS)Nr)rrrrr$Bsz#ForwardListWorkerBase.get_arg_typesN)rrrrr$rrrrr]=sr]c@seZdZdd„Zdd„ZdS)ÚForwardListEmptyWorkercCstƒS)N)r)rr%rrrr&Gsz&ForwardListEmptyWorker.get_result_typecCs|ddddkS)NrHÚ_M_headÚ_M_nextrr)rr%rrrr'JszForwardListEmptyWorker.__call__N)rrrr&r'rrrrr`Fsr`c@seZdZdd„Zdd„ZdS)ÚForwardListFrontWorkercCs|jS)N)r)rr%rrrr&Osz&ForwardListFrontWorker.get_result_typecCs:|dddj|jƒ}|ddj}|j|jjƒƒjƒS)NrHrarbÚ _M_storage)rr^Úaddressrr r!)rr%ÚnodeZ val_addressrrrr'RszForwardListFrontWorker.__call__N)rrrr&r'rrrrrcNsrcc@seZdZdd„Zdd„ZdS)ÚForwardListMethodsMatchercsJtd}tjjjˆ|ƒtdtƒtdtƒdœˆ_‡fdd„ˆjDƒˆ_ dS)NÚ forward_listr4r5)r4r5csg|]}ˆj|‘qSr)r8)r9r:)rrrr;`sz6ForwardListMethodsMatcher.__init__..) r=rrr<rrr`rcr8r>)rZ matcher_namer)rrrYs z"ForwardListMethodsMatcher.__init__cCsZt|dƒsdS|jj|ƒ}|dks*|j r.dS|jdƒ}tjt|ƒdƒjƒ}|j ||ƒS)Nrhrz::_Node) rr8r?r@rArrÚstrr r)rrBrCrDrr_rrrr bs   zForwardListMethodsMatcher.matchN)rrrrr rrrrrgXs rgc@s$eZdZdd„Zdd„Zdd„ZdS)ÚListWorkerBasecCs||_||_dS)N)rr^)rrr_rrrrpszListWorkerBase.__init__cCsdS)Nr)rrrrr$tszListWorkerBase.get_arg_typescCsB|jƒ}|jjƒdjdkr$|dS|dj}|j|jjƒƒjƒS)Nr-Z_M_datard)r!ÚtypeÚfieldsrrerrr )rrfZaddrrrrÚget_value_from_nodews  z"ListWorkerBase.get_value_from_nodeN)rrrrr$rmrrrrrjosrjc@seZdZdd„Zdd„ZdS)ÚListEmptyWorkercCstƒS)N)r)rr%rrrr&‚szListEmptyWorker.get_result_typecCs&|dd}|d|jkrdSdSdS)NrHrLrbTF)re)rr%Z base_noderrrr'…s zListEmptyWorker.__call__N)rrrr&r'rrrrrnsrnc@seZdZdd„Zdd„ZdS)ÚListSizeWorkercCstƒS)N)r)rr%rrrr&ŽszListSizeWorker.get_result_typecCsD|ddd}|ddj}d}x||kr>|d}|d7}q$W|S)NrHrLrbrr-)re)rr%Z begin_nodeZend_noderrrrr'‘s  zListSizeWorker.__call__N)rrrr&r'rrrrrosroc@seZdZdd„Zdd„ZdS)ÚListFrontWorkercCs|jS)N)r)rr%rrrr&œszListFrontWorker.get_result_typecCs"|dddj|jƒ}|j|ƒS)NrHrLrb)rr^rm)rr%rfrrrr'ŸszListFrontWorker.__call__N)rrrr&r'rrrrrp›srpc@seZdZdd„Zdd„ZdS)ÚListBackWorkercCs|jS)N)r)rr%rrrr&¥szListBackWorker.get_result_typecCs"|dddj|jƒ}|j|ƒS)NrHrLZ_M_prev)rr^rm)rr%rWrrrr'¨szListBackWorker.__call__N)rrrr&r'rrrrrq¤srqc@seZdZdd„Zdd„ZdS)ÚListMethodsMatchercsVtjjjˆtdƒtdtƒtdtƒtdtƒtdt ƒdœˆ_ ‡fdd„ˆj Dƒˆ_ dS) NÚlistr4rr5r6)r4rr5r6csg|]}ˆj|‘qSr)r8)r9r:)rrrr;·sz/ListMethodsMatcher.__init__..) rrr<rr=rrnrorprqr8r>)rr)rrr®s  zListMethodsMatcher.__init__cCsZt|dƒsdS|jj|ƒ}|dks*|j r.dS|jdƒ}tjt|ƒdƒjƒ}|j ||ƒS)Nz(__cxx11::)?listrz::_Node) rr8r?r@rArrrir r)rrBrCrDrr_rrrr ¹s   zListMethodsMatcher.matchN)rrrrr rrrrrr­s rrc@s$eZdZdd„Zdd„Zdd„ZdS)ÚVectorWorkerBasecCs ||_dS)N)r)rrrrrrÇszVectorWorkerBase.__init__cCsz|jjtjkr^|ddd}|ddd}|ddd}|jƒjjd}||||S|dd|ddSdS)NrHrIÚ_M_prJZ _M_offseté)rÚcoderÚTYPE_CODE_BOOLr!rkrF)rr%rOrPZ finish_offsetÚbit_sizerrrrÊszVectorWorkerBase.sizecCsj|jjtjkrV|ddd}|jƒjjd}|||}||}|jƒd|>@dkS|dd|SdS)NrHrIrurvr-r)rrwrrxr!rkrF)rr%r/rOryZvalpÚoffsetrrrr?Ôs zVectorWorkerBase.getN)rrrrrr?rrrrrtÆs rtc@s$eZdZdd„Zdd„Zdd„ZdS)ÚVectorEmptyWorkercCsdS)Nr)rrrrr$àszVectorEmptyWorker.get_arg_typescCstƒS)N)r)rr%rrrr&ãsz!VectorEmptyWorker.get_result_typecCst|j|ƒƒdkS)Nr)r)r)rr%rrrr'æszVectorEmptyWorker.__call__N)rrrr$r&r'rrrrr{ßsr{c@s$eZdZdd„Zdd„Zdd„ZdS)ÚVectorSizeWorkercCsdS)Nr)rrrrr$ëszVectorSizeWorker.get_arg_typescCstƒS)N)r)rr%rrrr&îsz VectorSizeWorker.get_result_typecCs |j|ƒS)N)r)rr%rrrr'ñszVectorSizeWorker.__call__N)rrrr$r&r'rrrrr|êsr|c@s$eZdZdd„Zdd„Zdd„ZdS)ÚVectorFrontWorkercCsdS)Nr)rrrrr$öszVectorFrontWorker.get_arg_typescCs|jS)N)r)rr%rrrr&ùsz!VectorFrontWorker.get_result_typecCs |j|dƒS)Nr)r?)rr%rrrr'üszVectorFrontWorker.__call__N)rrrr$r&r'rrrrr}õsr}c@s$eZdZdd„Zdd„Zdd„ZdS)ÚVectorBackWorkercCsdS)Nr)rrrrr$szVectorBackWorker.get_arg_typescCs|jS)N)r)rr%rrrr&sz VectorBackWorker.get_result_typecCs|j|t|j|ƒƒdƒS)Nr-)r?r)r)rr%rrrr'szVectorBackWorker.__call__N)rrrr$r&r'rrrrr~sr~c@s$eZdZdd„Zdd„Zdd„ZdS)ÚVectorAtWorkercCstƒS)N)r)rrrrr$ szVectorAtWorker.get_arg_typescCs|jS)N)r)rr%r/rrrr&szVectorAtWorker.get_result_typecCs>t|j|ƒƒ}t|ƒ|kr.tdt|ƒ|fƒ‚|j|t|ƒƒS)Nz&Vector index "%d" should not be >= %d.)r)rr0r?)rr%r/rrrrr's  zVectorAtWorker.__call__N)rrrr$r&r'rrrrr src@s$eZdZdd„Zdd„Zdd„ZdS)ÚVectorSubscriptWorkercCstƒS)N)r)rrrrr$sz#VectorSubscriptWorker.get_arg_typescCs|jS)N)r)rr%rYrrrr&sz%VectorSubscriptWorker.get_result_typecCs|j|t|ƒƒS)N)r?r))rr%rYrrrr'!szVectorSubscriptWorker.__call__N)rrrr$r&r'rrrrr€sr€c@seZdZdd„Zdd„ZdS)ÚVectorMethodsMatchercsftjjjˆtdƒtdtƒtdtƒtdtƒtdt ƒtdt ƒtdt ƒdœˆ_ ‡fd d „ˆj Dƒˆ_ dS) NÚvectorrr4r5r6r7z operator[])rr4r5r6r7z operator[]csg|]}ˆj|‘qSr)r8)r9r:)rrrr;2sz1VectorMethodsMatcher.__init__..)rrr<rr=rr|r{r}r~rr€r8r>)rr)rrr&s   zVectorMethodsMatcher.__init__cCs>t|dƒsdS|jj|ƒ}|dks*|j r.dS|j|jdƒƒS)Nr‚r)rr8r?r@rrA)rrBrCrDrrrr 4s   zVectorMethodsMatcher.matchN)rrrrr rrrrr%src@s$eZdZdd„Zdd„Zdd„ZdS)ÚAssociativeContainerWorkerBasecCs ||_dS)N)Ú _unordered)rÚ unorderedrrrr@sz'AssociativeContainerWorkerBase.__init__cCs&|jr|ddS|dddSdS)NZ_M_hZ_M_element_countÚ_M_trHZ _M_node_count)r„)rr%rrrÚ node_countCs z)AssociativeContainerWorkerBase.node_countcCsdS)Nr)rrrrr$Isz,AssociativeContainerWorkerBase.get_arg_typesN)rrrrr‡r$rrrrrƒ?srƒc@seZdZdd„Zdd„ZdS)ÚAssociativeContainerEmptyWorkercCstƒS)N)r)rr%rrrr&Nsz/AssociativeContainerEmptyWorker.get_result_typecCst|j|ƒƒdkS)Nr)r)r‡)rr%rrrr'Qsz(AssociativeContainerEmptyWorker.__call__N)rrrr&r'rrrrrˆMsrˆc@seZdZdd„Zdd„ZdS)ÚAssociativeContainerSizeWorkercCstƒS)N)r)rr%rrrr&Vsz.AssociativeContainerSizeWorker.get_result_typecCs |j|ƒS)N)r‡)rr%rrrr'Ysz'AssociativeContainerSizeWorker.__call__N)rrrr&r'rrrrr‰Usr‰c@seZdZdd„Zdd„ZdS)Ú"AssociativeContainerMethodsMatchercsLtjjjˆt|ƒ|ˆ_tdtƒtdtƒdœˆ_ ‡fdd„ˆj Dƒˆ_ dS)Nrr4)rr4csg|]}ˆj|‘qSr)r8)r9r:)rrrr;gsz?AssociativeContainerMethodsMatcher.__init__..) rrr<rr=Ú_namerr‰rˆr8r>)rrr)rrr^s   z+AssociativeContainerMethodsMatcher.__init__cCsDt||jƒsdS|jj|ƒ}|dks,|j r0dSd|jk}|j|ƒS)Nr…)rr‹r8r?r@r)rrBrCrDr…rrrr is   z(AssociativeContainerMethodsMatcher.matchN)rrrrr rrrrrŠ]s rŠc@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) ÚUniquePtrGetWorkerzS Implement std::unique_ptr::get() and std::unique_ptr::operator->(). cCs*|jtjk|_|jr |jƒ|_n||_dS)N)rwrÚTYPE_CODE_ARRAYÚ _is_arrayÚtargetÚ _elem_type)rÚ elem_typerrrrzs zUniquePtrGetWorker.__init__cCsdS)Nr)rrrrr$sz UniquePtrGetWorker.get_arg_typescCs |jjƒS)N)rr )rr%rrrr&„sz"UniquePtrGetWorker.get_result_typecCs|dkp|j S)Nr?)rŽ)rrCrrrÚ _supports‡szUniquePtrGetWorker._supportscCs¢|jƒjjƒdjj}t|dƒr.|dd}nt|dƒrB|d}ndS|jjƒdj}|jƒdj}|jƒd}|jdkrˆ|j|ƒdS|jrš|j|jƒSdSdS)Nrz__uniq_ptr_(data|impl)r†Útupler-Z _M_head_impl)r!rkrlr rrrZ is_base_class)rr%Z impl_typeZ tuple_memberZtuple_impl_typeZtuple_head_typeZ head_fieldrrrr'‹s      zUniquePtrGetWorker.__call__N) rrrÚ__doc__rr$r&r’r'rrrrrŒus rŒc@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) ÚUniquePtrDerefWorkerz*Implement std::unique_ptr::operator*().cCstj||ƒdS)N)rŒr)rr‘rrrr¢szUniquePtrDerefWorker.__init__cCs|jS)N)r)rr%rrrr&¥sz$UniquePtrDerefWorker.get_result_typecCs|j S)N)rŽ)rrCrrrr’¨szUniquePtrDerefWorker._supportscCstj||ƒjƒS)N)rŒr'r!)rr%rrrr'¬szUniquePtrDerefWorker.__call__N)rrrr”rr&r’r'rrrrr•Ÿs r•c@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) ÚUniquePtrSubscriptWorkerz1Implement std::unique_ptr::operator[](size_t).cCstj||ƒdS)N)rŒr)rr‘rrrr³sz!UniquePtrSubscriptWorker.__init__cCstƒS)N)r)rrrrr$¶sz&UniquePtrSubscriptWorker.get_arg_typescCs|jS)N)r)rr%r/rrrr&¹sz(UniquePtrSubscriptWorker.get_result_typecCs|jS)N)rŽ)rrCrrrr’¼sz"UniquePtrSubscriptWorker._supportscCstj||ƒ|S)N)rŒr')rr%r/rrrr'Àsz!UniquePtrSubscriptWorker.__call__N) rrrr”rr$r&r’r'rrrrr–°s r–c@seZdZdd„Zdd„ZdS)ÚUniquePtrMethodsMatchercsVtjjjˆtdƒtdtƒtdtƒtdtƒtdtƒdœˆ_ ‡fdd„ˆj Dƒˆ_ dS) NÚ unique_ptrr?z operator->z operator*z operator[])r?z operator->z operator*z operator[]csg|]}ˆj|‘qSr)r8)r9r:)rrrr;Îsz4UniquePtrMethodsMatcher.__init__..) rrr<rr=rrŒr•r–r8r>)rr)rrrÅs  z UniquePtrMethodsMatcher.__init__cCsPt|dƒsdS|jj|ƒ}|dks*|j r.dS|j|jdƒƒ}|j|ƒrL|SdS)Nr˜r)rr8r?r@rrAr’)rrBrCrDÚworkerrrrr Ðs   zUniquePtrMethodsMatcher.matchN)rrrrr rrrrr—Äs r—c@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) ÚSharedPtrGetWorkerzT Implements std::shared_ptr::get() and std::shared_ptr::operator->(). cCs*|jtjk|_|jr |jƒ|_n||_dS)N)rwrrrŽrr)rr‘rrrrãs zSharedPtrGetWorker.__init__cCsdS)Nr)rrrrr$êsz SharedPtrGetWorker.get_arg_typescCs |jjƒS)N)rr )rr%rrrr&ísz"SharedPtrGetWorker.get_result_typecCs|dkp|j S)Nr?)rŽ)rrCrrrr’ðszSharedPtrGetWorker._supportscCs|dS)NZ_M_ptrr)rr%rrrr'ôszSharedPtrGetWorker.__call__N) rrrr”rr$r&r’r'rrrrršÞs ršc@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) ÚSharedPtrDerefWorkerz*Implement std::shared_ptr::operator*().cCstj||ƒdS)N)ršr)rr‘rrrrûszSharedPtrDerefWorker.__init__cCs|jS)N)r)rr%rrrr&þsz$SharedPtrDerefWorker.get_result_typecCs|j S)N)rŽ)rrCrrrr’szSharedPtrDerefWorker._supportscCstj||ƒjƒS)N)ršr'r!)rr%rrrr'szSharedPtrDerefWorker.__call__N)rrrr”rr&r’r'rrrrr›øs r›c@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) ÚSharedPtrSubscriptWorkerz1Implement std::shared_ptr::operator[](size_t).cCstj||ƒdS)N)ršr)rr‘rrrr sz!SharedPtrSubscriptWorker.__init__cCstƒS)N)r)rrrrr$sz&SharedPtrSubscriptWorker.get_arg_typescCs|jS)N)r)rr%r/rrrr&sz(SharedPtrSubscriptWorker.get_result_typecCs|jS)N)rŽ)rrCrrrr’sz"SharedPtrSubscriptWorker._supportscCsZtjdt|jƒƒ}|rJ|t|jdƒƒkrJtd|jt|ƒt|jdƒƒfƒ‚tj||ƒ|S)Nz .*\[(\d+)]$r-z.shared_ptr<%s> index "%d" should not be >= %d.) r r rirr)Úgroupr0ršr')rr%r/r:rrrr's z!SharedPtrSubscriptWorker.__call__N) rrrr”rr$r&r’r'rrrrrœ s rœc@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) ÚSharedPtrUseCountWorkerz*Implement std::shared_ptr::use_count().cCsdS)Nr)rr‘rrrr%sz SharedPtrUseCountWorker.__init__cCsdS)Nr)rrrrr$(sz%SharedPtrUseCountWorker.get_arg_typescCs tjdƒS)NZlong)rr)rr%rrrr&+sz'SharedPtrUseCountWorker.get_result_typecCsdS)NTr)rrCrrrr’.sz!SharedPtrUseCountWorker._supportscCs|dd}|r|dSdS)NZ _M_refcountZ_M_piZ _M_use_countrr)rr%Z refcountsrrrr'1s z SharedPtrUseCountWorker.__call__N) rrrr”rr$r&r’r'rrrrrž"s ržc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚSharedPtrUniqueWorkerz'Implement std::shared_ptr::unique().cCstj||ƒdS)N)ržr)rr‘rrrr9szSharedPtrUniqueWorker.__init__cCs tjdƒS)Nr)rr)rr%rrrr&<sz%SharedPtrUniqueWorker.get_result_typecCstj||ƒdkS)Nr-)ržr')rr%rrrr'?szSharedPtrUniqueWorker.__call__N)rrrr”rr&r'rrrrrŸ6srŸc@seZdZdd„Zdd„ZdS)ÚSharedPtrMethodsMatchercsftjjjˆtdƒtdtƒtdtƒtdtƒtdtƒtdt ƒtdt ƒdœˆ_ ‡fd d „ˆj Dƒˆ_ dS) NÚ shared_ptrr?z operator->z operator*z operator[]Ú use_countÚunique)r?z operator->z operator*z operator[]r¢r£csg|]}ˆj|‘qSr)r8)r9r:)rrrr;Osz4SharedPtrMethodsMatcher.__init__..) rrr<rr=rršr›rœržrŸr8r>)rr)rrrDs  z SharedPtrMethodsMatcher.__init__cCsPt|dƒsdS|jj|ƒ}|dks*|j r.dS|j|jdƒƒ}|j|ƒrL|SdS)Nr¡r)rr8r?r@rrAr’)rrBrCrDr™rrrr Qs   zSharedPtrMethodsMatcher.matchN)rrrrr rrrrr Cs r cCstjj|tƒƒtjj|tƒƒtjj|tƒƒtjj|tƒƒtjj|tƒƒtjj|tdƒƒtjj|tdƒƒtjj|tdƒƒtjj|tdƒƒtjj|tdƒƒtjj|tdƒƒtjj|tdƒƒtjj|tdƒƒtjj|t ƒƒtjj|t ƒƒdS) NÚsetÚmapZmultisetZmultimapZ unordered_setZ unordered_mapZunordered_multisetZunordered_multimap) rrZregister_xmethod_matcherr2rgr[rrrrŠr—r )ZlocusrrrÚregister_libstdcxx_xmethods]s.        r¦)>rZ gdb.xmethodr r=rrr rrrrZ XMethodWorkerrr#r(r*r,r.r1r<r2rErRrSrTrUrXrZr[r]r`rcrgrjrnrorprqrrrtr{r|r}r~rr€rrƒrˆr‰rŠrŒr•r–r—ršr›rœržrŸr r¦rrrrÚsr                *