Separate filtering from pairing up changes in membershipChanges

This commit is contained in:
Mark Haines 2017-07-24 14:35:17 +01:00
parent dab501854a
commit 47fc2c38d2
2 changed files with 19 additions and 13 deletions

View file

@ -20,7 +20,7 @@ fi
ineffassign ./src/ ineffassign ./src/
go tool vet --all --shadow ./src go tool vet --all --shadow ./src
gocyclo -over 16 src/ gocyclo -over 12 src/
gb test gb test
# Check that all the packages can build. # Check that all the packages can build.

View file

@ -175,7 +175,7 @@ type stateChange struct {
added types.StateEntry added types.StateEntry
} }
func membershipChanges(removed, added []types.StateEntry) []stateChange { func pairUpChanges(removed, added []types.StateEntry) []stateChange {
var ai int var ai int
var ri int var ri int
var result []stateChange var result []stateChange
@ -183,22 +183,14 @@ func membershipChanges(removed, added []types.StateEntry) []stateChange {
switch { switch {
case ai == len(added): case ai == len(added):
for _, s := range removed[ri:] { for _, s := range removed[ri:] {
if s.EventTypeNID == types.MRoomMemberNID { result = append(result, stateChange{removed: s})
result = append(result, stateChange{removed: s})
}
} }
return result return result
case ri == len(removed): case ri == len(removed):
for _, s := range removed[ai:] { for _, s := range added[ai:] {
if s.EventTypeNID == types.MRoomMemberNID { result = append(result, stateChange{added: s})
result = append(result, stateChange{added: s})
}
} }
return result return result
case added[ai].EventTypeNID != types.MRoomMemberNID:
ai++
case removed[ri].EventTypeNID != types.MRoomMemberNID:
ri++
case added[ai].StateKeyTuple == removed[ri].StateKeyTuple: case added[ai].StateKeyTuple == removed[ri].StateKeyTuple:
result = append(result, stateChange{ result = append(result, stateChange{
removed: removed[ri], removed: removed[ri],
@ -215,3 +207,17 @@ func membershipChanges(removed, added []types.StateEntry) []stateChange {
} }
} }
} }
// membershipChanges pairs up the membership state changes from a sorted list
// of state removed and a sorted list of state added.
func membershipChanges(removed, added []types.StateEntry) []stateChange {
changes := pairUpChanges(removed, added)
var result []stateChange
for _, c := range changes {
if c.added.EventTypeNID == types.MRoomMemberNID ||
c.removed.EventTypeNID == types.MRoomMemberNID {
result = append(result, c)
}
}
return result
}