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