1 // distribution boxbackup-0.11_trunk_2979 (svn version: 2979) 2 // Box Backup, http://www.boxbackup.org/ 3 // 4 // Copyright (c) 2003-2010, Ben Summers and contributors. 5 // All rights reserved. 6 // 7 // Note that this project uses mixed licensing. Any file with this license 8 // attached, or where the code LICENSE-DUAL appears on the first line, falls 9 // under this license. See the file COPYING.txt for more information. 10 // 11 // This file is dual licensed. You may use and distribute it providing that you 12 // comply EITHER with the terms of the BSD license, OR the GPL license. It is 13 // not necessary to comply with both licenses, only one. 14 // 15 // The BSD license option follows: 16 // 17 // Redistribution and use in source and binary forms, with or without 18 // modification, are permitted provided that the following conditions are met: 19 // 20 // 1. Redistributions of source code must retain the above copyright 21 // notice, this list of conditions and the following disclaimer. 22 // 23 // 2. Redistributions in binary form must reproduce the above copyright 24 // notice, this list of conditions and the following disclaimer in the 25 // documentation and/or other materials provided with the distribution. 26 // 27 // 3. Neither the name of the Box Backup nor the names of its contributors may 28 // be used to endorse or promote products derived from this software without 29 // specific prior written permission. 30 // 31 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 32 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 33 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 34 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY 35 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 36 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 37 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 38 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 39 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 40 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 41 // 42 // [http://en.wikipedia.org/wiki/BSD_licenses#3-clause_license_.28.22New_BSD_License.22.29] 43 // 44 // The GPL license option follows: 45 // 46 // This program is free software; you can redistribute it and/or 47 // modify it under the terms of the GNU General Public License 48 // as published by the Free Software Foundation; either version 2 49 // of the License, or (at your option) any later version. 50 // 51 // This program is distributed in the hope that it will be useful, 52 // but WITHOUT ANY WARRANTY; without even the implied warranty of 53 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 54 // GNU General Public License for more details. 55 // 56 // You should have received a copy of the GNU General Public License 57 // along with this program; if not, write to the Free Software 58 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 59 // 60 // [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html#SEC4] 61 // -------------------------------------------------------------------------- 62 // 63 // File 64 // Name: CollectInBufferStream.h 65 // Purpose: Collect data in a buffer, and then read it out. 66 // Created: 2003/08/26 67 // 68 // -------------------------------------------------------------------------- 69 70 #ifndef COLLECTINBUFFERSTREAM__H 71 #define COLLECTINBUFFERSTREAM__H 72 73 #include "IOStream.h" 74 #include "Guards.h" 75 76 // -------------------------------------------------------------------------- 77 // 78 // Class 79 // Name: CollectInBufferStream 80 // Purpose: Collect data in a buffer, and then read it out. 81 // Created: 2003/08/26 82 // 83 // -------------------------------------------------------------------------- 84 class CollectInBufferStream : public IOStream 85 { 86 public: 87 CollectInBufferStream(); 88 ~CollectInBufferStream(); 89 private: 90 // No copying 91 CollectInBufferStream(const CollectInBufferStream &); 92 CollectInBufferStream(const IOStream &); 93 public: 94 95 virtual int Read(void *pBuffer, int NBytes, int Timeout = IOStream::TimeOutInfinite); 96 virtual pos_type BytesLeftToRead(); 97 virtual void Write(const void *pBuffer, int NBytes); 98 virtual pos_type GetPosition() const; 99 virtual void Seek(pos_type Offset, int SeekType); 100 virtual bool StreamDataLeft(); 101 virtual bool StreamClosed(); 102 103 void SetForReading(); 104 105 void Reset(); 106 107 void *GetBuffer() const; 108 int GetSize() const; IsSetForReading()109 bool IsSetForReading() const {return !mInWritePhase;} 110 111 private: 112 MemoryBlockGuard<char*> mBuffer; 113 int mBufferSize; 114 int mBytesInBuffer; 115 int mReadPosition; 116 bool mInWritePhase; 117 }; 118 119 #endif // COLLECTINBUFFERSTREAM__H 120 121