var classes = new Array[Klass]
var dept = 5
- var loops = 10000
+ var loops = 50000
var middle = 0
+ var dry = false
+ var check = false
fun genhier
do
write "end"
end
- write "var a:{classes.first}[Root] = new {classes.last}[Root]"
- write "var x = 0"
- write "for i in [0..{loops}[ do"
- write "\tfor j in [0..{loops}[ do"
- write "\t\tif a isa {classes[middle]}[Root] then x += 1"
+ write "fun test(a,b: Root, loops, start: Int)"
+ write "do"
+ write "var x = start"
+ write "var i = 0"
+ write "while i < loops do"
+ write "\tvar j = 0"
+ write "\twhile j < loops do"
+ var test
+ if dry then test = "" else test = "a isa {classes[middle]}[Root] and "
+ write "\t\tif {test}x >= 0 then"
+ if check then write "\t\tx += 1"
+ write "\telse"
+ write "\t\t\tx -= 1"
+ write "\t\t\ta = b"
+ write "\t\tend"
+ write "\t\tj += 1"
write "\tend"
+ write "\ti += 1"
write "end"
write "print x"
+ write "end"
+
+ write "var a:{classes.first}[Root] = new {classes.last}[Root]"
+ write "var b:{classes.first}[Root] = new {classes.first}[Root]"
+ for c in classes do
+ write "\t\t\tif a.id > 0 then a = new {c}[Root]"
+ end
+ write "test(b, b, 10, -100)"
+ write "test(a, a, {loops}, 0)"
file.close
end
write "static public void main(String args[]) \{"
if interfaces then
write "\t{classes.first}<Root> a = new X{classes.last}<Root>();"
- write "\t{classes.first}<Root> b = new X{classes.last}<Root>();"
+ write "\t{classes.first}<Root> b = new X{classes.first}<Root>();"
+ for c in classes do
+ write "\t\t\tif (a.id() > 0) a = new X{c}<Root>();"
+ end
else
write "\t{classes.first}<Root> a = new {classes.last}<Root>();"
- write "\t{classes.first}<Root> b = new X{classes.last}<Root>();"
+ write "\t{classes.first}<Root> b = new {classes.first}<Root>();"
+ for c in classes do
+ write "\t\t\tif (a.id() > 0) a = new {c}<Root>();"
+ end
end
- write "\ttest(a, b);"
+ write "\ttest(b, b, 10, -100);"
+ write "\ttest(a, a, {loops}, 0);"
write "\}"
- write "static public void test({classes.first}<Root> a, {classes.first}<Root> b) \{"
- write "\tint x = 0;"
- write "\tfor(int i = 0; i < {loops}; i++) \{"
- write "\t\tfor(int j = 0; j < {loops}; j++) \{"
- write "\t\t\tif(a instanceof {classes[middle]}) \{ x++; \} else \{ a = b; \};"
+ write "static public void test({classes.first}<Root> a, {classes.first}<Root> b, int loops, int start) \{"
+ write "\tint x = start;"
+ write "\tfor(int i = 0; i < loops; i++) \{"
+ write "\t\tfor(int j = 0; j < loops; j++) \{"
+ var test
+ if dry then test = "" else test = "a instanceof {classes[middle]} && "
+ write "\t\t\tif({test}x>=0) \{"
+ if check then write "\t\t\t\tx += 1"
+ write "\t\t\t\} else \{ x--; a = b;\}"
write "\t\t}"
write "\t\}"
write "\tSystem.out.println(x);"
write "static void Main(string[] args) \{"
if interfaces then
write "\t{classes.first}<Root> a = new X{classes.last}<Root>();"
- write "\t{classes.first}<Root> b = new X{classes.last}<Root>();"
+ write "\t{classes.first}<Root> b = new X{classes.first}<Root>();"
+ for c in classes do
+ write "\t\t\tif (a.Id() > 0) a = new X{c}<Root>();"
+ end
else
write "\t{classes.first}<Root> a = new {classes.last}<Root>();"
- write "\t{classes.first}<Root> b = new {classes.last}<Root>();"
+ write "\t{classes.first}<Root> b = new {classes.first}<Root>();"
+ for c in classes do
+ write "\t\t\tif (a.Id() > 0) a = new {c}<Root>();"
+ end
end
- write "\tTest(a, b);"
+ write "\tTest(b, b, 10, -100);"
+ write "\tTest(a, a, {loops}, 0);"
write "\}"
- write "static void Test({classes.first}<Root> a, {classes.first}<Root> b) \{"
- write "\tint x = 0;"
- write "\tfor(int i = 0; i < {loops}; i++) \{"
- write "\t\tfor(int j = 0; j < {loops}; j++) \{"
- write "\t\t\tif(a is {classes[middle]}<Root>) \{ x++; \} else \{ a = b; \};"
+ write "static void Test({classes.first}<Root> a, {classes.first}<Root> b, int loops, int start) \{"
+ write "\tint x = start;"
+ write "\tfor(int i = 0; i < loops; i++) \{"
+ write "\t\tfor(int j = 0; j < loops; j++) \{"
+ var test
+ if dry then test = "" else test = "a is {classes[middle]}<Root> && "
+ write "\t\t\tif({test}x>=0) \{"
+ if check then write "\t\t\t\tx++;"
+ write "\} else \{ x--; a = b; \};"
write "\t\t}"
write "\t\}"
write "\tSystem.Console.WriteLine(x);"
write "def main(args: Array[String]) = \{"
if interfaces then
write "\tvar a:{classes.first}[Root] = new X{classes.last}[Root]()"
- write "\tvar b:{classes.first}[Root] = new X{classes.last}[Root]()"
+ write "\tvar b:{classes.first}[Root] = new X{classes.first}[Root]()"
+ for c in classes do
+ write "\t\t\tif (a.id > 0) a = new X{c}[Root]();"
+ end
else
write "\tvar a:{classes.first}[Root] = new {classes.last}[Root]()"
- write "\tvar b:{classes.first}[Root] = new {classes.last}[Root]()"
+ write "\tvar b:{classes.first}[Root] = new {classes.first}[Root]()"
+ for c in classes do
+ write "\t\t\tif (a.id > 0) a = new {c}[Root]();"
+ end
end
- write "\ttest(a, b)"
+ write "\ttest(b, b, 10, -100)"
+ write "\ttest(a, a, {loops}, 0)"
write "\}"
- write "def test(a:{classes.first}[Root], b:{classes.first}[Root]) = \{"
- write "\tvar o = a"
- write "\tvar x = 0"
- write "\tfor (i <- 0 to {loops}) \{"
- write "\t\tfor (j <- 0 to {loops}) \{"
- write "\t\tif (o.isInstanceOf[{classes[middle]}[Root]]) \{ x = x + 1 \} else \{ o = b \}"
+ write "def test(aa:{classes.first}[Root], b:{classes.first}[Root], l: Int, start: Int) = \{"
+ write "\tvar a = aa"
+ write "\tvar x = start"
+ write "\tvar loops = l"
+ write "\tvar i = 0"
+ write "\twhile (i < loops) \{"
+ write "\t\tvar j = 0"
+ write "\t\twhile (j < loops) \{"
+ var test
+ if dry then test = "" else test = "a.isInstanceOf[{classes[middle]}[Root]] && "
+ write "\t\tif ({test}x>=0) \{"
+ if check then write "\t\t\tx += 1"
+ write "\} else \{ x = x - 1; a = b; \}"
+ write "\t\tj += 1"
write "\t\t\}"
+ write "\ti += 1"
write "\t\}"
write "\t\t\tprintln(x)"
write "\}"
write "\};"
end
- write "void test({classes.first}<Root>* a, {classes.first}<Root>* b) \{"
- write "\tint x = 0;"
- write "\tfor(int i = 0; i < {loops}; i++) \{"
- write "\t\tfor(int j = 0; j < {loops}; j++) \{"
- write "\t\t\t{classes[middle]}<Root>* to = dynamic_cast<{classes[middle]}<Root>*>(a);"
- write "\t\tif(to != 0) \{ x++; \} else \{ a = b; \}"
+ write "void test({classes.first}<Root>* a, {classes.first}<Root>* b, int loops, int start) \{"
+ write "\tint x = start;"
+ write "\tfor(int i = 0; i < loops; i++) \{"
+ write "\t\tfor(int j = 0; j < loops; j++) \{"
+ var test
+ if dry then test = "" else
+ write "\t\t\t{classes[middle]}<Root>* to = dynamic_cast<{classes[middle]}<Root>*>(a);"
+ test = "to != 0 &&"
+ end
+ write "\t\tif({test}x>=0) \{"
+ if check then write "\t\t\tx += 1"
+ write "\} else \{ x--; a = b;\}"
write "\t\t}"
write "\t\}"
write "\tstd::cout << x << std::endl;"
write "\}"
write "int main(int argc, char **argv) \{"
- write "\t{classes.first}<Root>* a = new {classes.first}<Root>();"
+ write "\t{classes.first}<Root>* a = new {classes.last}<Root>();"
write "\t{classes.first}<Root>* b = new {classes.first}<Root>();"
- write "\ttest(a, b);"
+ for c in classes do
+ write "\t\t\tif (a->id() > 0) a = new {c}<Root>();"
+ end
+ write "\ttest(b, b, 10, -100);"
+ write "\ttest(a, a, {loops}, 0);"
write "\}"
file.close
write "\t\t\tb: {classes.first}[ROOT]"
write "\t\tdo"
write "\t\t\tcreate \{{classes.last}[ROOT]\} a"
- write "\t\t\tcreate \{{classes.last}[ROOT]\} b"
- write "\t\t\ttest(a, b)"
+ write "\t\t\tcreate \{{classes.first}[ROOT]\} b"
+ for c in classes do
+ write "\t\t\tif a.id > 0 then create \{{c}[ROOT]\} a end"
+ end
+ write "\t\t\ttest(b, b, 10, -100)"
+ write "\t\t\ttest(a, a, {loops}, 0)"
write "\t\tend"
- write "\ttest(a: {classes.first}[ROOT]; b: {classes.first}[ROOT]){istk}"
+ write "\ttest(a: {classes.first}[ROOT]; b: {classes.first}[ROOT]; l: INTEGER; start: INTEGER){istk}"
write "\t\tlocal"
write "\t\t\to: {classes.first}[ROOT]"
write "\t\t\tto: {classes[middle]}[ROOT]"
write "\t\t\ti: INTEGER"
write "\t\t\tj: INTEGER"
write "\t\t\tx: INTEGER"
+ write "\t\t\tloops: INTEGER"
write "\t\tdo"
write "\t\t\to := a"
- write "\t\t\tfrom i := 0 until i>={loops} loop"
- write "\t\t\t\tfrom j := 0 until j>={loops} loop"
- write "\t\t\t\t\tto ?= o"
- write "\t\t\t\t\tif to /= Void then x := x + 1 else o := b end"
+ write "\t\t\tx := start"
+ write "\t\t\tloops := l"
+ write "\t\t\tfrom i := 0 until i>=loops loop"
+ write "\t\t\t\tfrom j := 0 until j>=loops loop"
+ var test
+ if dry then
+ test = ""
+ else
+ write "\t\t\t\t\tto ?= o"
+ test = "to /= Void and then "
+ end
+ write "\t\t\t\t\tif {test}x >= 0 then"
+ if check then write "\t\t\t\t\tx := x + 1"
+ write "\t\t\t\t\telse x := x - 1; o := b end"
write "\t\t\t\t\tj := j + 1"
write "\t\t\t\tend"
write "\t\t\t\ti := i + 1"