summaryrefslogtreecommitdiff
path: root/indra/llcorehttp/bufferarray.h
diff options
context:
space:
mode:
authorMonty Brandenberg <monty@lindenlab.com>2012-06-01 21:30:45 -0400
committerMonty Brandenberg <monty@lindenlab.com>2012-06-01 21:30:45 -0400
commit4155301015525a242a79b9b3134e66d366bc0ebd (patch)
tree33a28e6a61ac82c1f8da4fcba4c949f7cd92c163 /indra/llcorehttp/bufferarray.h
parentfb5a29c069d27611b6328fbc313382ef0914ffe9 (diff)
Do some work on BufferArray to make it a bit less naive about
chunking data. Remove the stateful use of a seek pointer so that shared read is possible (though maybe not interesting).
Diffstat (limited to 'indra/llcorehttp/bufferarray.h')
-rw-r--r--indra/llcorehttp/bufferarray.h53
1 files changed, 6 insertions, 47 deletions
diff --git a/indra/llcorehttp/bufferarray.h b/indra/llcorehttp/bufferarray.h
index b26ad1b297..9ccd85d4f8 100644
--- a/indra/llcorehttp/bufferarray.h
+++ b/indra/llcorehttp/bufferarray.h
@@ -73,6 +73,9 @@ private:
void operator=(const BufferArray &); // Not defined
public:
+ // Internal magic number, may be used by unit tests.
+ static const size_t BLOCK_ALLOC_SIZE = 1504;
+
/// Appends the indicated data to the BufferArray
/// modifying current position and total size. New
/// position is one beyond the final byte of the buffer.
@@ -96,24 +99,16 @@ public:
return mLen;
}
- /// Set the current position for subsequent read and
- /// write operations. 'pos' values before the beginning
- /// or greater than the size of the buffer are coerced
- /// to a value within the buffer.
- ///
- /// @return Actual current position after seek.
- size_t seek(size_t pos);
-
- /// Copies data from the current position in the instance
+ /// Copies data from the given position in the instance
/// to the caller's buffer. Will return a short count of
/// bytes copied if the 'len' extends beyond the data.
- size_t read(char * dst, size_t len);
+ size_t read(size_t pos, char * dst, size_t len);
/// Copies data from the caller's buffer to the instance
/// at the current position. May overwrite existing data,
/// append data when current position is equal to the
/// size of the instance or do a mix of both.
- size_t write(const char * src, size_t len);
+ size_t write(size_t pos, const char * src, size_t len);
protected:
int findBlock(size_t pos, size_t * ret_offset);
@@ -123,46 +118,10 @@ protected:
typedef std::vector<Block *> container_t;
container_t mBlocks;
- size_t mPos;
size_t mLen;
}; // end class BufferArray
-#if 0
-
-// Conceptual for now. Another possibility is going with
-// something like Boost::asio's buffers interface. They're
-// trying to achieve the same thing above and below....
-
-class BufferStream : public std::streambuf
-{
-public:
- BufferStream(BufferArray * buffer);
- virtual ~BufferStream();
-
-private:
- BufferStream(const BufferStream &); // Not defined
- void operator=(const BufferStream &); // Not defined
-
-public:
- // Types
- typedef std::streambuf::pos_type pos_type;
- typedef std::streambuf::off_type off_type;
-
- virtual int underflow();
-
- virtual int overflow(int c);
-
- virtual int sync();
-
- virtual pos_type seekoff(off_type off, std::ios::seekdir way, std::ios::openmode which);
-
-protected:
- BufferArray * mBufferArray;
-}; // end class BufferStream
-
-#endif // 0
-
} // end namespace LLCore
#endif // _LLCORE_BUFFER_ARRAY_H_