From ddace4b7aeb7bb5b9008fa6879696b3443fe6a98 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 2 May 2015 15:53:19 +0000 Subject: code cleaning git-svn-id: http://svn.miranda-ng.org/main/trunk@13376 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/UserInfoEx/src/mir_contactqueue.cpp | 318 +++++++++------------------- 1 file changed, 100 insertions(+), 218 deletions(-) (limited to 'plugins/UserInfoEx/src/mir_contactqueue.cpp') diff --git a/plugins/UserInfoEx/src/mir_contactqueue.cpp b/plugins/UserInfoEx/src/mir_contactqueue.cpp index c7c2e8da97..d07cc07213 100644 --- a/plugins/UserInfoEx/src/mir_contactqueue.cpp +++ b/plugins/UserInfoEx/src/mir_contactqueue.cpp @@ -20,31 +20,20 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "commonheaders.h" -/** - * This static helper function is used to sort the queue items by time - * beginning with the next upcoming item to call the Callback for. - * - * @param i1 - the first queue item - * @param i2 - the second queue item - * - * @return The function returns the time slack between the two items. - **/ static int QueueSortItems(const CQueueItem *i1, const CQueueItem *i2) { int rc = i1->check_time - i2->check_time; if (!rc) - { rc = i1->hContact != i2->hContact; - } + return rc; } -/** - * - * - **/ -CContactQueue::CContactQueue(int initialSize) - : _queue(initialSize, QueueSortItems) +///////////////////////////////////////////////////////////////////////////////////////// +// Constructor & destructor + +CContactQueue::CContactQueue(int initialSize) : + _queue(initialSize, QueueSortItems) { _hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); _status = RUNNING; @@ -52,38 +41,32 @@ CContactQueue::CContactQueue(int initialSize) mir_forkthread((pThreadFunc)CContactQueue::ThreadProc, this); } -/** - * - * - **/ CContactQueue::~CContactQueue() { if (_status == RUNNING) - { _status = STOPPING; - } + SetEvent(_hEvent); for (int count = 0; _status != STOPPED && ++count < 50;) - { Sleep(10); - } for (int i = 0; i < _queue.getCount(); i++) - { mir_free(_queue[i]); - } CloseHandle(_hEvent); } -/** - * This function removes all queue items. - * - * @param none - * - * @return nothing - **/ +void CContactQueue::Remove(int idx) +{ + CQueueItem *qi = _queue[idx]; + _queue.remove(idx); + mir_free(qi); +} + +///////////////////////////////////////////////////////////////////////////////////////// +// This function removes all queue items. + void CContactQueue::RemoveAll() { mir_cslock lck(_cs); @@ -93,275 +76,174 @@ void CContactQueue::RemoveAll() _queue.destroy(); } -/** - * This function removes all queue items for the hContact. - * - * @param hContact - the contact whose queue items to delete - * - * @return nothing - **/ +///////////////////////////////////////////////////////////////////////////////////////// +// This function removes all queue items for the hContact. + void CContactQueue::RemoveAll(MCONTACT hContact) { mir_cslock lck(_cs); - for (int i = _queue.getCount() - 1; i >= 0; --i) - { + for (int i = _queue.getCount() - 1; i >= 0; --i) { CQueueItem *qi = _queue[i]; - - if (qi->hContact == hContact) - { + if (qi->hContact == hContact) { _queue.remove(i); mir_free(qi); } } } -/** - * This function removes all queue items for the hContact considering the correct parameter. - * - * @param hContact - the contact whose queue items to delete - * @param param - a caller defined parameter passed to the callback function - * - * @return nothing - **/ +///////////////////////////////////////////////////////////////////////////////////////// +// This function removes all queue items for the hContact considering the correct parameter. + void CContactQueue::RemoveAllConsiderParam(MCONTACT hContact, PVOID param) { mir_cslock lck(_cs); - for (int i = _queue.getCount() - 1; i >= 0; --i) - { + for (int i = _queue.getCount() - 1; i >= 0; --i) { CQueueItem *qi = _queue[i]; - - if (qi->hContact == hContact && qi->param == param) - { + if (qi->hContact == hContact && qi->param == param) { _queue.remove(i); mir_free(qi); } } } -/** - * This method adds the desired new item. - * - * @param waitTime - the time to wait until the callback is desired to run - * @param hContact - the contact to perform the action for - * @param param - a caller defined parameter passed to the callback function - * - * @retval TRUE - The item is added to the queue successfully. - * @retval FALSE - The item is not added to the queue. - **/ +///////////////////////////////////////////////////////////////////////////////////////// +// This method adds the desired new item. + BOOL CContactQueue::Add(int waitTime, MCONTACT hContact, PVOID param) { - BOOL rc; - mir_cslock lck(_cs); - - rc = InternalAdd(waitTime, hContact, param); - - return rc; + return InternalAdd(waitTime, hContact, param); } -/** - * This method adds the desired new item only, if the queue does not yet contain - * an item for the contact. - * - * @param waitTime - the time to wait until the callback is desired to run - * @param hContact - the contact to perform the action for - * @param param - a caller defined parameter passed to the callback function - * - * @retval TRUE - The item is added to the queue successfully. - * @retval FALSE - The item is not added to the queue. - **/ +///////////////////////////////////////////////////////////////////////////////////////// +// This method adds the desired new item only, if the queue does not yet contain +// an item for the contact. + BOOL CContactQueue::AddIfDontHave(int waitTime, MCONTACT hContact, PVOID param) { - int i; - BOOL rc; - mir_cslock lck(_cs); - for (i = _queue.getCount() - 1; i >= 0; --i) - { + for (int i = _queue.getCount() - 1; i >= 0; --i) if (_queue[i]->hContact == hContact) - { - break; - } - } - - rc = (i == -1) ? InternalAdd(waitTime, hContact, param) : 0; + return FALSE; - return rc; + return InternalAdd(waitTime, hContact, param); } -/** - * This method removes all existing queue items for the contact and adds a new queue item - * for the given contact. This method might be used to move an existing entry, - * whose check_time has changed. - * - * @param waitTime - the time to wait until the callback is desired to run - * @param hContact - the contact to perform the action for - * @param param - a caller defined parameter passed to the callback function - * - * @retval TRUE - The item is added to the queue successfully. - * @retval FALSE - The item is not added to the queue. - **/ +///////////////////////////////////////////////////////////////////////////////////////// +// This method removes all existing queue items for the contact and adds a new queue item +// for the given contact. This method might be used to move an existing entry, +// whose check_time has changed. + BOOL CContactQueue::AddUnique(int waitTime, MCONTACT hContact, PVOID param) { - BOOL rc; - mir_cslock lck(_cs); RemoveAll(hContact); - rc = InternalAdd(waitTime, hContact, param); - - return rc; + return InternalAdd(waitTime, hContact, param); } -/** - * This method removes all existing queue items for the contact with the same parameter as @e param - * and adds a new queue item for the given contact. This method might be used to move an existing - * entry, whose check_time has changed. - * - * @param waitTime - the time to wait until the callback is desired to run - * @param hContact - the contact to perform the action for - * @param param - a caller defined parameter passed to the callback function - * - * @retval TRUE - The item is added to the queue successfully. - * @retval FALSE - The item is not added to the queue. - **/ +///////////////////////////////////////////////////////////////////////////////////////// +// This method removes all existing queue items for the contact with the same parameter as @e param +// and adds a new queue item for the given contact. This method might be used to move an existing +// entry, whose check_time has changed. + BOOL CContactQueue::AddUniqueConsiderParam(int waitTime, MCONTACT hContact, PVOID param) { - BOOL rc; - mir_cslock lck(_cs); RemoveAllConsiderParam(hContact, param); - rc = InternalAdd(waitTime, hContact, param); - - return rc; + return InternalAdd(waitTime, hContact, param); } -/** - * This member function really adds an item into the time sorted queue list. - * - * @param waitTime - the time to wait until the callback is desired to run - * @param hContact - the contact to perform the action for - * @param param - a caller defined parameter passed to the callback function - * - * @retval TRUE - The item is added to the queue successfully. - * @retval FALSE - The item is not added to the queue. - **/ +///////////////////////////////////////////////////////////////////////////////////////// +// This member function really adds an item into the time sorted queue list. + BOOL CContactQueue::InternalAdd(int waitTime, MCONTACT hContact, PVOID param) { - BOOL rc; CQueueItem *qi = (CQueueItem *) mir_alloc(sizeof(CQueueItem)); - qi->hContact = hContact; qi->check_time = GetTickCount() + waitTime; qi->param = param; - rc = _queue.insert(qi); + int rc = _queue.insert(qi); if (!rc) - { mir_free(qi); - } SetEvent(_hEvent); - return rc; } -/** - * This is the real thread callback function. As long as _status - * is set to RUNNING it looks for items in the queue to perform - * the _pfnCallback function on them. If the queue is empty or the - * next upcoming item is located in the future, the thread is suspended - * in the meanwhile. - * - * @param none - * - * @return nothing - **/ +///////////////////////////////////////////////////////////////////////////////////////// +// This is the real thread callback function. As long as _status +// is set to RUNNING it looks for items in the queue to perform +// the _pfnCallback function on them. If the queue is empty or the +// next upcoming item is located in the future, the thread is suspended +// in the meanwhile. + void CContactQueue::Thread() { - while (_status == RUNNING) - { + while (_status == RUNNING) { ResetEvent(_hEvent); - mir_cslock lck(_cs); + mir_cslockfull lck(_cs); - if (_queue.getCount() <= 0) - { + if (_queue.getCount() <= 0) { // can be used by a derivant OnEmpty(); + lck.unlock(); Suspend(INFINITE); + continue; } - else - { - // Take a look at first queue item - CQueueItem *qi = _queue[0]; - - int dt = qi->check_time - GetTickCount(); - if (dt > 0) - { - Suspend(dt); - } - else - { - // Will request this queue item - _queue.remove(0); - - Callback(qi->hContact, qi->param); - - mir_free(qi); - } + + // Take a look at first queue item + CQueueItem *qi = _queue[0]; + + int dt = qi->check_time - GetTickCount(); + if (dt > 0) { + lck.unlock(); + Suspend(dt); + continue; } + + // Will request this queue item + _queue.remove(0); + lck.unlock(); + + Callback(qi->hContact, qi->param); + mir_free(qi); } _status = STOPPED; } -/** - * This method suspends the worker thread for the given ammount of time. - * - * @param time - milliseconds to suspend the thread for - * - * @return nothing - **/ +///////////////////////////////////////////////////////////////////////////////////////// +// This method suspends the worker thread for the given ammount of time. + void CContactQueue::Suspend(int time) const { if (_status == RUNNING) - { WaitForSingleObject(_hEvent, time); - } } -/** - * This method resumes the worker thread and immitiatly goes on with the next entry. - * - * @param none - * - * @return nothing - **/ +///////////////////////////////////////////////////////////////////////////////////////// +// This method resumes the worker thread and immitiatly goes on with the next entry. + void CContactQueue::ContinueWithNext() { - if (_status == RUNNING) - { - int i, c, dt; - - mir_cslock lck(_cs); - - c = _queue.getCount(); - if (c > 0) - { - dt = _queue[0]->check_time - GetTickCount() - 3000; - if (dt > 0) - { - for (i = 0; i < c; i++) - { - _queue[i]->check_time -= dt; - } - } - } - SetEvent(_hEvent); + if (_status != RUNNING) + return; + + mir_cslock lck(_cs); + + int c = _queue.getCount(); + if (c > 0) { + int dt = _queue[0]->check_time - GetTickCount() - 3000; + if (dt > 0) + for (int i = 0; i < c; i++) + _queue[i]->check_time -= dt; } + SetEvent(_hEvent); } -- cgit v1.2.3