Gap buffer - Gap buffer

En hulbuffer inden for datalogi er et dynamisk array, der muliggør effektiv indsættelses- og sletningsoperationer grupperet tæt på samme placering. Gap-buffere er især almindelige i teksteditorer , hvor de fleste ændringer i teksten sker ved eller i nærheden af markørens aktuelle placering . Teksten er gemt i en stor buffer i to sammenhængende segmenter med et mellemrum mellem dem til indsættelse af ny tekst. Flytning af markøren indebærer at kopiere tekst fra den ene side af mellemrummet til den anden (nogle gange er kopiering forsinket indtil den næste handling, der ændrer teksten). Indsættelse tilføjer ny tekst i slutningen af ​​det første segment; sletning sletter det.

Tekst i en mellemrumsbuffer er repræsenteret som to strenge , som tager meget lidt ekstra plads, og som kan søges og vises meget hurtigt sammenlignet med mere sofistikerede datastrukturer såsom sammenkædede lister . Dog kan operationer forskellige steder i teksten og dem, der udfylder hullet (kræver, at der oprettes et nyt hul) muligvis kopiering af det meste af teksten, hvilket især er ineffektivt for store filer. Anvendelsen af ​​mellemrumsbuffere er baseret på den antagelse, at en sådan genoptagelse sjældent sker til, at omkostningerne kan afskrives over de mere almindelige billige operationer. Dette gør kløftbufferen til et enklere alternativ til rebet til brug i teksteditorer som Emacs .

Eksempel

Nedenfor er nogle eksempler på operationer med bufferhuller. Mellemrummet er repræsenteret af det tomme rum mellem firkantede parenteser. Denne repræsentation er lidt vildledende: i en typisk implementering spores slutpunkterne for kløften ved hjælp af pegepinde eller matrixindekser, og indholdet af kløften ignoreres; dette gør det f.eks. muligt at slette ved at justere en markør uden at ændre teksten i bufferen. Det er en almindelig programmeringspraksis at bruge et semi-åbent interval til mellemrumspeglerne, dvs. start-af-mellemrum peger på det ugyldige tegn, der følger det sidste tegn i den første buffer, og slutningen af ​​mellemrum peger på det første gyldigt tegn i den anden buffer (eller tilsvarende betragtes markørerne som "mellem" tegn).

Oprindelig tilstand:

This is the way [                     ]out.

Brugeren indsætter ny tekst:

This is the way the world started [   ]out.

Brugeren flytter markøren før "startet"; systemet flytter "startet" fra den første buffer til den anden buffer.

This is the way the world [   ]started out.

Bruger tilføjer tekst, der udfylder hullet; system skaber nyt hul:

This is the way the world as we know it [                   ]started out.

Se også

Referencer

eksterne links