Add O(1) ItemCount method to retrieve items currently in the cache map (whether expired and not cleaned up or not)

This commit is contained in:
Patrick Mylund Nielsen 2013-04-18 14:32:01 -04:00
parent d5d03c28d4
commit c9f5754801
2 changed files with 20 additions and 0 deletions

View File

@ -49,6 +49,7 @@ type unexportedInterface interface {
DecrementFloat64(string, float64) (float64, error) DecrementFloat64(string, float64) (float64, error)
Delete(string) Delete(string)
DeleteExpired() DeleteExpired()
ItemCount() int
Flush() Flush()
Save(io.Writer) error Save(io.Writer) error
SaveFile(string) error SaveFile(string) error
@ -933,6 +934,15 @@ func (c *cache) LoadFile(fname string) error {
return fp.Close() return fp.Close()
} }
// Returns the number of items in the cache. This may include items that have
// expired, but have not yet been cleaned up.
func (c *cache) ItemCount() int {
c.Lock()
n := len(c.items)
c.Unlock()
return n
}
// Delete all items from the cache. // Delete all items from the cache.
func (c *cache) Flush() { func (c *cache) Flush() {
c.Lock() c.Lock()

View File

@ -1122,6 +1122,16 @@ func TestDelete(t *testing.T) {
} }
} }
func TestItemCount(t *testing.T) {
tc := New(0, 0)
tc.Set("foo", "1", 0)
tc.Set("bar", "2", 0)
tc.Set("baz", "3", 0)
if n := tc.ItemCount(); n != 3 {
t.Errorf("Item count is not 3: %d", n)
}
}
func TestFlush(t *testing.T) { func TestFlush(t *testing.T) {
tc := New(0, 0) tc := New(0, 0)
tc.Set("foo", "bar", 0) tc.Set("foo", "bar", 0)