INet4Address.cci
Go to the documentation of this file.
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00026
00027
00028 #define prefix_ inline
00029
00030
00031
00032
00033
00034 prefix_ senf::INet4Address::INet4Address()
00035 {
00036 std::fill(begin(), end(), 0u);
00037 }
00038
00039 prefix_ senf::INet4Address::INet4Address(senf::NoInit_t)
00040 {}
00041
00042 prefix_ senf::INet4Address senf::INet4Address::from_inaddr(inaddr_type v)
00043 {
00044 return INet4Address(v,IsInAddr);
00045 }
00046
00047 prefix_ senf::INet4Address::inaddr_type & senf::INet4Address::iref()
00048 {
00049 return *static_cast<inaddr_type *>(static_cast<void *>((&(*this)[0])));
00050 }
00051
00052 prefix_ senf::INet4Address::inaddr_type senf::INet4Address::iref()
00053 const
00054 {
00055 return *static_cast<inaddr_type const *>(static_cast<void const *>(&(*this)[0]));
00056 }
00057
00058 prefix_ senf::INet4Address::inaddr_type senf::INet4Address::inaddr()
00059 const
00060 {
00061 return iref();
00062 }
00063
00064 prefix_ senf::INet4Address::INet4Address(inaddr_type addr, InAddr_t)
00065 {
00066 iref() = addr;
00067 }
00068
00069 prefix_ bool senf::INet4Address::broadcast()
00070 const
00071 {
00072 return inaddr() == 0xFFFFFFFFu;
00073 }
00074
00075 prefix_ bool senf::INet4Address::boolean_test()
00076 const
00077 {
00078 return inaddr();
00079 }
00080
00081
00082
00083
00084 prefix_ unsigned senf::INet4Network::prefix_len()
00085 const
00086 {
00087 return prefix_len_;
00088 }
00089
00090
00091
00092
00093 prefix_ boost::uint32_t senf::INet4Network::mask()
00094 const
00095 {
00096
00097 return (~((boost::uint32_t(1u)<<(32u-prefix_len()))-1u)) & 0xFFFFFFFFu;
00098 }
00099
00100
00101
00102
00103 prefix_ senf::INet4Network::INet4Network()
00104 : prefix_len_(), address_()
00105 {}
00106
00107 prefix_ senf::INet4Network::INet4Network(INet4Address const & address, unsigned prefix_len)
00108 : prefix_len_(prefix_len), address_(INet4Address(address.address() & mask()))
00109 {}
00110
00111 prefix_ senf::INet4Address const & senf::INet4Network::address()
00112 const
00113 {
00114 return address_;
00115 }
00116
00117 prefix_ bool senf::INet4Network::boolean_test()
00118 const
00119 {
00120 return address() || prefix_len();
00121 }
00122
00123 prefix_ bool senf::INet4Network::operator==(INet4Network const & other)
00124 const
00125 {
00126 return address() == other.address() && prefix_len() == other.prefix_len();
00127 }
00128
00129 prefix_ bool senf::INet4Network::match(INet4Address const & addr)
00130 const
00131 {
00132 return (addr.address() & mask()) == address_.address();
00133 }
00134
00135 prefix_ bool senf::INet4Network::match(INet4Network const & net)
00136 const
00137 {
00138 return net.prefix_len() >= prefix_len() && match(net.address());
00139 }
00140
00141 prefix_ senf::INet4Address senf::INet4Network::host(boost::uint32_t number)
00142 {
00143 return INet4Address(address_.address() | (number & ~mask()));
00144 }
00145
00146 prefix_ senf::INet4Network senf::INet4Network::subnet(boost::uint32_t net, unsigned prefix_len)
00147 {
00148 return INet4Network(host(net << (32-prefix_len)),prefix_len);
00149 }
00150
00151
00152
00153
00154 prefix_ std::ostream & senf::operator<<(std::ostream & os, INet4Network const & addr)
00155 {
00156 os << addr.address() << '/' << addr.prefix_len();
00157 return os;
00158 }
00159
00160
00161 #undef prefix_
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172