diff --git a/AlgebraicDataflowArchitectureModel/models/CarRoad.model b/AlgebraicDataflowArchitectureModel/models/CarRoad.model new file mode 100644 index 0000000..4822412 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/models/CarRoad.model @@ -0,0 +1,48 @@ +init { + roads := { + "static": { + "road1": { + "left": "road2" + }, + "road2": { + "right": "road1" + } + }, + "dynamic": { + "road1": { + "left": nil, + "right": nil, + "straight": nil + }, + "road2": { + "left": nil, + "right": nil, + "straight": nil + } + } + } +} + +channel addVehicle { + out vehicles(vehicles: Map, addVehicle(id: Str, road: Str, turn: Str)) = insert(vehicles, id, {"road": road, "turn": turn, "nextTurn": ""}) + out roads.dynamic.{road}.{turn}(roadVehicles: Map, addVehicle(id, road, turn)) = insert(raodVehicles, id, true) +} + +channel turn(vid: Str){ + out vehicles.{vid}.nextTurn(cur: Str, turn(next: Str)) = next +} + +channel turn2 { + in vehicles.{vid}.nextTurn(cur: Str, turn2(nextTurn: Str, road: Str, turn: Str, nextRoad: Str)) = nextTurn + ref vehicles.{vid}.road(curRoad: Str, turn2(nextTurn, curRoad, turn, nextRoad)) + ref vehicles.{vid}.turn(curTurn: Str, turn2(nextTurn, road, curTurn, nextRoad)) + ref roads.static.{road}.{turn}(nextRoad: Str, turn2(nextTurn, road, turn, nextRoad)) + out vehicles.{vid}.turn(cur: Str, turn2(nextTurn, road, turn, nextRoad)) = nextTurn + out roads.dynamic.{road}.{turn}.{vid}(curV: Bool, turn2(nextTurn, road, turn, nextRoad)) = false + out roads.dynamic.{nextRoad}.{nextTurn}(roadVehicles: Map, turn2(nextTurn, road, turn, nextRoad)) = insert(roadVehicles, vid, true) +} + + + + +