1 // 2 // ip/resolver_query_base.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_IP_RESOLVER_QUERY_BASE_HPP 12 #define ASIO_IP_RESOLVER_QUERY_BASE_HPP 13 14 15 #include "asio/detail/config.hpp" 16 #include "asio/detail/socket_types.hpp" 17 18 #include "asio/detail/push_options.hpp" 19 20 namespace asio { 21 namespace ip { 22 23 /// The resolver_query_base class is used as a base for the 24 /// basic_resolver_query class templates to provide a common place to define 25 /// the flag constants. 26 class resolver_query_base 27 { 28 public: 29 enum flags 30 { 31 canonical_name = ASIO_OS_DEF(AI_CANONNAME), 32 passive = ASIO_OS_DEF(AI_PASSIVE), 33 numeric_host = ASIO_OS_DEF(AI_NUMERICHOST), 34 numeric_service = ASIO_OS_DEF(AI_NUMERICSERV), 35 v4_mapped = ASIO_OS_DEF(AI_V4MAPPED), 36 all_matching = ASIO_OS_DEF(AI_ALL), 37 address_configured = ASIO_OS_DEF(AI_ADDRCONFIG) 38 }; 39 40 // Implement bitmask operations as shown in C++ Std [lib.bitmask.types]. 41 operator &(flags x,flags y)42 friend flags operator&(flags x, flags y) 43 { 44 return static_cast<flags>( 45 static_cast<unsigned int>(x) & static_cast<unsigned int>(y)); 46 } 47 operator |(flags x,flags y)48 friend flags operator|(flags x, flags y) 49 { 50 return static_cast<flags>( 51 static_cast<unsigned int>(x) | static_cast<unsigned int>(y)); 52 } 53 operator ^(flags x,flags y)54 friend flags operator^(flags x, flags y) 55 { 56 return static_cast<flags>( 57 static_cast<unsigned int>(x) ^ static_cast<unsigned int>(y)); 58 } 59 operator ~(flags x)60 friend flags operator~(flags x) 61 { 62 return static_cast<flags>(~static_cast<unsigned int>(x)); 63 } 64 operator &=(flags & x,flags y)65 friend flags& operator&=(flags& x, flags y) 66 { 67 x = x & y; 68 return x; 69 } 70 operator |=(flags & x,flags y)71 friend flags& operator|=(flags& x, flags y) 72 { 73 x = x | y; 74 return x; 75 } 76 operator ^=(flags & x,flags y)77 friend flags& operator^=(flags& x, flags y) 78 { 79 x = x ^ y; 80 return x; 81 } 82 83 protected: 84 /// Protected destructor to prevent deletion through this type. ~resolver_query_base()85 ~resolver_query_base() 86 { 87 } 88 }; 89 90 } // namespace ip 91 } // namespace asio 92 93 #include "asio/detail/pop_options.hpp" 94 95 #endif // ASIO_IP_RESOLVER_QUERY_BASE_HPP 96