minor refactoring

This commit is contained in:
hneemann 2018-11-25 16:32:16 +01:00
parent 3f9d7bc53a
commit d301c471de
4 changed files with 78 additions and 103 deletions

View File

@ -2,209 +2,209 @@
<fsm> <fsm>
<states> <states>
<state> <state>
<values>S=0111111</values>
<position x="0.0" y="-600.0"/> <position x="0.0" y="-600.0"/>
<number>0</number> <number>0</number>
<name>0</name> <name>0</name>
<radius>90</radius> <radius>90</radius>
<values>S=0111111</values>
</state> </state>
<state> <state>
<values>S=0000110</values>
<position x="360.0" y="-480.0"/> <position x="360.0" y="-480.0"/>
<number>1</number> <number>1</number>
<name>1</name> <name>1</name>
<radius>90</radius> <radius>90</radius>
<values>S=0000110</values>
</state> </state>
<state> <state>
<values>S=1011011</values>
<position x="540.0" y="-180.0"/> <position x="540.0" y="-180.0"/>
<number>2</number> <number>2</number>
<name>2</name> <name>2</name>
<radius>90</radius> <radius>90</radius>
<values>S=1011011</values>
</state> </state>
<state> <state>
<values>S=1001111</values>
<position x="540.0" y="180.0"/> <position x="540.0" y="180.0"/>
<number>3</number> <number>3</number>
<name>3</name> <name>3</name>
<radius>90</radius> <radius>90</radius>
<values>S=1001111</values>
</state> </state>
<state> <state>
<values>S=1100110</values>
<position x="360.0" y="480.0"/> <position x="360.0" y="480.0"/>
<number>4</number> <number>4</number>
<name>4</name> <name>4</name>
<radius>90</radius> <radius>90</radius>
<values>S=1100110</values>
</state> </state>
<state> <state>
<values>S=1101101</values>
<position x="0.0" y="600.0"/> <position x="0.0" y="600.0"/>
<number>5</number> <number>5</number>
<name>5</name> <name>5</name>
<radius>90</radius> <radius>90</radius>
<values>S=1101101</values>
</state> </state>
<state> <state>
<values>S=1111101</values>
<position x="-360.0" y="480.0"/> <position x="-360.0" y="480.0"/>
<number>6</number> <number>6</number>
<name>6</name> <name>6</name>
<radius>90</radius> <radius>90</radius>
<values>S=1111101</values>
</state> </state>
<state> <state>
<values>S=0000111</values>
<position x="-540.0" y="180.0"/> <position x="-540.0" y="180.0"/>
<number>7</number> <number>7</number>
<name>7</name> <name>7</name>
<radius>90</radius> <radius>90</radius>
<values>S=0000111</values>
</state> </state>
<state> <state>
<values>S=1111111</values>
<position x="-540.0" y="-180.0"/> <position x="-540.0" y="-180.0"/>
<number>8</number> <number>8</number>
<name>8</name> <name>8</name>
<radius>90</radius> <radius>90</radius>
<values>S=1111111</values>
</state> </state>
<state> <state>
<values>S=1101111</values>
<position x="-360.0" y="-480.0"/> <position x="-360.0" y="-480.0"/>
<number>9</number> <number>9</number>
<name>9</name> <name>9</name>
<radius>90</radius> <radius>90</radius>
<values>S=1101111</values>
</state> </state>
</states> </states>
<transitions> <transitions>
<transition> <transition>
<position x="212.46335" y="-637.39"/> <values></values>
<position x="212.4634" y="-637.39014"/>
<fromState reference="../../../states/state"/> <fromState reference="../../../states/state"/>
<toState reference="../../../states/state[2]"/> <toState reference="../../../states/state[2]"/>
<condition>en=1 &amp; clr=0</condition> <condition>en=1 &amp; clr=0</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="514.7641" y="-368.85846"/> <values></values>
<position x="514.76465" y="-368.8588"/>
<fromState reference="../../../states/state[2]"/> <fromState reference="../../../states/state[2]"/>
<toState reference="../../../states/state[3]"/> <toState reference="../../../states/state[3]"/>
<condition>en=1 &amp; clr=0</condition> <condition>en=1 &amp; clr=0</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<values></values>
<position x="602.36884" y="0.0"/> <position x="602.36884" y="0.0"/>
<fromState reference="../../../states/state[3]"/> <fromState reference="../../../states/state[3]"/>
<toState reference="../../../states/state[4]"/> <toState reference="../../../states/state[4]"/>
<condition>en=1 &amp; clr=0</condition> <condition>en=1 &amp; clr=0</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="504.7352" y="362.84113"/> <values></values>
<position x="504.73553" y="362.8413"/>
<fromState reference="../../../states/state[4]"/> <fromState reference="../../../states/state[4]"/>
<toState reference="../../../states/state[5]"/> <toState reference="../../../states/state[5]"/>
<condition>en=1 &amp; clr=0</condition> <condition>en=1 &amp; clr=0</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="196.05003" y="588.1501"/> <values></values>
<position x="196.05017" y="588.1505"/>
<fromState reference="../../../states/state[5]"/> <fromState reference="../../../states/state[5]"/>
<toState reference="../../../states/state[6]"/> <toState reference="../../../states/state[6]"/>
<condition>en=1 &amp; clr=0</condition> <condition>en=1 &amp; clr=0</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="-196.05022" y="588.15063"/> <values></values>
<position x="-196.05034" y="588.151"/>
<fromState reference="../../../states/state[6]"/> <fromState reference="../../../states/state[6]"/>
<toState reference="../../../states/state[7]"/> <toState reference="../../../states/state[7]"/>
<condition>en=1 &amp; clr=0</condition> <condition>en=1 &amp; clr=0</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="-504.73566" y="362.8414"/> <values></values>
<position x="-504.73608" y="362.84164"/>
<fromState reference="../../../states/state[7]"/> <fromState reference="../../../states/state[7]"/>
<toState reference="../../../states/state[8]"/> <toState reference="../../../states/state[8]"/>
<condition>en=1 &amp; clr=0</condition> <condition>en=1 &amp; clr=0</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<values></values>
<position x="-602.37085" y="0.0"/> <position x="-602.37085" y="0.0"/>
<fromState reference="../../../states/state[8]"/> <fromState reference="../../../states/state[8]"/>
<toState reference="../../../states/state[9]"/> <toState reference="../../../states/state[9]"/>
<condition>en=1 &amp; clr=0</condition> <condition>en=1 &amp; clr=0</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<values></values>
<position x="-514.77814" y="-368.86688"/> <position x="-514.77814" y="-368.86688"/>
<fromState reference="../../../states/state[9]"/> <fromState reference="../../../states/state[9]"/>
<toState reference="../../../states/state[10]"/> <toState reference="../../../states/state[10]"/>
<condition>en=1 &amp; clr=0</condition> <condition>en=1 &amp; clr=0</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="-212.45769" y="-637.37305"/> <values>ov=1</values>
<position x="-212.45776" y="-637.3733"/>
<fromState reference="../../../states/state[10]"/> <fromState reference="../../../states/state[10]"/>
<toState reference="../../../states/state"/> <toState reference="../../../states/state"/>
<condition>en=1 &amp; clr=0</condition> <condition>en=1 &amp; clr=0</condition>
<values>ov=1</values>
</transition> </transition>
<transition> <transition>
<position x="181.09329" y="-543.27985"/> <values></values>
<position x="181.09341" y="-543.2802"/>
<fromState reference="../../../states/state[2]"/> <fromState reference="../../../states/state[2]"/>
<toState reference="../../../states/state"/> <toState reference="../../../states/state"/>
<condition>clr=1</condition> <condition>clr=1</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="241.62177" y="-353.5137"/> <values></values>
<position x="241.62164" y="-353.51355"/>
<fromState reference="../../../states/state[3]"/> <fromState reference="../../../states/state[3]"/>
<toState reference="../../../states/state"/> <toState reference="../../../states/state"/>
<condition>clr=1</condition> <condition>clr=1</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="255.40965" y="-199.89899"/> <values></values>
<position x="255.40982" y="-199.89911"/>
<fromState reference="../../../states/state[4]"/> <fromState reference="../../../states/state[4]"/>
<toState reference="../../../states/state"/> <toState reference="../../../states/state"/>
<condition>clr=1</condition> <condition>clr=1</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="171.23235" y="-57.07745"/> <values></values>
<position x="171.23242" y="-57.077477"/>
<fromState reference="../../../states/state[5]"/> <fromState reference="../../../states/state[5]"/>
<toState reference="../../../states/state"/> <toState reference="../../../states/state"/>
<condition>clr=1</condition> <condition>clr=1</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="-0.0013983508" y="0.0"/> <values></values>
<position x="-0.0013722882" y="0.0"/>
<fromState reference="../../../states/state[6]"/> <fromState reference="../../../states/state[6]"/>
<toState reference="../../../states/state"/> <toState reference="../../../states/state"/>
<condition>clr=1</condition> <condition>clr=1</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="-171.24753" y="-57.082508"/> <values></values>
<position x="-171.24725" y="-57.082417"/>
<fromState reference="../../../states/state[7]"/> <fromState reference="../../../states/state[7]"/>
<toState reference="../../../states/state"/> <toState reference="../../../states/state"/>
<condition>clr=1</condition> <condition>clr=1</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="-255.4202" y="-199.9063"/> <values></values>
<position x="-255.41997" y="-199.90613"/>
<fromState reference="../../../states/state[8]"/> <fromState reference="../../../states/state[8]"/>
<toState reference="../../../states/state"/> <toState reference="../../../states/state"/>
<condition>clr=1</condition> <condition>clr=1</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="-241.6123" y="-353.50153"/> <values></values>
<position x="-241.6128" y="-353.50217"/>
<fromState reference="../../../states/state[9]"/> <fromState reference="../../../states/state[9]"/>
<toState reference="../../../states/state"/> <toState reference="../../../states/state"/>
<condition>clr=1</condition> <condition>clr=1</condition>
<values></values>
</transition> </transition>
<transition> <transition>
<position x="-181.08603" y="-543.25806"/> <values></values>
<position x="-181.08626" y="-543.2587"/>
<fromState reference="../../../states/state[10]"/> <fromState reference="../../../states/state[10]"/>
<toState reference="../../../states/state"/> <toState reference="../../../states/state"/>
<condition>clr=1</condition> <condition>clr=1</condition>
<values></values>
</transition> </transition>
</transitions> </transitions>
</fsm> </fsm>

View File

@ -9,8 +9,11 @@ import de.neemann.digital.draw.graphics.VectorFloat;
/** /**
* A movable element. * A movable element.
*
* @param <A> the type of the implementing class
*/ */
public abstract class Movable { public class Movable<A extends Movable> {
private String values = "";
private VectorFloat position; private VectorFloat position;
private transient VectorFloat speed; private transient VectorFloat speed;
private transient VectorFloat force; private transient VectorFloat force;
@ -47,7 +50,7 @@ public abstract class Movable {
* *
* @param df the force to add * @param df the force to add
*/ */
public void addToForce(VectorFloat df) { void addToForce(VectorFloat df) {
if (force == null) if (force == null)
force = df; force = df;
else else
@ -60,7 +63,7 @@ public abstract class Movable {
* @param pos the position of the causer of the force * @param pos the position of the causer of the force
* @param reach the reach of the force * @param reach the reach of the force
*/ */
public void addRepulsive(VectorFloat pos, float reach) { void addRepulsive(VectorFloat pos, float reach) {
final VectorFloat dif = position.sub(pos); final VectorFloat dif = position.sub(pos);
float dist = dif.len(); float dist = dif.len();
if (dist == 0) { if (dist == 0) {
@ -96,14 +99,14 @@ public abstract class Movable {
* @param target the targe * @param target the targe
* @param scale a scaling factor * @param scale a scaling factor
*/ */
public void addAttractiveTo(VectorFloat target, float scale) { void addAttractiveTo(VectorFloat target, float scale) {
addToForce(target.sub(position).mul(scale)); addToForce(target.sub(position).mul(scale));
} }
/** /**
* @return the force * @return the force
*/ */
public VectorFloat getForce() { VectorFloat getForce() {
if (force == null) if (force == null)
resetForce(); resetForce();
return force; return force;
@ -112,7 +115,7 @@ public abstract class Movable {
/** /**
* Sets the force to zero * Sets the force to zero
*/ */
public void resetForce() { void resetForce() {
this.force = new VectorFloat(0, 0); this.force = new VectorFloat(0, 0);
} }
@ -146,7 +149,23 @@ public abstract class Movable {
} }
/** /**
* @return the output values of this moveable * Sets the values to define as a comma separated string with assignments: 'A=0,B=1'
*
* @param values the assignments
* @return this for chained calls
*/ */
abstract public String getValues(); public A setValues(String values) {
if (!this.values.equals(values)) {
this.values = values;
wasModified();
}
return (A) this;
}
/**
* @return the state value map
*/
public String getValues() {
return values;
}
} }

View File

@ -12,7 +12,7 @@ import java.util.List;
/** /**
* Represents a state * Represents a state
*/ */
public class State extends Movable { public class State extends Movable<State> {
/** /**
* The default state radius * The default state radius
*/ */
@ -25,7 +25,6 @@ public class State extends Movable {
private int number = -1; private int number = -1;
private String name; private String name;
private int radius; private int radius;
private String values = "";
/** /**
* Creates a new state * Creates a new state
@ -38,27 +37,6 @@ public class State extends Movable {
this.radius = DEFAULT_RAD; this.radius = DEFAULT_RAD;
} }
/**
* Sets the values to define as a comma separated string with assignments: 'A=0,B=1'
*
* @param values the assignments
* @return this for chained calls
*/
public State setValues(String values) {
if (!this.values.equals(values)) {
this.values = values;
wasModified();
}
return this;
}
/**
* @return the state value map
*/
public String getValues() {
return values;
}
/** /**
* @return the name of the state * @return the name of the state
*/ */
@ -126,9 +104,9 @@ public class State extends Movable {
pos = pos.add(delta); pos = pos.add(delta);
gr.drawText(pos, pos.add(new Vector(1, 0)), name, Orientation.CENTERCENTER, Style.NORMAL); gr.drawText(pos, pos.add(new Vector(1, 0)), name, Orientation.CENTERCENTER, Style.NORMAL);
if (values != null) { if (getValues() != null && getValues().length() > 0) {
pos = pos.add(delta); pos = pos.add(delta);
gr.drawText(pos, pos.add(new Vector(1, 0)), values, Orientation.CENTERCENTER, Style.NORMAL); gr.drawText(pos, pos.add(new Vector(1, 0)), getValues(), Orientation.CENTERCENTER, Style.NORMAL);
} }
} }
} }

View File

@ -18,13 +18,12 @@ import java.util.List;
/** /**
* Represents a transition * Represents a transition
*/ */
public class Transition extends Movable { public class Transition extends Movable<Transition> {
private static final float EXPANSION_TRANS = 0.001f; private static final float EXPANSION_TRANS = 0.001f;
private final State fromState; private final State fromState;
private final State toState; private final State toState;
private String condition; private String condition;
private String values = "";
private transient Expression conditionExpression; private transient Expression conditionExpression;
@ -142,9 +141,9 @@ public class Transition extends Movable {
if (condition != null && condition.length() > 0) { if (condition != null && condition.length() > 0) {
gr.drawText(getPos(), getPos().add(new Vector(1, 0)), condition, Orientation.CENTERCENTER, Style.NORMAL); gr.drawText(getPos(), getPos().add(new Vector(1, 0)), condition, Orientation.CENTERCENTER, Style.NORMAL);
} }
if (values != null && values.length() > 0) { if (getValues() != null && getValues().length() > 0) {
VectorFloat pos = getPos().add(new VectorFloat(0, Style.NORMAL.getFontSize())); VectorFloat pos = getPos().add(new VectorFloat(0, Style.NORMAL.getFontSize()));
gr.drawText(pos, pos.add(new Vector(1, 0)), values, Orientation.CENTERCENTER, Style.NORMAL); gr.drawText(pos, pos.add(new Vector(1, 0)), getValues(), Orientation.CENTERCENTER, Style.NORMAL);
} }
} }
@ -206,27 +205,6 @@ public class Transition extends Movable {
return getConditionExpression() != null; return getConditionExpression() != null;
} }
/**
* @return the transitions values
*/
public String getValues() {
return values;
}
/**
* Sets the values
*
* @param values the values to use
* @return this for chained calls
*/
public Transition setValues(String values) {
if (!this.values.equals(values)) {
this.values = values;
wasModified();
}
return this;
}
/** /**
* @return the starting state * @return the starting state
*/ */