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/
go tool vet --all --shadow ./src
gocyclo -over 16 src/
gocyclo -over 12 src/
gb test
# Check that all the packages can build.

View file

@ -175,7 +175,7 @@ type stateChange struct {
added types.StateEntry
}
func membershipChanges(removed, added []types.StateEntry) []stateChange {
func pairUpChanges(removed, added []types.StateEntry) []stateChange {
var ai int
var ri int
var result []stateChange
@ -183,22 +183,14 @@ func membershipChanges(removed, added []types.StateEntry) []stateChange {
switch {
case ai == len(added):
for _, s := range removed[ri:] {
if s.EventTypeNID == types.MRoomMemberNID {
result = append(result, stateChange{removed: s})
}
result = append(result, stateChange{removed: s})
}
return result
case ri == len(removed):
for _, s := range removed[ai:] {
if s.EventTypeNID == types.MRoomMemberNID {
result = append(result, stateChange{added: s})
}
for _, s := range added[ai:] {
result = append(result, stateChange{added: s})
}
return result
case added[ai].EventTypeNID != types.MRoomMemberNID:
ai++
case removed[ri].EventTypeNID != types.MRoomMemberNID:
ri++
case added[ai].StateKeyTuple == removed[ri].StateKeyTuple:
result = append(result, stateChange{
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
}