I am creating a simple SDL_Texture manager, and was wondering if the following code would work:

---
// 'list' is am assoc array of a struct containing a pointer and ref counter.
// max_list_length is set to 20 if it's ever found to be 0

// compact list
if(list.length == max_list_length){
        string to_remove;
        
        foreach(string st, entry; list){
                if(to_remove.length){
                        list.remove(to_remove);
                        to_remove = "";
                }
                if(entry.ref_count == 0){
                        to_remove = st;
                }
        }
        
        if(to_remove.length){
                list.remove(to_remove);
                to_remove = "";
        }
}

---

I previously kept track of the keys of all entries found to have a ref_count of 0, and ran over those to remove them in a while loop, but was wondering if this would work, only needing to run over the list once. If there's a faster, cleaner way to do this, please do explain.

Many thanks in advance.

Reply via email to