TcKeyConf.hpp
上传用户: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. #ifndef TC_KEY_CONF_H
  14. #define TC_KEY_CONF_H
  15. #include "SignalData.hpp"
  16. /**
  17.  * 
  18.  */
  19. class TcKeyConf {
  20.   /**
  21.    * Reciver(s)
  22.    */
  23.   friend class Ndb;
  24.   friend class NdbConnection;
  25.   friend class Ndbcntr;
  26.   friend class DbUtil;
  27.   /**
  28.    * Sender(s)
  29.    */
  30.   friend class Dbtc;
  31.   /**
  32.    * For printing
  33.    */
  34.   friend bool printTCKEYCONF(FILE *, const Uint32 *, Uint32, Uint16);
  35. public:
  36.   /**
  37.    * Length of signal
  38.    */
  39.   STATIC_CONST( StaticLength = 5 );
  40.   STATIC_CONST( OperationLength = 2 );
  41.   STATIC_CONST( SimpleReadBit = (((Uint32)1) << 31) );
  42.   
  43. private:
  44.   /**
  45.    * DATA VARIABLES
  46.    */
  47.   //-------------------------------------------------------------
  48.   // Unconditional part. First 5 words
  49.   //-------------------------------------------------------------
  50.   Uint32 apiConnectPtr;
  51.   Uint32 gci;
  52.   Uint32 confInfo;
  53.   Uint32 transId1;
  54.   Uint32 transId2;
  55.   struct OperationConf {
  56.     Uint32 apiOperationPtr;
  57.     Uint32 attrInfoLen;
  58.   };
  59.   //-------------------------------------------------------------
  60.   // Operations confirmations,
  61.   // No of actually sent = getNoOfOperations(confInfo)
  62.   //-------------------------------------------------------------
  63.   OperationConf operations[10];
  64.   
  65.   /**
  66.    * Get:ers for confInfo
  67.    */
  68.   static Uint32 getNoOfOperations(const Uint32 & confInfo);
  69.   static Uint32 getCommitFlag(const Uint32 & confInfo);
  70.   static bool getMarkerFlag(const Uint32 & confInfo);
  71.   
  72.   /**
  73.    * Set:ers for confInfo
  74.    */
  75.   static void setCommitFlag(Uint32 & confInfo, Uint8 flag);
  76.   static void setNoOfOperations(Uint32 & confInfo, Uint32 noOfOps);
  77.   static void setMarkerFlag(Uint32 & confInfo, Uint32 flag);
  78. };
  79. inline
  80. Uint32
  81. TcKeyConf::getNoOfOperations(const Uint32 & confInfo){
  82.   return confInfo & 65535;
  83. }
  84. inline
  85. Uint32
  86. TcKeyConf::getCommitFlag(const Uint32 & confInfo){
  87.   return ((confInfo >> 16) & 1);
  88. }
  89. inline
  90. bool
  91. TcKeyConf::getMarkerFlag(const Uint32 & confInfo){
  92.   const Uint32 bits = 3 << 16; // Marker only valid when doing commit
  93.   return (confInfo & bits) == bits;
  94. }
  95. inline
  96. void 
  97. TcKeyConf::setNoOfOperations(Uint32 & confInfo, Uint32 noOfOps){
  98.   ASSERT_MAX(noOfOps, 65535, "TcKeyConf::setNoOfOperations");
  99.   confInfo = (confInfo & 0xFFFF0000) | noOfOps;
  100. }
  101. inline
  102. void 
  103. TcKeyConf::setCommitFlag(Uint32 & confInfo, Uint8 flag){
  104.   ASSERT_BOOL(flag, "TcKeyConf::setCommitFlag");
  105.   confInfo |= (flag << 16);
  106. }
  107. inline
  108. void
  109. TcKeyConf::setMarkerFlag(Uint32 & confInfo, Uint32 flag){
  110.   ASSERT_BOOL(flag, "TcKeyConf::setMarkerFlag");
  111.   confInfo |= (flag << 17);
  112. }
  113. #endif