~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/_simple_set_pyx.pxd

Rename StaticTupleInterner => SimpleSet.

This is a bit more appropriate, because the internal data type is not
specialized into StaticTuple objects only. Partially because I didn't
see a specific memory/speed tradeoff to caching the hash, and
that accessing said hash was siginficantly faster than just
calling PyObject_Hash().

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
 
"""Interface definition of a class to intern StaticTuple objects."""
 
17
"""Interface definition of a class like PySet but without caching the hash.
 
18
 
 
19
This is generally useful when you want to 'intern' objects, etc. Note that this
 
20
differs from Set in that we:
 
21
  1) Don't have all of the .intersection, .difference, etc functions
 
22
  2) Do return the object from the set via queries
 
23
     eg. SimpleSet.add(key) => saved_key and SimpleSet[key] => saved_key
 
24
"""
18
25
 
19
26
cdef extern from "python-compat.h":
20
27
    ctypedef long Py_ssize_t
23
30
    ctypedef struct PyObject:
24
31
        pass
25
32
 
26
 
cdef public api class StaticTupleInterner [object StaticTupleInternerObject,
27
 
                                           type StaticTupleInterner_type]:
 
33
cdef public api class SimpleSet [object SimpleSetObject, type SimpleSet_Type]:
 
34
    """A class similar to PySet, but with simpler implementation.
 
35
 
 
36
    The main advantage is that this class uses only 2N memory to store N
 
37
    objects rather than 4N memory. The main trade-off is that we do not cache
 
38
    the hash value of saved objects. As such, it is assumed that computing the
 
39
    hash will be cheap (such as strings or tuples of strings, etc.)
 
40
 
 
41
    This also differs in that you can get back the objects that are stored
 
42
    (like a dict), but we also don't implement the complete list of 'set'
 
43
    operations (difference, intersection, etc).
 
44
    """
28
45
 
29
46
    cdef readonly Py_ssize_t used    # active
30
47
    cdef readonly Py_ssize_t fill    # active + dummy
41
58
 
42
59
# TODO: might want to export the C api here, though it is all available from
43
60
#       the class object...
44
 
cdef api object StaticTupleInterner_Add(object self, object key)
 
61
cdef api object SimpleSet_Add(object self, object key)