11bd9d9 performance: faster DN implementation

Authored and Committed by pvoborni 9 years ago
    performance: faster DN implementation
    
    DN code was optimized to be faster if DNs are created from string. This is
    the major use case, since most DNs come from LDAP.
    
    With this patch, DN creation is almost 8-10x faster (with 30K-100K DNs).
    
    Second mojor use case - deepcopy in LDAPEntry is about 20x faster - done by
    custom __deepcopy__ function.
    
    The major change is that DN is no longer internally composed  of RDNs and
    AVAs but it rather keeps the data in open ldap format - the same as output
    of str2dn function. Therefore, for immutable DNs, no other transformations
    are required on instantiation.
    
    The format is:
    
    DN: [RDN, RDN,...]
    RDN: [AVA, AVA,...]
    AVA: ['utf-8 encoded str - attr', 'utf-8 encode str -value', FLAG]
    FLAG: int
    
    Further indexing of DN object constructs an RDN which is just an encapsulation
    of the RDN part of open ldap representation. Indexing of RDN constructs AVA in
    the same fashion.
    
    Obtained EditableAVA, EditableRDN from EditableDN shares the respected lists
    of the open ldap repr. so that the change of value or attr is reflected in
    parent object.
    
    Reviewed-By: Petr Viktorin <pviktori@redhat.com>
    
        
file modified
+294 -297