- addHighLevelStateSubcomponentID("c00", cell00);
- addHighLevelStateSubcomponentID("c01", cell01);
- addHighLevelStateSubcomponentID("c10", cell10);
- addHighLevelStateSubcomponentID("c11", cell11);
- addAtomicHighLevelStateID("q");
- }
-
- @Override
- public void setAtomicHighLevelState(String stateID, Object newState)
- {
- switch (stateID)
- {
- case "q":
- BitVector newStateCasted = (BitVector) newState;
- setHighLevelState("c00.q", newStateCasted.subVector(0, 4));
- setHighLevelState("c01.q", newStateCasted.subVector(4, 8));
- setHighLevelState("c10.q", newStateCasted.subVector(8, 12));
- setHighLevelState("c11.q", newStateCasted.subVector(12, 16));
- break;
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- @Override
- public Object getAtomicHighLevelState(String stateID)
- {
- switch (stateID)
- {
- case "q":
- BitVector q00 = (BitVector) getHighLevelState("c00.q");
- BitVector q01 = (BitVector) getHighLevelState("c01.q");
- BitVector q10 = (BitVector) getHighLevelState("c10.q");
- BitVector q11 = (BitVector) getHighLevelState("c11.q");
- return q00.concat(q01).concat(q10).concat(q11);
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
+ StandardHighLevelStateHandler highLevelStateHandler = new StandardHighLevelStateHandler(this);
+ highLevelStateHandler.addSubcomponentHighLevelState("c00", DelegatingSubcomponentHighLevelStateHandler::new).set(cell00, null);
+ highLevelStateHandler.addSubcomponentHighLevelState("c01", DelegatingSubcomponentHighLevelStateHandler::new).set(cell01, null);
+ highLevelStateHandler.addSubcomponentHighLevelState("c10", DelegatingSubcomponentHighLevelStateHandler::new).set(cell10, null);
+ highLevelStateHandler.addSubcomponentHighLevelState("c11", DelegatingSubcomponentHighLevelStateHandler::new).set(cell11, null);
+ highLevelStateHandler.addAtomicHighLevelState("q", BitVectorSplittingAtomicHighLevelStateHandler::new)
+ .set(Arrays.asList("c11.q", "c10.q", "c01.q", "c00.q"), Arrays.asList(4, 4, 4, 4));
+ setHighLevelStateHandler(highLevelStateHandler);