blob: 6f510a8cfce0eec985d402c9ca8146bdad8f48f9 [file] [log] [blame]
class A2B {
class A {
A a;
}
class B {
B b;
}
A a;
B b;
void optimum() {
// load a1, a2
B aB1 = new B();
B aB2 = new B();
aB1.b = aB2;
aB2.b = aB1;
// save b1, b2
}
void naive_looped() {
// load allA
for (A anA : allA) {
B aB = new B();
aB.b = lookup(anA.a);
}
// save allB
}
void bad_looped() {
Map<A,B> a2b = new Map<A,B>();
// load a2b.keySet()
for (A anA : a2b.keySet()) {
B aB = new B();
a2b.put(anA, aB);
aB.b = a2b.get(anA.a);
}
// save a2b.values()
}
void ok_looped() {
Map<A,B> a2b = new Map<A,B>();
// load a2b.keySet()
for (A anA : a2b.keySet()) { // tree-pass
B aB = new B();
a2b.put(anA, aB);
}
for (A anA : a2b.keySet()) { // graph-pass
B aB = a2b.get(anA);
aB.b = a2b.get(anA.a);
}
// save a2b.values()
}
void qvtc_looped() {
// load allA
for (A anA : allA) {
B aB = new B();
TA2B a2b = new TA2B();
a2b.a = anA; // anA.A2B = a2b;
a2b.b = aB; // aB.A2B = a2b;
aB.b = anA.a.TA2B.b;
}
// save allB
}
}