lliobuffer.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:4k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lliobuffer.h
  3.  * @author Phoenix
  4.  * @date 2005-05-04
  5.  * @brief Declaration of buffers for use in IO Pipes.
  6.  *
  7.  * $LicenseInfo:firstyear=2005&license=viewergpl$
  8.  * 
  9.  * Copyright (c) 2005-2010, Linden Research, Inc.
  10.  * 
  11.  * Second Life Viewer Source Code
  12.  * The source code in this file ("Source Code") is provided by Linden Lab
  13.  * to you under the terms of the GNU General Public License, version 2.0
  14.  * ("GPL"), unless you have obtained a separate licensing agreement
  15.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  16.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  17.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  18.  * 
  19.  * There are special exceptions to the terms and conditions of the GPL as
  20.  * it is applied to this Source Code. View the full text of the exception
  21.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  22.  * online at
  23.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  24.  * 
  25.  * By copying, modifying or distributing this software, you acknowledge
  26.  * that you have read and understood your obligations described above,
  27.  * and agree to abide by those obligations.
  28.  * 
  29.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  30.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  31.  * COMPLETENESS OR PERFORMANCE.
  32.  * $/LicenseInfo$
  33.  */
  34. #ifndef LL_LLIOBUFFER_H
  35. #define LL_LLIOBUFFER_H
  36. #include "lliopipe.h"
  37. /** 
  38.  * @class LLIOBuffer
  39.  * @brief This class is an io class that represents an automtically
  40.  * resizing io buffer.
  41.  * @see LLIOPipe
  42.  *
  43.  * This class is currently impelemented quick and dirty, but should be
  44.  * correct. This class should be extended to have a more flexible
  45.  * (and capped) memory allocation and usage scheme. Eventually, I
  46.  * would like to have the ability to share this buffer between
  47.  * different objects.
  48.  */
  49. class LLIOBuffer : public LLIOPipe
  50. {
  51. public:
  52. LLIOBuffer();
  53. virtual ~LLIOBuffer();
  54. /** 
  55.  * @brief Return a raw pointer to the current data set.
  56.  *
  57.  * The pointer returned can be used for reading or even adjustment
  58.  * if you are a bit crazy up to size() bytes into memory.
  59.  * @return A potentially NULL pointer to the raw buffer data
  60.  */
  61. U8* data() const;
  62. /** 
  63.  * @brief Return the size of the buffer
  64.  */
  65. S64 size() const;
  66. /** 
  67.  * @brief Return a raw pointer to the current read position in the data.
  68.  *
  69.  * The pointer returned can be used for reading or even adjustment
  70.  * if you are a bit crazy up to bytesLeft() bytes into memory.
  71.  * @return A potentially NULL pointer to the buffer data starting
  72.  * at the read point
  73.  */
  74. U8* current() const;
  75. /** 
  76.  * @brief Return the number of unprocessed bytes in buffer.
  77.  */
  78. S64 bytesLeft() const;
  79. /** 
  80.  * @brief Move the buffer offsets back to the beginning.
  81.  *
  82.  * This method effectively clears what has been stored here,
  83.  * without mucking around with memory allocation.
  84.  */
  85. void clear();
  86. /** 
  87.  * @brief Enumeration passed into the seek function
  88.  *
  89.  * The READ head is used for where to start processing data for
  90.  * the next link in the chain, while the WRITE head specifies
  91.  * where new data processed from the previous link in the chain
  92.  * will be written.
  93.  */
  94. enum EHead
  95. {
  96. READ,
  97. WRITE
  98. };
  99. /** 
  100.  * @brief Seek to a place in the buffer
  101.  *
  102.  * @param head The READ or WRITE head.
  103.  * @param delta The offset from the current position to seek.
  104.  * @return The status of the operation. status >= if head moved.
  105.  */
  106. EStatus seek(EHead head, S64 delta);
  107. public:
  108. /* @name LLIOPipe virtual implementations
  109.  */
  110. //@{
  111. protected:
  112. /** 
  113.  * @brief Process the data in buffer
  114.  */
  115. virtual EStatus process_impl(
  116. const LLChannelDescriptors& channels,
  117. buffer_ptr_t& buffer,
  118. bool& eos,
  119. LLSD& context,
  120. LLPumpIO* pump);
  121. //@}
  122. protected:
  123. U8* mBuffer;
  124. S64 mBufferSize;
  125. U8* mReadHead;
  126. U8* mWriteHead;
  127. };
  128. #endif // LL_LLIOBUFFER_H