//----------------------------------------------------------------------------
IPAddress IPAddress::operator ^ (const IPAddress& other) const
{
	if (GetFamily() == other.GetFamily())
	{
		if (GetFamily() == IPv4)
		{
			IPv4AddressImpl t(mImpl->GetAddr());
			IPv4AddressImpl o(other.mImpl->GetAddr());
			return IPAddress((t ^ o).GetAddr(), sizeof(struct in_addr));
		}
#if defined(PX2_HAVE_IPV6)
		else if (GetFamily() == IPv6)
		{
			IPv6AddressImpl t(mImpl->GetAddr());
			IPv6AddressImpl o(other.mImpl->GetAddr());
			return IPAddress((t ^ o).GetAddr(), sizeof(struct in6_addr));
		}
#endif
		else
		{
			assertion(false,
				"Invalid or unsupported address GetFamily passed to IPAddress()");
		}
	}
	else
	{
		assertion(false, 
			"Invalid or unsupported address GetFamily passed to IPAddress()");
	}

	return *this;
}