Full Mattermost server source with integrated Community Enterprise features. Includes vendor directory for offline/air-gapped builds. Structure: - enterprise-impl/: Enterprise feature implementations - enterprise-community/: Init files that register implementations - enterprise/: Bridge imports (community_imports.go) - vendor/: All dependencies for offline builds Build (online): go build ./cmd/mattermost Build (offline/air-gapped): go build -mod=vendor ./cmd/mattermost 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
package set
|
|
|
|
// Union calculates the union of two or more sets
|
|
func Union(set1, set2 Set, sets ...Set) Set {
|
|
u := set1.Copy()
|
|
set2.Each(func(item interface{}) bool {
|
|
u.Add(item)
|
|
return true
|
|
})
|
|
|
|
for _, set := range sets {
|
|
set.Each(func(item interface{}) bool {
|
|
u.Add(item)
|
|
return true
|
|
})
|
|
}
|
|
|
|
return u
|
|
}
|
|
|
|
// Intersection calculates the intersection of two or more sets
|
|
func Intersection(set1, set2 Set, sets ...Set) Set {
|
|
all := Union(set1, set2, sets...)
|
|
result := Union(set1, set2, sets...)
|
|
|
|
all.Each(func(item interface{}) bool {
|
|
if !set1.Has(item) || !set2.Has(item) {
|
|
result.Remove(item)
|
|
}
|
|
|
|
for _, set := range sets {
|
|
if !set.Has(item) {
|
|
result.Remove(item)
|
|
}
|
|
}
|
|
return true
|
|
})
|
|
return result
|
|
}
|
|
|
|
// Difference calculates the difference of two or more sets
|
|
func Difference(set1, set2 Set, sets ...Set) Set {
|
|
s := set1.Copy()
|
|
s.Separate(set2)
|
|
for _, set := range sets {
|
|
s.Separate(set) // seperate is thread safe
|
|
}
|
|
return s
|
|
}
|
|
|
|
// SymmetricDifference calculates the symmetric difference of two or more sets
|
|
func SymmetricDifference(s Set, t Set) Set {
|
|
u := Difference(s, t)
|
|
v := Difference(t, s)
|
|
return Union(u, v)
|
|
}
|