Statistics
| Revision:

root / tmp / org.txm.statsengine.r.core.win32 / res / win32 / library / BH / include / boost / asio / generic / detail / endpoint.hpp @ 2486

History | View | Annotate | Download (3.3 kB)

1
//
2
// generic/detail/endpoint.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 BOOST_ASIO_GENERIC_DETAIL_ENDPOINT_HPP
12
#define BOOST_ASIO_GENERIC_DETAIL_ENDPOINT_HPP
13

    
14
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
15
# pragma once
16
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17

    
18
#include <boost/asio/detail/config.hpp>
19

    
20
#include <cstddef>
21
#include <boost/asio/detail/socket_types.hpp>
22

    
23
#include <boost/asio/detail/push_options.hpp>
24

    
25
namespace boost {
26
namespace asio {
27
namespace generic {
28
namespace detail {
29

    
30
// Helper class for implementing a generic socket endpoint.
31
class endpoint
32
{
33
public:
34
  // Default constructor.
35
  BOOST_ASIO_DECL endpoint();
36

    
37
  // Construct an endpoint from the specified raw bytes.
38
  BOOST_ASIO_DECL endpoint(const void* sock_addr,
39
      std::size_t sock_addr_size, int sock_protocol);
40

    
41
  // Copy constructor.
42
  endpoint(const endpoint& other)
43
    : data_(other.data_),
44
      size_(other.size_),
45
      protocol_(other.protocol_)
46
  {
47
  }
48

    
49
  // Assign from another endpoint.
50
  endpoint& operator=(const endpoint& other)
51
  {
52
    data_ = other.data_;
53
    size_ = other.size_;
54
    protocol_ = other.protocol_;
55
    return *this;
56
  }
57

    
58
  // Get the address family associated with the endpoint.
59
  int family() const
60
  {
61
    return data_.base.sa_family;
62
  }
63

    
64
  // Get the socket protocol associated with the endpoint.
65
  int protocol() const
66
  {
67
    return protocol_;
68
  }
69

    
70
  // Get the underlying endpoint in the native type.
71
  boost::asio::detail::socket_addr_type* data()
72
  {
73
    return &data_.base;
74
  }
75

    
76
  // Get the underlying endpoint in the native type.
77
  const boost::asio::detail::socket_addr_type* data() const
78
  {
79
    return &data_.base;
80
  }
81

    
82
  // Get the underlying size of the endpoint in the native type.
83
  std::size_t size() const
84
  {
85
    return size_;
86
  }
87

    
88
  // Set the underlying size of the endpoint in the native type.
89
  BOOST_ASIO_DECL void resize(std::size_t size);
90

    
91
  // Get the capacity of the endpoint in the native type.
92
  std::size_t capacity() const
93
  {
94
    return sizeof(boost::asio::detail::sockaddr_storage_type);
95
  }
96

    
97
  // Compare two endpoints for equality.
98
  BOOST_ASIO_DECL friend bool operator==(
99
      const endpoint& e1, const endpoint& e2);
100

    
101
  // Compare endpoints for ordering.
102
  BOOST_ASIO_DECL friend bool operator<(
103
      const endpoint& e1, const endpoint& e2);
104

    
105
private:
106
  // The underlying socket address.
107
  union data_union
108
  {
109
    boost::asio::detail::socket_addr_type base;
110
    boost::asio::detail::sockaddr_storage_type generic;
111
  } data_;
112

    
113
  // The length of the socket address stored in the endpoint.
114
  std::size_t size_;
115

    
116
  // The socket protocol associated with the endpoint.
117
  int protocol_;
118

    
119
  // Initialise with a specified memory.
120
  BOOST_ASIO_DECL void init(const void* sock_addr,
121
      std::size_t sock_addr_size, int sock_protocol);
122
};
123

    
124
} // namespace detail
125
} // namespace generic
126
} // namespace asio
127
} // namespace boost
128

    
129
#include <boost/asio/detail/pop_options.hpp>
130

    
131
#if defined(BOOST_ASIO_HEADER_ONLY)
132
# include <boost/asio/generic/detail/impl/endpoint.ipp>
133
#endif // defined(BOOST_ASIO_HEADER_ONLY)
134

    
135
#endif // BOOST_ASIO_GENERIC_DETAIL_ENDPOINT_HPP