o
    Ýîi
  ã                   @   s~   d Z ddlZd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	ddd„Z
dS )z]A PoC that implements like 2% of the job of converting Spyne objects to
standard C++ classes.é    Nz    c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚObjectc                 C   s   d | _ d | _d | _d S ©N)ÚparentÚcomment_beforeÚcomment_after©Úself© r	   úQ/var/www/html/LicenciasMIG/venv/lib/python3.10/site-packages/spyne/util/gencpp.pyÚ__init__   s   
zObject.__init__c                 C   sž   | j d u rd S | d¡ | t| ¡ | d¡ | t| ¡ | d¡ | j  d¡D ]}| d¡ | |¡ | d¡ | t| ¡ q*| d¡ | d¡ d S )NÚ
ú/**
ú *ú ú */)r   ÚwriteÚINDENTÚsplit)r   ÚostrÚindentÚliner	   r	   r
   Ú_comment_before_to_stream!   s   







z Object._comment_before_to_streamc                 C   s¾   | j d u rd S | j  d¡}t|ƒdk r | d¡ | | j ¡ d S | t| ¡ | d¡ | t| ¡ | d¡ |D ]}| d¡ | |¡ | d¡ | t| ¡ q:| d¡ | d¡ d S )Nr   é   z  // r   r   r   r   )r   r   Úlenr   r   )r   r   r   Úlinesr   r	   r	   r
   Ú_comment_after_to_stream2   s"   







zObject._comment_after_to_streamN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r	   r	   r	   r
   r      s    r   c                       ó.   e Zd Zd‡ fdd„	Zdd„ Zdd„ Z‡  ZS )	ÚEntryNc                    ó   t t| ƒ ¡  || _d S r   )Úsuperr    r   Úmodifier)r   r#   ©Ú	__class__r	   r
   r   K   ó   
zEntry.__init__c                 C   ó   t ƒ ‚r   ©ÚNotImplemented©r   r   r   r	   r	   r
   Úto_decl_streamO   ó   zEntry.to_decl_streamc                 C   r'   r   r(   r*   r	   r	   r
   Úto_defn_streamR   r,   zEntry.to_defn_streamr   ©r   r   r   r   r+   r-   Ú__classcell__r	   r	   r$   r
   r    J   s    r    c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚLiteralc                    r!   r   )r"   r0   r   Úvalue)r   r1   r$   r	   r
   r   W   r&   zLiteral.__init__)r   r   r   r   r/   r	   r	   r$   r
   r0   V   s    r0   c                   @   s   e Zd Zdd„ ZdS )ÚStringLiteralc                 C   s<   |   ||¡ | d¡ | | j¡ | d¡ |  ||¡ d S )Nú")r   r   r1   r   r*   r	   r	   r
   Ú	to_stream]   s
   

zStringLiteral.to_streamN)r   r   r   r4   r	   r	   r	   r
   r2   \   s    r2   c                       r   )	Ú
DataMemberNc                    s&   t t| ƒ |¡ || _|| _|| _d S r   )r"   r5   r   ÚtypeÚnameÚinitializer)r   r#   r6   r7   r8   r$   r	   r
   r   h   s   
zDataMember.__init__c                 C   s”   |  t| ¡ | jd ur|  | j¡ |  d¡ |  | j¡ |  d¡ |  | j¡ | jdkr>| jd ur>|  d¡ | j ||¡ |  d¡ |  d¡ d S )Nr   Ústaticú = ú;r   )r   r   r#   r6   r7   r8   r4   r*   r	   r	   r
   r+   n   s   




zDataMember.to_decl_streamc                 C   sÜ   | j dkrd S |  ||¡ | t| ¡ | | j¡ | d¡ g }| j}|d ur5| d|¡ |j}|d us(|D ]}| |j¡ | d¡ q7| | j¡ | jd ur\| d¡ | j 	||¡ | d¡ | d¡ |  
||¡ d S )Nr9   r   r   z::r:   r;   r   )r#   r   r   r   r6   r   Úinsertr7   r8   r4   r   )r   r   r   Úparentsr   r	   r	   r
   r-   ~   s,   

þ



zDataMember.to_defn_streamr   r.   r	   r	   r$   r
   r5   g   s    r5   c                       s0   e Zd Z‡ fdd„Zddd„Zddd„Z‡  ZS )	ÚClassc                    s6   t t| ƒ ¡  d | _d | _d| _g | _g | _g | _d S )NÚclass)	r"   r>   r   r7   Ú	namespacer6   Úpublic_entriesÚprotected_entriesÚprivate_entriesr   r$   r	   r
   r       s   
zClass.__init__r   c                 C   sf  | j d ur| d¡ | | j ¡ | d¡ | t| ¡ | d| j| jf ¡ t| jƒdkrM| t| ¡ | d¡ | jD ]
}| ||d ¡ q=| d¡ t| jƒdkrs| t| ¡ | d¡ | jD ]
}| ||d ¡ qc| d¡ t| j	ƒdkr™| t| ¡ | d	¡ | j	D ]
}| ||d ¡ q‰| d¡ | t| ¡ | d
¡ | j d ur±| d¡ d S d S )Nú
namespace ú {
z%s %s {
r   zpublic:
é   r   zprotected:
z	private:
z};
ú}
)
r@   r   r   r6   r7   r   rA   r+   rB   rC   ©r   r   r   Úer	   r	   r
   r+   ª   s:   













ÿzClass.to_decl_streamc                 C   s¸   | j d ur| d¡ | | j ¡ | d¡ t| jƒdkr(| jD ]}| ||¡ qt| jƒdkr;| jD ]}| ||¡ q2t| jƒdkrN| jD ]}| ||¡ qE| j d urZ| d¡ d S d S )NrD   rE   r   rG   )r@   r   r   rA   r-   rB   rC   rH   r	   r	   r
   r-   Î   s    






ÿzClass.to_defn_stream)r   r.   r	   r	   r$   r
   r>   Ÿ   s    

$r>   c                 C   s¾   |d u rt ƒ }tƒ }|  ¡ |_||_tƒ }d|_||_d|_|j |¡ |  	| ¡ 
¡ D ]\}}tdd|t|jjp9|ƒƒ}|jj|_||_|j |¡ q+| tj¡ tj d¡ | tj¡ d S )NÚKeyÚstructr9   zconst std::stringz



)Údictr>   Úget_type_namer7   r@   r   r6   rA   ÚappendÚget_flat_type_infoÚitemsr5   r2   Ú
AttributesÚsub_nameÚAnnotationsÚdocr   r+   ÚsysÚstdoutr   r-   )Úclsr@   Útype_mapÚoclsÚkeysÚkÚvÚmemberr	   r	   r
   Úgen_cpp_classã   s*   
þ
r^   )NN)Ú__doc__rU   r   Úobjectr   r    r0   r2   r5   r>   r^   r	   r	   r	   r
   Ú<module>   s   /8D