1///////////////////////////////////////////////////////////////////////////// 2// Name: src/common/ipcbase.cpp 3// Purpose: IPC base classes 4// Author: Julian Smart 5// Modified by: 6// Created: 04/01/98 7// RCS-ID: $Id: ipcbase.cpp 54615 2008-07-14 02:34:29Z VZ $ 8// Copyright: (c) Julian Smart 9// Licence: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12// For compilers that support precompilation, includes "wx.h". 13#include "wx/wxprec.h" 14 15#ifdef __BORLANDC__ 16 #pragma hdrstop 17#endif 18 19#ifndef WX_PRECOMP 20#endif 21 22#include "wx/ipcbase.h" 23 24IMPLEMENT_CLASS(wxServerBase, wxObject) 25IMPLEMENT_CLASS(wxClientBase, wxObject) 26IMPLEMENT_CLASS(wxConnectionBase, wxObject) 27 28wxConnectionBase::wxConnectionBase(wxChar *buffer, int bytes) 29 : m_connected(true), 30 m_buffer(buffer), 31 m_buffersize(bytes), 32 m_deletebufferwhendone(false) 33{ 34 if ( buffer == (wxChar *)NULL ) 35 { // behave like next constructor 36 m_buffersize = 0; 37 m_deletebufferwhendone = true; 38 } 39} 40 41wxConnectionBase::wxConnectionBase() 42 : m_connected(true), 43 m_buffer(NULL), 44 m_buffersize(0), 45 m_deletebufferwhendone(true) 46{ 47} 48 49wxConnectionBase::wxConnectionBase(const wxConnectionBase& copy) 50 : wxObject(), 51 m_connected(copy.m_connected), 52 m_buffer(copy.m_buffer), 53 m_buffersize(copy.m_buffersize), 54 m_deletebufferwhendone(false) 55 56{ 57 // copy constructor would require ref-counted pointer to buffer 58 wxFAIL_MSG( _T("Copy constructor of wxConnectionBase not implemented") ); 59} 60 61 62wxConnectionBase::~wxConnectionBase(void) 63{ 64 if ( m_deletebufferwhendone ) 65 delete [] m_buffer; 66} 67 68wxChar *wxConnectionBase::GetBufferAtLeast( size_t bytes ) 69{ 70 if ( m_buffersize >= bytes ) 71 return m_buffer; 72 else 73 { // need to resize buffer 74 if ( m_deletebufferwhendone ) 75 { // we're in charge of buffer, increase it 76 delete [] m_buffer; 77 // the argument specifies **byte size**, but m_buffer is of type 78 // wxChar. Under unicode: sizeof(wxChar) > 1, so the buffer size is 79 // bytes / sizeof(wxChar) rounded upwards. 80 m_buffer = new wxChar[(bytes + sizeof(wxChar) - 1) / sizeof(wxChar)]; 81 m_buffersize = bytes; 82 return m_buffer; 83 } // user-supplied buffer, fail 84 else 85 return NULL; 86 } 87} 88