Mesa de peças - Piece table
Uma tabela de peças é uma estrutura de dados normalmente usada para representar uma série de edições em um documento de texto . Uma referência inicial (ou 'extensão') para todo o arquivo original é criada, com as inserções e exclusões subsequentes sendo criadas como combinações de uma, duas ou três referências a seções do documento original ou das extensões associadas a anteriores inserções.
Normalmente, o texto do documento original é mantido em um bloco imutável e o texto de cada inserção subsequente é armazenado em novos blocos imutáveis. Como até mesmo o texto excluído ainda está incluído na tabela de peças, isso torna o desfazer em vários níveis ou ilimitado mais fácil de implementar com uma tabela de peças do que com estruturas de dados alternativas, como um buffer de lacuna .
Esta estrutura de dados foi inventada por J Strother Moore .
Descrição
Para esta descrição, usamos buffer como o bloco imutável para conter o conteúdo.
Uma tabela de peças consiste em três colunas:
- Qual buffer
- Índice inicial no buffer
- Comprimento no buffer
Além da tabela, dois buffers são usados para lidar com as edições:
- " Buffer original ": um buffer para o documento de texto original. Este buffer é somente leitura.
- " Adicionar buffer ": Um buffer para um arquivo temporário. Este buffer é somente para acréscimos.
Operações
Índice
Definição::
Index(i)
retorna o caractere na posição i
Para recuperar o i -ésimo caractere, a entrada apropriada em uma tabela de peças é lida.
Exemplo
Dados os seguintes buffers e tabela de peças:
Amortecedor | Contente |
---|---|
Arquivo original |
ipsum sit amet
|
Adicionar ficheiro |
Lorem deletedtext dolor
|
Que | Índice inicial | Comprimento |
---|---|---|
Adicionar | 0 | 6 |
Original | 0 | 6 |
Adicionar | 18 | 5 |
Original | 6 | 9 |
Para acessar o i -ésimo caractere, a entrada apropriada na tabela de peças é pesquisada.
Por exemplo, para obter o valor de Index(15)
, a 3ª entrada da tabela de peças é recuperada. Isso ocorre porque a terceira entrada descreve os caracteres do índice 12 a 16 (a primeira entrada descreve os caracteres no índice 0 a 5, a próxima é de 6 a 11). A entrada da tabela de peças instrui o programa a procurar os caracteres no buffer " adicionar arquivo ", começando no índice 18 nesse buffer. O índice relativo nessa entrada é 15-12 = 3, que é adicionado à posição inicial da entrada no buffer para obter o índice da letra: 3 + 18 = 21. O valor de Index(15)
é o 21º caractere do "add arquivo "buffer, que é o caractere" o ".
Para os buffers e a tabela de peças fornecidas acima, o seguinte texto é mostrado:
Lorem ipsum dolor sit amet
Inserir
A inserção de caracteres no texto consiste em:
- Anexar caracteres ao buffer "adicionar arquivo" e
- Atualizando a entrada na tabela de peças (dividindo uma entrada em duas ou três)
Excluir
A exclusão envolve apenas a modificação da entrada apropriada na tabela de peças.
Uso
Vários editores de texto usam uma tabela de peças em RAM internamente, incluindo Bravo , Abiword , Atom e Visual Studio Code .
O recurso de "salvamento rápido" em algumas versões do Microsoft Word usa uma tabela de peças para o formato de arquivo em disco.
A representação em disco de arquivos de texto no Sistema Oberon usa uma técnica de encadeamento de peças que permite que pedaços de um documento apontem para o texto armazenado em algum outro documento, semelhante à transclusão .
Veja também
- Corda (ciência da computação)
- Gap buffer , uma estrutura de dados comumente usada em editores de texto que permite operações eficientes de inserção e exclusão agrupadas perto do mesmo local