📄 vmsignal.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 + -