@@ -953,8 +953,7 @@ public boolean hasNext() {
953
953
954
954
private Node forward () {
955
955
while (mask != 0 ) {
956
- Node next = getInput ();
957
- mask = advanceInput ();
956
+ Node next = getAndAdvanceInput ();
958
957
if (next != null ) {
959
958
return next ;
960
959
}
@@ -978,47 +977,45 @@ public Node next() {
978
977
}
979
978
}
980
979
981
- public final long advanceInput () {
982
- int state = (int ) mask & 0x03 ;
980
+ private Node getAndAdvanceInput () {
981
+ long state = mask & 0x03 ;
982
+ Node result ;
983
983
if (state == 0 ) {
984
- // Skip normal field.
985
- return mask >>> NEXT_EDGE ;
984
+ result = Edges . getNodeUnsafe ( node , mask & 0xFC );
985
+ mask = mask >>> NEXT_EDGE ;
986
986
} else if (state == 1 ) {
987
987
// We are iterating a node list.
988
+ NodeList <?> nodeList = Edges .getNodeListUnsafe (node , mask & 0xFC );
989
+ result = nodeList .nodes [nodeList .size () - 1 - (int ) ((mask >>> NEXT_EDGE ) & 0xFFFF )];
988
990
if ((mask & 0xFFFF00 ) != 0 ) {
989
991
// Node list count is non-zero, decrease by 1.
990
- return mask - 0x100 ;
992
+ mask = mask - 0x100 ;
991
993
} else {
992
994
// Node list is finished => go to next input.
993
- return mask >>> 24 ;
995
+ mask = mask >>> 24 ;
994
996
}
995
997
} else {
996
- // Need to expand node list.
998
+ // Node list needs to expand first.
999
+ result = null ;
997
1000
NodeList <?> nodeList = Edges .getNodeListUnsafe (node , mask & 0xFC );
998
- if (nodeList != null ) {
999
- int size = nodeList .size ();
1000
- if (size != 0 ) {
1001
- // Set pointer to upper most index of node list.
1002
- return ((mask >>> NEXT_EDGE ) << 24 ) | (mask & 0xFD ) | ((long ) (size - 1 ) << NEXT_EDGE );
1001
+ int size ;
1002
+ if (nodeList != null && ((size = nodeList .size ()) != 0 )) {
1003
+ // Set pointer to upper most index of node list.
1004
+ mask = ((mask >>> NEXT_EDGE ) << 24 ) | (mask & 0xFD ) | ((long ) (size - 1 ) << NEXT_EDGE );
1005
+ result = nodeList .nodes [size - 1 - (int ) ((mask >>> NEXT_EDGE ) & 0xFFFF )];
1006
+ if ((mask & 0xFFFF00 ) != 0 ) {
1007
+ // Node list count is non-zero, decrease by 1.
1008
+ mask = mask - 0x100 ;
1009
+ } else {
1010
+ // Node list is finished => go to next input.
1011
+ mask = mask >>> 24 ;
1003
1012
}
1013
+ } else {
1014
+ // Node list is empty or null => skip.
1015
+ mask = mask >>> NEXT_EDGE ;
1004
1016
}
1005
- // Node list is empty or null => skip.
1006
- return mask >>> NEXT_EDGE ;
1007
- }
1008
- }
1009
-
1010
- public Node getInput () {
1011
- int state = (int ) mask & 0x03 ;
1012
- if (state == 0 ) {
1013
- return Edges .getNodeUnsafe (node , mask & 0xFC );
1014
- } else if (state == 1 ) {
1015
- // We are iterating a node list.
1016
- NodeList <?> nodeList = Edges .getNodeListUnsafe (node , mask & 0xFC );
1017
- return nodeList .nodes [nodeList .size () - 1 - (int ) ((mask >>> NEXT_EDGE ) & 0xFFFF )];
1018
- } else {
1019
- // Node list needs to expand first.
1020
- return null ;
1021
1017
}
1018
+ return result ;
1022
1019
}
1023
1020
1024
1021
@ Override
0 commit comments