⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ndbapisignal.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
字号:
/* Copyright (C) 2003 MySQL AB   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; either version 2 of the License, or   (at your option) any later version.   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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "API.hpp"#include "NdbApiSignal.hpp"/** * The following include includes *  definitions directly from the kernel * * Definitions that is shared between kernel and the API */#include <signaldata/TcKeyReq.hpp>#include <signaldata/KeyInfo.hpp>#include <signaldata/AttrInfo.hpp>#include <signaldata/TestOrd.hpp>#include <signaldata/CreateIndx.hpp>#include <signaldata/DropIndx.hpp>#include <signaldata/TcIndx.hpp>#include <signaldata/IndxKeyInfo.hpp>#include <signaldata/IndxAttrInfo.hpp>#include <signaldata/TcHbRep.hpp>#include <signaldata/ScanTab.hpp>#include <NdbOut.hpp>/******************************************************************************NdbApiSignal();Return Value:   None  Remark:         Creates a NdbApiSignal object. ******************************************************************************/NdbApiSignal::NdbApiSignal(BlockReference ref){  theVerId_signalNumber   = 0;    // 4 bit ver id - 16 bit gsn  theReceiversBlockNumber = 0;  // Only 16 bit blocknum    theSendersBlockRef      = refToBlock(ref);  theLength               = 0;  theSendersSignalId      = 0;  theSignalId             = 0;  theTrace                = 0;  m_noOfSections          = 0;  m_fragmentInfo          = 0;  for (int i = 0; i < 25; i++)    theData[i] = 0x13579753;    setDataPtr(&theData[0]);  theNextSignal = 0;}NdbApiSignal::NdbApiSignal(Ndb* ndb){  BlockReference ref = ndb->theMyRef;  theVerId_signalNumber   = 0;    // 4 bit ver id - 16 bit gsn  theReceiversBlockNumber = 0;  // Only 16 bit blocknum    theSendersBlockRef      = refToBlock(ref);  theLength               = 0;  theSendersSignalId      = 0;  theSignalId             = 0;  theTrace                = 0;  m_noOfSections          = 0;  m_fragmentInfo          = 0;  for (int i = 0; i < 25; i++)    theData[i] = 0x13579753;    setDataPtr(&theData[0]);  theNextSignal = 0;}/** * Copy constructor */NdbApiSignal::NdbApiSignal(const NdbApiSignal &src) {  copyFrom(&src);}/******************************************************************************~NdbApiSignal();Return Value:   None  Remark:         Delete a NdbApiSignal object.******************************************************************************/NdbApiSignal::~NdbApiSignal(){ }/******************************************************************************int setSignal(NdbSignalType aNdbSignalType);Return Value:   Return 0 : setSignal was successful.                Return tErrorCode In all other case. Parameters:     aNdbSignalType: Type of signal.Remark:         Set signal header and allocate 128 byte. ******************************************************************************/int NdbApiSignal::setSignal(int aNdbSignalType){ 	  theSendersSignalId = 0;  switch (aNdbSignalType)  {    case GSN_DIHNDBTAMPER:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBDIH;      theVerId_signalNumber   = GSN_DIHNDBTAMPER;      theLength               = 3;    }    break;    case GSN_TCSEIZEREQ:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBTC;      theVerId_signalNumber   = GSN_TCSEIZEREQ;      theLength               = 2;    }    break;    case GSN_TCKEYREQ:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBTC;      theVerId_signalNumber   = GSN_TCKEYREQ;      theLength               = TcKeyReq::SignalLength;    }    break;    case GSN_TCRELEASEREQ:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBTC;      theVerId_signalNumber   = GSN_TCRELEASEREQ;      theLength               = 3;    }    break;    case GSN_ATTRINFO:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBTC;      theVerId_signalNumber   = GSN_ATTRINFO;      theLength               = AttrInfo::MaxSignalLength;    }    break;        case GSN_KEYINFO:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber	= DBTC;      theVerId_signalNumber = GSN_KEYINFO;      theLength               = KeyInfo::MaxSignalLength;     }    break;    case GSN_TCROLLBACKREQ:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBTC;      theVerId_signalNumber   = GSN_TCROLLBACKREQ;      theLength               = 3;    }    break;    case GSN_TC_HBREP:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBTC;      theVerId_signalNumber   = GSN_TC_HBREP;      theLength               = TcHbRep::SignalLength;    }    break;    case GSN_TC_COMMITREQ:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBTC;      theVerId_signalNumber   = GSN_TC_COMMITREQ;      theLength               = 3;    }    break;    case GSN_SCAN_TABREQ:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBTC;      theVerId_signalNumber   = GSN_SCAN_TABREQ;      theLength               = ScanTabReq::StaticLength;          }    break;    case GSN_SCAN_NEXTREQ:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBTC;      theVerId_signalNumber   = GSN_SCAN_NEXTREQ;      theLength               = ScanNextReq::SignalLength;    }    break;    case GSN_CREATE_INDX_REQ:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBDICT;      theVerId_signalNumber   = GSN_CREATE_INDX_REQ;      theLength               = CreateIndxReq::SignalLength;       }    break;    case GSN_DROP_INDX_REQ:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBDICT;      theVerId_signalNumber   = GSN_DROP_INDX_REQ;      theLength               = DropIndxReq::SignalLength;       }    break;    case GSN_TCINDXREQ:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBTC;      theVerId_signalNumber   = GSN_TCINDXREQ;      theLength               = TcKeyReq::SignalLength;    }    break;    case GSN_INDXKEYINFO:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBTC;      theVerId_signalNumber   = GSN_INDXKEYINFO;      theLength               = IndxKeyInfo::MaxSignalLength;     }    break;    case GSN_INDXATTRINFO:    {      theTrace                = TestOrd::TraceAPI;      theReceiversBlockNumber = DBTC;      theVerId_signalNumber   = GSN_INDXATTRINFO;      theLength               = IndxAttrInfo::MaxSignalLength;    }    break;        default:     {      return -1;    }  }  return 0;}voidNdbApiSignal::set(Uint8  trace,		  Uint16 receiversBlockNumber,		  Uint16 signalNumber,		  Uint32 length){    theTrace                = trace;  theReceiversBlockNumber = receiversBlockNumber;  theVerId_signalNumber   = signalNumber;  theLength               = length;}voidNdbApiSignal::copyFrom(const NdbApiSignal * src){  theVerId_signalNumber   = src->theVerId_signalNumber;  theReceiversBlockNumber = src->theReceiversBlockNumber;  theSendersBlockRef      = src->theSendersBlockRef;  theLength               = src->theLength;  theTrace                = src->theTrace;    Uint32 * dstData = getDataPtrSend();  const Uint32 * srcData = src->getDataPtr();  for (Uint32 i = 0; i < theLength; i++)    dstData[i] = srcData[i];  setDataPtr(dstData);    /**   * NOTE that theSignalId is used as data ptr   *   and should not be copied   * NOTE that theSendersSignalId is used as next pointer   *   and should not be copied   */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -