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

📄 vmsignal.hpp

📁 mysql-5.0.22.tar.gz源码包
💻 HPP
字号:
/* 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 */#ifndef VMSignal_H#define VMSignal_H#include <ndb_global.h>#include <ndb_limits.h>#include <kernel_types.h>#include <ErrorReporter.hpp>#include <NodeBitmask.hpp>#include <RefConvert.hpp>#include <TransporterDefinitions.hpp>/** * Struct used when sending to multiple blocks */struct NodeReceiverGroup {  NodeReceiverGroup();  NodeReceiverGroup(Uint32 blockRef);  NodeReceiverGroup(Uint32 blockNo, const NodeBitmask &);  NodeReceiverGroup(Uint32 blockNo, const class SignalCounter &);    NodeReceiverGroup& operator=(BlockReference ref);    Uint32 m_block;  NodeBitmask m_nodes;};template <unsigned T> struct SignalT{  SignalHeader header;  SegmentedSectionPtr m_sectionPtr[3];   union {    Uint32 theData[T];    Uint64 dummyAlign;  };};/** * class used for passing argumentes to blocks */class Signal {  friend class SimulatedBlock;  friend class APZJobBuffer;  friend class FastScheduler;public:  Signal();    Uint32 getLength() const;  Uint32 getTrace() const;  Uint32 getSendersBlockRef() const;  const Uint32* getDataPtr() const ;  Uint32* getDataPtrSend() ;    void setTrace(Uint32);  Uint32 getNoOfSections() const;  bool getSection(SegmentedSectionPtr & ptr, Uint32 sectionNo);  void setSection(SegmentedSectionPtr ptr, Uint32 sectionNo);  /**   * Old depricated methods...   */  Uint32 length() const { return getLength();}  BlockReference senderBlockRef() const { return getSendersBlockRef();}private:  void setLength(Uint32);  public:#define VMS_DATA_SIZE \  (MAX_ATTRIBUTES_IN_TABLE + MAX_TUPLE_SIZE_IN_WORDS + MAX_KEY_SIZE_IN_WORDS)#if VMS_DATA_SIZE > 8192#error "VMSignal buffer is too small"#endif    SignalHeader header; // 28 bytes  SegmentedSectionPtr m_sectionPtr[3];   union {    Uint32 theData[8192];  // 8192 32-bit words -> 32K Bytes    Uint64 dummyAlign;  };  void garbage_register();};inlineUint32Signal::getLength() const {  return header.theLength;}inlineUint32Signal::getTrace() const {  return header.theTrace;}inlineUint32Signal::getSendersBlockRef() const {  return header.theSendersBlockRef;}inlineconst Uint32* Signal::getDataPtr() const {   return &theData[0];}inlineUint32* Signal::getDataPtrSend() {   return &theData[0];}inlinevoidSignal::setLength(Uint32 len){  header.theLength = len;}inlinevoidSignal::setTrace(Uint32 t){  header.theTrace = t;}inlineUint32 Signal::getNoOfSections() const {  return header.m_noOfSections;}inlinebool Signal::getSection(SegmentedSectionPtr & ptr, Uint32 section){  if(section < header.m_noOfSections){    ptr = m_sectionPtr[section];    return true;  }  ptr.p = 0;  return false;}inlinevoidSignal::setSection(SegmentedSectionPtr ptr, Uint32 sectionNo){  if(sectionNo != header.m_noOfSections || sectionNo > 2){    abort();  }  m_sectionPtr[sectionNo] = ptr;  header.m_noOfSections++;}inlineNodeReceiverGroup::NodeReceiverGroup() : m_block(0){  m_nodes.clear();}inlineNodeReceiverGroup::NodeReceiverGroup(Uint32 blockRef){  m_nodes.clear();  m_block = refToBlock(blockRef);  m_nodes.set(refToNode(blockRef));}inlineNodeReceiverGroup::NodeReceiverGroup(Uint32 blockNo, const NodeBitmask & nodes){  m_block = blockNo;  m_nodes = nodes;}#include "SignalCounter.hpp"inlineNodeReceiverGroup::NodeReceiverGroup(Uint32 blockNo, const SignalCounter & nodes){  m_block = blockNo;  m_nodes = nodes.m_nodes;}inlineNodeReceiverGroup& NodeReceiverGroup::operator=(BlockReference blockRef){  m_nodes.clear();  m_block = refToBlock(blockRef);  m_nodes.set(refToNode(blockRef));  return * this;}#endif

⌨️ 快捷键说明

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