Make Set private.

This commit is contained in:
Andrey Petrov 2015-01-20 16:39:07 -08:00
parent c2adb4d632
commit bb1d568b38
5 changed files with 33 additions and 33 deletions

View File

@ -54,7 +54,7 @@ func TestTheme(t *testing.T) {
t.Errorf("Got: `%s`; Expected: `%s`", actual, expected)
}
u := NewUser(testId("foo"))
u := NewUser(SimpleId("foo"))
u.colorIdx = 4
actual = colorTheme.ColorName(u)
expected = "\033[38;05;4mfoo\033[0m"

View File

@ -9,12 +9,12 @@ func TestMakeUser(t *testing.T) {
var actual, expected []byte
s := &MockScreen{}
u := NewUser(testId("foo"))
u := NewUser(SimpleId("foo"))
m := NewAnnounceMsg("hello")
defer u.Close()
u.Send(m)
u.ConsumeOne(s)
u.HandleMsg(<-u.ConsumeChan(), s)
s.Read(&actual)
expected = []byte(m.String() + Newline)

View File

@ -30,7 +30,7 @@ type Member struct {
type Room struct {
topic string
history *message.History
members *Set
members *idSet
broadcast chan message.Message
commands Commands
closed bool
@ -44,7 +44,7 @@ func NewRoom() *Room {
return &Room{
broadcast: broadcast,
history: message.NewHistory(historyLen),
members: NewSet(),
members: newIdSet(),
commands: *defaultCommands,
}
}
@ -58,7 +58,7 @@ func (r *Room) SetCommands(commands Commands) {
func (r *Room) Close() {
r.closeOnce.Do(func() {
r.closed = true
r.members.Each(func(m Item) {
r.members.Each(func(m identified) {
m.(*Member).Close()
})
r.members.Clear()
@ -92,7 +92,7 @@ func (r *Room) HandleMsg(m message.Message) {
}
r.history.Add(m)
r.members.Each(func(u Item) {
r.members.Each(func(u identified) {
user := u.(*Member).User
if skip && skipUser == user {
// Skip

View File

@ -10,43 +10,43 @@ import (
var ErrIdTaken = errors.New("id already taken")
// The error returned when a requested item does not exist in the set.
var ErrItemMissing = errors.New("item does not exist")
var ErridentifiedMissing = errors.New("item does not exist")
// Interface for an item storeable in the set
type Item interface {
type identified interface {
Id() string
}
// Set with string lookup.
// TODO: Add trie for efficient prefix lookup?
type Set struct {
lookup map[string]Item
type idSet struct {
lookup map[string]identified
sync.RWMutex
}
// NewSet creates a new set.
func NewSet() *Set {
return &Set{
lookup: map[string]Item{},
// newIdSet creates a new set.
func newIdSet() *idSet {
return &idSet{
lookup: map[string]identified{},
}
}
// Clear removes all items and returns the number removed.
func (s *Set) Clear() int {
func (s *idSet) Clear() int {
s.Lock()
n := len(s.lookup)
s.lookup = map[string]Item{}
s.lookup = map[string]identified{}
s.Unlock()
return n
}
// Len returns the size of the set right now.
func (s *Set) Len() int {
func (s *idSet) Len() int {
return len(s.lookup)
}
// In checks if an item exists in this set.
func (s *Set) In(item Item) bool {
func (s *idSet) In(item identified) bool {
s.RLock()
_, ok := s.lookup[item.Id()]
s.RUnlock()
@ -54,20 +54,20 @@ func (s *Set) In(item Item) bool {
}
// Get returns an item with the given Id.
func (s *Set) Get(id string) (Item, error) {
func (s *idSet) Get(id string) (identified, error) {
s.RLock()
item, ok := s.lookup[id]
s.RUnlock()
if !ok {
return nil, ErrItemMissing
return nil, ErridentifiedMissing
}
return item, nil
}
// Add item to this set if it does not exist already.
func (s *Set) Add(item Item) error {
func (s *idSet) Add(item identified) error {
s.Lock()
defer s.Unlock()
@ -81,21 +81,21 @@ func (s *Set) Add(item Item) error {
}
// Remove item from this set.
func (s *Set) Remove(item Item) error {
func (s *idSet) Remove(item identified) error {
s.Lock()
defer s.Unlock()
id := item.Id()
_, found := s.lookup[id]
if !found {
return ErrItemMissing
return ErridentifiedMissing
}
delete(s.lookup, id)
return nil
}
// Replace item from old id with new Item.
// Used for moving the same Item to a new Id, such as a rename.
func (s *Set) Replace(oldId string, item Item) error {
// Replace item from old id with new identified.
// Used for moving the same identified to a new Id, such as a rename.
func (s *idSet) Replace(oldId string, item identified) error {
s.Lock()
defer s.Unlock()
@ -108,11 +108,11 @@ func (s *Set) Replace(oldId string, item Item) error {
// Remove oldId
_, found = s.lookup[oldId]
if !found {
return ErrItemMissing
return ErridentifiedMissing
}
delete(s.lookup, oldId)
// Add new Item
// Add new identified
s.lookup[item.Id()] = item
return nil
@ -120,7 +120,7 @@ func (s *Set) Replace(oldId string, item Item) error {
// Each loops over every item while holding a read lock and applies fn to each
// element.
func (s *Set) Each(fn func(item Item)) {
func (s *idSet) Each(fn func(item identified)) {
s.RLock()
for _, item := range s.lookup {
fn(item)
@ -129,8 +129,8 @@ func (s *Set) Each(fn func(item Item)) {
}
// ListPrefix returns a list of items with a prefix, case insensitive.
func (s *Set) ListPrefix(prefix string) []Item {
r := []Item{}
func (s *idSet) ListPrefix(prefix string) []identified {
r := []identified{}
prefix = strings.ToLower(prefix)
s.RLock()

View File

@ -8,7 +8,7 @@ import (
func TestSet(t *testing.T) {
var err error
s := NewSet()
s := newIdSet()
u := message.NewUser(message.SimpleId("foo"))
if s.In(u) {