@@ -54,13 +54,13 @@ THE SOFTWARE.
5454# define RENDER_IN_SUBPIXEL (__ARGS__ ) (ceil(__ARGS__))
5555#endif
5656
57- /*
58- * 4.5x faster than std::hash in release mode
59- */
60- #define AX_HASH_NODE_NAME (name ) (!name.empty() ? XXH3_64bits(name.data(), name.length()) : 0 )
61-
6257namespace ax
6358{
59+ AX_DLL uint64_t hashNodeName (std::string_view name)
60+ {
61+ // 4.5x faster than std::hash in release mode.
62+ return !name.empty () ? XXH3_64bits (name.data (), name.length ()) : 0 ;
63+ }
6464
6565// FIXME:: Yes, nodes might have a sort problem once every 30 days if the game runs at 60 FPS and each frame sprites are
6666// reordered.
@@ -717,6 +717,11 @@ void Node::setName(std::string_view name)
717717 _name = name;
718718}
719719
720+ uint64_t Node::getHashOfName () const
721+ {
722+ return _hashOfName;
723+ }
724+
720725void Node::updateParentChildrenIndexer (int tag)
721726{
722727 auto parentChildrenIndexer = getParentChildrenIndexer ();
@@ -730,11 +735,11 @@ void Node::updateParentChildrenIndexer(int tag)
730735
731736void Node::updateParentChildrenIndexer (std::string_view name)
732737{
733- uint64_t newHash = AX_HASH_NODE_NAME (name);
738+ uint64_t newHash = hashNodeName (name);
734739 auto parentChildrenIndexer = getParentChildrenIndexer ();
735740 if (parentChildrenIndexer)
736741 {
737- auto oldHash = AX_HASH_NODE_NAME (_name);
742+ auto oldHash = hashNodeName (_name);
738743 if (oldHash != newHash)
739744 parentChildrenIndexer->erase (oldHash);
740745 (*parentChildrenIndexer)[newHash] = this ;
@@ -831,7 +836,7 @@ Node* Node::getChildByTag(int tag) const
831836Node* Node::getChildByName (std::string_view name) const
832837{
833838 // AXASSERT(!name.empty(), "Invalid name");
834- auto hash = AX_HASH_NODE_NAME (name);
839+ auto hash = hashNodeName (name);
835840 if (_childrenIndexer)
836841 {
837842 auto it = _childrenIndexer->find (hash);
0 commit comments