1 /*****************************************************************
3 | Platinum - Stream Pump
5 | Copyright (c) 2004-2010, Plutinosoft, LLC.
7 | http://www.plutinosoft.com
9 | This program is free software; you can redistribute it and/or
10 | modify it under the terms of the GNU General Public License
11 | as published by the Free Software Foundation; either version 2
12 | of the License, or (at your option) any later version.
14 | OEMs, ISVs, VARs and other distributors that combine and
15 | distribute commercially licensed software with Platinum software
16 | and do not wish to distribute the source code for the commercially
17 | licensed software under version 2, or (at your option) any later
18 | version, of the GNU General Public License (the "GPL") must enter
19 | into a commercial license agreement with Plutinosoft, LLC.
20 | licensing@plutinosoft.com
22 | This program is distributed in the hope that it will be useful,
23 | but WITHOUT ANY WARRANTY; without even the implied warranty of
24 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 | GNU General Public License for more details.
27 | You should have received a copy of the GNU General Public License
28 | along with this program; see the file LICENSE.txt. If not, write to
29 | the Free Software Foundation, Inc.,
30 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
31 | http://www.gnu.org/licenses/gpl-2.0.html
33 ****************************************************************/
35 #ifndef _PLT_STREAM_PUMP_H_
36 #define _PLT_STREAM_PUMP_H_
38 /*----------------------------------------------------------------------
40 +---------------------------------------------------------------------*/
43 /*----------------------------------------------------------------------
45 +---------------------------------------------------------------------*/
46 class PLT_PipeInputStream
49 // constructor and destructor
50 virtual ~PLT_PipeInputStream() {};
53 virtual NPT_Result
Receive(NPT_InputStream
& stream
, NPT_Size max_bytes_to_read
, NPT_Size
* bytes_read
= 0) = 0;
56 typedef NPT_Reference
<PLT_PipeInputStream
> PLT_PipeInputStreamReference
;
58 /*----------------------------------------------------------------------
59 | PLT_PipeOutputStream
60 +---------------------------------------------------------------------*/
61 class PLT_PipeOutputStream
64 // constructor and destructor
65 virtual ~PLT_PipeOutputStream() {};
68 virtual NPT_Result
Transmit(NPT_OutputStream
& stream
) = 0;
71 typedef NPT_Reference
<PLT_PipeOutputStream
> PLT_PipeOutputStreamReference
;
73 /*----------------------------------------------------------------------
74 | PLT_StreamPump class
75 +---------------------------------------------------------------------*/
79 virtual ~PLT_StreamPump();
83 PLT_StreamPump(NPT_Size size
= 65535);
84 NPT_Result
PullData(NPT_InputStream
& input
, NPT_Size max_bytes_to_read
);
85 NPT_Result
PushData(NPT_OutputStream
& output
, NPT_Size
& bytes_written
);
88 NPT_RingBuffer
* m_RingBuffer
;
89 NPT_Offset m_TotalBytesRead
;
90 NPT_Offset m_TotalBytesWritten
;
93 /*----------------------------------------------------------------------
94 | PLT_PipeInputStreamPump class
95 +---------------------------------------------------------------------*/
96 class PLT_PipeInputStreamPump
: public PLT_StreamPump
,
97 public PLT_PipeInputStream
100 PLT_PipeInputStreamPump(NPT_OutputStreamReference
& output
, NPT_Size size
= 65535);
101 ~PLT_PipeInputStreamPump() override
;
103 NPT_Result
Receive(NPT_InputStream
& input
, NPT_Size max_bytes_to_read
, NPT_Size
* bytes_read
) override
;
106 NPT_OutputStreamReference m_Output
;
107 NPT_Result m_LastRes
;
110 /*----------------------------------------------------------------------
111 | PLT_PipeInputStreamPump class
112 +---------------------------------------------------------------------*/
113 class PLT_PipeOutputStreamPump
: public PLT_StreamPump
,
114 public PLT_PipeOutputStream
117 PLT_PipeOutputStreamPump(NPT_InputStreamReference
& input
,
118 NPT_Size size
= 65535,
119 NPT_Size max_bytes_to_read
= 0);
120 ~PLT_PipeOutputStreamPump() override
;
122 NPT_Result
Transmit(NPT_OutputStream
& output
) override
;
125 NPT_InputStreamReference m_Input
;
126 NPT_Size m_MaxBytesToRead
;
127 NPT_Result m_LastRes
;
131 #endif // _PLT_STREAM_PUMP_H_