Alfredo Braunstein wrote:
Abdelrazak Younes wrote:
I am OK with it but maybe the real problem is why getInset is so slow?
Looking at InsetList::insetIterator(pos_type pos), this is no wonder
really:
InsetList::iterator InsetList::insetIterator(pos_type pos)
{
InsetTable search_elem(pos, 0);
return lower_bound(list_.begin(), list_.end(), search_elem,
InsetTablePosLess());
}
InsetTable is basically 'pair<pos, Inset*>', so this InsetList is
basically reimplementing std::map in a less efficient way. Just
Are you sure it's less efficient?
No, that was just a guess.
AFAICS this is O(ln n) just like std::map,
constants may vary (in one side or the other).
replacing the 'vector<InsetTable>' with a 'map<pos, Inset*>' will clean
halves the code. And then you could just use the standard map iterator
anywhere it makes sense; and I bet there is a lot of case were it make
sense:
The code will be a bit cleaner maybe...
For sure ;-)
but it is self-contained and clean
enough, and has been working flawlessly for ages... so be sure there is
really a gain if you are going to switch.
I am not proposing to switch before 1.5.0 but I might implement it just
for fun and ask Stefan to try it out with Shark ;-)
Abdel.