Changeset 184
- Timestamp:
- 03/25/09 19:13:53 (3 years ago)
- Location:
- branches/message_tree
- Files:
-
- 4 edited
-
dev/doxygen.sh (modified) (1 diff)
-
message_tree.cpp (modified) (5 diffs)
-
storage/istorage.h (modified) (2 diffs)
-
version.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/message_tree/dev/doxygen.sh
r119 r184 13 13 14 14 doxygen doxygen/doxygen.conf 15 16 kfmclient exec file:$(pwd)/doxygen/html/index.html -
branches/message_tree/message_tree.cpp
r183 r184 645 645 } 646 646 647 // постройка дерева 647 // постройка дерева, обход в ширину быстрее чем в высоту 648 648 // ориентировочное время выполнения 900 ms (для топика 279396 - 5149 сообщений) 649 // основное время уходит на попытку виджета отобразить все изменения 650 // если построить дерево без подсоединения к корневому элементу, то это может 651 // работать в 4-5 раз быстрее 652 // TODO: Выяснить среднюю ширину и высоту дерева, чтобы улучшить алгоритм его обхода 649 // наиболее высокое дерево составляет 1555 сообщений (для топика 1099540) 650 // наиболее широкое дерево (глубина рекурсии) пока неизвестно 653 651 buildTree(info, &list); 654 652 … … 665 663 void AMessageTree::buildTree (AMessageInfoGUI* root, AMessageInfoGUIPtrList* list) 666 664 { 665 if (list->count() == 0) 666 return; 667 668 int list_index = 0; 669 667 670 AGlobal* global = AGlobal::getInstance(); 668 671 669 AMessageInfoGUIPtrList child_list; 670 671 int list_index = 0; 672 int list_count = list->count(); 673 674 while (list_index < list_count) 672 while (list_index < list->count()) 675 673 { 676 674 AMessageInfoGUI* info = list->at(list_index); … … 678 676 if (info->IDParent == root->ID) 679 677 { 680 list_count--;681 682 678 list->removeAt(list_index); 683 684 if (info->HasChild)685 child_list.append(info);686 679 687 680 info->IsInfoLoaded = true; … … 762 755 info->Item->setIcon(0, m_message_read); 763 756 } 757 758 // достройка дочерних веток для текущей 759 if (info->HasChild) 760 buildTree(info, list); 764 761 } 765 762 else // if (info->ID == id_parent) … … 768 765 } 769 766 } 770 771 // достройка дочерних для каждого найденного772 for (int i = 0; i < child_list.count(); i++)773 buildTree(child_list[i], list);774 767 } 775 768 //---------------------------------------------------------------------------------------------- -
branches/message_tree/storage/istorage.h
r183 r184 137 137 /*! 138 138 * \brief Заполняет информацию о топиках в форуме 139 * Поля списка (кроме ID и Item) предполагаются заполненными значениями полей по умолчанию (см. AMessageInfoGUI::AMessageInfoGUI) и не меняются без необходимости. 140 * Функция ДОЛЖНА заполнить все поля AMessageInfo плюс установить флаги IsRead, HasUnreadChild, HasUnreadChildMy в актуальные значения. 141 * Функция НЕ должна устанавливать флаг IsInfoLoaded (устанавливается вызвающим кодом). 142 * Функция МОЖЕТ оставить некоторые поля AMessageInfo, которые не используются в текущем GUI, незаполненными в целях оптимизации скорости работы - 143 * в этом случае они должны иметь значения по умолчанию (к таким полям, например, может относиться поле LastModerated и т.д.) 139 * 140 * Поля списка (кроме ID и Item) предполагаются заполненными значениями полей по умолчанию (см. AMessageInfoGUI::AMessageInfoGUI) 141 * и не меняются без необходимости. 142 * 143 * Функция ДОЛЖНА заполнить все поля AMessageInfo плюс установить флаги AMessageInfoGUI::IsRead, AMessageInfoGUI::HasUnreadChild, 144 * AMessageInfoGUI::HasUnreadChildMy в актуальные значения. 145 * 146 * Функция НЕ должна устанавливать флаг AMessageInfoGUI::IsInfoLoaded (устанавливается вызвающим кодом). 147 * 148 * Функция МОЖЕТ оставить некоторые поля AMessageInfo, которые не используются в текущем GUI, незаполненными в целях оптимизации 149 * скорости работы - в этом случае они должны иметь значения по умолчанию (к таким полям, например, может относиться поле 150 * AMessageInfo::LastModerated и т.д.) 151 * 144 152 * \param id_forum ID форума, для которого запрашивается список топиков 145 * (для ненулевого значения, будет произведено исключение одного лишнего преобразования из QVariant на каждый элемент, что положительно влияет на скорость) 153 * (для ненулевого значения, будет произведено исключение одного лишнего преобразования из QVariant на каждый элемент, 154 * что положительно влияет на скорость) 146 155 * \param list Список топиков (с установленным полем ID, по которому будет производиться дальнейшее заполнение информацией). 147 156 * \param id_me ID текущего пользователя avalon. … … 152 161 /*! 153 162 * \brief Заполняет информацию о всех сообщениях в топике (родительской ветке). 154 * Функция ДОЛЖНА заполнить все поля AMessageInfo плюс установить флаги IsRead, HasChild в актуальные значения. 155 * Функция НЕ должна устанавливать флаг IsInfoLoaded (устанавливается вызвающим кодом). 156 * Функция МОЖЕТ оставить некоторые поля AMessageInfo, которые не используются в текущем GUI, незаполненными в целях оптимизации скорости работы - 157 * в этом случае они должны иметь значения по умолчанию (к таким полям, например, может относиться поле LastModerated и т.д.) 163 * 164 * Функция ДОЛЖНА заполнить все поля AMessageInfo плюс установить флаги AMessageInfoGUI::IsRead, AMessageInfo::HasChild в актуальные 165 * значения. 166 * 167 * Функция НЕ должна устанавливать флаг AMessageInfoGUI::IsInfoLoaded (устанавливается вызвающим кодом). 168 * 169 * Функция МОЖЕТ оставить некоторые поля AMessageInfo, которые не используются в текущем GUI, незаполненными в целях оптимизации 170 * скорости работы - в этом случае они должны иметь значения по умолчанию (к таким полям, например, может относиться поле 171 * AMessageInfo::LastModerated и т.д.) 172 * 158 173 * \param id_forum ID форума, для которого запрашивается список топиков 159 * (для ненулевого значения, будет произведено исключение одного лишнего преобразования из QVariant на каждый элемент, что положительно влияет на скорость) 174 * (для ненулевого значения, будет произведено исключение одного лишнего преобразования из QVariant на каждый элемент, 175 * что положительно влияет на скорость) 160 176 * \param id_topic ID топика (темы, родительской ветки). 161 177 * \param list Список сообщений (изначально пустой, на выходе заполненый _не_ включая сообщение id_topic). 162 178 * \param factory Фабрика для создания элементов (каждый элемент списка создается вызовом IMessageInfoGUIFactory::createItem), 163 * поля (кроме Item) предполагаются заполненными значениями полей по умолчанию (см. AMessageInfoGUI::AMessageInfoGUI) и не меняются без необходимости. 179 * поля (кроме Item) предполагаются заполненными значениями полей по умолчанию (см. AMessageInfoGUI::AMessageInfoGUI) 180 * и не меняются без необходимости. 164 181 * \param progress Прогресс выполнения операции. 165 182 */ -
branches/message_tree/version.h
r183 r184 20 20 * \brief Дата билда (заменяется автоматически при каждом билде в version.h, что и приводит к смене номера ревизии) 21 21 */ 22 #define AVALON_DATE "Срд Мар 25 06:37:09MSK 2009"22 #define AVALON_DATE "Срд Мар 25 17:57:47 MSK 2009" 23 23 24 24 #endif
Note: See TracChangeset
for help on using the changeset viewer.
