mirror of
https://github.com/valitydev/thrift.git
synced 2024-11-07 10:48:51 +00:00
THRIFT-922. cpp: Revert the BufferBase part of r750585
r750585 included two logically distinct changes, one of which was not referenced in the commit message and was not reviewed by a C++ maintainer. It was committed more-or-less by accident. This patch reverts that part of the change since it conflicts with the template code in some complicated ways. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@1005125 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
1df96ce22f
commit
8c535ab87c
@ -168,15 +168,48 @@ class TBufferBase : public TTransport {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Base class for all transport which wraps transport to new one.
|
||||
/**
|
||||
* Buffered transport. For reads it will read more data than is requested
|
||||
* and will serve future data out of a local buffer. For writes, data is
|
||||
* stored to an in memory buffer before being written out.
|
||||
*
|
||||
*/
|
||||
class TUnderlyingTransport : public TBufferBase {
|
||||
class TBufferedTransport : public TBufferBase {
|
||||
public:
|
||||
|
||||
static const int DEFAULT_BUFFER_SIZE = 512;
|
||||
|
||||
virtual bool peek() {
|
||||
return (rBase_ < rBound_) || transport_->peek();
|
||||
/// Use default buffer sizes.
|
||||
TBufferedTransport(boost::shared_ptr<TTransport> transport)
|
||||
: transport_(transport)
|
||||
, rBufSize_(DEFAULT_BUFFER_SIZE)
|
||||
, wBufSize_(DEFAULT_BUFFER_SIZE)
|
||||
, rBuf_(new uint8_t[rBufSize_])
|
||||
, wBuf_(new uint8_t[wBufSize_])
|
||||
{
|
||||
initPointers();
|
||||
}
|
||||
|
||||
/// Use specified buffer sizes.
|
||||
TBufferedTransport(boost::shared_ptr<TTransport> transport, uint32_t sz)
|
||||
: transport_(transport)
|
||||
, rBufSize_(sz)
|
||||
, wBufSize_(sz)
|
||||
, rBuf_(new uint8_t[rBufSize_])
|
||||
, wBuf_(new uint8_t[wBufSize_])
|
||||
{
|
||||
initPointers();
|
||||
}
|
||||
|
||||
/// Use specified read and write buffer sizes.
|
||||
TBufferedTransport(boost::shared_ptr<TTransport> transport, uint32_t rsz, uint32_t wsz)
|
||||
: transport_(transport)
|
||||
, rBufSize_(rsz)
|
||||
, wBufSize_(wsz)
|
||||
, rBuf_(new uint8_t[rBufSize_])
|
||||
, wBuf_(new uint8_t[wBufSize_])
|
||||
{
|
||||
initPointers();
|
||||
}
|
||||
|
||||
void open() {
|
||||
@ -187,82 +220,18 @@ class TUnderlyingTransport : public TBufferBase {
|
||||
return transport_->isOpen();
|
||||
}
|
||||
|
||||
void close() {
|
||||
flush();
|
||||
transport_->close();
|
||||
}
|
||||
|
||||
boost::shared_ptr<TTransport> getUnderlyingTransport() {
|
||||
return transport_;
|
||||
}
|
||||
|
||||
protected:
|
||||
boost::shared_ptr<TTransport> transport_;
|
||||
|
||||
uint32_t rBufSize_;
|
||||
uint32_t wBufSize_;
|
||||
boost::scoped_array<uint8_t> rBuf_;
|
||||
boost::scoped_array<uint8_t> wBuf_;
|
||||
|
||||
TUnderlyingTransport(boost::shared_ptr<TTransport> transport, uint32_t sz)
|
||||
: transport_(transport)
|
||||
, rBufSize_(sz)
|
||||
, wBufSize_(sz)
|
||||
, rBuf_(new uint8_t[rBufSize_])
|
||||
, wBuf_(new uint8_t[wBufSize_]) {}
|
||||
|
||||
TUnderlyingTransport(boost::shared_ptr<TTransport> transport)
|
||||
: transport_(transport)
|
||||
, rBufSize_(DEFAULT_BUFFER_SIZE)
|
||||
, wBufSize_(DEFAULT_BUFFER_SIZE)
|
||||
, rBuf_(new uint8_t[rBufSize_])
|
||||
, wBuf_(new uint8_t[wBufSize_]) {}
|
||||
|
||||
TUnderlyingTransport(boost::shared_ptr<TTransport> transport, uint32_t rsz, uint32_t wsz)
|
||||
: transport_(transport)
|
||||
, rBufSize_(rsz)
|
||||
, wBufSize_(wsz)
|
||||
, rBuf_(new uint8_t[rBufSize_])
|
||||
, wBuf_(new uint8_t[wBufSize_]) {}
|
||||
};
|
||||
|
||||
/**
|
||||
* Buffered transport. For reads it will read more data than is requested
|
||||
* and will serve future data out of a local buffer. For writes, data is
|
||||
* stored to an in memory buffer before being written out.
|
||||
*
|
||||
*/
|
||||
class TBufferedTransport : public TUnderlyingTransport {
|
||||
public:
|
||||
|
||||
/// Use default buffer sizes.
|
||||
TBufferedTransport(boost::shared_ptr<TTransport> transport)
|
||||
: TUnderlyingTransport(transport)
|
||||
{
|
||||
initPointers();
|
||||
}
|
||||
|
||||
/// Use specified buffer sizes.
|
||||
TBufferedTransport(boost::shared_ptr<TTransport> transport, uint32_t sz)
|
||||
: TUnderlyingTransport(transport, sz)
|
||||
{
|
||||
initPointers();
|
||||
}
|
||||
|
||||
/// Use specified read and write buffer sizes.
|
||||
TBufferedTransport(boost::shared_ptr<TTransport> transport, uint32_t rsz, uint32_t wsz)
|
||||
: TUnderlyingTransport(transport, rsz, wsz)
|
||||
{
|
||||
initPointers();
|
||||
}
|
||||
|
||||
virtual bool peek() {
|
||||
/* shigin: see THRIFT-96 discussion */
|
||||
bool peek() {
|
||||
if (rBase_ == rBound_) {
|
||||
setReadBuffer(rBuf_.get(), transport_->read(rBuf_.get(), rBufSize_));
|
||||
}
|
||||
return (rBound_ > rBase_);
|
||||
}
|
||||
|
||||
void close() {
|
||||
flush();
|
||||
transport_->close();
|
||||
}
|
||||
|
||||
virtual uint32_t readSlow(uint8_t* buf, uint32_t len);
|
||||
|
||||
virtual void writeSlow(const uint8_t* buf, uint32_t len);
|
||||
@ -283,12 +252,23 @@ class TBufferedTransport : public TUnderlyingTransport {
|
||||
*/
|
||||
virtual const uint8_t* borrowSlow(uint8_t* buf, uint32_t* len);
|
||||
|
||||
boost::shared_ptr<TTransport> getUnderlyingTransport() {
|
||||
return transport_;
|
||||
}
|
||||
|
||||
protected:
|
||||
void initPointers() {
|
||||
setReadBuffer(rBuf_.get(), 0);
|
||||
setWriteBuffer(wBuf_.get(), wBufSize_);
|
||||
// Write size never changes.
|
||||
}
|
||||
|
||||
boost::shared_ptr<TTransport> transport_;
|
||||
|
||||
uint32_t rBufSize_;
|
||||
uint32_t wBufSize_;
|
||||
boost::scoped_array<uint8_t> rBuf_;
|
||||
boost::scoped_array<uint8_t> wBuf_;
|
||||
};
|
||||
|
||||
|
||||
@ -319,22 +299,49 @@ class TBufferedTransportFactory : public TTransportFactory {
|
||||
* other end to always do fixed-length reads.
|
||||
*
|
||||
*/
|
||||
class TFramedTransport : public TUnderlyingTransport {
|
||||
class TFramedTransport : public TBufferBase {
|
||||
public:
|
||||
|
||||
static const int DEFAULT_BUFFER_SIZE = 512;
|
||||
|
||||
/// Use default buffer sizes.
|
||||
TFramedTransport(boost::shared_ptr<TTransport> transport)
|
||||
: TUnderlyingTransport(transport)
|
||||
: transport_(transport)
|
||||
, rBufSize_(0)
|
||||
, wBufSize_(DEFAULT_BUFFER_SIZE)
|
||||
, rBuf_()
|
||||
, wBuf_(new uint8_t[wBufSize_])
|
||||
{
|
||||
initPointers();
|
||||
}
|
||||
|
||||
TFramedTransport(boost::shared_ptr<TTransport> transport, uint32_t sz)
|
||||
: TUnderlyingTransport(transport, sz)
|
||||
: transport_(transport)
|
||||
, rBufSize_(0)
|
||||
, wBufSize_(sz)
|
||||
, rBuf_()
|
||||
, wBuf_(new uint8_t[wBufSize_])
|
||||
{
|
||||
initPointers();
|
||||
}
|
||||
|
||||
void open() {
|
||||
transport_->open();
|
||||
}
|
||||
|
||||
bool isOpen() {
|
||||
return transport_->isOpen();
|
||||
}
|
||||
|
||||
bool peek() {
|
||||
return (rBase_ < rBound_) || transport_->peek();
|
||||
}
|
||||
|
||||
void close() {
|
||||
flush();
|
||||
transport_->close();
|
||||
}
|
||||
|
||||
virtual uint32_t readSlow(uint8_t* buf, uint32_t len);
|
||||
|
||||
virtual void writeSlow(const uint8_t* buf, uint32_t len);
|
||||
@ -343,6 +350,10 @@ class TFramedTransport : public TUnderlyingTransport {
|
||||
|
||||
const uint8_t* borrowSlow(uint8_t* buf, uint32_t* len);
|
||||
|
||||
boost::shared_ptr<TTransport> getUnderlyingTransport() {
|
||||
return transport_;
|
||||
}
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Reads a frame of input from the underlying stream.
|
||||
@ -357,6 +368,13 @@ class TFramedTransport : public TUnderlyingTransport {
|
||||
int32_t pad = 0;
|
||||
this->write((uint8_t*)&pad, sizeof(pad));
|
||||
}
|
||||
|
||||
boost::shared_ptr<TTransport> transport_;
|
||||
|
||||
uint32_t rBufSize_;
|
||||
uint32_t wBufSize_;
|
||||
boost::scoped_array<uint8_t> rBuf_;
|
||||
boost::scoped_array<uint8_t> wBuf_;
|
||||
};
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user