SendBuffer.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

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. #include "SendBuffer.hpp"
  14. #include "TransporterInternalDefinitions.hpp"
  15. SendBuffer::SendBuffer(Uint32 bufSize) {
  16.   sizeOfBuffer = bufSize;
  17.   if(sizeOfBuffer < MAX_MESSAGE_SIZE)
  18.     sizeOfBuffer = 2 * MAX_MESSAGE_SIZE; 
  19.   startOfBuffer = NULL;
  20.   // Initalise pointers 
  21.   endOfBuffer = NULL;
  22.   insertPtr = NULL;
  23.   sendPtr = NULL;
  24.   sendDataSize = 0;
  25.   dataSize = 0;
  26. }
  27. bool
  28. SendBuffer::initBuffer(Uint32 aRemoteNodeId) {
  29.   // Allocate memory for the buffer
  30. #ifdef DEBUG_TRANSPORTER
  31.   ndbout << "Allocating " << sizeOfBuffer << " bytes for send buffer" << endl;
  32. #endif
  33.   startOfBuffer = new Uint32[(sizeOfBuffer >> 2) + 1];
  34.   endOfBuffer   = startOfBuffer + (sizeOfBuffer >> 2);
  35.   
  36.   emptyBuffer();
  37.   theRemoteNodeId = aRemoteNodeId;
  38.   return true;
  39. }
  40. SendBuffer::~SendBuffer() {
  41.   // Deallocate the buffer memory
  42.   if(startOfBuffer != NULL)
  43.     delete[] startOfBuffer;
  44. }
  45. int
  46. SendBuffer::bufferSize() {
  47.   return dataSize;
  48. }
  49. Uint32
  50. SendBuffer::bufferSizeRemaining() const {
  51.   return (sizeOfBuffer - dataSize);
  52. }
  53. void
  54. SendBuffer::emptyBuffer() {
  55.   insertPtr    = startOfBuffer;
  56.   sendPtr      = (char*)startOfBuffer;
  57.   dataSize     = 0;
  58.   sendDataSize = 0;
  59. }
  60. #ifdef DEBUG_TRANSPORTER
  61. void
  62. SendBuffer::print() {
  63.   
  64.   printf("SendBuffer status printoutsn");
  65.   
  66.   printf( "sizeOfBuffer:  %dn", sizeOfBuffer);
  67.   printf( "startOfBuffer: %.8xn", startOfBuffer);
  68.   printf( "endOfBuffer:   %.8xn", endOfBuffer);
  69.   printf( "insertPtr:     %.8xn", insertPtr);
  70.   printf( "sendPtr:       %.8xn", sendPtr);
  71.   printf( "sendDataSize:  %dn", sendDataSize);
  72.   printf( "dataSize:      %dn", dataSize);
  73. }
  74. #endif