73
74
// Next return the next item
75
>
func (it *iteratorImpl) Next() Entry {
lru.go
76
>
if it.nextItem == nil {
77
panic("LRU cache iterator Next called when there is no next item")
78
}
79
80
>
entry := it.nextItem.Value.(*entryImpl)
lru.go
81
>
it.nextItem = it.nextItem.Next()
82
>
// make a copy of the entry so there will be no concurrent access to this entry
83
>
entry = &entryImpl{
84
>
key: entry.key,
85
>
value: entry.value,
86
>
size: entry.size,
87
>
createTime: entry.createTime,
88
>
}
89
>
it.prepareNext()
90
>
return entry
91
}
92
93
func (it *iteratorImpl) prepareNext() {
94
for it.nextItem != nil {
95
>
entry := it.nextItem.Value.(*entryImpl)
lru.go
96
>
if it.lru.isEntryExpired(entry, it.createTime) {
97
nextItem := it.nextItem.Next()
98
it.lru.deleteInternal(it.nextItem)
99
it.nextItem = nextItem
101
>
return
102
>
}
103
}
104
}