1// Copyright 2017 Keybase Inc. All rights reserved. 2// Use of this source code is governed by a BSD 3// license that can be found in the LICENSE file. 4 5package cache 6 7// Measurable is an interface for types whose size is measurable. 8type Measurable interface { 9 // Size returns the size of the object, in bytes, including both statically 10 // and dynamically sized parts. 11 Size() int 12} 13 14// memoizedMeasurable is a wrapper around a Measurable that memoizes the size 15// to avoid frequent size calculations. 16// 17// Note that if the size of the Measurable 18// changes after memoizedMeasurable memoizes the size, it won't be updated 19// automatically. 20type memoizedMeasurable struct { 21 m Measurable 22 size int 23} 24 25// Size implements the Measurable interface. 26func (m memoizedMeasurable) Size() int { 27 if m.size <= 0 { 28 m.size = m.m.Size() 29 } 30 return m.size 31} 32