~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/cache_utf8.py

  • Committer: John Arbash Meinel
  • Date: 2006-11-29 17:16:58 UTC
  • mto: This revision was merged to the branch mainline in revision 2156.
  • Revision ID: john@arbash-meinel.com-20061129171658-uwphkz5ntsb7bv0r
(Dmitry Vasiliev) pre-lookup encoders to improve performance

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 
20
20
"""Some functions to enable caching the conversion between unicode to utf8"""
21
21
 
 
22
import codecs
 
23
 
 
24
 
 
25
_utf8_encode = codecs.getencoder("utf-8")
 
26
_utf8_decode = codecs.getdecoder("utf-8")
22
27
 
23
28
# Map revisions from and to utf8 encoding
24
29
# Whenever we do an encode/decode operation, we save the result, so that
29
34
 
30
35
def encode(unicode_str,
31
36
           _uni_to_utf8=_unicode_to_utf8_map,
32
 
           _utf8_to_uni=_utf8_to_unicode_map):
 
37
           _utf8_to_uni=_utf8_to_unicode_map,
 
38
           _utf8_encode=_utf8_encode):
33
39
    """Take this unicode revision id, and get a unicode version"""
34
40
    # If the key is in the cache try/KeyError is 50% faster than
35
41
    # val = dict.get(key), if val is None:
42
48
    try:
43
49
        return _uni_to_utf8[unicode_str]
44
50
    except KeyError:
45
 
        _uni_to_utf8[unicode_str] = utf8_str = unicode_str.encode('utf-8')
 
51
        _uni_to_utf8[unicode_str] = utf8_str = _utf8_encode(unicode_str)[0]
46
52
        _utf8_to_uni[utf8_str] = unicode_str
47
53
        return utf8_str
48
54
 
49
55
 
50
56
def decode(utf8_str,
51
57
           _uni_to_utf8=_unicode_to_utf8_map,
52
 
           _utf8_to_uni=_utf8_to_unicode_map):
 
58
           _utf8_to_uni=_utf8_to_unicode_map,
 
59
           _utf8_decode=_utf8_decode):
53
60
    """Take a utf8 revision id, and decode it, but cache the result"""
54
61
    try:
55
62
        return _utf8_to_uni[utf8_str]
56
63
    except KeyError:
57
 
        _utf8_to_uni[utf8_str] = unicode_str = utf8_str.decode('utf-8')
 
64
        _utf8_to_uni[utf8_str] = unicode_str = _utf8_decode(utf8_str)[0]
58
65
        _uni_to_utf8[unicode_str] = utf8_str
59
66
        return unicode_str
60
67
 
73
80
 
74
81
def clear_encoding_cache():
75
82
    """Clear the encoding and decoding caches"""
76
 
    global _unicode_to_utf8_map, _utf8_to_unicode_map
77
83
    _unicode_to_utf8_map.clear()
78
84
    _utf8_to_unicode_map.clear()
79