Гап бафер

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

Гап бафер (или бафер са размацима) у информатици је динамички низ који дозвољава уметање и брисање операција које се налазе близу одређене локације. Гап бафери су нарочито чести у текст едиторима, где се веċина промена над текстом врши на месту где се тренутно налази курсор или у његовој релативној близини. Текст се смешта у велики бафер у два суседна сегмента, са размаком између њих за уписивање новог текста. Померањем курсора се копира текст са једне стране размака у другу (некада је копирање одложено док следеċа операција не промени текст). Уметање додаје нови текст на крај првог сегмента. Брисање повеċава величину размака.

Текст у гап буферу је представљен као две ниске, које заузимају врло мало додатног простора и које могу бити претраживане и исписиване врло брзо, у поређењу са више софистициранијим структурама података као што су повезане листе. Међутим, операције на различитим локацијама у тексту и оне које попуњавају размак могу захтевати да се копира веċина текста, што је не нарочито неефикасно за велике датотеке. Употреба гап буфера је заснована на претпоставци да се такво копирање ретко дешава, бар толико да се његова цена може надокнадити преко јефтинијих, чешċих операција. Због тога је гап бафер једноставнија алтернатива графу за употребу у текст едиторима као што је Емацс.

Пример[уреди | уреди извор]

Испод су неки примери операција са гап бафером. Размак је представљен као тачке измедју угластих заграда. Овакво представљање је помало варљиво: у обичној имплементацији, крајеви размака се могу наċи помоċу показивача или индекса, и садржај размака се занемарује; ово дозвољава, на пример, да се изврши брисање само мењањем показивача без мењања текста у баферу. Честа је програмерска пракса да се користи полуотворени интервал за показиваче на размаке, другим речима, показивач на почетак размака до погрешног карактера до последњег карактера у првом баферу, и показивач на крај размака до првог тачног карактера у другом баферу (или су једноставно показивачи подразумевани као показивачи "између карактера).

Почетно стање:

Овамо је [.....................] излаз.

Корисник унесе неки нови текст:

Овамо је некада био [....] излаз.

Корисник помери курсор пре "био"; систем помери "био" из првог бафера у други:

Овамо је некада [....] био излаз.

Корисник унесе неки нови текст који попуни размак; систем направи нови размак:

Овамо је некада, веома давно, пре много година, [.....................] био излаз.