U
    Wd*n                     @   s  d dl Z d dlZ d dlZdZd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 d-d. d.eZG d/d0 d0e jjZG d1d2 d2e jj	ZG d3d4 d4eZ G d5d6 d6eZ!G d7d8 d8eZ"G d9d: 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 dAdB dBe%Z'G dCdD dDe%Z(G dEdF dFe%Z)G dGdH dHe%Z*G dIdJ dJe%Z+G dKdL dLe jjZ,G dMdN dNe jj	Z-G dOdP dPe-Z.G dQdR dRe-Z/G dSdT dTe jjZ0G dUdV dVe jj	Z1G dWdX dXe1Z2G dYdZ dZe1Z3G d[d\ d\e jjZ4G d]d^ d^e jj	Z5G d_d` d`e5Z6G dadb dbe5Z7G dcdd dde jj	Z8G dedf dfe8Z9G dgdh dhe jjZ:didj Z;dS )k    Nzlibstdc++::c                   C   s
   t dS Nboolgdblookup_type r   r   I/usr/lib/x86_64-linux-gnu/../../share/gcc/python/libstdcxx/v6/xmethods.pyget_bool_type   s    r	   c                   C   s
   t dS )Nzstd::size_tr   r   r   r   r   get_std_size_type   s    r
   c                   @   s   e Zd Zdd ZdS )LibStdCxxXMethodc                 C   s   t 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 r   )	_val_type_sizer   val_typesizer   r   r   r   &   s    zArrayWorkerBase.__init__c                 C   s   t d}|| j  S )Nz
(void *) 0)r   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   %   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 | || d S r   r   r   r   r   r   r   r   /   s    zArraySizeWorker.__init__c                 C   s   d S r   r   r   r   r   r   get_arg_types2   s    zArraySizeWorker.get_arg_typesc                 C   s   t  S r   r
   r   objr   r   r   get_result_type5   s    zArraySizeWorker.get_result_typec                 C   s   | j S r   )r   r&   r   r   r   __call__8   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 | || d S r   r"   r   r   r   r   r   <   s    zArrayEmptyWorker.__init__c                 C   s   d S r   r   r#   r   r   r   r$   ?   s    zArrayEmptyWorker.get_arg_typesc                 C   s   t  S r   r	   r&   r   r   r   r(   B   s    z ArrayEmptyWorker.get_result_typec                 C   s   t | jdkS Nr   )intr   r&   r   r   r   r)   E   s    zArrayEmptyWorker.__call__Nr*   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 )
ArrayFrontWorkerc                 C   s   t | || d S r   r"   r   r   r   r   r   I   s    zArrayFrontWorker.__init__c                 C   s   d S r   r   r#   r   r   r   r$   L   s    zArrayFrontWorker.get_arg_typesc                 C   s   | j S r   r   r&   r   r   r   r(   O   s    z ArrayFrontWorker.get_result_typec                 C   s&   t | jdkr|d d S |  S d S Nr   _M_elemsr.   r   r    r&   r   r   r   r)   R   s    zArrayFrontWorker.__call__Nr*   r   r   r   r   r/   H   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 | || d S r   r"   r   r   r   r   r   Y   s    zArrayBackWorker.__init__c                 C   s   d S r   r   r#   r   r   r   r$   \   s    zArrayBackWorker.get_arg_typesc                 C   s   | j S r   r0   r&   r   r   r   r(   _   s    zArrayBackWorker.get_result_typec                 C   s,   t | jdkr |d | jd  S |  S d S )Nr   r2      r3   r&   r   r   r   r)   b   s    zArrayBackWorker.__call__Nr*   r   r   r   r   r4   X   s   r4   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ArrayAtWorkerc                 C   s   t | || d S r   r"   r   r   r   r   r   i   s    zArrayAtWorker.__init__c                 C   s   t  S r   r%   r#   r   r   r   r$   l   s    zArrayAtWorker.get_arg_typesc                 C   s   | j S r   r0   r   r'   indexr   r   r   r(   o   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.r2   )r.   r   
IndexErrorr7   r   r   r   r)   r   s
    zArrayAtWorker.__call__Nr*   r   r   r   r   r6   h   s   r6   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ArraySubscriptWorkerc                 C   s   t | || d S r   r"   r   r   r   r   r   y   s    zArraySubscriptWorker.__init__c                 C   s   t  S r   r%   r#   r   r   r   r$   |   s    z"ArraySubscriptWorker.get_arg_typesc                 C   s   | j S r   r0   r7   r   r   r   r(      s    z$ArraySubscriptWorker.get_result_typec                 C   s&   t | jdkr|d | S |  S d S r1   r3   r7   r   r   r   r)      s    zArraySubscriptWorker.__call__Nr*   r   r   r   r   r:   x   s   r:   c                   @   s   e Zd Zdd Zdd ZdS )ArrayMethodsMatcherc                    sf   t 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at
operator[]r   r=   r>   r?   r@   rA   c                    s   g | ]} j | qS r   _method_dict.0mr#   r   r   
<listcomp>   s     z0ArrayMethodsMatcher.__init__.<locals>.<listcomp>)r   r   XMethodMatcherr   matcher_name_prefixr   r!   r+   r/   r4   r6   r:   rD   methodsr#   r   r#   r   r      s    
zArrayMethodsMatcher.__init__c                 C   sd   t d|jsd S | j|}|d ks,|js0d S z|d}|d}W n   Y d S X |||S )Nz^std::(__\d+::)?array<.*>$r   r5   )rematchtagrD   getenabledtemplate_argumentr   )r   
class_typemethod_namemethod
value_typer   r   r   r   rM      s    
zArrayMethodsMatcher.matchNr   r   r   r   rM   r   r   r   r   r;      s   r;   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   r5   )r   sizeof_bufsizer   r   r   r   r   r      s    zDequeWorkerBase.__init__c                 C   sV   |d d d }|d d d }|d d d }|d d d }|| | j  ||  S )N_M_impl_M_start_M_node	_M_finish_M_cur_M_firstrY   )r   r'   
first_nodeZ	last_nodeZcurfirstr   r   r   r      s
    zDequeWorkerBase.sizec                 C   s4   |d d d }|t || j  }|d || j  S )Nr[   r\   r]   r   )r.   rY   )r   r'   idxrb   Z
index_noder   r   r   r8      s    zDequeWorkerBase.indexN)r   r   r   r   r   r8   r   r   r   r   rW      s   rW   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DequeEmptyWorkerc                 C   s   d S r   r   r#   r   r   r   r$      s    zDequeEmptyWorker.get_arg_typesc                 C   s   t  S r   r,   r&   r   r   r   r(      s    z DequeEmptyWorker.get_result_typec                 C   s    |d d d |d d d kS )Nr[   r\   r_   r^   r   r&   r   r   r   r)      s    zDequeEmptyWorker.__call__N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 )DequeSizeWorkerc                 C   s   d S r   r   r#   r   r   r   r$      s    zDequeSizeWorker.get_arg_typesc                 C   s   t  S r   r%   r&   r   r   r   r(      s    zDequeSizeWorker.get_result_typec                 C   s
   |  |S r   r   r&   r   r   r   r)      s    zDequeSizeWorker.__call__Nrf   r   r   r   r   rg      s   rg   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DequeFrontWorkerc                 C   s   d S r   r   r#   r   r   r   r$      s    zDequeFrontWorker.get_arg_typesc                 C   s   | j S r   r0   r&   r   r   r   r(      s    z DequeFrontWorker.get_result_typec                 C   s   |d d d d S )Nr[   r\   r_   r   r   r&   r   r   r   r)      s    zDequeFrontWorker.__call__Nrf   r   r   r   r   ri      s   ri   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DequeBackWorkerc                 C   s   d S r   r   r#   r   r   r   r$      s    zDequeBackWorker.get_arg_typesc                 C   s   | j S r   r0   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 )	Nr[   r^   r_   r`   r]   r5   r   ra   r   r'   Z	prev_noder   r   r   r)      s    zDequeBackWorker.__call__Nrf   r   r   r   r   rj      s   rj   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DequeSubscriptWorkerc                 C   s   t  S r   r%   r#   r   r   r   r$      s    z"DequeSubscriptWorker.get_arg_typesc                 C   s   | j S r   r0   r   r'   Z	subscriptr   r   r   r(      s    z$DequeSubscriptWorker.get_result_typec                 C   s   |  ||S r   )r8   rn   r   r   r   r)      s    zDequeSubscriptWorker.__call__Nrf   r   r   r   r   rm      s   rm   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DequeAtWorkerc                 C   s   t  S r   r%   r#   r   r   r   r$      s    zDequeAtWorker.get_arg_typesc                 C   s   | j S r   r0   r7   r   r   r   r(      s    zDequeAtWorker.get_result_typec                 C   s@   t | |}t ||kr0tdt ||f n| ||S d S )Nz%Deque index "%d" should not be >= %d.)r.   r   r9   r8   )r   r'   r8   Z
deque_sizer   r   r   r)      s    
zDequeAtWorker.__call__Nrf   r   r   r   r   ro      s   ro   c                   @   s   e Zd Zdd Zdd ZdS )DequeMethodsMatcherc                    sf   t 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dequer=   r   r>   r?   rA   r@   )r=   r   r>   r?   rA   r@   c                    s   g | ]} j | qS r   rC   rE   r#   r   r   rH   	  s     z0DequeMethodsMatcher.__init__.<locals>.<listcomp>)r   r   rI   r   rJ   r   re   rg   ri   rj   rm   ro   rD   rK   r#   r   r#   r   r      s    
zDequeMethodsMatcher.__init__c                 C   s@   t d|jsd S | j|}|d ks,|js0d S ||dS )Nz^std::(__\d+::)?deque<.*>$r   rL   rM   rN   rD   rO   rP   r   rQ   r   rR   rS   rT   r   r   r   rM     s    zDequeMethodsMatcher.matchNrV   r   r   r   r   rp      s   rp   c                   @   s   e Zd Zdd Zdd ZdS )ForwardListWorkerBasec                 C   s   || _ || _d S r   r   
_node_typer   r   	node_typer   r   r   r     s    zForwardListWorkerBase.__init__c                 C   s   d S r   r   r#   r   r   r   r$     s    z#ForwardListWorkerBase.get_arg_typesN)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S )ForwardListEmptyWorkerc                 C   s   t  S r   r,   r&   r   r   r   r(     s    z&ForwardListEmptyWorker.get_result_typec                 C   s   |d d d dkS )Nr[   _M_head_M_nextr   r   r&   r   r   r   r)   !  s    zForwardListEmptyWorker.__call__Nr   r   r   r(   r)   r   r   r   r   ry     s   ry   c                   @   s   e Zd Zdd Zdd ZdS )ForwardListFrontWorkerc                 C   s   | j S r   r0   r&   r   r   r   r(   %  s    z&ForwardListFrontWorker.get_result_typec                 C   s:   |d d d  | j}|d d j}| | j  S )Nr[   rz   r{   
_M_storage)r   rv   addressr   r   r   )r   r'   nodeZval_addressr   r   r   r)   (  s    zForwardListFrontWorker.__call__Nr|   r   r   r   r   r}   $  s   r}   c                   @   s   e Zd Zdd Zdd ZdS )ForwardListMethodsMatcherc                    sJ   t d }tjj | tdttdtd _ fdd jD  _	d S )Nforward_listr=   r>   )r=   r>   c                    s   g | ]} j | qS r   rC   rE   r#   r   r   rH   5  s     z6ForwardListMethodsMatcher.__init__.<locals>.<listcomp>)
rJ   r   r   rI   r   r   ry   r}   rD   rK   )r   Zmatcher_namer   r#   r   r   .  s    z"ForwardListMethodsMatcher.__init__c                 C   s\   t d|jsd S | j|}|d ks,|js0d S |d}tt	|d 
 }|||S )Nz!^std::(__\d+::)?forward_list<.*>$r   ::_NoderL   rM   rN   rD   rO   rP   rQ   r   r   strr   r   r   rR   rS   rT   r   rx   r   r   r   rM   7  s    
zForwardListMethodsMatcher.matchNrV   r   r   r   r   r   -  s   	r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ListWorkerBasec                 C   s   || _ || _d S r   ru   rw   r   r   r   r   D  s    zListWorkerBase.__init__c                 C   s   d S r   r   r#   r   r   r   r$   H  s    zListWorkerBase.get_arg_typesc                 C   sB   |  }|j d jdkr$|d S |d j}|| j   S )Nr5   _M_datar~   )r   typefieldsr   r   r   r   r   )r   r   addrr   r   r   get_value_from_nodeK  s
    
z"ListWorkerBase.get_value_from_nodeN)r   r   r   r   r$   r   r   r   r   r   r   C  s   r   c                   @   s   e Zd Zdd Zdd ZdS )ListEmptyWorkerc                 C   s   t  S r   r,   r&   r   r   r   r(   U  s    zListEmptyWorker.get_result_typec                 C   s&   |d d }|d |j krdS dS d S )Nr[   r]   r{   TFr   )r   r'   Z	base_noder   r   r   r)   X  s    zListEmptyWorker.__call__Nr|   r   r   r   r   r   T  s   r   c                   @   s   e Zd Zdd Zdd ZdS )ListSizeWorkerc                 C   s   t  S r   r%   r&   r   r   r   r(   `  s    zListSizeWorker.get_result_typec                 C   s@   |d d d }|d d j }d}||kr<|d }|d7 }q"|S )Nr[   r]   r{   r   r5   r   )r   r'   Z
begin_nodeZend_noder   r   r   r   r)   c  s    
zListSizeWorker.__call__Nr|   r   r   r   r   r   _  s   r   c                   @   s   e Zd Zdd Zdd ZdS )ListFrontWorkerc                 C   s   | j S r   r0   r&   r   r   r   r(   m  s    zListFrontWorker.get_result_typec                 C   s"   |d d d  | j}| |S )Nr[   r]   r{   r   rv   r   )r   r'   r   r   r   r   r)   p  s    zListFrontWorker.__call__Nr|   r   r   r   r   r   l  s   r   c                   @   s   e Zd Zdd Zdd ZdS )ListBackWorkerc                 C   s   | j S r   r0   r&   r   r   r   r(   u  s    zListBackWorker.get_result_typec                 C   s"   |d d d  | j}| |S )Nr[   r]   Z_M_prevr   rl   r   r   r   r)   x  s    zListBackWorker.__call__Nr|   r   r   r   r   r   t  s   r   c                   @   s   e Zd Zdd Zdd ZdS )ListMethodsMatcherc                    sV   t 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listr=   r   r>   r?   )r=   r   r>   r?   c                    s   g | ]} j | qS r   rC   rE   r#   r   r   rH     s     z/ListMethodsMatcher.__init__.<locals>.<listcomp>)r   r   rI   r   rJ   r   r   r   r   r   rD   rK   r#   r   r#   r   r   }  s    
zListMethodsMatcher.__init__c                 C   s\   t d|jsd S | j|}|d ks,|js0d S |d}tt	|d 
 }|||S )Nz%^std::(__\d+::)?(__cxx11::)?list<.*>$r   r   r   r   r   r   r   rM     s    
zListMethodsMatcher.matchNrV   r   r   r   r   r   |  s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )VectorWorkerBasec                 C   s
   || _ d S r   r0   rZ   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d }|| | | S |d d |d d  S d S )Nr[   r\   _M_pr^   	_M_offset   r   coder   TYPE_CODE_BOOLr   r   rX   )r   r'   startfinishZfinish_offsetbit_sizer   r   r   r     s    zVectorWorkerBase.sizec                 C   sj   | j jtjkrV|d d d }| jjd }|||  }|| }| d|> @ dkS |d d | S d S )Nr[   r\   r   r   r5   r   r   )r   r'   r8   r   r   Zvalpoffsetr   r   r   rO     s    zVectorWorkerBase.getN)r   r   r   r   r   rO   r   r   r   r   r     s   
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )VectorEmptyWorkerc                 C   s   d S r   r   r#   r   r   r   r$     s    zVectorEmptyWorker.get_arg_typesc                 C   s   t  S r   r,   r&   r   r   r   r(     s    z!VectorEmptyWorker.get_result_typec                 C   s   t | |dkS r-   )r.   r   r&   r   r   r   r)     s    zVectorEmptyWorker.__call__Nrf   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 r   r   r#   r   r   r   r$     s    zVectorSizeWorker.get_arg_typesc                 C   s   t  S r   r%   r&   r   r   r   r(     s    z VectorSizeWorker.get_result_typec                 C   s
   |  |S r   rh   r&   r   r   r   r)     s    zVectorSizeWorker.__call__Nrf   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 r   r   r#   r   r   r   r$     s    zVectorFrontWorker.get_arg_typesc                 C   s   | j S r   r0   r&   r   r   r   r(     s    z!VectorFrontWorker.get_result_typec                 C   s   |  |dS r-   )rO   r&   r   r   r   r)     s    zVectorFrontWorker.__call__Nrf   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 r   r   r#   r   r   r   r$     s    zVectorBackWorker.get_arg_typesc                 C   s   | j S r   r0   r&   r   r   r   r(     s    z VectorBackWorker.get_result_typec                 C   s   |  |t| |d S Nr5   )rO   r.   r   r&   r   r   r   r)     s    zVectorBackWorker.__call__Nrf   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 r   r%   r#   r   r   r   r$     s    zVectorAtWorker.get_arg_typesc                 C   s   | j S r   r0   r7   r   r   r   r(     s    zVectorAtWorker.get_result_typec                 C   s>   t | |}t ||kr.tdt ||f | |t |S )Nz&Vector index "%d" should not be >= %d.)r.   r   r9   rO   )r   r'   r8   r   r   r   r   r)     s    
zVectorAtWorker.__call__Nrf   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 r   r%   r#   r   r   r   r$     s    z#VectorSubscriptWorker.get_arg_typesc                 C   s   | j S r   r0   rn   r   r   r   r(     s    z%VectorSubscriptWorker.get_result_typec                 C   s   |  |t|S r   )rO   r.   rn   r   r   r   r)     s    zVectorSubscriptWorker.__call__Nrf   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 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   r=   r>   r?   r@   rA   rB   c                    s   g | ]} j | qS r   rC   rE   r#   r   r   rH     s     z1VectorMethodsMatcher.__init__.<locals>.<listcomp>)r   r   rI   r   rJ   r   r   r   r   r   r   r   rD   rK   r#   r   r#   r   r     s    
	zVectorMethodsMatcher.__init__c                 C   s@   t d|jsd S | j|}|d ks,|js0d S ||dS )Nz^std::(__\d+::)?vector<.*>$r   rr   rs   r   r   r   rM     s    zVectorMethodsMatcher.matchNrV   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 r   Z
_unordered)r   	unorderedr   r   r   r     s    z'AssociativeContainerWorkerBase.__init__c                 C   s&   | j r|d d S |d d d S d S )N_M_h_M_element_count_M_tr[   _M_node_countr   r&   r   r   r   
node_count	  s    z)AssociativeContainerWorkerBase.node_countc                 C   s   d S r   r   r#   r   r   r   r$     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 r   r,   r&   r   r   r   r(     s    z/AssociativeContainerEmptyWorker.get_result_typec                 C   s   t | |dkS r-   )r.   r   r&   r   r   r   r)     s    z(AssociativeContainerEmptyWorker.__call__Nr|   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )AssociativeContainerSizeWorkerc                 C   s   t  S r   r%   r&   r   r   r   r(     s    z.AssociativeContainerSizeWorker.get_result_typec                 C   s
   |  |S r   )r   r&   r   r   r   r)     s    z'AssociativeContainerSizeWorker.__call__Nr|   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )"AssociativeContainerMethodsMatcherc                    sL   t jj t|  | _tdttdtd _	 fdd j	D  _
d S )Nr   r=   )r   r=   c                    s   g | ]} j | qS r   rC   rE   r#   r   r   rH   *  s     z?AssociativeContainerMethodsMatcher.__init__.<locals>.<listcomp>)r   r   rI   r   rJ   _namer   r   r   rD   rK   )r   r   r   r#   r   r   !  s    
z+AssociativeContainerMethodsMatcher.__init__c                 C   sJ   t d| j |jsd S | j|}|d ks2|js6d S d| jk}||S )Nz^std::(__\d+::)?%s<.*>$r   )rL   rM   r   rN   rD   rO   rP   r   )r   rR   rS   rT   r   r   r   r   rM   ,  s    
z(AssociativeContainerMethodsMatcher.matchNrV   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 )UniquePtrGetWorkerzIImplements std::unique_ptr<T>::get() and std::unique_ptr<T>::operator->()c                 C   s*   |j tjk| _| jr | | _n|| _d S r   r   r   TYPE_CODE_ARRAY	_is_arraytarget
_elem_typer   Z	elem_typer   r   r   r   :  s    zUniquePtrGetWorker.__init__c                 C   s   d S r   r   r#   r   r   r   r$   A  s    z UniquePtrGetWorker.get_arg_typesc                 C   s
   | j  S r   r   r   r&   r   r   r   r(   D  s    z"UniquePtrGetWorker.get_result_typec                 C   s   |dkp| j  S )z/operator-> is not supported for unique_ptr<T[]>rO   r   r   rS   r   r   r   	_supportsG  s    zUniquePtrGetWorker._supportsc                 C   s   |  j d jj}td|r0|d d }ntd|rF|d }nd S |j d j}| d j}| d }|jdkr||d S |jr||jS d S d S )Nr   z+^std::(__\d+::)?__uniq_ptr_(data|impl)<.*>$r   z^std::(__\d+::)?tuple<.*>$r5   _M_head_impl)	r   r   r   rN   rL   rM   r   r   is_base_class)r   r'   	impl_typetuple_memberZtuple_impl_typeZtuple_head_typeZ
head_fieldr   r   r   r)   K  s    

zUniquePtrGetWorker.__call__N	r   r   r   __doc__r   r$   r(   r   r)   r   r   r   r   r   7  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*Implements std::unique_ptr<T>::operator*()c                 C   s   t | | d S r   r   r   r   r   r   r   r   a  s    zUniquePtrDerefWorker.__init__c                 C   s   | j S r   r   r&   r   r   r   r(   d  s    z$UniquePtrDerefWorker.get_result_typec                 C   s   | j  S )z.operator* is not supported for unique_ptr<T[]>r   r   r   r   r   r   g  s    zUniquePtrDerefWorker._supportsc                 C   s   t | | S r   )r   r)   r   r&   r   r   r   r)   k  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 )UniquePtrSubscriptWorkerz1Implements std::unique_ptr<T>::operator[](size_t)c                 C   s   t | | d S r   r   r   r   r   r   r   q  s    z!UniquePtrSubscriptWorker.__init__c                 C   s   t  S r   r%   r#   r   r   r   r$   t  s    z&UniquePtrSubscriptWorker.get_arg_typesc                 C   s   | j S r   r   r7   r   r   r   r(   w  s    z(UniquePtrSubscriptWorker.get_result_typec                 C   s   | j S )z0operator[] is only supported for unique_ptr<T[]>r   r   r   r   r   r   z  s    z"UniquePtrSubscriptWorker._supportsc                 C   s   t | || S r   )r   r)   r7   r   r   r   r)   ~  s    z!UniquePtrSubscriptWorker.__call__Nr   r   r   r   r   r   n  s   r   c                   @   s   e Zd Zdd Zdd ZdS )UniquePtrMethodsMatcherc                    sV   t 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_ptrrO   
operator->	operator*rA   )rO   r   r   rA   c                    s   g | ]} j | qS r   rC   rE   r#   r   r   rH     s     z4UniquePtrMethodsMatcher.__init__.<locals>.<listcomp>)r   r   rI   r   rJ   r   r   r   r   rD   rK   r#   r   r#   r   r     s    
z UniquePtrMethodsMatcher.__init__c                 C   sR   t d|jsd S | j|}|d ks,|js0d S ||d}||rN|S d S )Nz^std::(__\d+::)?unique_ptr<.*>$r   	rL   rM   rN   rD   rO   rP   r   rQ   r   r   rR   rS   rT   Zworkerr   r   r   rM     s    
zUniquePtrMethodsMatcher.matchNrV   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 )SharedPtrGetWorkerzIImplements std::shared_ptr<T>::get() and std::shared_ptr<T>::operator->()c                 C   s*   |j tjk| _| jr | | _n|| _d S r   r   r   r   r   r   r     s    zSharedPtrGetWorker.__init__c                 C   s   d S r   r   r#   r   r   r   r$     s    z SharedPtrGetWorker.get_arg_typesc                 C   s
   | j  S r   r   r&   r   r   r   r(     s    z"SharedPtrGetWorker.get_result_typec                 C   s   |dkp| j  S )z/operator-> is not supported for shared_ptr<T[]>rO   r   r   r   r   r   r     s    zSharedPtrGetWorker._supportsc                 C   s   |d S )N_M_ptrr   r&   r   r   r   r)     s    zSharedPtrGetWorker.__call__Nr   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*Implements std::shared_ptr<T>::operator*()c                 C   s   t | | d S r   r   r   r   r   r   r   r     s    zSharedPtrDerefWorker.__init__c                 C   s   | j S r   r   r&   r   r   r   r(     s    z$SharedPtrDerefWorker.get_result_typec                 C   s   | j  S )z.operator* is not supported for shared_ptr<T[]>r   r   r   r   r   r     s    zSharedPtrDerefWorker._supportsc                 C   s   t | | S r   )r   r)   r   r&   r   r   r   r)     s    zSharedPtrDerefWorker.__call__Nr   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 )SharedPtrSubscriptWorkerz1Implements std::shared_ptr<T>::operator[](size_t)c                 C   s   t | | d S r   r   r   r   r   r   r     s    z!SharedPtrSubscriptWorker.__init__c                 C   s   t  S r   r%   r#   r   r   r   r$     s    z&SharedPtrSubscriptWorker.get_arg_typesc                 C   s   | j S r   r   r7   r   r   r   r(     s    z(SharedPtrSubscriptWorker.get_result_typec                 C   s   | j S )z0operator[] is only supported for shared_ptr<T[]>r   r   r   r   r   r     s    z"SharedPtrSubscriptWorker._supportsc                 C   sZ   t dt| j}|rJ|t|dkrJtd| jt|t|df t| || S )Nz.*\[(\d+)]$r5   z.shared_ptr<%s> index "%d" should not be >= %d.)	rL   rM   r   r   r.   groupr9   r   r)   )r   r'   r8   rG   r   r   r   r)     s    z!SharedPtrSubscriptWorker.__call__Nr   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*Implements std::shared_ptr<T>::use_count()c                 C   s   d S r   r   r   r   r   r   r     s    z SharedPtrUseCountWorker.__init__c                 C   s   d S r   r   r#   r   r   r   r$     s    z%SharedPtrUseCountWorker.get_arg_typesc                 C   s
   t dS )Nlongr   r&   r   r   r   r(     s    z'SharedPtrUseCountWorker.get_result_typec                 C   s   dS )NTr   r   r   r   r   r     s    z!SharedPtrUseCountWorker._supportsc                 C   s   |d d }|r|d S dS )N_M_refcount_M_pi_M_use_countr   r   )r   r'   	refcountsr   r   r   r)     s    z SharedPtrUseCountWorker.__call__Nr   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'Implements std::shared_ptr<T>::unique()c                 C   s   t | | d S r   )r   r   r   r   r   r   r     s    zSharedPtrUniqueWorker.__init__c                 C   s
   t dS r   r   r&   r   r   r   r(     s    z%SharedPtrUniqueWorker.get_result_typec                 C   s   t | |dkS 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     s   r   c                   @   s   e Zd Zdd Zdd ZdS )SharedPtrMethodsMatcherc                    sf   t 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_ptrrO   r   r   rA   	use_countunique)rO   r   r   rA   r   r   c                    s   g | ]} j | qS r   rC   rE   r#   r   r   rH     s     z4SharedPtrMethodsMatcher.__init__.<locals>.<listcomp>)r   r   rI   r   rJ   r   r   r   r   r   r   rD   rK   r#   r   r#   r   r     s    
z SharedPtrMethodsMatcher.__init__c                 C   sR   t d|jsd S | j|}|d ks,|js0d S ||d}||rN|S d S )Nz^std::(__\d+::)?shared_ptr<.*>$r   r   r   r   r   r   rM     s    
zSharedPtrMethodsMatcher.matchNrV   r   r   r   r   r     s   r   c                 C   s  t j| t  t j| t  t j| t  t j| t  t j| t  t j| td t j| td t j| td t j| td t j| td t j| td t j| td t j| td t j| t	  t j| t
  d S )	Nsetmapmultisetmultimapunordered_setunordered_mapunordered_multisetunordered_multimap)r   r   register_xmethod_matcherr;   r   rp   r   r   r   r   r   )locusr   r   r   register_libstdcxx_xmethods  sN            r   )<r   gdb.xmethodrL   rJ   r	   r
   r   r   r   XMethodWorkerr   r!   r+   r/   r4   r6   r:   rI   r;   rW   re   rg   ri   rj   rm   ro   rp   rt   ry   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   r   r   r   r   r   r   r   r   r   <module>   sn   	


	




'