v2/tools/generator/internal/astmodel/property_reference_set.go (37 lines of code) (raw):

/* * Copyright (c) Microsoft Corporation. * Licensed under the MIT license. */ package astmodel // PropertyReferenceSet is a set of property references type PropertyReferenceSet struct { references map[PropertyReference]struct{} } // NewPropertyReferenceSet returns a new empty property reference set func NewPropertyReferenceSet() *PropertyReferenceSet { return &PropertyReferenceSet{ references: make(map[PropertyReference]struct{}), } } // IsEmpty returns true if the set is empty, false otherwise. func (set *PropertyReferenceSet) IsEmpty() bool { return len(set.references) == 0 } // Add ensures the set contains the specified references. func (set *PropertyReferenceSet) Add(refs ...PropertyReference) { for _, r := range refs { set.references[r] = struct{}{} } } // Contains returns true if the set contains the specified reference, false otherwise. func (set *PropertyReferenceSet) Contains(ref PropertyReference) bool { _, ok := set.references[ref] return ok } // Except returns a new PropertyReferenceSet containing only the items in this set that are not in the provided set func (set *PropertyReferenceSet) Except(otherSet *PropertyReferenceSet) *PropertyReferenceSet { result := NewPropertyReferenceSet() for r := range set.references { if !otherSet.Contains(r) { result.Add(r) } } return result } // AsSlice returns a slice (in random order) of all the property references in this set func (set *PropertyReferenceSet) AsSlice() []PropertyReference { result := make([]PropertyReference, 0, len(set.references)) for r := range set.references { result = append(result, r) } return result }