4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
6 // The contents of this file are subject to the Fraunhofer FOKUS Public License
7 // Version 1.0 (the "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at
9 // http://senf.berlios.de/license.html
11 // The Fraunhofer FOKUS Public License Version 1.0 is based on,
12 // but modifies the Mozilla Public License Version 1.1.
13 // See the full license text for the amendments.
15 // Software distributed under the License is distributed on an "AS IS" basis,
16 // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
17 // for the specific language governing rights and limitations under the License.
19 // The Original Code is Fraunhofer FOKUS code.
21 // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V.
22 // (registered association), Hansastraße 27 c, 80686 Munich, Germany.
23 // All Rights Reserved.
26 // Stefan Bund <g0dil@berlios.de>
29 \brief FileHandle inline non-template implementation
32 //#include "FileHandle.ih"
35 #include <senf/Utils/senfassert.hh>
38 #define prefix_ inline
39 //-/////////////////////////////////////////////////////////////////////////////////////////////////
41 //-/////////////////////////////////////////////////////////////////////////////////////////////////
44 prefix_ senf::FileBody::FileBody(int fd)
48 prefix_ senf::FileHandle senf::FileBody::handle()
50 return FileHandle(ptr(this));
53 prefix_ int senf::FileBody::fd()
59 prefix_ void senf::FileBody::fd(int fd)
64 prefix_ bool senf::FileBody::eof()
70 prefix_ bool senf::FileBody::valid()
73 return fd_!=-1 && v_valid();
76 prefix_ bool senf::FileBody::readable()
79 return pollCheck(fd(),true,0);
82 prefix_ bool senf::FileBody::waitReadable(senf::ClockService::clock_type timeout)
85 return pollCheck(fd(), true,
86 (timeout==-1?-1:senf::ClockService::in_milliseconds(timeout)) );
89 prefix_ bool senf::FileBody::writeable()
92 return pollCheck(fd(),false,0);
95 prefix_ bool senf::FileBody::waitWriteable(senf::ClockService::clock_type timeout)
98 return pollCheck(fd(), false,
99 (timeout==-1?-1:senf::ClockService::in_milliseconds(timeout)) );
102 prefix_ bool senf::FileBody::oobReadable()
105 return pollCheck(fd(),true,0,true);
108 prefix_ bool senf::FileBody::waitOOBReadable(senf::ClockService::clock_type timeout)
111 return pollCheck(fd(), true,
112 (timeout==-1?-1:senf::ClockService::in_milliseconds(timeout)), true);
115 //-/////////////////////////////////////////////////////////////////////////////////////////////////
118 prefix_ senf::FileBody & senf::FileHandle::body()
120 SENF_ASSERT(body_, "dereferencing in-valid() FileHandle");
124 prefix_ senf::FileBody const & senf::FileHandle::body()
127 SENF_ASSERT(body_, "dereferencing in-valid() FileHandle");
131 prefix_ void senf::FileHandle::close()
136 prefix_ void senf::FileHandle::terminate()
141 prefix_ bool senf::FileHandle::readable()
144 return body().readable();
147 prefix_ bool senf::FileHandle::waitReadable(senf::ClockService::clock_type timeout)
150 return body().waitReadable(timeout);
153 prefix_ bool senf::FileHandle::writeable()
156 return body().writeable();
159 prefix_ bool senf::FileHandle::waitWriteable(senf::ClockService::clock_type timeout)
162 return body().waitWriteable(timeout);
165 prefix_ bool senf::FileHandle::oobReadable()
168 return body().oobReadable();
171 prefix_ bool senf::FileHandle::waitOOBReadable(senf::ClockService::clock_type timeout)
174 return body().waitOOBReadable(timeout);
177 prefix_ bool senf::FileHandle::blocking()
180 return body().blocking();
183 prefix_ void senf::FileHandle::blocking(bool status)
185 body().blocking(status);
188 prefix_ bool senf::FileHandle::eof()
194 prefix_ bool senf::FileHandle::valid()
197 return body_ && body().valid();
200 prefix_ bool senf::FileHandle::boolean_test()
203 return valid() && !eof();
206 prefix_ int senf::FileHandle::fd()
212 prefix_ senf::FileHandle::FileHandle()
216 prefix_ senf::FileHandle::~FileHandle()
218 if (body_ && ! body().is_shared())
219 body().destroyClose();
222 prefix_ senf::FileHandle::FileHandle(std::auto_ptr<FileBody> body)
223 : body_(body.release())
226 prefix_ senf::FileHandle::FileHandle(FileBody::ptr body)
230 prefix_ senf::FileBody & senf::FileHandle::body(FileHandle & handle)
232 return handle.body();
235 prefix_ senf::FileBody const & senf::FileHandle::body(FileHandle const & handle)
237 return handle.body();
240 prefix_ void senf::FileHandle::fd(int fd)
245 prefix_ senf::FileHandle senf::FileHandle::cast_static(FileHandle handle)
250 prefix_ senf::FileHandle senf::FileHandle::cast_dynamic(FileHandle handle)
255 prefix_ int senf::retrieve_filehandle(FileHandle handle)
260 //-/////////////////////////////////////////////////////////////////////////////////////////////////
267 // c-file-style: "senf"
268 // indent-tabs-mode: nil
269 // ispell-local-dictionary: "american"
270 // compile-command: "scons -u test"
271 // comment-column: 40