LogHandlerList.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include "LogHandlerList.hpp"
  14. #include <LogHandler.hpp>
  15. //
  16. // PUBLIC
  17. //
  18. LogHandlerList::LogHandlerList() :
  19.   m_size(0),
  20.   m_pHeadNode(NULL),
  21.   m_pTailNode(NULL),
  22.   m_pCurrNode(NULL)
  23. {
  24. }
  25. LogHandlerList::~LogHandlerList()
  26. {
  27.   removeAll();
  28. }
  29. void 
  30. LogHandlerList::add(LogHandler* pNewHandler)
  31. {
  32.   LogHandlerNode* pNode = new LogHandlerNode();
  33.   if (m_pHeadNode == NULL) 
  34.   {
  35.     m_pHeadNode = pNode;
  36.     pNode->pPrev = NULL;
  37.   }
  38.   else 
  39.   {
  40.     m_pTailNode->pNext = pNode;
  41.     pNode->pPrev = m_pTailNode;
  42.   }
  43.   m_pTailNode = pNode;
  44.   pNode->pNext = NULL;  
  45.   pNode->pHandler = pNewHandler;
  46.   m_size++;
  47. }
  48. bool
  49. LogHandlerList::remove(LogHandler* pRemoveHandler)
  50. {
  51.   LogHandlerNode* pNode = m_pHeadNode;
  52.   bool removed = false;
  53.   do
  54.   {
  55.     if (pNode->pHandler == pRemoveHandler)
  56.     {
  57.       removeNode(pNode);
  58.       removed = true;
  59.       break;
  60.     }
  61.   } while ( (pNode = next(pNode)) != NULL);
  62.   return removed;
  63. }
  64. void 
  65. LogHandlerList::removeAll()
  66. {
  67.   while (m_pHeadNode != NULL)
  68.   {
  69.     removeNode(m_pHeadNode);
  70.   }
  71. }
  72. LogHandler* 
  73. LogHandlerList::next()
  74. {
  75.   LogHandler* pHandler = NULL;
  76.   if (m_pCurrNode == NULL)
  77.   {
  78.     m_pCurrNode = m_pHeadNode;
  79.     if (m_pCurrNode != NULL)
  80.     {
  81.       pHandler = m_pCurrNode->pHandler;
  82.     }
  83.   }
  84.   else
  85.   {
  86.     m_pCurrNode = next(m_pCurrNode); // Next node    
  87.     if (m_pCurrNode != NULL)
  88.     {
  89.       pHandler = m_pCurrNode->pHandler;
  90.     }
  91.   }
  92.  
  93.   return pHandler;
  94. }
  95. int 
  96. LogHandlerList::size() const
  97. {
  98.   return m_size;
  99. }
  100. //
  101. // PRIVATE
  102. //
  103. LogHandlerList::LogHandlerNode* 
  104. LogHandlerList::next(LogHandlerNode* pNode)
  105. {
  106.   LogHandlerNode* pCurr = pNode;
  107.   if (pNode->pNext != NULL) 
  108.   {
  109.     pCurr = pNode->pNext;
  110.   }
  111.   else
  112.   {
  113.     // Tail
  114.     pCurr = NULL;    
  115.   }
  116.   return pCurr;
  117. }
  118. LogHandlerList::LogHandlerNode* 
  119. LogHandlerList::prev(LogHandlerNode* pNode)
  120. {
  121.   LogHandlerNode* pCurr = pNode;
  122.   if (pNode->pPrev != NULL) // head
  123.   {
  124.     pCurr = pNode->pPrev;
  125.   }
  126.   else
  127.   {
  128.     // Head
  129.     pCurr = NULL;
  130.   }
  131.   return pCurr;
  132. }
  133. void
  134. LogHandlerList::removeNode(LogHandlerNode* pNode)
  135. {
  136.   if (pNode->pPrev == NULL) // If head
  137.   {
  138.     m_pHeadNode = pNode->pNext;
  139.   }
  140.   else 
  141.   {
  142.     pNode->pPrev->pNext = pNode->pNext;
  143.   }
  144.   if (pNode->pNext == NULL) // if tail
  145.   {
  146.     m_pTailNode = pNode->pPrev;
  147.   }
  148.   else
  149.   {
  150.     pNode->pNext->pPrev = pNode->pPrev;
  151.   }
  152.   pNode->pNext = NULL;
  153.   pNode->pPrev = NULL;
  154.   delete pNode->pHandler; // Delete log handler
  155.   delete pNode; 
  156.   m_size--;
  157. }