Add GHash/GSet pop() feature.
authorBastien Montagne <montagne29@wanadoo.fr>
Sat, 20 Feb 2016 14:17:40 +0000 (15:17 +0100)
committerBastien Montagne <montagne29@wanadoo.fr>
Sat, 20 Feb 2016 14:28:25 +0000 (15:28 +0100)
commitfe9b21a44ad25f068da88f6e12b60c1486be3605
treef2ff785c3a59efa3f756ba0042262b332a0930d9
parent90e77c871b771ad9df23c3e3c9b255d75c409b60
Add GHash/GSet pop() feature.

Behavior is similar to python's set.pop(), it removes and returns a 'random' entry from the hash.

Notes:
* Popping will return items in same order as ghash/gset iterators (i.e. increasing
  order in internal buckets-based storage), unless ghash/gset is modified in between.
* We are keeping a track of the latest bucket we popped out (through a 'state' parameter),
  this allows for similar performances to iterators when iteratively popping a whole hash
  (without it, we are roughly O(n!), with it we are roughly O(n)...).

Reviewers: campbellbarton

Differential Revision: https://developer.blender.org/D1808
source/blender/blenlib/BLI_ghash.h
source/blender/blenlib/intern/BLI_ghash.c
tests/gtests/blenlib/BLI_ghash_performance_test.cc
tests/gtests/blenlib/BLI_ghash_test.cc