Skip to content

Commit

Permalink
Remove Graph.ReverseEdges by merging with Graph.Edges.
Browse files Browse the repository at this point in the history
  • Loading branch information
tttppp committed Apr 24, 2019
1 parent 5ca7e04 commit a85af80
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 20 deletions.
3 changes: 1 addition & 2 deletions godip.go
Original file line number Diff line number Diff line change
Expand Up @@ -277,8 +277,7 @@ type Graph interface {
SC(Province) *Nation
Path(src, dst Province, reverse bool, filter PathFilter) []Province
Coasts(Province) []Province
Edges(src Province) map[Province]map[Flag]bool
ReverseEdges(src Province) map[Province]map[Flag]bool
Edges(src Province, reverse bool) map[Province]map[Flag]bool
SCs(Nation) []Province
AllSCs() []Province
Provinces() []Province
Expand Down
14 changes: 4 additions & 10 deletions graph/graph.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,11 @@ func (self *Graph) AllSCs() (result []godip.Province) {
return
}

func (self *Graph) Edges(n godip.Province) (result map[godip.Province]map[godip.Flag]bool) {
// Edges returns the edges leading away from the specified province, or if reverse
// is set to true then it instead returns the edges leading to it.
func (self *Graph) Edges(n godip.Province, reverse bool) (result map[godip.Province]map[godip.Flag]bool) {
result = map[godip.Province]map[godip.Flag]bool{}
for p, edge := range self.edges(n, false) {
result[p] = edge.Flags
}
return
}

func (self *Graph) ReverseEdges(n godip.Province) (result map[godip.Province]map[godip.Flag]bool) {
result = map[godip.Province]map[godip.Flag]bool{}
for p, edge := range self.edges(n, true) {
for p, edge := range self.edges(n, reverse) {
result[p] = edge.Flags
}
return
Expand Down
11 changes: 4 additions & 7 deletions orders/move.go
Original file line number Diff line number Diff line change
Expand Up @@ -367,9 +367,9 @@ func MoveSupport(r godip.Resolver, src, dst godip.Province, forbiddenSupports []

func HasEdge(v godip.Validator, typ godip.UnitType, src, dst godip.Province) bool {
if typ == godip.Army {
return v.Graph().Flags(dst)[godip.Land] && v.Graph().Edges(src)[dst][godip.Land]
return v.Graph().Flags(dst)[godip.Land] && v.Graph().Edges(src, false)[dst][godip.Land]
} else {
return v.Graph().Flags(dst)[godip.Sea] && v.Graph().Edges(src)[dst][godip.Sea]
return v.Graph().Flags(dst)[godip.Sea] && v.Graph().Edges(src, false)[dst][godip.Sea]
}
}

Expand All @@ -384,10 +384,7 @@ func PossibleMovesUnit(v godip.Validator, unitType godip.UnitType, start godip.P
noConvoyStr = string(*noConvoy)
}
return v.MemoizeProvSlice(fmt.Sprintf("PossibleMovesUnit(%v,%v,%v,%v,%v)", unitType, start, reverse, allowConvoy, noConvoyStr), func() []godip.Province {
neighbours := v.Graph().Edges(start)
if reverse {
neighbours = v.Graph().ReverseEdges(start)
}
neighbours := v.Graph().Edges(start, reverse)
ends := map[godip.Province]bool{}
if unitType == godip.Army {
for end, flags := range neighbours {
Expand Down Expand Up @@ -472,7 +469,7 @@ func movePossible(v godip.Validator, typ godip.UnitType, src, dst godip.Province
return godip.ErrIllegalDestination
}
if !allowConvoy {
flags, found := v.Graph().Edges(src)[dst]
flags, found := v.Graph().Edges(src, false)[dst]
if !found {
return godip.ErrIllegalMove
}
Expand Down
2 changes: 1 addition & 1 deletion phase/phase.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ func (self *Phase) PostProcess(s godip.State) (err error) {
} else if self.Ty == godip.Movement {
for prov, unit := range s.Dislodgeds() {
hasRetreat := false
for edge, _ := range s.Graph().Edges(prov) {
for edge, _ := range s.Graph().Edges(prov, false) {
if _, _, ok := s.Unit(edge); !ok && !s.Bounce(prov, edge) {
if orders.HasEdge(s, unit.Type, prov, edge) {
godip.Logf("%v can retreat to %v", prov, edge)
Expand Down

0 comments on commit a85af80

Please sign in to comment.