Domain::operator<
Allan Stokes
allan at stokes.ca
Tue Jun 26 07:26:46 UTC 2001
Hello,
I spent my time today converting my Domain notes into a DocBook document.
At this point the bottom half of the document resembles a code review, the
top half of the document discusses concepts.
While I was checking into equivalence and ordering I came across this
function definition from Domain.h:
template<class T>
bool operator<(const T &d2) const {
CTAssert(Dim == DomainTraits<T>::dimensions);
for (int i = 0; i < Dim; i++)
if (domain_m[i] >= DomainTraits<T>::getDomain(d2, i))
return false;
return true;
}
This is not a complete ordering relation.
3 4 < 3 5 : false
3 5 < 3 4 : false
3 5 == 3 4 : false
I also see that operator!=, operator>, operator<=, operator>= are all
defined individually rather than have just operator== and operator< and
everything else defined in terms of these.
Is this meant to be an ordering relation? Or this is this just a typo? Is
there any situation where it matters how domains are ordered?
I also noted that there is a CTAssert() that both domains have the same Dim.
This creates a separate equivalence class and ordering relation for each N.
Since Domain<N> and Domain<M> are different types where N!=M this could be
the right choice.
However, the way these function signatures are set up we aren't checking
that T is the same type of Domain (Grid, Interval, etc.) as *this. Is there
a reason why having the same dimensions in the types is more important that
having the same domain types?
Allan
More information about the pooma-dev
mailing list