// $Id$
//
-// Copyright (C) 2007
-// Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
return INet4Address(v,IsInAddr);
}
+prefix_ senf::INet4Address::inaddr_type & senf::INet4Address::iref()
+{
+ return *reinterpret_cast<inaddr_type *>(&(*this)[0]);
+}
+
+prefix_ senf::INet4Address::inaddr_type senf::INet4Address::iref()
+ const
+{
+ return *reinterpret_cast<inaddr_type const *>(&(*this)[0]);
+}
+
+prefix_ senf::INet4Address::inaddr_type senf::INet4Address::inaddr()
+ const
+{
+ return iref();
+}
+
prefix_ senf::INet4Address::INet4Address(inaddr_type addr, InAddr_t)
{
iref() = addr;
return inaddr();
}
-prefix_ senf::INet4Address::inaddr_type senf::INet4Address::inaddr()
+///////////////////////////////////////////////////////////////////////////
+// senf::INet4Network
+
+prefix_ unsigned senf::INet4Network::prefix_len()
const
{
- return iref();
+ return prefix_len_;
}
-prefix_ senf::INet4Address::inaddr_type & senf::INet4Address::iref()
-{
- return *reinterpret_cast<inaddr_type *>(&(*this)[0]);
-}
+////////////////////////////////////////
+// private members
-prefix_ senf::INet4Address::inaddr_type senf::INet4Address::iref()
+prefix_ boost::uint32_t senf::INet4Network::mask()
const
{
- return *reinterpret_cast<inaddr_type const *>(&(*this)[0]);
+ // This is correct as long as the system is using 2-complement arithmetic ...
+ return (~((boost::uint32_t(1u)<<(32u-prefix_len()))-1u)) & 0xFFFFFFFFu;
}
-///////////////////////////////////////////////////////////////////////////
-// senf::INet4Network
+////////////////////////////////////////
+// public members
prefix_ senf::INet4Network::INet4Network()
: prefix_len_(), address_()
{}
-prefix_ senf::INet4Network::INet4Network(INet4Address address, unsigned prefix_len)
+prefix_ senf::INet4Network::INet4Network(INet4Address const & address, unsigned prefix_len)
: prefix_len_(prefix_len), address_(INet4Address(address.address() & mask()))
{}
return address_;
}
-prefix_ unsigned senf::INet4Network::prefix_len()
- const
-{
- return prefix_len_;
-}
-
prefix_ bool senf::INet4Network::boolean_test()
const
{
return address() == other.address() && prefix_len() == other.prefix_len();
}
-prefix_ bool senf::INet4Network::match(INet4Address addr)
+prefix_ bool senf::INet4Network::match(INet4Address const & addr)
const
{
return (addr.address() & mask()) == address_.address();
}
-prefix_ bool senf::INet4Network::match(INet4Network net)
+prefix_ bool senf::INet4Network::match(INet4Network const & net)
const
{
return net.prefix_len() >= prefix_len() && match(net.address());
return INet4Network(host(net << (32-prefix_len)),prefix_len);
}
-////////////////////////////////////////
-// private members
-
-prefix_ boost::uint32_t senf::INet4Network::mask()
- const
-{
- // This is correct as long as the system is using 2-complement arithmetic ...
- return (~((boost::uint32_t(1u)<<(32u-prefix_len()))-1u)) & 0xFFFFFFFFu;
-}
-
///////////////////////////////////////////////////////////////////////////
// namespace members
///////////////////////////////cci.e///////////////////////////////////////
#undef prefix_
-\f
+
// Local Variables:
// mode: c++
// fill-column: 100