the architecture is really simple. The buffer contigously stores a list of "blocks". Each block contains a small number of actual text lines (usually 64-128). Thus if you edit a line, we only need to update the block containing the line. Once a block grows bigger than a certain number of lines, we split it into two.