Commit Graph

5 Commits

Author SHA1 Message Date
Aleric Inglewood
dd6f95cd33 Make AIList resilient against invalidating iterators.
This adds a counter and a 'dead' flag to the data stored in the linked
list. The counter counts the number of iterators (still) pointing to an
element and the dead flag is set to indicate the element was erased when
iterators are still pointing to it. As a result, iterators are NEVER
invalidated. Of course, such elements are subsequentially skipped when
iterating over the list. Assertions protect against dereferencing an
erased iterator, but incrementing or decremention still works: it is
still well-defined what the next (non erased) element is, assuming the
element wasn't erased (yet), but would be erased delayed - or assuming
the iterator would have been incremented (decremented) in advance to
erasing the element.
2013-02-08 17:28:22 +01:00
Aleric Inglewood
baab1d81a7 Wrap LLView::child_list_t in a class AIList.
So far not doing anything. Iterators already keep a pointer to the
container they belong to.
2013-02-08 17:28:21 +01:00
Aleric Inglewood
ea114986be Use viewList_t and child_list_t in appropriate places.
Both types are currently the same, but soon they will be made different.
Currently they are used a bit mixed up. This patch fixes that.
2013-02-08 17:28:21 +01:00
Shyotl
30b1bd7abb Sanity checks, bugfixes, crashfixes, and misc tweaks snagged from snowglobe. 2011-03-01 20:13:05 -06:00
Hazim Gazov
7a86d01598 Imported existing code 2010-04-02 02:48:44 -03:00