From 3e3abdd770bdc23c409a9e49619a1897ffbf2354 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Wed, 22 Jan 2014 17:20:19 -0800 Subject: [PATCH] Use int32 instead of string for ip set Docker-DCO-1.1-Signed-off-by: Guillaume J. Charmes (github: creack) --- networkdriver/portallocator/ipset.go | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/networkdriver/portallocator/ipset.go b/networkdriver/portallocator/ipset.go index 282279f29d..c54e64a120 100644 --- a/networkdriver/portallocator/ipset.go +++ b/networkdriver/portallocator/ipset.go @@ -1,17 +1,18 @@ package ipallocator import ( + "sort" "sync" ) // iPSet is a thread-safe sorted set and a stack. type iPSet struct { sync.RWMutex - set []string + set []int32 } // Push takes a string and adds it to the set. If the elem aready exists, it has no effect. -func (s *iPSet) Push(elem string) { +func (s *iPSet) Push(elem int32) { s.RLock() for i, e := range s.set { if e == elem { @@ -24,18 +25,18 @@ func (s *iPSet) Push(elem string) { s.Lock() s.set = append(s.set, elem) // Make sure the list is always sorted - sort.Strings(s.set) + sort.Ints(s.set) s.Unlock() } // Pop is an alias to PopFront() -func (s *iPSet) Pop() string { +func (s *iPSet) Pop() int32 { return s.PopFront() } // Pop returns the first elemen from the list and removes it. -// If the list is empty, it returns an empty string -func (s *iPSet) PopFront() string { +// If the list is empty, it returns 0 +func (s *iPSet) PopFront() int32 { s.RLock() for i, e := range s.set { @@ -53,7 +54,7 @@ func (s *iPSet) PopFront() string { // PullBack retrieve the last element of the list. // The element is not removed. // If the list is empty, an empty element is returned. -func (s *iPSet) PullBack() string { +func (s *iPSet) PullBack() int32 { if len(s.set) == 0 { return "" } @@ -61,7 +62,7 @@ func (s *iPSet) PullBack() string { } // Exists checks if the given element present in the list. -func (s *iPSet) Exists(elem string) bool { +func (s *iPSet) Exists(elem int32) bool { for _, e := range s.set { if e == elem { return true @@ -72,7 +73,7 @@ func (s *iPSet) Exists(elem string) bool { // Remove removes an element from the list. // If the element is not found, it has no effect. -func (s *iPSet) Remove(elem string) { +func (s *iPSet) Remove(elem int32) { for i, e := range s.set { if e == elem { s.set = append(s.set[:i], s.set[i+1:]...)