Padraig O'Sullivan wrote: > On Tue, Feb 17, 2009 at 3:22 PM, Monty Taylor <[email protected]> wrote: >> Hey Padraig, >> >> I think you're moving in the right direction so far. Some things to >> think about: >> >> Perhaps if you did: >> >> class buffpek_compare >> { >> qsort_cmp2 key_compare; >> void *key_compare_arg; >> >> public: >> buffpek_compare(qsort_cmp2 in_key_compare, void* in_compare_arg) >> : key_compare(in_key_compare), key_compare_arg(in_compare_arg) { } >> inline bool operator()(BUFFPEK *i, BUFFPEK *j) >> { >> return key_compare(key_compare_arg, >> *((unsigned char **) i->key), *((unsigned >> char **) j->key)); >> } >> }; >> >> instead, you could remove the need for the extra Context struct, since >> your function object has its own way to store context. > > heh, that's interesting. I actually started moving towards the above > last night when I was working on this some more. > >> The next step being to get rid of buffpek_compare all together and >> replace the qsort_cmp2 that's passed in with a function object itself >> which could be directly handed to std::sort() or to priority_queue as >> its sort function param. >> >> resuse_freed_buff() looks more like memory management "cleverness" that >> would be unneeded if you used priority_queue in the first place. It >> sounds like you're guessing the same thing already - but good choice to >> take it slow and deal with it piece by piece. > > I've really been wanting to use a priority queue here as you said. The > one thing stopping me at the moment is the reuse_freed_buff() > function. I had guessed that the function was moving memory from an > element that has just been removed from the queue to other elements > still in the queue but I wasn't sure. Is that roughly what it does? > > If you think that reuse_freed_buff() will be un-needed if I switch to > a priority queue here then I might just start on that tonight. It > should be pretty straightforward to change what I have done now to use > a priority queue instead. Sound like a good idea?
Do it. It sounds like the reuse_freed_buff() is trying to do the same thing that the remove_if() algorithm does for vectors... but I think we're better off not doing this by hand once we've got priority_queue managing that behind the scenes. >> Where was the tree you had the changes in again? > > Its in lp:~posulliv/drizzle/code-cleanup-c++-replace-queue but I > havn't pushed my changes to it yet. I've been committing everything I > do to my local branch so I'll probably push it to launchpad when I get > things a little more cleaned up and am more confident in what I've > done. Let me know when it's in decent shape and I'll run some performance diffs on it. > Thanks for your input and taking the time to look at what I wrote! Thanks for the work. Monty _______________________________________________ Mailing list: https://launchpad.net/~drizzle-discuss Post to : [email protected] Unsubscribe : https://launchpad.net/~drizzle-discuss More help : https://help.launchpad.net/ListHelp

