github.com/stffabi/git-lfs@v2.3.5-0.20180214015214-8eeaa8d88902+incompatible/git/odb/pack/bounds.go (about) 1 package pack 2 3 import "fmt" 4 5 // bounds encapsulates the window of search for a single iteration of binary 6 // search. 7 // 8 // Callers may choose to treat the return values from Left() and Right() as 9 // inclusive or exclusive. *bounds makes no assumptions on the inclusivity of 10 // those values. 11 // 12 // See: *git/odb/pack.Index for more. 13 type bounds struct { 14 // left is the left or lower bound of the bounds. 15 left int64 16 // right is the rightmost or upper bound of the bounds. 17 right int64 18 } 19 20 // newBounds returns a new *bounds instance with the given left and right 21 // values. 22 func newBounds(left, right int64) *bounds { 23 return &bounds{ 24 left: left, 25 right: right, 26 } 27 } 28 29 // Left returns the leftmost value or lower bound of this *bounds instance. 30 func (b *bounds) Left() int64 { 31 return b.left 32 } 33 34 // right returns the rightmost value or upper bound of this *bounds instance. 35 func (b *bounds) Right() int64 { 36 return b.right 37 } 38 39 // WithLeft returns a new copy of this *bounds instance, replacing the left 40 // value with the given argument. 41 func (b *bounds) WithLeft(new int64) *bounds { 42 return &bounds{ 43 left: new, 44 right: b.right, 45 } 46 } 47 48 // WithRight returns a new copy of this *bounds instance, replacing the right 49 // value with the given argument. 50 func (b *bounds) WithRight(new int64) *bounds { 51 return &bounds{ 52 left: b.left, 53 right: new, 54 } 55 } 56 57 // Equal returns whether or not the receiving *bounds instance is equal to the 58 // given one: 59 // 60 // - If both the argument and receiver are nil, they are given to be equal. 61 // - If both the argument and receiver are not nil, and they share the same 62 // Left() and Right() values, they are equal. 63 // - If both the argument and receiver are not nil, but they do not share the 64 // same Left() and Right() values, they are not equal. 65 // - If either the argument or receiver is nil, but the other is not, they are 66 // not equal. 67 func (b *bounds) Equal(other *bounds) bool { 68 if b == nil { 69 if other == nil { 70 return true 71 } 72 return false 73 } 74 75 if other == nil { 76 return false 77 } 78 79 return b.left == other.left && 80 b.right == other.right 81 } 82 83 // String returns a string representation of this bounds instance, given as: 84 // 85 // [<left>,<right>] 86 func (b *bounds) String() string { 87 return fmt.Sprintf("[%d,%d]", b.Left(), b.Right()) 88 }