| Index: impl/memory/stringset.go
 | 
| diff --git a/impl/memory/stringset.go b/impl/memory/stringset.go
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..d803cb1bd065eb85c26f5050653c073b6e2d3505
 | 
| --- /dev/null
 | 
| +++ b/impl/memory/stringset.go
 | 
| @@ -0,0 +1,39 @@
 | 
| +// Copyright 2015 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +package memory
 | 
| +
 | 
| +type stringSet map[string]struct{}
 | 
| +
 | 
| +func (s stringSet) has(value string) bool {
 | 
| +	_, ret := s[value]
 | 
| +	return ret
 | 
| +}
 | 
| +
 | 
| +// add adds to the set and returns true iff the value was not there before (i.e.
 | 
| +// it returns true if add actually modifies the stringSet).
 | 
| +func (s stringSet) add(value string) bool {
 | 
| +	ret := !s.has(value)
 | 
| +	s[value] = struct{}{}
 | 
| +	return ret
 | 
| +}
 | 
| +
 | 
| +func (s stringSet) rm(value string) {
 | 
| +	delete(s, value)
 | 
| +}
 | 
| +
 | 
| +func (s stringSet) dup() stringSet {
 | 
| +	ret := make(stringSet, len(s))
 | 
| +	for v := range s {
 | 
| +		ret.add(v)
 | 
| +	}
 | 
| +	return ret
 | 
| +}
 | 
| +
 | 
| +func (s stringSet) getOne() string {
 | 
| +	for k := range s {
 | 
| +		return k
 | 
| +	}
 | 
| +	return ""
 | 
| +}
 | 
| 
 |