unsafe void PushPair(int encodedLeafIndex, BoundingBox *leafBounds, int b, PairToTest *stack, ref int nextToVisit)
 {
     //Potential microoptimizations here
     stack[++nextToVisit] = new PairToTest {
         A = encodedLeafIndex, B = b, LeafBounds = leafBounds
     };
 }
 unsafe void TestDifferentNodes <TResultList>(int childA, int childB, BoundingBox *a, BoundingBox *b,
                                              PairToTest *stack, ref int nextToVisit,
                                              ref TResultList results) where TResultList : IList <Overlap>
 {
     if (childA >= 0)
     {
         if (childB >= 0)
         {
             PushPair(childA, childB, stack, ref nextToVisit);
         }
         else
         {
             //leaf B versus node A.
             PushPair(childB, b, childA, stack, ref nextToVisit);
         }
     }
     else if (childB >= 0)
     {
         //leaf A versus node B.
         PushPair(childA, a, childB, stack, ref nextToVisit);
     }
     else
     {
         //Two leaves.
         results.Add(new Overlap {
             A = Encode(childA), B = Encode(childB)
         });
     }
 }
 unsafe void PushPair(int a, int b, PairToTest *stack, ref int nextToVisit)
 {
     //Potential microoptimizations here
     stack[++nextToVisit] = new PairToTest {
         A = a, B = b
     };
 }