fix NodePath sorting

This commit is contained in:
David Rose 2003-10-23 23:59:55 +00:00
parent 0e369940cf
commit f9b2d69d64
3 changed files with 30 additions and 27 deletions

View File

@ -1241,32 +1241,6 @@ operator < (const NodePath &other) const {
return (compare_to(other) < 0);
}
////////////////////////////////////////////////////////////////////
// Function: NodePath::compare_to
// Access: Published
// Description: Returns a number less than zero if this NodePath
// sorts before the other one, greater than zero if it
// sorts after, or zero if they are equivalent.
//
// Two NodePaths are considered equivalent if they
// consist of exactly the same list of nodes in the same
// order. Otherwise, they are different; different
// NodePaths will be ranked in a consistent but
// undefined ordering; the ordering is useful only for
// placing the NodePaths in a sorted container like an
// STL set.
////////////////////////////////////////////////////////////////////
INLINE int NodePath::
compare_to(const NodePath &other) const {
uncollapse_head();
other.uncollapse_head();
// Nowadays, the NodePathComponents at the head are pointerwise
// equivalent if and only if the NodePaths are equivalent. So we
// only have to compare pointers.
return _head - other._head;
}
////////////////////////////////////////////////////////////////////
// Function: NodePath::set_tag
// Access: Published

View File

@ -3057,6 +3057,35 @@ get_stashed_ancestor() const {
return not_found();
}
////////////////////////////////////////////////////////////////////
// Function: NodePath::compare_to
// Access: Published
// Description: Returns a number less than zero if this NodePath
// sorts before the other one, greater than zero if it
// sorts after, or zero if they are equivalent.
//
// Two NodePaths are considered equivalent if they
// consist of exactly the same list of nodes in the same
// order. Otherwise, they are different; different
// NodePaths will be ranked in a consistent but
// undefined ordering; the ordering is useful only for
// placing the NodePaths in a sorted container like an
// STL set.
////////////////////////////////////////////////////////////////////
int NodePath::
compare_to(const NodePath &other) const {
uncollapse_head();
other.uncollapse_head();
// Nowadays, the NodePathComponents at the head are pointerwise
// equivalent if and only if the NodePaths are equivalent. So we
// only have to compare pointers.
if (_head != other._head) {
return _head < other._head ? -1 : 1;
}
return 0;
}
////////////////////////////////////////////////////////////////////
// Function: NodePath::verify_complete
// Access: Published

View File

@ -561,7 +561,7 @@ PUBLISHED:
INLINE bool operator == (const NodePath &other) const;
INLINE bool operator != (const NodePath &other) const;
INLINE bool operator < (const NodePath &other) const;
INLINE int compare_to(const NodePath &other) const;
int compare_to(const NodePath &other) const;
// Miscellaneous
bool verify_complete() const;