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

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. #ifndef GCI_BUFFER_HPP
  14. #define GCI_BUFFER_HPP
  15. #include "GCIPage.hpp"
  16. #include <Vector.hpp>
  17. #include <TransporterDefinitions.hpp>
  18. #include <signaldata/RepImpl.hpp>
  19. /**
  20.  * @class GCIBuffer
  21.  * @brief A GCIBuffer contains pages containing log records for ONE gci.
  22.  *
  23.  * @todo Load and save to disk
  24.  */
  25. class GCIBuffer 
  26. {
  27. public: 
  28.   GCIBuffer(Uint32 gci, Uint32 id);
  29.   ~GCIBuffer();
  30.  
  31.   /**
  32.    * @fn        insertLogRecord
  33.    * @param     tableId    Table this will be LogRecord applies to.
  34.    * @param     operation  Operation this LogRecord represents
  35.    * @param     ptr        Ptr of type LinearSectionPtr that contains the data.
  36.    * @return    A full page or 0, if the insert didn't generate a full page.  
  37.    */ 
  38.   void insertLogRecord(Uint32 tableId, Uint32 operation, 
  39.        class LinearSectionPtr ptr[3]);
  40.   void insertMetaRecord(Uint32 tableId, class LinearSectionPtr ptr[3]);
  41.   /**
  42.    * @fn inserts a page, containing Records into a GCI Buffer.
  43.    * @param     gci - the gci of the page.
  44.    * @param dataPtr - Pointer originating from Page::m_page.
  45.    * @param     dataBLen - length of dataptr in bytes
  46.    * @note      Page must NOT be deallocated after being inserted!
  47.    */
  48.   void insertPage(Uint32 gci, char * dataPtr, Uint32 dataBLen);
  49.   /**
  50.    * @fn        isComplete 
  51.    * @return    True if this GCI Buffer is done (gci is completed).
  52.    */
  53.   bool isComplete()   { return m_complete; };
  54.   void setComplete()  { m_complete = true; };
  55.   /**
  56.    * @fn getReceivedBytes
  57.    * @returns   the total number of bytes that this buffer has received.
  58.    */
  59.   Uint32 getReceivedBytes() const { return m_receivedBytes;} ;
  60.   /**
  61.    * Iterator for pages
  62.    */
  63.   class iterator {
  64.   public:
  65.     iterator(const GCIBuffer* gciBuffer);
  66.     GCIPage * first();  ///< @return First page (or NULL if no page exists)
  67.     GCIPage * next();   ///< @return Next page (or NULL if no more page exists)
  68.     bool exists();      ///< @return true if another page exists (for next())
  69.   private:
  70.     Uint32             m_iterator;
  71.     const GCIBuffer *  m_gciBuffer;
  72.   };
  73.   friend class GCIBuffer::iterator;
  74.   /***************************************************************************
  75.    * GCI Buffer meta information
  76.    ***************************************************************************/
  77.   void    setGCI(Uint32 gci)      { m_gci = gci; };
  78.   Uint32  getGCI()                { return m_gci; };
  79.   
  80.   void    setId(Uint32 id)        { m_id = id; };
  81.   Uint32  getId()                 { return m_id; };
  82.   bool   m_force;     // if true, ignore "execute" errors when
  83.            // restoring buffer (PUBLIC) during phase
  84.     // starting.
  85. private: 
  86.   /***************************************************************************
  87.    * Private Variables
  88.    ***************************************************************************/
  89.   Uint32              m_gci;           ///< GCI of this buffer
  90.   Uint32              m_id;            ///< <m_gci, id> names GCIBuffer 
  91.   bool                m_complete;      ///< GCI complete; buffer contains 
  92.                                        ///< everything
  93.   Vector <GCIPage *>  m_pageList;      ///< Storage for data/log record pages.
  94.   Uint32       m_receivedBytes; ///< Received bytes in this buffer
  95. };
  96. #endif