Gap bafer

Из Википедије, слободне енциклопедије

Gap bafer (ili bafer sa razmacima) u informatici je dinamički niz koji dozvoljava umetanje i brisanje operacija koje se nalaze blizu određene lokacije. Gap baferi su naročito česti u tekst editorima, gde se veċina promena nad tekstom vrši na mestu gde se trenutno nalazi kursor ili u njegovoj relativnoj blizini. Tekst se smešta u veliki bafer u dva susedna segmenta, sa razmakom između njih za upisivanje novog teksta. Pomeranjem kursora se kopira tekst sa jedne strane razmaka u drugu (nekada je kopiranje odloženo dok sledeċa operacija ne promeni tekst). Umetanje dodaje novi tekst na kraj prvog segmenta. Brisanje poveċava veličinu razmaka.

Tekst u gap buferu je predstavljen kao dve niske, koje zauzimaju vrlo malo dodatnog prostora i koje mogu biti pretraživane i ispisivane vrlo brzo, u poređenju sa više sofisticiranijim strukturama podataka kao što su povezane liste. Međutim, operacije na različitim lokacijama u tekstu i one koje popunjavaju razmak mogu zahtevati da se kopira veċina teksta, što je ne naročito neefikasno za velike datoteke. Upotreba gap bufera je zasnovana na pretpostavci da se takvo kopiranje retko dešava, bar toliko da se njegova cena može nadoknaditi preko jeftinijih, češċih operacija. Zbog toga je gap bafer jednostavnija alternativa grafu za upotrebu u tekst editorima kao što je Emacs.

Primer[уреди]

Ispod su neki primeri operacija sa gap baferom. Razmak je predstavljen kao tačke izmedju uglastih zagrada. Ovakvo predstavljanje je pomalo varljivo: u običnoj implementaciji, krajevi razmaka se mogu naċi pomoċu pokazivača ili indeksa, i sadržaj razmaka se zanemaruje; ovo dozvoljava, na primer, da se izvrši brisanje samo menjanjem pokazivača bez menjanja teksta u baferu. Česta je programerska praksa da se koristi poluotvoreni interval za pokazivače na razmake, drugim rečima, pokazivač na početak razmaka do pogrešnog karaktera do poslednjeg karaktera u prvom baferu, i pokazivač na kraj razmaka do prvog tačnog karaktera u drugom baferu (ili su jednostavno pokazivači podrazumevani kao pokazivači "između karaktera).

Početno stanje:

Ovamo je [.....................] izlaz.

Korisnik unese neki novi tekst:

Ovamo je nekada bio [....] izlaz.

Korisnik pomeri kursor pre "bio"; sistem pomeri "bio" iz prvog bafera u drugi:

Ovamo je nekada [....] bio izlaz.

Korisnik unese neki novi tekst koji popuni razmak; sistem napravi novi razmak:

Ovamo je nekada, veoma davno, pre mnogo godina, [.....................] bio izlaz.