> > > So I was thinking, what would be the SAFEST way to implement linked > > lists, and to iterate through the list without losing place, when there > > is the chance that the current, previous, next, or any other item in the > > list could be removed in mid-iteration.... > The method below with the "dirty" flag would be the best method for this. > I have used a method before called tombstoning. It works in the following > manner: If you want something to be considered removed from the list, set > one of the values to a value it won't take on under normal circumstances. > '-1' is a good value. If you are trying to read from the list and > encounter a tombstone, just skip it. Now, if you are afraid of having to > many tombstones, just write a procedure to remove tombstones when safe to > do so. Otherwise, you can just insert over the top of things that have > been tombstoned. Beat me to it - was going to say - instead of freeing within the list, just set a value to one that doesn't make sense. The next time you run through that list, immediately before it, run a cleaning function that frees up and re-orders the list. PjD +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST