123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- // CookieJar - A contestant's algorithm toolbox
- // Copyright (c) 2013 Peter Szilagyi. All rights reserved.
- //
- // CookieJar is dual licensed: use of this source code is governed by a BSD
- // license that can be found in the LICENSE file. Alternatively, the CookieJar
- // toolbox may be used in accordance with the terms and conditions contained
- // in a signed written agreement between you and the author(s).
- // Package set implements simple present/not data structure supporting arbitrary
- // types (even a mixture).
- //
- // Internally it uses a simple map assigning zero-byte struct{}s to keys.
- package set
- // Set data structure.
- type Set struct {
- data map[interface{}]struct{}
- }
- // Creates a new empty set.
- func New() *Set {
- return &Set{make(map[interface{}]struct{})}
- }
- // Inserts an element into the set.
- func (s *Set) Insert(val interface{}) {
- s.data[val] = struct{}{}
- }
- // Removes an element from the set. If none was present, nothing is done.
- func (s *Set) Remove(val interface{}) {
- delete(s.data, val)
- }
- // Returns the number of elements in the set.
- func (s *Set) Size() int {
- return len(s.data)
- }
- // Checks whether an element is inside the set.
- func (s *Set) Exists(val interface{}) bool {
- _, ok := s.data[val]
- return ok
- }
- // Executes a function for every element in the set.
- func (s *Set) Do(f func(interface{})) {
- for val, _ := range s.data {
- f(val)
- }
- }
- // Clears the contents of a set.
- func (s *Set) Reset() {
- *s = *New()
- }
|