File: Sink.h

package info (click to toggle)
darkice 1.2-0.2
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 2,084 kB
  • ctags: 1,151
  • sloc: cpp: 31,971; sh: 11,324; makefile: 108
file content (185 lines) | stat: -rw-r--r-- 5,260 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/*------------------------------------------------------------------------------

   Copyright (c) 2000-2007 Tyrell Corporation. All rights reserved.

   Tyrell DarkIce

   File     : Sink.h
   Version  : $Revision: 553 $
   Author   : $Author: rafael@riseup.net $
   Location : $HeadURL: https://darkice.googlecode.com/svn/darkice/tags/darkice-1_2/src/Sink.h $
   
   Copyright notice:

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License  
    as published by the Free Software Foundation; either version 3
    of the License, or (at your option) any later version.
   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of 
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    GNU General Public License for more details.
   
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

------------------------------------------------------------------------------*/
#ifndef SINK_H
#define SINK_H

#ifndef __cplusplus
#error This is a C++ include file
#endif


/* ============================================================ include files */

#include "Referable.h"
#include "Exception.h"


/* ================================================================ constants */


/* =================================================================== macros */


/* =============================================================== data types */

/**
 *  A general data sink
 *
 *  @author  $Author: rafael@riseup.net $
 *  @version $Revision: 553 $
 */
class Sink : public virtual Referable
{
    private:


    protected:

        /**
         *  Default constructor.
         */
        inline
        Sink ( void )                                   throw ()
        {
        }

        /**
         *  Copy constructor.
         *
         *  @param sink the Sink to copy.
         */
        inline
        Sink (      const Sink &    sink )              throw ()
        {
        }

        /**
         *  Assignment operator.
         *
         *  @param sink the Sink to assign this to.
         *  @return a reference to this Sink.
         *  @exception Exception
         */
        inline virtual Sink &
        operator= ( const Sink &    sink )              throw ( Exception )
        {
            return *this;
        }


    public:

        /**
         *  Destructor.
         *
         *  @exception Exception
         */
        inline virtual
        ~Sink ( void )                                  throw ( Exception )
        {
        }

        /**
         *  Open the sink.
         *
         *  @return true if opening was successfull, false otherwise.
         *  @exception Exception
         */
        virtual bool
        open ( void )                               throw ( Exception )    = 0;

        /**
         *  Check if the Sink is open.
         *
         *  @return true if the Sink is open, false otherwise.
         */
        virtual bool
        isOpen ( void ) const                       throw ()    = 0;

        /**
         *  Check if the Sink is ready to accept data.
         *  Blocks until the specified time for data to be available.
         *
         *  @param sec the maximum seconds to block.
         *  @param usec micro seconds to block after the full seconds.
         *  @return true if the Sink is ready to accept data, false otherwise.
         *  @exception Exception
         */
        virtual bool
        canWrite (              unsigned int    sec,
                                unsigned int    usec )  throw ( Exception ) = 0;

        /**
         *  Write data to the Sink.
         *
         *  @param buf the data to write.
         *  @param len number of bytes to write from buf.
         *  @return the number of bytes written (may be less than len).
         *  @exception Exception
         */
        virtual unsigned int
        write (                 const void    * buf,
                                unsigned int    len )   throw ( Exception ) = 0;

        /**
         *  Flush all data that was written to the Sink to the underlying
         *  construct.
         *
         *  @exception Exception
         */
        virtual void
        flush ( void )                                  throw ( Exception ) = 0;

        /**
         *  Cut what the sink has been doing so far, and start anew.
         *  This usually means separating the data sent to the sink up
         *  until now, and start saving a new chunk of data.
         */
        virtual void
        cut ( void )                                    throw () = 0;

        /**
         *  Close the Sink.
         *
         *  @exception Exception
         */
        virtual void
        close ( void )                                  throw ( Exception ) = 0;
};


/* ================================================= external data structures */


/* ====================================================== function prototypes */



#endif  /* SINK_H */