code: func (l *LFUNoTS) incr(ci *cacheItem) {
  	var nextValue int
  	var nextPosition *list.Element
  	// update existing one
  	if ci.freqElement != nil {
  		nextValue = ci.freqElement.Value.(*entry).freqCount + 1
  		// replace the position of frequency element
  		nextPosition = ci.freqElement.Next()
  	} else {
  		// create new frequency element for cache item
  		// ci.freqElement is nil so next value of freq will be 1
  		nextValue = 1
  		// we created new element and its position will be head of linked list
  		nextPosition = l.frequencyList.Front()
  		l.currentSize++
  	}
  
  	// we need to check position first, otherwise it will panic if we try to fetch value of entry
  	if nextPosition == nil || nextPosition.Value.(*entry).freqCount != nextValue {
  		// create new entry node for linked list
  		entry := newEntry(nextValue)
  		if ci.freqElement == nil {
  			nextPosition = l.frequencyList.PushFront(entry)
  		} else {
  			nextPosition = l.frequencyList.InsertAfter(entry, ci.freqElement)
  		}
  	}
  
  	nextPosition.Value.(*entry).listEntry[ci] = struct{}{}
  	ci.freqElement = nextPosition
  
  	// we have moved the cache item to the next position,
  	// then we need to  remove old position of the cacheItem from the list
  	// then we deleted previous position of cacheItem
  	if ci.freqElement.Prev() != nil {
  		l.remove(ci, ci.freqElement.Prev())
  	}
  }
docs: // incr increments the usage of cache items
  // incrementing will be used in 'Get' & 'Set' functions
  // whenever these functions are used, usage count of any key
  // will be increased