From f9b2d69d641cc2299728c112f3b0363ba3694b67 Mon Sep 17 00:00:00 2001 From: David Rose Date: Thu, 23 Oct 2003 23:59:55 +0000 Subject: [PATCH] fix NodePath sorting --- panda/src/pgraph/nodePath.I | 26 -------------------------- panda/src/pgraph/nodePath.cxx | 29 +++++++++++++++++++++++++++++ panda/src/pgraph/nodePath.h | 2 +- 3 files changed, 30 insertions(+), 27 deletions(-) diff --git a/panda/src/pgraph/nodePath.I b/panda/src/pgraph/nodePath.I index 012bd64870..5793336eba 100644 --- a/panda/src/pgraph/nodePath.I +++ b/panda/src/pgraph/nodePath.I @@ -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 diff --git a/panda/src/pgraph/nodePath.cxx b/panda/src/pgraph/nodePath.cxx index f7002659d7..6e3a39ed39 100644 --- a/panda/src/pgraph/nodePath.cxx +++ b/panda/src/pgraph/nodePath.cxx @@ -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 diff --git a/panda/src/pgraph/nodePath.h b/panda/src/pgraph/nodePath.h index 75c165be9e..4b98a5a5e2 100644 --- a/panda/src/pgraph/nodePath.h +++ b/panda/src/pgraph/nodePath.h @@ -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;