Changeset 184


Ignore:
Timestamp:
03/25/09 19:13:53 (3 years ago)
Author:
antonbatenev.ya.ru
Message:

Бранч. Завершена оптимизация постройки дерева сообщений.

Location:
branches/message_tree
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/message_tree/dev/doxygen.sh

    r119 r184  
    1313 
    1414doxygen doxygen/doxygen.conf 
     15 
     16kfmclient exec file:$(pwd)/doxygen/html/index.html 
  • branches/message_tree/message_tree.cpp

    r183 r184  
    645645                } 
    646646 
    647                 // постройка дерева 
     647                // постройка дерева, обход в ширину быстрее чем в высоту 
    648648                // ориентировочное время выполнения 900 ms (для топика 279396 - 5149 сообщений) 
    649                 // основное время уходит на попытку виджета отобразить все изменения 
    650                 // если построить дерево без подсоединения к корневому элементу, то это может 
    651                 // работать в 4-5 раз быстрее 
    652                 // TODO: Выяснить среднюю ширину и высоту дерева, чтобы улучшить алгоритм его обхода 
     649                // наиболее высокое дерево составляет 1555 сообщений (для топика 1099540) 
     650                // наиболее широкое дерево (глубина рекурсии) пока неизвестно 
    653651                buildTree(info, &list); 
    654652 
     
    665663void AMessageTree::buildTree (AMessageInfoGUI* root, AMessageInfoGUIPtrList* list) 
    666664{ 
     665        if (list->count() == 0) 
     666                return; 
     667 
     668        int list_index = 0; 
     669 
    667670        AGlobal* global = AGlobal::getInstance(); 
    668671 
    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()) 
    675673        { 
    676674                AMessageInfoGUI* info = list->at(list_index); 
     
    678676                if (info->IDParent == root->ID) 
    679677                { 
    680                         list_count--; 
    681  
    682678                        list->removeAt(list_index); 
    683  
    684                         if (info->HasChild) 
    685                                 child_list.append(info); 
    686679 
    687680                        info->IsInfoLoaded       = true; 
     
    762755                                info->Item->setIcon(0, m_message_read); 
    763756                        } 
     757 
     758                        // достройка дочерних веток для текущей 
     759                        if (info->HasChild) 
     760                                buildTree(info, list); 
    764761                } 
    765762                else   // if (info->ID == id_parent) 
     
    768765                } 
    769766        } 
    770  
    771         // достройка дочерних для каждого найденного 
    772         for (int i = 0; i < child_list.count(); i++) 
    773                 buildTree(child_list[i], list); 
    774767} 
    775768//---------------------------------------------------------------------------------------------- 
  • branches/message_tree/storage/istorage.h

    r183 r184  
    137137                /*! 
    138138                 * \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                 * 
    144152                 * \param id_forum ID форума, для которого запрашивается список топиков 
    145                  * (для ненулевого значения, будет произведено исключение одного лишнего преобразования из QVariant на каждый элемент, что положительно влияет на скорость) 
     153                 * (для ненулевого значения, будет произведено исключение одного лишнего преобразования из QVariant на каждый элемент, 
     154                 * что положительно влияет на скорость) 
    146155                 * \param list Список топиков (с установленным полем ID, по которому будет производиться дальнейшее заполнение информацией). 
    147156                 * \param id_me ID текущего пользователя avalon. 
     
    152161                /*! 
    153162                 * \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                 * 
    158173                 * \param id_forum ID форума, для которого запрашивается список топиков 
    159                  * (для ненулевого значения, будет произведено исключение одного лишнего преобразования из QVariant на каждый элемент, что положительно влияет на скорость) 
     174                 * (для ненулевого значения, будет произведено исключение одного лишнего преобразования из QVariant на каждый элемент, 
     175                 * что положительно влияет на скорость) 
    160176                 * \param id_topic ID топика (темы, родительской ветки). 
    161177                 * \param list Список сообщений (изначально пустой, на выходе заполненый _не_ включая сообщение id_topic). 
    162178                 * \param factory Фабрика для создания элементов (каждый элемент списка создается вызовом IMessageInfoGUIFactory::createItem), 
    163                  * поля (кроме Item) предполагаются заполненными значениями полей по умолчанию (см. AMessageInfoGUI::AMessageInfoGUI) и не меняются без необходимости. 
     179                 * поля (кроме Item) предполагаются заполненными значениями полей по умолчанию (см. AMessageInfoGUI::AMessageInfoGUI) 
     180                 * и не меняются без необходимости. 
    164181                 * \param progress Прогресс выполнения операции. 
    165182                 */ 
  • branches/message_tree/version.h

    r183 r184  
    2020 * \brief Дата билда (заменяется автоматически при каждом билде в version.h, что и приводит к смене номера ревизии) 
    2121 */ 
    22 #define AVALON_DATE "Срд Мар 25 06:37:09 MSK 2009" 
     22#define AVALON_DATE "Срд Мар 25 17:57:47 MSK 2009" 
    2323 
    2424#endif 
Note: See TracChangeset for help on using the changeset viewer.