diff options
Diffstat (limited to 'indra/llmessage/lliobuffer.cpp')
-rw-r--r-- | indra/llmessage/lliobuffer.cpp | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/indra/llmessage/lliobuffer.cpp b/indra/llmessage/lliobuffer.cpp new file mode 100644 index 0000000000..f5d1ebd595 --- /dev/null +++ b/indra/llmessage/lliobuffer.cpp @@ -0,0 +1,96 @@ +/** + * @file lliobuffer.cpp + * @author Phoenix + * @date 2005-05-04 + * @brief Definition of buffer based implementations of IO Pipes. + * + * Copyright (c) 2005-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#include "linden_common.h" +#include "lliobuffer.h" + +// +// LLIOBuffer +// +LLIOBuffer::LLIOBuffer() : + mBuffer(NULL), + mBufferSize(0L), + mReadHead(NULL), + mWriteHead(NULL) +{ +} + +LLIOBuffer::~LLIOBuffer() +{ + if(mBuffer) + { + delete[] mBuffer; + } +} + +U8* LLIOBuffer::data() const +{ + return mBuffer; +} + +S64 LLIOBuffer::size() const +{ + return mBufferSize; +} + +U8* LLIOBuffer::current() const +{ + return mReadHead; +} + +S64 LLIOBuffer::bytesLeft() const +{ + return mWriteHead - mReadHead; +} + +void LLIOBuffer::clear() +{ + mReadHead = mBuffer; + mWriteHead = mBuffer; +} + +LLIOPipe::EStatus LLIOBuffer::seek(LLIOBuffer::EHead head, S64 delta) +{ + LLIOPipe::EStatus status = STATUS_ERROR; + switch(head) + { + case READ: + if(((delta >= 0) && ((mReadHead + delta) <= mWriteHead)) + || (delta < 0) && ((mReadHead + delta) >= mBuffer)) + { + mReadHead += delta; + status = STATUS_OK; + } + break; + case WRITE: + if(((delta >= 0) && ((mWriteHead + delta) < (mBuffer + mBufferSize))) + || (delta < 0) && ((mWriteHead + delta) > mReadHead)) + { + mWriteHead += delta; + status = STATUS_OK; + } + default: + break; + } + return status; +} + +// virtual +LLIOPipe::EStatus LLIOBuffer::process_impl( + const LLChannelDescriptors& channels, + buffer_ptr_t& buffer, + bool& eos, + LLSD& context, + LLPumpIO* pump) +{ + // no-op (I think) + llwarns << "You are using an LLIOBuffer which is deprecated." << llendl; + return STATUS_OK; +} |