~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/index.py

  • Committer: Robert Collins
  • Date: 2007-07-15 04:53:53 UTC
  • mto: (2592.3.29 repository)
  • mto: This revision was merged to the branch mainline in revision 2624.
  • Revision ID: robertc@robertcollins.net-20070715045353-27opxm5h91ez0fjs
Remove some unneeded index iteration by checking if we have found all keys, and grammar improvements from Aaron's review.

Show diffs side-by-side

added added

removed removed

Lines of Context:
67
67
    def add_node(self, key, references, value):
68
68
        """Add a node to the index.
69
69
 
70
 
        :param key: The key. keys must be whitespace free utf8.
 
70
        :param key: The key. keys must be whitespace-free utf8.
71
71
        :param references: An iterable of iterables of keys. Each is a
72
72
            reference to another key.
73
73
        :param value: The value to associate with the key. It may be any
180
180
 
181
181
    It is presumed that the index will not be mutated - it is static data.
182
182
 
183
 
    Currently successive iter_entries/iter_all_entries calls will read the
184
 
    entire index each time. Additionally iter_entries calls will read the
185
 
    entire index always. XXX: This must be fixed before the index is 
 
183
    Successive iter_all_entries calls will read the entire index each time.
 
184
    Additionally, iter_entries calls will read the index linearly until the
 
185
    desired keys are found. XXX: This must be fixed before the index is
186
186
    suitable for production use. :XXX
187
187
    """
188
188
 
259
259
            efficient order for the index.
260
260
        """
261
261
        keys = set(keys)
 
262
        if not keys:
 
263
            return
262
264
        for node in self.iter_all_entries():
 
265
            if not keys:
 
266
                return
263
267
            if node[0] in keys:
264
268
                yield node
 
269
                keys.remove(node[0])
265
270
 
266
271
    def _signature(self):
267
272
        """The file signature for this index type."""
299
304
    def iter_all_entries(self):
300
305
        """Iterate over all keys within the index
301
306
 
 
307
        Duplicate keys across child indices are presumed to have the same
 
308
        value and are only reported once.
 
309
 
302
310
        :return: An iterable of (key, reference_lists, value). There is no
303
311
            defined order for the result iteration - it will be in the most
304
312
            efficient order for the index.
313
321
    def iter_entries(self, keys):
314
322
        """Iterate over keys within the index.
315
323
 
 
324
        Duplicate keys across child indices are presumed to have the same
 
325
        value and are only reported once.
 
326
 
316
327
        :param keys: An iterable providing the keys to be retrieved.
317
328
        :return: An iterable of (key, reference_lists, value). There is no
318
329
            defined order for the result iteration - it will be in the most
320
331
        """
321
332
        keys = set(keys)
322
333
        for index in self._indices:
 
334
            if not keys:
 
335
                return
323
336
            for node in index.iter_entries(keys):
324
337
                keys.remove(node[0])
325
338
                yield node