package defrag // Defrag performs an in-place sort of blocks. // If an error occurs during processing, it will be returned. The slice may have been partially sorted. func Defrag(blocks []byte) error { lastPulled := len(blocks) lastPushed := -1 for block := 0; block < len(blocks); block++ { if blocks[block] != '.' { continue } if lastPulled <= block { break } for swap := lastPulled - 1; swap > lastPushed; swap-- { if blocks[swap] == '.' { continue } blocks[block], blocks[swap] = blocks[swap], blocks[block] lastPulled = swap lastPushed = block break } } return nil }