1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
/* Copyright (c) 2003-2005, 2007 MySQL AB
Use is subject to license terms
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */
#ifndef TC_KEY_CONF_H
#define TC_KEY_CONF_H
#include "SignalData.hpp"
/**
*
*/
class TcKeyConf {
/**
* Reciver(s)
*/
friend class Ndb;
friend class NdbTransaction;
friend class Ndbcntr;
friend class DbUtil;
/**
* Sender(s)
*/
friend class Dbtc;
/**
* For printing
*/
friend bool printTCKEYCONF(FILE *, const Uint32 *, Uint32, Uint16);
public:
/**
* Length of signal
*/
STATIC_CONST( StaticLength = 5 );
STATIC_CONST( OperationLength = 2 );
STATIC_CONST( DirtyReadBit = (((Uint32)1) << 31) );
private:
/**
* DATA VARIABLES
*/
//-------------------------------------------------------------
// Unconditional part. First 5 words
//-------------------------------------------------------------
Uint32 apiConnectPtr;
Uint32 gci;
Uint32 confInfo;
Uint32 transId1;
Uint32 transId2;
struct OperationConf {
Uint32 apiOperationPtr;
Uint32 attrInfoLen;
};
//-------------------------------------------------------------
// Operations confirmations,
// No of actually sent = getNoOfOperations(confInfo)
//-------------------------------------------------------------
OperationConf operations[10];
/**
* Get:ers for confInfo
*/
static Uint32 getNoOfOperations(const Uint32 & confInfo);
static Uint32 getCommitFlag(const Uint32 & confInfo);
static bool getMarkerFlag(const Uint32 & confInfo);
/**
* Set:ers for confInfo
*/
static void setCommitFlag(Uint32 & confInfo, Uint8 flag);
static void setNoOfOperations(Uint32 & confInfo, Uint32 noOfOps);
static void setMarkerFlag(Uint32 & confInfo, Uint32 flag);
};
inline
Uint32
TcKeyConf::getNoOfOperations(const Uint32 & confInfo){
return confInfo & 65535;
}
inline
Uint32
TcKeyConf::getCommitFlag(const Uint32 & confInfo){
return ((confInfo >> 16) & 1);
}
inline
bool
TcKeyConf::getMarkerFlag(const Uint32 & confInfo){
const Uint32 bits = 3 << 16; // Marker only valid when doing commit
return (confInfo & bits) == bits;
}
inline
void
TcKeyConf::setNoOfOperations(Uint32 & confInfo, Uint32 noOfOps){
ASSERT_MAX(noOfOps, 65535, "TcKeyConf::setNoOfOperations");
confInfo = (confInfo & 0xFFFF0000) | noOfOps;
}
inline
void
TcKeyConf::setCommitFlag(Uint32 & confInfo, Uint8 flag){
ASSERT_BOOL(flag, "TcKeyConf::setCommitFlag");
confInfo |= (flag << 16);
}
inline
void
TcKeyConf::setMarkerFlag(Uint32 & confInfo, Uint32 flag){
ASSERT_BOOL(flag, "TcKeyConf::setMarkerFlag");
confInfo |= (flag << 17);
}
#endif
|