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 }; }