package wcet.devel; import com.jopdesign.sys.Config; import com.jopdesign.sys.Const; import com.jopdesign.sys.Native; public class InnerClasses { public static class A { int z; protected boolean setA(int v) { if(v > 30) return false; z = (1<<v); return true; } private B b; public A(int v) { if(v<=0) return; z=v; b = new B(this) { protected boolean setB(int b) { return ! set2(b); } private boolean set2(int b) { y=z+b; System.out.println("Am I never used? (B)"); return false; } }; } public class B { private A outer; int y; public B(A o) { outer = new A(o.z - 1) { protected boolean setA(int v) { z = v+y; System.out.println("Am I never used? (A)"); return true; } }; } protected boolean setB(int b) { if(b > 30) return false; y = 1<<b; return true; } } } public class C { int z; boolean setC(int b) { if(b > 10) return false; z = 1<<(b*3); return true; } } private A a = new A(2); private A.B b = new A(3).b; private C c = new C(); public void test() { a.b.outer.setA(x%10); b.outer.b.setB(x%30); c.setC(x%10); } /* should have roughly 10K cycles to simplify the evaluation */ int x; void compute1() { for(int j=0;j<1;++j) // @WCA loop=1 for(int i= 7;i<167;++i) // @WCA loop=160 x = (x+1) * i; } static int ts, te, to; private static InnerClasses inst; public static void main(String[] args) { if(Config.MEASURE) { ts = Native.rdMem(Const.IO_CNT); te = Native.rdMem(Const.IO_CNT); to = te-ts; } inst = new InnerClasses(); invoke(); if (Config.MEASURE) { int dt = te-ts-to; System.out.print("wcet[AnnotLang1]:"); System.out.println(dt); } } static void invoke() { measure(); if (Config.MEASURE) te = Native.rdMem(Const.IO_CNT); } static void measure() { if (Config.MEASURE) ts = Native.rdMem(Const.IO_CNT); inst.test(); } }