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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lliobuffer.cpp
  3.  * @author Phoenix
  4.  * @date 2005-05-04
  5.  * @brief Definition of buffer based implementations of 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. #include "linden_common.h"
  35. #include "lliobuffer.h"
  36. //
  37. // LLIOBuffer
  38. //
  39. LLIOBuffer::LLIOBuffer() :
  40. mBuffer(NULL),
  41. mBufferSize(0L),
  42. mReadHead(NULL),
  43. mWriteHead(NULL)
  44. {
  45. }
  46. LLIOBuffer::~LLIOBuffer()
  47. {
  48. if(mBuffer)
  49. {
  50. delete[] mBuffer;
  51. }
  52. }
  53. U8* LLIOBuffer::data() const
  54. {
  55. return mBuffer;
  56. }
  57. S64 LLIOBuffer::size() const
  58. {
  59. return mBufferSize;
  60. }
  61. U8* LLIOBuffer::current() const
  62. {
  63. return mReadHead;
  64. }
  65. S64 LLIOBuffer::bytesLeft() const
  66. {
  67. return mWriteHead - mReadHead;
  68. }
  69. void LLIOBuffer::clear()
  70. {
  71. mReadHead = mBuffer;
  72. mWriteHead = mBuffer;
  73. }
  74. LLIOPipe::EStatus LLIOBuffer::seek(LLIOBuffer::EHead head, S64 delta)
  75. {
  76. LLIOPipe::EStatus status = STATUS_ERROR;
  77. switch(head)
  78. {
  79. case READ:
  80. if(((delta >= 0) && ((mReadHead + delta) <= mWriteHead))
  81.    || ((delta < 0) && ((mReadHead + delta) >= mBuffer)))
  82. {
  83. mReadHead += delta;
  84. status = STATUS_OK;
  85. }
  86. break;
  87. case WRITE:
  88. if(((delta >= 0) && ((mWriteHead + delta) < (mBuffer + mBufferSize)))
  89.    || ((delta < 0) && ((mWriteHead + delta) > mReadHead)))
  90. {
  91. mWriteHead += delta;
  92. status = STATUS_OK;
  93. }
  94. default:
  95. break;
  96. }
  97. return status;
  98. }
  99. // virtual
  100. LLIOPipe::EStatus LLIOBuffer::process_impl(
  101. const LLChannelDescriptors& channels,
  102. buffer_ptr_t& buffer,
  103. bool& eos,
  104. LLSD& context,
  105. LLPumpIO* pump)
  106. {
  107. // no-op (I think)
  108. llwarns << "You are using an LLIOBuffer which is deprecated." << llendl;
  109. return STATUS_OK;
  110. }