mirror of
https://github.com/valitydev/thrift.git
synced 2024-11-07 18:58: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:
|
public:
|
||||||
|
|
||||||
static const int DEFAULT_BUFFER_SIZE = 512;
|
static const int DEFAULT_BUFFER_SIZE = 512;
|
||||||
|
|
||||||
virtual bool peek() {
|
/// Use default buffer sizes.
|
||||||
return (rBase_ < rBound_) || transport_->peek();
|
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() {
|
void open() {
|
||||||
@ -187,82 +220,18 @@ class TUnderlyingTransport : public TBufferBase {
|
|||||||
return transport_->isOpen();
|
return transport_->isOpen();
|
||||||
}
|
}
|
||||||
|
|
||||||
void close() {
|
bool peek() {
|
||||||
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 */
|
|
||||||
if (rBase_ == rBound_) {
|
if (rBase_ == rBound_) {
|
||||||
setReadBuffer(rBuf_.get(), transport_->read(rBuf_.get(), rBufSize_));
|
setReadBuffer(rBuf_.get(), transport_->read(rBuf_.get(), rBufSize_));
|
||||||
}
|
}
|
||||||
return (rBound_ > rBase_);
|
return (rBound_ > rBase_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void close() {
|
||||||
|
flush();
|
||||||
|
transport_->close();
|
||||||
|
}
|
||||||
|
|
||||||
virtual uint32_t readSlow(uint8_t* buf, uint32_t len);
|
virtual uint32_t readSlow(uint8_t* buf, uint32_t len);
|
||||||
|
|
||||||
virtual void writeSlow(const 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);
|
virtual const uint8_t* borrowSlow(uint8_t* buf, uint32_t* len);
|
||||||
|
|
||||||
|
boost::shared_ptr<TTransport> getUnderlyingTransport() {
|
||||||
|
return transport_;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initPointers() {
|
void initPointers() {
|
||||||
setReadBuffer(rBuf_.get(), 0);
|
setReadBuffer(rBuf_.get(), 0);
|
||||||
setWriteBuffer(wBuf_.get(), wBufSize_);
|
setWriteBuffer(wBuf_.get(), wBufSize_);
|
||||||
// Write size never changes.
|
// 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.
|
* other end to always do fixed-length reads.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class TFramedTransport : public TUnderlyingTransport {
|
class TFramedTransport : public TBufferBase {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
static const int DEFAULT_BUFFER_SIZE = 512;
|
||||||
|
|
||||||
/// Use default buffer sizes.
|
/// Use default buffer sizes.
|
||||||
TFramedTransport(boost::shared_ptr<TTransport> transport)
|
TFramedTransport(boost::shared_ptr<TTransport> transport)
|
||||||
: TUnderlyingTransport(transport)
|
: transport_(transport)
|
||||||
|
, rBufSize_(0)
|
||||||
|
, wBufSize_(DEFAULT_BUFFER_SIZE)
|
||||||
|
, rBuf_()
|
||||||
|
, wBuf_(new uint8_t[wBufSize_])
|
||||||
{
|
{
|
||||||
initPointers();
|
initPointers();
|
||||||
}
|
}
|
||||||
|
|
||||||
TFramedTransport(boost::shared_ptr<TTransport> transport, uint32_t sz)
|
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();
|
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 uint32_t readSlow(uint8_t* buf, uint32_t len);
|
||||||
|
|
||||||
virtual void writeSlow(const 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);
|
const uint8_t* borrowSlow(uint8_t* buf, uint32_t* len);
|
||||||
|
|
||||||
|
boost::shared_ptr<TTransport> getUnderlyingTransport() {
|
||||||
|
return transport_;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Reads a frame of input from the underlying stream.
|
* Reads a frame of input from the underlying stream.
|
||||||
@ -357,6 +368,13 @@ class TFramedTransport : public TUnderlyingTransport {
|
|||||||
int32_t pad = 0;
|
int32_t pad = 0;
|
||||||
this->write((uint8_t*)&pad, sizeof(pad));
|
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