Realistic 3D camera system
3D camera system components
basic_descriptor.hpp
Go to the documentation of this file.
1 //
2 // posix/basic_descriptor.hpp
3 // ~~~~~~~~~~~~~~~~~~~~~~~~~~
4 //
5 // Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6 //
7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 //
10 
11 #ifndef ASIO_POSIX_BASIC_DESCRIPTOR_HPP
12 #define ASIO_POSIX_BASIC_DESCRIPTOR_HPP
13 
14 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
15 # pragma once
16 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17 
18 #include "asio/detail/config.hpp"
19 
20 #if defined(ASIO_HAS_POSIX_STREAM_DESCRIPTOR) \
21  || defined(GENERATING_DOCUMENTATION)
22 
23 #include "asio/basic_io_object.hpp"
25 #include "asio/error.hpp"
27 
29 
30 namespace asio {
31 namespace posix {
32 
34 
42 template <typename DescriptorService>
43 class basic_descriptor
44  : public basic_io_object<DescriptorService>,
45  public descriptor_base
46 {
47 public:
50  typedef typename DescriptorService::native_handle_type native_type;
51 
53  typedef typename DescriptorService::native_handle_type native_handle_type;
54 
56  typedef basic_descriptor<DescriptorService> lowest_layer_type;
57 
59 
66  explicit basic_descriptor(asio::io_service& io_service)
67  : basic_io_object<DescriptorService>(io_service)
68  {
69  }
70 
72 
84  basic_descriptor(asio::io_service& io_service,
85  const native_handle_type& native_descriptor)
86  : basic_io_object<DescriptorService>(io_service)
87  {
89  this->get_service().assign(this->get_implementation(),
90  native_descriptor, ec);
91  asio::detail::throw_error(ec, "assign");
92  }
93 
94 #if defined(ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
95 
105  basic_descriptor(basic_descriptor&& other)
106  : basic_io_object<DescriptorService>(
107  ASIO_MOVE_CAST(basic_descriptor)(other))
108  {
109  }
110 
112 
121  basic_descriptor& operator=(basic_descriptor&& other)
122  {
123  basic_io_object<DescriptorService>::operator=(
124  ASIO_MOVE_CAST(basic_descriptor)(other));
125  return *this;
126  }
127 #endif // defined(ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
128 
130 
138  lowest_layer_type& lowest_layer()
139  {
140  return *this;
141  }
142 
144 
152  const lowest_layer_type& lowest_layer() const
153  {
154  return *this;
155  }
156 
158  /*
159  * This function opens the descriptor to hold an existing native descriptor.
160  *
161  * @param native_descriptor A native descriptor.
162  *
163  * @throws asio::system_error Thrown on failure.
164  */
165  void assign(const native_handle_type& native_descriptor)
166  {
167  asio::error_code ec;
168  this->get_service().assign(this->get_implementation(),
169  native_descriptor, ec);
170  asio::detail::throw_error(ec, "assign");
171  }
172 
174  /*
175  * This function opens the descriptor to hold an existing native descriptor.
176  *
177  * @param native_descriptor A native descriptor.
178  *
179  * @param ec Set to indicate what error occurred, if any.
180  */
181  asio::error_code assign(const native_handle_type& native_descriptor,
182  asio::error_code& ec)
183  {
184  return this->get_service().assign(
185  this->get_implementation(), native_descriptor, ec);
186  }
187 
189  bool is_open() const
190  {
191  return this->get_service().is_open(this->implementation);
192  }
193 
195 
203  void close()
204  {
205  asio::error_code ec;
206  this->get_service().close(this->get_implementation(), ec);
207  asio::detail::throw_error(ec, "close");
208  }
209 
211 
220  {
221  return this->get_service().close(this->get_implementation(), ec);
222  }
223 
226 
231  native_type native()
232  {
233  return this->get_service().native_handle(this->implementation);
234  }
235 
237 
242  native_handle_type native_handle()
243  {
244  return this->get_service().native_handle(this->implementation);
245  }
246 
248 
257  native_handle_type release()
258  {
259  return this->get_service().release(this->implementation);
260  }
261 
263 
270  void cancel()
271  {
272  asio::error_code ec;
273  this->get_service().cancel(this->get_implementation(), ec);
274  asio::detail::throw_error(ec, "cancel");
275  }
276 
278 
286  {
287  return this->get_service().cancel(this->get_implementation(), ec);
288  }
289 
291 
312  template <typename IoControlCommand>
313  void io_control(IoControlCommand& command)
314  {
315  asio::error_code ec;
316  this->get_service().io_control(this->get_implementation(), command, ec);
317  asio::detail::throw_error(ec, "io_control");
318  }
319 
321 
347  template <typename IoControlCommand>
348  asio::error_code io_control(IoControlCommand& command,
349  asio::error_code& ec)
350  {
351  return this->get_service().io_control(
352  this->get_implementation(), command, ec);
353  }
354 
356 
366  bool non_blocking() const
367  {
368  return this->get_service().non_blocking(this->implementation);
369  }
370 
372 
384  void non_blocking(bool mode)
385  {
386  asio::error_code ec;
387  this->get_service().non_blocking(this->get_implementation(), mode, ec);
388  asio::detail::throw_error(ec, "non_blocking");
389  }
390 
392 
405  bool mode, asio::error_code& ec)
406  {
407  return this->get_service().non_blocking(
408  this->get_implementation(), mode, ec);
409  }
410 
412 
425  bool native_non_blocking() const
426  {
427  return this->get_service().native_non_blocking(this->implementation);
428  }
429 
431 
445  void native_non_blocking(bool mode)
446  {
447  asio::error_code ec;
448  this->get_service().native_non_blocking(
449  this->get_implementation(), mode, ec);
450  asio::detail::throw_error(ec, "native_non_blocking");
451  }
452 
454 
468  asio::error_code native_non_blocking(
469  bool mode, asio::error_code& ec)
470  {
471  return this->get_service().native_non_blocking(
472  this->get_implementation(), mode, ec);
473  }
474 
475 protected:
477  ~basic_descriptor()
478  {
479  }
480 };
481 
482 } // namespace posix
483 } // namespace asio
484 
486 
487 #endif // defined(ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
488  // || defined(GENERATING_DOCUMENTATION)
489 
490 #endif // ASIO_POSIX_BASIC_DESCRIPTOR_HPP
void throw_error(const asio::error_code &err)
Definition: throw_error.hpp:31
Provides core I/O functionality.
Definition: io_service.hpp:184
Class to represent an error code value.
Definition: error_code.hpp:80
ASIO_DECL int close(int d, state_type &state, asio::error_code &ec)
#define ASIO_MOVE_CAST(type)
Definition: config.hpp:138