1 //
2 // ip/basic_resolver_entry.hpp
3 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 //
5 // Copyright (c) 2003-2021 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_IP_BASIC_RESOLVER_ENTRY_HPP
12 #define BOOST_ASIO_IP_BASIC_RESOLVER_ENTRY_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 #include <string>
20 #include <boost/asio/detail/string_view.hpp>
21 
22 #include <boost/asio/detail/push_options.hpp>
23 
24 namespace boost {
25 namespace asio {
26 namespace ip {
27 
28 /// An entry produced by a resolver.
29 /**
30  * The boost::asio::ip::basic_resolver_entry class template describes an entry
31  * as returned by a resolver.
32  *
33  * @par Thread Safety
34  * @e Distinct @e objects: Safe.@n
35  * @e Shared @e objects: Unsafe.
36  */
37 template <typename InternetProtocol>
38 class basic_resolver_entry
39 {
40 public:
41   /// The protocol type associated with the endpoint entry.
42   typedef InternetProtocol protocol_type;
43 
44   /// The endpoint type associated with the endpoint entry.
45   typedef typename InternetProtocol::endpoint endpoint_type;
46 
47   /// Default constructor.
basic_resolver_entry()48   basic_resolver_entry()
49   {
50   }
51 
52   /// Construct with specified endpoint, host name and service name.
basic_resolver_entry(const endpoint_type & ep,BOOST_ASIO_STRING_VIEW_PARAM host,BOOST_ASIO_STRING_VIEW_PARAM service)53   basic_resolver_entry(const endpoint_type& ep,
54       BOOST_ASIO_STRING_VIEW_PARAM host, BOOST_ASIO_STRING_VIEW_PARAM service)
55     : endpoint_(ep),
56       host_name_(static_cast<std::string>(host)),
57       service_name_(static_cast<std::string>(service))
58   {
59   }
60 
61   /// Get the endpoint associated with the entry.
endpoint() const62   endpoint_type endpoint() const
63   {
64     return endpoint_;
65   }
66 
67   /// Convert to the endpoint associated with the entry.
operator endpoint_type() const68   operator endpoint_type() const
69   {
70     return endpoint_;
71   }
72 
73   /// Get the host name associated with the entry.
host_name() const74   std::string host_name() const
75   {
76     return host_name_;
77   }
78 
79   /// Get the host name associated with the entry.
80   template <class Allocator>
host_name(const Allocator & alloc=Allocator ()) const81   std::basic_string<char, std::char_traits<char>, Allocator> host_name(
82       const Allocator& alloc = Allocator()) const
83   {
84     return std::basic_string<char, std::char_traits<char>, Allocator>(
85         host_name_.c_str(), alloc);
86   }
87 
88   /// Get the service name associated with the entry.
service_name() const89   std::string service_name() const
90   {
91     return service_name_;
92   }
93 
94   /// Get the service name associated with the entry.
95   template <class Allocator>
service_name(const Allocator & alloc=Allocator ()) const96   std::basic_string<char, std::char_traits<char>, Allocator> service_name(
97       const Allocator& alloc = Allocator()) const
98   {
99     return std::basic_string<char, std::char_traits<char>, Allocator>(
100         service_name_.c_str(), alloc);
101   }
102 
103 private:
104   endpoint_type endpoint_;
105   std::string host_name_;
106   std::string service_name_;
107 };
108 
109 } // namespace ip
110 } // namespace asio
111 } // namespace boost
112 
113 #include <boost/asio/detail/pop_options.hpp>
114 
115 #endif // BOOST_ASIO_IP_BASIC_RESOLVER_ENTRY_HPP
116