1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.qedeq.kernel.bo.logic.model;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21 import org.qedeq.base.utility.Enumerator;
22
23
24
25
26
27
28
29 public final class FunctionVariableInterpreter {
30
31
32 private Model model;
33
34
35 private List functionVariables;
36
37
38 private List functionVariableCounters;
39
40
41
42
43
44
45 public FunctionVariableInterpreter(final Model model) {
46 this.model = model;
47 functionVariables = new ArrayList();
48 functionVariableCounters = new ArrayList();
49 }
50
51
52
53
54
55
56
57 private int getFunctionVariableSelection(final FunctionVariable var) {
58 int selection;
59 if (functionVariables.contains(var)) {
60 final int index = functionVariables.indexOf(var);
61 selection = ((Enumerator) functionVariableCounters.get(index)).getNumber();
62 } else {
63
64 selection = 0;
65 functionVariables.add(var);
66 functionVariableCounters.add(new Enumerator());
67 }
68 return selection;
69 }
70
71
72
73
74
75
76
77 public Function getFunction(final FunctionVariable var) {
78 return model.getFunction(var.getArgumentNumber(),
79 getFunctionVariableSelection(var));
80 }
81
82
83
84
85
86
87 public boolean next() {
88 boolean next = true;
89 for (int i = functionVariables.size() - 1; i >= -1; i--) {
90 if (i < 0) {
91 next = false;
92 break;
93 }
94 final FunctionVariable var = (FunctionVariable) functionVariables.get(i);
95 final Enumerator number = (Enumerator) functionVariableCounters.get(i);
96 if (number.getNumber() + 1 < model.getFunctionSize(var.getArgumentNumber())) {
97 number.increaseNumber();
98 break;
99 }
100 number.reset();
101 }
102 return next;
103 }
104
105 public String toString() {
106 final StringBuffer buffer = new StringBuffer();
107 buffer.append("function variables {");
108 for (int i = 0; i < functionVariables.size(); i++) {
109 if (i > 0) {
110 buffer.append(", ");
111 }
112 FunctionVariable var = (FunctionVariable) functionVariables.get(i);
113 buffer.append(functionVariables.get(i));
114 buffer.append("=");
115 buffer.append(getFunction(var));
116 }
117 buffer.append("}");
118 return buffer.toString();
119 }
120
121
122
123
124 public void clear() {
125 functionVariables.clear();
126 functionVariableCounters.clear();
127 }
128
129 }