diff options
-rw-r--r-- | src/dirdef.cpp | 10 | ||||
-rw-r--r-- | src/dirdef.h | 7 | ||||
-rw-r--r-- | src/groupdef.cpp | 3 |
3 files changed, 18 insertions, 2 deletions
diff --git a/src/dirdef.cpp b/src/dirdef.cpp index a89a9e6..597875f 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -1097,3 +1097,13 @@ bool compareDirDefs(const DirDef *item1, const DirDef *item2) { return qstricmp(item1->shortName(),item2->shortName()) < 0; } + +void sortInDirList(DirList& list, DirDef *const newItem) +{ + auto potentialSuccessor = list.begin(); + while (potentialSuccessor != list.cend() && compareDirDefs(*potentialSuccessor, newItem)) + { + potentialSuccessor++; + } + list.insert(potentialSuccessor, newItem); +} diff --git a/src/dirdef.h b/src/dirdef.h index 52af2d8..0d73dd3 100644 --- a/src/dirdef.h +++ b/src/dirdef.h @@ -41,6 +41,13 @@ typedef std::deque<DirDef*> DirList; /** Compare referenced objects. */ bool compareDirDefs(const DirDef *item1,const DirDef *item2); +/** + * Sorts the list by the result of the compareDirDefs() function. + * @param list in which item to be inserted + * @param newItem to be inserted + */ +void sortInDirList(DirList &list, DirDef *const newItem); + /** A model of a directory symbol. */ class DirDef : virtual public Definition { diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 5af1cbd..e2d5b12 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -332,8 +332,7 @@ void GroupDefImpl::addDir(const DirDef *def) if (def->isHidden()) return; if (Config_getBool(SORT_BRIEF_DOCS)) { - m_dirList->push_back(def); - m_dirList->sort(); + sortInDirList(*m_dirList, def); } else m_dirList->push_back(def); |