
ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­ÂÂ­
<!DOCTYPE html>
<html>
3
À¡­hq  ã               @   sœ  d dl Z d dlZ d dlZdZdd„ Zdd„ ZdZdd	„ ZG d
d„ de jj	ƒZ
G dd„ de jjƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ de jjƒZG dd„ de jjƒZG dd„ deƒZG d d!„ d!eƒZG d"d#„ d#eƒZG d$d%„ d%eƒZG d&d'„ d'eƒZG d(d)„ d)eƒZG d*d+„ d+e jjƒZG d,d-„ d-e jjƒZG d.d/„ d/eƒZG d0d1„ d1eƒZG d2d3„ d3e jjƒZ G d4d5„ d5e jjƒZ!G d6d7„ d7e!ƒZ"G d8d9„ d9e!ƒZ#G d:d;„ d;e!ƒZ$G d<d=„ d=e!ƒZ%G d>d?„ d?e jjƒZ&G d@dA„ dAe jjƒZ'G dBdC„ dCe'ƒZ(G dDdE„ dEe'ƒZ)G dFdG„ dGe'ƒZ*G dHdI„ dIe'ƒZ+G dJdK„ dKe'ƒZ,G dLdM„ dMe'ƒZ-G dNdO„ dOe jjƒZ.G dPdQ„ dQe jjƒZ/G dRdS„ dSe/ƒZ0G dTdU„ dUe/ƒZ1G dVdW„ dWe jjƒZ2G dXdY„ dYe jjƒZ3G dZd[„ d[e3ƒZ4G d\d]„ d]e3ƒZ5G d^d_„ d_e jjƒZ6G d`da„ dae jjƒZ7G dbdc„ dce7ƒZ8G ddde„ dee7ƒZ9G dfdg„ dge jjƒZ:G dhdi„ die:ƒZ;G djdk„ dke jjƒZ<dldm„ Z=dS )né    Nzlibstdc++::c               C   s
   t jdƒS )NÚbool)ÚgdbÚlookup_type© r   r   ú0/usr/share/gcc-8/python/libstdcxx/v6/xmethods.pyÚget_bool_type   s    r   c               C   s
   t jdƒS )Nzstd::size_t)r   r   r   r   r   r   Úget_std_size_type   s    r   z__8::c             C   s2   t | tjƒr| j} dt|f }tjd| | ƒdk	S )zø
    Test whether a type is a specialization of the named class template.
    The type can be specified as a string or a gdb.Type object.
    The template should be the name of a class template as a string,
    without any 'std' qualification.
    z(%s)?%sz^std::(__\d::)?%s<.*>$N)Ú
isinstancer   ZTypeÚtagÚ_versioned_namespaceÚreÚmatch)ÚxZtemplate_namer   r   r   Úis_specialization_of!   s    r   c               @   s   e Zd Zdd„ ZdS )ÚLibStdCxxXMethodc             C   s   t jjj| |ƒ || _d S )N)r   ÚxmethodÚXMethodÚ__init__Úworker_class)ÚselfÚnamer   r   r   r   r   .   s    zLibStdCxxXMethod.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   -   s   r   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚArrayWorkerBasec             C   s   || _ || _d S )N)Ú	_val_typeÚ_size)r   Úval_typeÚsizer   r   r   r   6   s    zArrayWorkerBase.__init__c             C   s   t jdƒ}|j| jjƒ ƒjƒ S )Nz
(void *) 0)r   Zparse_and_evalÚcastr   ÚpointerÚdereference)r   Znullptrr   r   r   Ú
null_value:   s    
zArrayWorkerBase.null_valueN)r   r   r   r   r"   r   r   r   r   r   5   s   r   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚArraySizeWorkerc             C   s   t j| ||ƒ d S )N)r   r   )r   r   r   r   r   r   r   @   s    zArraySizeWorker.__init__c             C   s   d S )Nr   )r   r   r   r   Úget_arg_typesC   s    zArraySizeWorker.get_arg_typesc             C   s   t ƒ S )N)r   )r   Úobjr   r   r   Úget_result_typeF   s    zArraySizeWorker.get_result_typec             C   s   | j S )N)r   )r   r%   r   r   r   Ú__call__I   s    zArraySizeWorker.__call__N)r   r   r   r   r$   r&   r'   r   r   r   r   r#   ?   s   r#   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚArrayEmptyWorkerc             C   s   t j| ||ƒ d S )N)r   r   )r   r   r   r   r   r   r   N   s    zArrayEmptyWorker.__init__c             C   s   d S )Nr   )r   r   r   r   r$   Q   s    zArrayEmptyWorker.get_arg_typesc             C   s   t ƒ S )N)r   )r   r%   r   r   r   r&   T   s    z ArrayEmptyWorker.get_result_typec             C   s   t | jƒdkS )Nr   )Úintr   )r   r%   r   r   r   r'   W   s    zArrayEmptyWorker.__call__N)r   r   r   r   r$   r&   r'   r   r   r   r   r(   M   s   r(   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚArrayFrontWorkerc             C   s   t j| ||ƒ d S )N)r   r   )r   r   r   r   r   r   r   \   s    zArrayFrontWorker.__init__c             C   s   d S )Nr   )r   r   r   r   r$   _   s    zArrayFrontWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   r   r   r   r&   b   s    z ArrayFrontWorker.get_result_typec             C   s&   t | jƒdkr|d d S | jƒ S d S )Nr   Ú_M_elems)r)   r   r"   )r   r%   r   r   r   r'   e   s    zArrayFrontWorker.__call__N)r   r   r   r   r$   r&   r'   r   r   r   r   r*   [   s   r*   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚArrayBackWorkerc             C   s   t j| ||ƒ d S )N)r   r   )r   r   r   r   r   r   r   m   s    zArrayBackWorker.__init__c             C   s   d S )Nr   )r   r   r   r   r$   p   s    zArrayBackWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   r   r   r   r&   s   s    zArrayBackWorker.get_result_typec             C   s,   t | jƒdkr |d | jd  S | jƒ S d S )Nr   r+   é   )r)   r   r"   )r   r%   r   r   r   r'   v   s    zArrayBackWorker.__call__N)r   r   r   r   r$   r&   r'   r   r   r   r   r,   l   s   r,   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚArrayAtWorkerc             C   s   t j| ||ƒ d S )N)r   r   )r   r   r   r   r   r   r   ~   s    zArrayAtWorker.__init__c             C   s   t ƒ S )N)r   )r   r   r   r   r$      s    zArrayAtWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   Úindexr   r   r   r&   „   s    zArrayAtWorker.get_result_typec             C   s4   t |ƒt | jƒkr(tdt |ƒ| jf ƒ‚|d | S )Nz%Array index "%d" should not be >= %d.r+   )r)   r   Ú
IndexError)r   r%   r/   r   r   r   r'   ‡   s    zArrayAtWorker.__call__N)r   r   r   r   r$   r&   r'   r   r   r   r   r.   }   s   r.   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚArraySubscriptWorkerc             C   s   t j| ||ƒ d S )N)r   r   )r   r   r   r   r   r   r      s    zArraySubscriptWorker.__init__c             C   s   t ƒ S )N)r   )r   r   r   r   r$   ’   s    z"ArraySubscriptWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   r/   r   r   r   r&   •   s    z$ArraySubscriptWorker.get_result_typec             C   s&   t | jƒdkr|d | S | jƒ S d S )Nr   r+   )r)   r   r"   )r   r%   r/   r   r   r   r'   ˜   s    zArraySubscriptWorker.__call__N)r   r   r   r   r$   r&   r'   r   r   r   r   r1   Ž   s   r1   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚArrayMethodsMatcherc                sf   t jjjˆ td ƒ tdtƒtdtƒtdtƒtdt	ƒtdt
ƒtdtƒdœˆ _‡ fd	d
„ˆ jD ƒˆ _d S )NÚarrayr   ÚemptyÚfrontÚbackÚatz
operator[])r   r4   r5   r6   r7   z
operator[]c                s   g | ]}ˆ j | ‘qS r   )Ú_method_dict)Ú.0Úm)r   r   r   ú
<listcomp>«   s    z0ArrayMethodsMatcher.__init__.<locals>.<listcomp>)r   r   ÚXMethodMatcherr   Úmatcher_name_prefixr   r#   r(   r*   r,   r.   r1   r8   Úmethods)r   r   )r   r   r       s    

zArrayMethodsMatcher.__init__c          	   C   s^   t |dƒsd S | jj|ƒ}|d ks*|j r.d S y|jdƒ}|jdƒ}W n
   d S |j||ƒS )Nr3   r   r-   )r   r8   ÚgetÚenabledÚtemplate_argumentr   )r   Ú
class_typeÚmethod_nameÚmethodZ
value_typer   r   r   r   r   ­   s    

zArrayMethodsMatcher.matchN)r   r   r   r   r   r   r   r   r   r2   Ÿ   s   r2   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚDequeWorkerBasec             C   s   || _ d|j pd| _d S )Ni   r-   )r   ÚsizeofÚ_bufsize)r   r   r   r   r   r   ¿   s    zDequeWorkerBase.__init__c             C   sf   |d d }|d d }|d |d kr,dS | j |d |d  d  |d |d   |d	 |d   S )
NÚ_M_implÚ_M_startÚ	_M_finishÚ_M_curr   Ú_M_noder-   Ú_M_firstÚ_M_last)rG   )r   r%   ÚstartÚfinishr   r   r   r   Ã   s
    zDequeWorkerBase.sizec             C   s`   |d d }|d |d  }||k r0|d | S || }|d dt |ƒ| j   }||| j  S )NrH   rI   rN   rK   rL   r-   )r)   rG   )r   r%   ÚidxrO   Zfirst_node_sizeZ
index_noder   r   r   r/   Í   s    zDequeWorkerBase.indexN)r   r   r   r   r   r/   r   r   r   r   rE   ¾   s   
rE   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚDequeEmptyWorkerc             C   s   d S )Nr   )r   r   r   r   r$   Ø   s    zDequeEmptyWorker.get_arg_typesc             C   s   t ƒ S )N)r   )r   r%   r   r   r   r&   Û   s    z DequeEmptyWorker.get_result_typec             C   s    |d d d |d d d kS )NrH   rI   rK   rJ   r   )r   r%   r   r   r   r'   Þ   s    zDequeEmptyWorker.__call__N)r   r   r   r$   r&   r'   r   r   r   r   rR   ×   s   rR   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚDequeSizeWorkerc             C   s   d S )Nr   )r   r   r   r   r$   ä   s    zDequeSizeWorker.get_arg_typesc             C   s   t ƒ S )N)r   )r   r%   r   r   r   r&   ç   s    zDequeSizeWorker.get_result_typec             C   s
   | j |ƒS )N)r   )r   r%   r   r   r   r'   ê   s    zDequeSizeWorker.__call__N)r   r   r   r$   r&   r'   r   r   r   r   rS   ã   s   rS   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚDequeFrontWorkerc             C   s   d S )Nr   )r   r   r   r   r$   ï   s    zDequeFrontWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   r   r   r   r&   ò   s    z DequeFrontWorker.get_result_typec             C   s   |d d d d S )NrH   rI   rK   r   r   )r   r%   r   r   r   r'   õ   s    zDequeFrontWorker.__call__N)r   r   r   r$   r&   r'   r   r   r   r   rT   î   s   rT   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚDequeBackWorkerc             C   s   d S )Nr   )r   r   r   r   r$   ú   s    zDequeBackWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   r   r   r   r&   ý   s    zDequeBackWorker.get_result_typec             C   s^   |d d d |d d d krF|d d d d }|d | j d  S |d d d d S d S )	NrH   rJ   rK   rM   rL   r-   r   éÿÿÿÿ)rG   )r   r%   Ú	prev_noder   r   r   r'      s
    zDequeBackWorker.__call__N)r   r   r   r$   r&   r'   r   r   r   r   rU   ù   s   rU   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚDequeSubscriptWorkerc             C   s   t ƒ S )N)r   )r   r   r   r   r$   
  s    z"DequeSubscriptWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   Ú	subscriptr   r   r   r&     s    z$DequeSubscriptWorker.get_result_typec             C   s   | j ||ƒS )N)r/   )r   r%   rY   r   r   r   r'     s    zDequeSubscriptWorker.__call__N)r   r   r   r$   r&   r'   r   r   r   r   rX   	  s   rX   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚDequeAtWorkerc             C   s   t ƒ S )N)r   )r   r   r   r   r$     s    zDequeAtWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   r/   r   r   r   r&     s    zDequeAtWorker.get_result_typec             C   s@   t | j|ƒƒ}t |ƒ|kr0tdt |ƒ|f ƒ‚n| j||ƒS d S )Nz%Deque index "%d" should not be >= %d.)r)   r   r0   r/   )r   r%   r/   Z
deque_sizer   r   r   r'     s
    zDequeAtWorker.__call__N)r   r   r   r$   r&   r'   r   r   r   r   rZ     s   rZ   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚDequeMethodsMatcherc                sf   t jjjˆ td ƒ tdtƒtdtƒtdtƒtdt	ƒtdt
ƒtdtƒdœˆ _‡ fd	d
„ˆ jD ƒˆ _d S )NÚdequer4   r   r5   r6   z
operator[]r7   )r4   r   r5   r6   z
operator[]r7   c                s   g | ]}ˆ j | ‘qS r   )r8   )r9   r:   )r   r   r   r;   0  s    z0DequeMethodsMatcher.__init__.<locals>.<listcomp>)r   r   r<   r   r=   r   rR   rS   rT   rU   rX   rZ   r8   r>   )r   r   )r   r   r   %  s    

zDequeMethodsMatcher.__init__c             C   s>   t |dƒsd S | jj|ƒ}|d ks*|j r.d S |j|jdƒƒS )Nr\   r   )r   r8   r?   r@   r   rA   )r   rB   rC   rD   r   r   r   r   2  s    
zDequeMethodsMatcher.matchN)r   r   r   r   r   r   r   r   r   r[   $  s   r[   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚForwardListWorkerBasec             C   s   || _ || _d S )N)r   Ú
_node_type)r   r   Ú	node_typer   r   r   r   >  s    zForwardListWorkerBase.__init__c             C   s   d S )Nr   )r   r   r   r   r$   B  s    z#ForwardListWorkerBase.get_arg_typesN)r   r   r   r   r$   r   r   r   r   r]   =  s   r]   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚForwardListEmptyWorkerc             C   s   t ƒ S )N)r   )r   r%   r   r   r   r&   G  s    z&ForwardListEmptyWorker.get_result_typec             C   s   |d d d dkS )NrH   Ú_M_headÚ_M_nextr   r   )r   r%   r   r   r   r'   J  s    zForwardListEmptyWorker.__call__N)r   r   r   r&   r'   r   r   r   r   r`   F  s   r`   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚForwardListFrontWorkerc             C   s   | j S )N)r   )r   r%   r   r   r   r&   O  s    z&ForwardListFrontWorker.get_result_typec             C   s:   |d d d j | jƒ}|d d j}|j | jjƒ ƒjƒ S )NrH   ra   rb   Ú
_M_storage)r   r^   Úaddressr   r    r!   )r   r%   ÚnodeZval_addressr   r   r   r'   R  s    zForwardListFrontWorker.__call__N)r   r   r   r&   r'   r   r   r   r   rc   N  s   rc   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚForwardListMethodsMatcherc                sJ   t d }tjjjˆ |ƒ tdtƒtdtƒdœˆ _‡ fdd„ˆ jD ƒˆ _	d S )NÚforward_listr4   r5   )r4   r5   c                s   g | ]}ˆ j | ‘qS r   )r8   )r9   r:   )r   r   r   r;   `  s    z6ForwardListMethodsMatcher.__init__.<locals>.<listcomp>)
r=   r   r   r<   r   r   r`   rc   r8   r>   )r   Zmatcher_namer   )r   r   r   Y  s
    z"ForwardListMethodsMatcher.__init__c             C   sZ   t |dƒsd S | jj|ƒ}|d ks*|j r.d S |jdƒ}tjt|ƒd ƒjƒ }|j	||ƒS )Nrh   r   z::_Node)
r   r8   r?   r@   rA   r   r   Ústrr    r   )r   rB   rC   rD   r   r_   r   r   r   r   b  s    

zForwardListMethodsMatcher.matchN)r   r   r   r   r   r   r   r   r   rg   X  s   	rg   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚListWorkerBasec             C   s   || _ || _d S )N)r   r^   )r   r   r_   r   r   r   r   p  s    zListWorkerBase.__init__c             C   s   d S )Nr   )r   r   r   r   r$   t  s    zListWorkerBase.get_arg_typesc             C   sB   |j ƒ }|jjƒ d jdkr$|d S |d j}|j| jjƒ ƒj ƒ S )Nr-   Z_M_datard   )r!   ÚtypeÚfieldsr   re   r   r   r    )r   rf   Zaddrr   r   r   Úget_value_from_nodew  s
    
z"ListWorkerBase.get_value_from_nodeN)r   r   r   r   r$   rm   r   r   r   r   rj   o  s   rj   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚListEmptyWorkerc             C   s   t ƒ S )N)r   )r   r%   r   r   r   r&   ‚  s    zListEmptyWorker.get_result_typec             C   s&   |d d }|d |j krdS dS d S )NrH   rL   rb   TF)re   )r   r%   Z	base_noder   r   r   r'   …  s    zListEmptyWorker.__call__N)r   r   r   r&   r'   r   r   r   r   rn     s   rn   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚListSizeWorkerc             C   s   t ƒ S )N)r   )r   r%   r   r   r   r&   Ž  s    zListSizeWorker.get_result_typec             C   sD   |d d d }|d d j }d}x||kr>|d }|d7 }q$W |S )NrH   rL   rb   r   r-   )re   )r   r%   Z
begin_nodeZend_noder   r   r   r   r'   ‘  s    
zListSizeWorker.__call__N)r   r   r   r&   r'   r   r   r   r   ro     s   ro   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚListFrontWorkerc             C   s   | j S )N)r   )r   r%   r   r   r   r&   œ  s    zListFrontWorker.get_result_typec             C   s"   |d d d j | jƒ}| j|ƒS )NrH   rL   rb   )r   r^   rm   )r   r%   rf   r   r   r   r'   Ÿ  s    zListFrontWorker.__call__N)r   r   r   r&   r'   r   r   r   r   rp   ›  s   rp   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚListBackWorkerc             C   s   | j S )N)r   )r   r%   r   r   r   r&   ¥  s    zListBackWorker.get_result_typec             C   s"   |d d d j | jƒ}| j|ƒS )NrH   rL   Z_M_prev)r   r^   rm   )r   r%   rW   r   r   r   r'   ¨  s    zListBackWorker.__call__N)r   r   r   r&   r'   r   r   r   r   rq   ¤  s   rq   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚListMethodsMatcherc                sV   t jjjˆ td ƒ tdtƒtdtƒtdtƒtdt	ƒdœˆ _
‡ fdd„ˆ j
D ƒˆ _d S )	NÚlistr4   r   r5   r6   )r4   r   r5   r6   c                s   g | ]}ˆ j | ‘qS r   )r8   )r9   r:   )r   r   r   r;   ·  s    z/ListMethodsMatcher.__init__.<locals>.<listcomp>)r   r   r<   r   r=   r   rn   ro   rp   rq   r8   r>   )r   r   )r   r   r   ®  s    

zListMethodsMatcher.__init__c             C   sZ   t |dƒsd S | jj|ƒ}|d ks*|j r.d S |jdƒ}tjt|ƒd ƒjƒ }|j	||ƒS )Nz(__cxx11::)?listr   z::_Node)
r   r8   r?   r@   rA   r   r   ri   r    r   )r   rB   rC   rD   r   r_   r   r   r   r   ¹  s    

zListMethodsMatcher.matchN)r   r   r   r   r   r   r   r   r   rr   ­  s   rr   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚVectorWorkerBasec             C   s
   || _ d S )N)r   )r   r   r   r   r   r   Ç  s    zVectorWorkerBase.__init__c             C   sz   | j jtjkr^|d d d }|d d d }|d d d }|jƒ jjd }|| | | S |d d |d d  S d S )NrH   rI   Ú_M_prJ   Z	_M_offseté   )r   Úcoder   ÚTYPE_CODE_BOOLr!   rk   rF   )r   r%   rO   rP   Zfinish_offsetÚbit_sizer   r   r   r   Ê  s    zVectorWorkerBase.sizec             C   sj   | j jtjkrV|d d d }|jƒ jjd }|||  }|| }|jƒ d|> @ dkS |d d | S d S )NrH   rI   ru   rv   r-   r   )r   rw   r   rx   r!   rk   rF   )r   r%   r/   rO   ry   ZvalpÚoffsetr   r   r   r?   Ô  s    zVectorWorkerBase.getN)r   r   r   r   r   r?   r   r   r   r   rt   Æ  s   
rt   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚVectorEmptyWorkerc             C   s   d S )Nr   )r   r   r   r   r$   à  s    zVectorEmptyWorker.get_arg_typesc             C   s   t ƒ S )N)r   )r   r%   r   r   r   r&   ã  s    z!VectorEmptyWorker.get_result_typec             C   s   t | j|ƒƒdkS )Nr   )r)   r   )r   r%   r   r   r   r'   æ  s    zVectorEmptyWorker.__call__N)r   r   r   r$   r&   r'   r   r   r   r   r{   ß  s   r{   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚVectorSizeWorkerc             C   s   d S )Nr   )r   r   r   r   r$   ë  s    zVectorSizeWorker.get_arg_typesc             C   s   t ƒ S )N)r   )r   r%   r   r   r   r&   î  s    z VectorSizeWorker.get_result_typec             C   s
   | j |ƒS )N)r   )r   r%   r   r   r   r'   ñ  s    zVectorSizeWorker.__call__N)r   r   r   r$   r&   r'   r   r   r   r   r|   ê  s   r|   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚVectorFrontWorkerc             C   s   d S )Nr   )r   r   r   r   r$   ö  s    zVectorFrontWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   r   r   r   r&   ù  s    z!VectorFrontWorker.get_result_typec             C   s   | j |dƒS )Nr   )r?   )r   r%   r   r   r   r'   ü  s    zVectorFrontWorker.__call__N)r   r   r   r$   r&   r'   r   r   r   r   r}   õ  s   r}   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚVectorBackWorkerc             C   s   d S )Nr   )r   r   r   r   r$     s    zVectorBackWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   r   r   r   r&     s    z VectorBackWorker.get_result_typec             C   s   | j |t| j|ƒƒd ƒS )Nr-   )r?   r)   r   )r   r%   r   r   r   r'     s    zVectorBackWorker.__call__N)r   r   r   r$   r&   r'   r   r   r   r   r~      s   r~   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚVectorAtWorkerc             C   s   t ƒ S )N)r   )r   r   r   r   r$     s    zVectorAtWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   r/   r   r   r   r&     s    zVectorAtWorker.get_result_typec             C   s>   t | j|ƒƒ}t |ƒ|kr.tdt |ƒ|f ƒ‚| j|t |ƒƒS )Nz&Vector index "%d" should not be >= %d.)r)   r   r0   r?   )r   r%   r/   r   r   r   r   r'     s
    zVectorAtWorker.__call__N)r   r   r   r$   r&   r'   r   r   r   r   r     s   r   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚVectorSubscriptWorkerc             C   s   t ƒ S )N)r   )r   r   r   r   r$     s    z#VectorSubscriptWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   rY   r   r   r   r&     s    z%VectorSubscriptWorker.get_result_typec             C   s   | j |t|ƒƒS )N)r?   r)   )r   r%   rY   r   r   r   r'   !  s    zVectorSubscriptWorker.__call__N)r   r   r   r$   r&   r'   r   r   r   r   r€     s   r€   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚVectorMethodsMatcherc                sf   t jjjˆ td ƒ tdtƒtdtƒtdtƒtdt	ƒtdt
ƒtdtƒdœˆ _‡ fd	d
„ˆ jD ƒˆ _d S )NÚvectorr   r4   r5   r6   r7   z
operator[])r   r4   r5   r6   r7   z
operator[]c                s   g | ]}ˆ j | ‘qS r   )r8   )r9   r:   )r   r   r   r;   2  s    z1VectorMethodsMatcher.__init__.<locals>.<listcomp>)r   r   r<   r   r=   r   r|   r{   r}   r~   r   r€   r8   r>   )r   r   )r   r   r   &  s    

zVectorMethodsMatcher.__init__c             C   s>   t |dƒsd S | jj|ƒ}|d ks*|j r.d S |j|jdƒƒS )Nr‚   r   )r   r8   r?   r@   r   rA   )r   rB   rC   rD   r   r   r   r   4  s    
zVectorMethodsMatcher.matchN)r   r   r   r   r   r   r   r   r   r   %  s   r   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAssociativeContainerWorkerBasec             C   s
   || _ d S )N)Ú
_unordered)r   Ú	unorderedr   r   r   r   @  s    z'AssociativeContainerWorkerBase.__init__c             C   s&   | j r|d d S |d d d S d S )NZ_M_hZ_M_element_countÚ_M_trH   Z_M_node_count)r„   )r   r%   r   r   r   Ú
node_countC  s    z)AssociativeContainerWorkerBase.node_countc             C   s   d S )Nr   )r   r   r   r   r$   I  s    z,AssociativeContainerWorkerBase.get_arg_typesN)r   r   r   r   r‡   r$   r   r   r   r   rƒ   ?  s   rƒ   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚAssociativeContainerEmptyWorkerc             C   s   t ƒ S )N)r   )r   r%   r   r   r   r&   N  s    z/AssociativeContainerEmptyWorker.get_result_typec             C   s   t | j|ƒƒdkS )Nr   )r)   r‡   )r   r%   r   r   r   r'   Q  s    z(AssociativeContainerEmptyWorker.__call__N)r   r   r   r&   r'   r   r   r   r   rˆ   M  s   rˆ   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚAssociativeContainerSizeWorkerc             C   s   t ƒ S )N)r   )r   r%   r   r   r   r&   V  s    z.AssociativeContainerSizeWorker.get_result_typec             C   s
   | j |ƒS )N)r‡   )r   r%   r   r   r   r'   Y  s    z'AssociativeContainerSizeWorker.__call__N)r   r   r   r&   r'   r   r   r   r   r‰   U  s   r‰   c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú"AssociativeContainerMethodsMatcherc                sL   t jjjˆ t| ƒ |ˆ _tdtƒtdtƒdœˆ _	‡ fdd„ˆ j	D ƒˆ _
d S )Nr   r4   )r   r4   c                s   g | ]}ˆ j | ‘qS r   )r8   )r9   r:   )r   r   r   r;   g  s    z?AssociativeContainerMethodsMatcher.__init__.<locals>.<listcomp>)r   r   r<   r   r=   Ú_namer   r‰   rˆ   r8   r>   )r   r   r   )r   r   r   ^  s    

z+AssociativeContainerMethodsMatcher.__init__c             C   sD   t || jƒsd S | jj|ƒ}|d ks,|j r0d S d| jk}|j|ƒS )Nr…   )r   r‹   r8   r?   r@   r   )r   rB   rC   rD   r…   r   r   r   r   i  s    
z(AssociativeContainerMethodsMatcher.matchN)r   r   r   r   r   r   r   r   r   rŠ   ]  s   rŠ   c               @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚUniquePtrGetWorkerzS
    Implement std::unique_ptr<T>::get() and std::unique_ptr<T>::operator->().
    c             C   s*   |j tjk| _| jr |jƒ | _n|| _d S )N)rw   r   ÚTYPE_CODE_ARRAYÚ	_is_arrayÚtargetÚ
_elem_type)r   Ú	elem_typer   r   r   r   z  s    zUniquePtrGetWorker.__init__c             C   s   d S )Nr   )r   r   r   r   r$     s    z UniquePtrGetWorker.get_arg_typesc             C   s
   | j jƒ S )N)r   r    )r   r%   r   r   r   r&   „  s    z"UniquePtrGetWorker.get_result_typec             C   s   |dkp| j  S )Nr?   )rŽ   )r   rC   r   r   r   Ú	_supports‡  s    zUniquePtrGetWorker._supportsc             C   s¢   |j ƒ jjƒ d jj}t|dƒr.|d d }nt|dƒrB|d }nd S |jjƒ d j}|jƒ d j}|jƒ d }|jdkrˆ|j|ƒd S |jrš|j|jƒS d S d S )Nr   z__uniq_ptr_(data|impl)r†   Útupler-   Z_M_head_impl)r!   rk   rl   r
   r   r   r   Zis_base_class)r   r%   Z	impl_typeZtuple_memberZtuple_impl_typeZtuple_head_typeZ
head_fieldr   r   r   r'   ‹  s    



zUniquePtrGetWorker.__call__N)	r   r   r   Ú__doc__r   r$   r&   r’   r'   r   r   r   r   rŒ   u  s   rŒ   c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚUniquePtrDerefWorkerz*Implement std::unique_ptr<T>::operator*().c             C   s   t j| |ƒ d S )N)rŒ   r   )r   r‘   r   r   r   r   ¢  s    zUniquePtrDerefWorker.__init__c             C   s   | j S )N)r   )r   r%   r   r   r   r&   ¥  s    z$UniquePtrDerefWorker.get_result_typec             C   s   | j  S )N)rŽ   )r   rC   r   r   r   r’   ¨  s    zUniquePtrDerefWorker._supportsc             C   s   t j| |ƒjƒ S )N)rŒ   r'   r!   )r   r%   r   r   r   r'   ¬  s    zUniquePtrDerefWorker.__call__N)r   r   r   r”   r   r&   r’   r'   r   r   r   r   r•   Ÿ  s
   r•   c               @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚUniquePtrSubscriptWorkerz1Implement std::unique_ptr<T>::operator[](size_t).c             C   s   t j| |ƒ d S )N)rŒ   r   )r   r‘   r   r   r   r   ³  s    z!UniquePtrSubscriptWorker.__init__c             C   s   t ƒ S )N)r   )r   r   r   r   r$   ¶  s    z&UniquePtrSubscriptWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   r/   r   r   r   r&   ¹  s    z(UniquePtrSubscriptWorker.get_result_typec             C   s   | j S )N)rŽ   )r   rC   r   r   r   r’   ¼  s    z"UniquePtrSubscriptWorker._supportsc             C   s   t j| |ƒ| S )N)rŒ   r'   )r   r%   r/   r   r   r   r'   À  s    z!UniquePtrSubscriptWorker.__call__N)	r   r   r   r”   r   r$   r&   r’   r'   r   r   r   r   r–   °  s   r–   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚUniquePtrMethodsMatcherc                sV   t jjjˆ td ƒ tdtƒtdtƒtdtƒtdtƒdœˆ _	‡ fdd„ˆ j	D ƒˆ _
d S )	NÚ
unique_ptrr?   z
operator->z	operator*z
operator[])r?   z
operator->z	operator*z
operator[]c                s   g | ]}ˆ j | ‘qS r   )r8   )r9   r:   )r   r   r   r;   Î  s    z4UniquePtrMethodsMatcher.__init__.<locals>.<listcomp>)r   r   r<   r   r=   r   rŒ   r•   r–   r8   r>   )r   r   )r   r   r   Å  s    

z UniquePtrMethodsMatcher.__init__c             C   sP   t |dƒsd S | jj|ƒ}|d ks*|j r.d S |j|jdƒƒ}|j|ƒrL|S d S )Nr˜   r   )r   r8   r?   r@   r   rA   r’   )r   rB   rC   rD   Úworkerr   r   r   r   Ð  s    

zUniquePtrMethodsMatcher.matchN)r   r   r   r   r   r   r   r   r   r—   Ä  s   r—   c               @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚSharedPtrGetWorkerzT
    Implements std::shared_ptr<T>::get() and std::shared_ptr<T>::operator->().
    c             C   s*   |j tjk| _| jr |jƒ | _n|| _d S )N)rw   r   r   rŽ   r   r   )r   r‘   r   r   r   r   ã  s    zSharedPtrGetWorker.__init__c             C   s   d S )Nr   )r   r   r   r   r$   ê  s    z SharedPtrGetWorker.get_arg_typesc             C   s
   | j jƒ S )N)r   r    )r   r%   r   r   r   r&   í  s    z"SharedPtrGetWorker.get_result_typec             C   s   |dkp| j  S )Nr?   )rŽ   )r   rC   r   r   r   r’   ð  s    zSharedPtrGetWorker._supportsc             C   s   |d S )NZ_M_ptrr   )r   r%   r   r   r   r'   ô  s    zSharedPtrGetWorker.__call__N)	r   r   r   r”   r   r$   r&   r’   r'   r   r   r   r   rš   Þ  s   rš   c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚSharedPtrDerefWorkerz*Implement std::shared_ptr<T>::operator*().c             C   s   t j| |ƒ d S )N)rš   r   )r   r‘   r   r   r   r   û  s    zSharedPtrDerefWorker.__init__c             C   s   | j S )N)r   )r   r%   r   r   r   r&   þ  s    z$SharedPtrDerefWorker.get_result_typec             C   s   | j  S )N)rŽ   )r   rC   r   r   r   r’     s    zSharedPtrDerefWorker._supportsc             C   s   t j| |ƒjƒ S )N)rš   r'   r!   )r   r%   r   r   r   r'     s    zSharedPtrDerefWorker.__call__N)r   r   r   r”   r   r&   r’   r'   r   r   r   r   r›   ø  s
   r›   c               @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚSharedPtrSubscriptWorkerz1Implement std::shared_ptr<T>::operator[](size_t).c             C   s   t j| |ƒ d S )N)rš   r   )r   r‘   r   r   r   r     s    z!SharedPtrSubscriptWorker.__init__c             C   s   t ƒ S )N)r   )r   r   r   r   r$     s    z&SharedPtrSubscriptWorker.get_arg_typesc             C   s   | j S )N)r   )r   r%   r/   r   r   r   r&     s    z(SharedPtrSubscriptWorker.get_result_typec             C   s   | j S )N)rŽ   )r   rC   r   r   r   r’     s    z"SharedPtrSubscriptWorker._supportsc             C   sZ   t jdt| jƒƒ}|rJ|t|jdƒƒkrJtd| jt|ƒt|jdƒƒf ƒ‚tj| |ƒ| S )Nz.*\[(\d+)]$r-   z.shared_ptr<%s> index "%d" should not be >= %d.)	r   r   ri   r   r)   Úgroupr0   rš   r'   )r   r%   r/   r:   r   r   r   r'     s
    z!SharedPtrSubscriptWorker.__call__N)	r   r   r   r”   r   r$   r&   r’   r'   r   r   r   r   rœ   	  s   rœ   c               @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚSharedPtrUseCountWorkerz*Implement std::shared_ptr<T>::use_count().c             C   s   d S )Nr   )r   r‘   r   r   r   r   %  s    z SharedPtrUseCountWorker.__init__c             C   s   d S )Nr   )r   r   r   r   r$   (  s    z%SharedPtrUseCountWorker.get_arg_typesc             C   s
   t jdƒS )NZlong)r   r   )r   r%   r   r   r   r&   +  s    z'SharedPtrUseCountWorker.get_result_typec             C   s   dS )NTr   )r   rC   r   r   r   r’   .  s    z!SharedPtrUseCountWorker._supportsc             C   s   |d d }|r|d S dS )NZ_M_refcountZ_M_piZ_M_use_countr   r   )r   r%   Z	refcountsr   r   r   r'   1  s    z SharedPtrUseCountWorker.__call__N)	r   r   r   r”   r   r$   r&   r’   r'   r   r   r   r   rž   "  s   rž   c               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚSharedPtrUniqueWorkerz'Implement std::shared_ptr<T>::unique().c             C   s   t j| |ƒ d S )N)rž   r   )r   r‘   r   r   r   r   9  s    zSharedPtrUniqueWorker.__init__c             C   s
   t jdƒS )Nr   )r   r   )r   r%   r   r   r   r&   <  s    z%SharedPtrUniqueWorker.get_result_typec             C   s   t j| |ƒdkS )Nr-   )rž   r'   )r   r%   r   r   r   r'   ?  s    zSharedPtrUniqueWorker.__call__N)r   r   r   r”   r   r&   r'   r   r   r   r   rŸ   6  s   rŸ   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚSharedPtrMethodsMatcherc                sf   t jjjˆ td ƒ tdtƒtdtƒtdtƒtdtƒtdt	ƒtdt
ƒdœˆ _‡ fd	d
„ˆ jD ƒˆ _d S )NÚ
shared_ptrr?   z
operator->z	operator*z
operator[]Ú	use_countÚunique)r?   z
operator->z	operator*z
operator[]r¢   r£   c                s   g | ]}ˆ j | ‘qS r   )r8   )r9   r:   )r   r   r   r;   O  s    z4SharedPtrMethodsMatcher.__init__.<locals>.<listcomp>)r   r   r<   r   r=   r   rš   r›   rœ   rž   rŸ   r8   r>   )r   r   )r   r   r   D  s    

z SharedPtrMethodsMatcher.__init__c             C   sP   t |dƒsd S | jj|ƒ}|d ks*|j r.d S |j|jdƒƒ}|j|ƒrL|S d S )Nr¡   r   )r   r8   r?   r@   r   rA   r’   )r   rB   rC   rD   r™   r   r   r   r   Q  s    

zSharedPtrMethodsMatcher.matchN)r   r   r   r   r   r   r   r   r   r    C  s   r    c             C   s  t jj| tƒ ƒ t jj| tƒ ƒ t jj| tƒ ƒ t jj| tƒ ƒ t jj| tƒ ƒ t jj| tdƒƒ t jj| tdƒƒ t jj| tdƒƒ t jj| tdƒƒ t jj| tdƒƒ t jj| tdƒƒ t jj| tdƒƒ t jj| tdƒƒ t jj| t	ƒ ƒ t jj| t
ƒ ƒ d S )	NÚsetÚmapZmultisetZmultimapZunordered_setZunordered_mapZunordered_multisetZunordered_multimap)r   r   Zregister_xmethod_matcherr2   rg   r[   rr   r   rŠ   r—   r    )Zlocusr   r   r   Úregister_libstdcxx_xmethods]  s.    r¦   )>r   Zgdb.xmethodr   r=   r   r   r   r   r   r   r   ZXMethodWorkerr   r#   r(   r*   r,   r.   r1   r<   r2   rE   rR   rS   rT   rU   rX   rZ   r[   r]   r`   rc   rg   rj   rn   ro   rp   rq   rr   rt   r{   r|   r}   r~   r   r€   r   rƒ   rˆ   r‰   rŠ   rŒ   r•   r–   r—   rš   r›   rœ   rž   rŸ   r    r¦   r   r   r   r   Ú<module>   sr   
	
		*