febfa011c702da129bb4446a7a64216d9f1af8af
[senf.git] / Socket / FileHandle.hh
1 // $Id$
2 //
3 // Copyright (C) 2006 
4 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
5 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
6 //     Stefan Bund <stefan.bund@fokus.fraunhofer.de>
7 //
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
12 //
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 // GNU General Public License for more details.
17 //
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22
23 /** \mainpage The SENF Socket Library
24
25 \section arch Overall Architecture
26
27 \image html "../../SocketLibrary-classes.png" Class Diagram
28
29  */
30
31 #ifndef HH_FileHandle_
32 #define HH_FileHandle_ 1
33
34 // Custom includes
35 #include <memory> // std::auto_ptr
36 #include "Utils/SafeBool.hh"
37
38 //#include "FileHandle.mpp"
39 ///////////////////////////////hh.p////////////////////////////////////////
40 #include "FileHandle.ih"
41
42 namespace satcom {
43 namespace lib {
44     
45     /** \brief
46      */
47     class FileHandle
48         : public SafeBool<FileHandle>
49     {
50     public:
51         ///////////////////////////////////////////////////////////////////////////
52         // Types
53
54         ///////////////////////////////////////////////////////////////////////////
55         ///\name Structors and default members
56         ///@{
57
58         // protected default constructor
59         // default copy constructor
60         // default copy assignment
61         // default destructor
62
63         // no conversion constructors
64
65         ///@}
66         ///////////////////////////////////////////////////////////////////////////
67         
68         void close();
69         void terminate();
70
71         bool readable() const;
72         void waitReadable() const;
73         bool writeable() const;
74         void waitWriteable() const;
75
76         bool blocking() const;
77         void blocking(bool status);
78
79         bool eof() const;
80         bool valid() const;
81
82         bool boolean_test() const;
83
84         int fd() const;
85
86         static FileHandle cast_static(FileHandle handle);
87         static FileHandle cast_dynamic(FileHandle handle);
88
89     protected:
90         explicit FileHandle(std::auto_ptr<FileBody> body);
91
92         FileBody & body();
93         FileBody const & body() const;
94         static FileBody & body(FileHandle & handle);
95         static FileBody const & body(FileHandle const & handle);
96
97         void fd(int fd);
98
99     private:
100         FileBody::ptr body_;
101     };
102
103     int retrieve_filehandle(FileHandle handle);
104
105 }}
106
107 ///////////////////////////////hh.e////////////////////////////////////////
108 #include "FileHandle.cci"
109 //#include "FileHandle.ct"
110 //#include "FileHandle.cti"
111 #endif
112
113 \f
114 // Local Variables:
115 // mode: c++
116 // c-file-style: "satcom"
117 // End: