in util-core/src/main/scala/com/twitter/io/Buf.scala [434:491]
def slice(from: Int, until: Int): Buf = {
checkSliceArgs(from, until)
if (this.isSliceEmpty(from, until)) return Buf.Empty
else if (isSliceIdentity(from, until)) return this
var begin = from
var end = until
var start, startBegin, startEnd, finish, finishBegin, finishEnd = -1
var cur = 0
while (cur < bufs.length && finish == -1) {
val buf = bufs(cur)
val len = buf.length
if (begin >= 0 && begin < len) {
start = cur
startBegin = begin
startEnd = end
}
if (end <= len) {
finish = cur
finishBegin = math.max(0, begin)
finishEnd = end
}
begin -= len
end -= len
cur += 1
}
if (start == -1) Buf.Empty
else if (start == finish || (start == (cur - 1) && finish == -1)) {
bufs(start).slice(startBegin, startEnd)
} else if (finish == -1) {
val untrimmedFirst = bufs(start)
val first: Buf =
if (startBegin == 0 && startEnd >= untrimmedFirst.length) null
else untrimmedFirst.slice(startBegin, startEnd)
Buf(
if (first == null) bufs.slice(start, length)
else first +: bufs.slice(start + 1, length)
)
} else {
val untrimmedFirst = bufs(start)
val first: Buf =
if (startBegin == 0 && startEnd >= untrimmedFirst.length) null
else untrimmedFirst.slice(startBegin, startEnd)
val untrimmedLast = bufs(finish)
val last: Buf =
if (finishBegin == 0 && finishEnd >= untrimmedLast.length) null
else untrimmedLast.slice(finishBegin, finishEnd)
Buf(
if (first == null && last == null) bufs.slice(start, finish + 1)
else if (first == null) bufs.slice(start, finish) :+ last
else if (last == null) first +: bufs.slice(start + 1, finish + 1)
else first +: bufs.slice(start + 1, finish) :+ last
)
}
}