갭 버퍼

Gap buffer

컴퓨터 사이언스에서의 갭 버퍼는 같은 장소 근처에 클러스터된 효율적인 삽입 및 삭제 작업을 가능하게 하는 동적 어레이입니다.공백 버퍼는 텍스트 편집기에서 특히 일반적이며, 텍스트에 대한 대부분의 변경은 커서의 현재 위치 또는 근처에서 발생합니다.텍스트는 새 텍스트를 삽입하기 위한 간격을 두고 두 개의 연속된 세그먼트에 큰 버퍼에 저장됩니다.커서를 이동하려면 공백의 한 쪽에서 다른 쪽으로 텍스트를 복사해야 합니다(텍스트를 변경하는 다음 작업까지 복사가 지연될 수 있습니다).삽입하면 첫 번째 세그먼트 끝에 새 텍스트가 추가되고 삭제되면 삭제됩니다.

갭 버퍼 내의 텍스트는 링크 리스트와 같은 보다 정교한 데이터 구조에 비해 여유 공간이 거의 없으며 검색 및 표시 속도가 매우 빠릅니다.다만, 텍스트내의 다른 장소에서의 조작과 빈칸을 메우는 조작(새로운 갭을 작성할 필요가 있다)에서는, 대부분의 텍스트를 카피할 필요가 있는 경우가 있습니다.이것은 큰 파일의 경우 특히 비효율적입니다.갭 버퍼의 사용은 그러한 재복사가 보다 일반적인 저비용 운용에 걸쳐서 그 비용을 상각할 수 있을 정도로 거의 발생하지 않는다는 가정에 기초하고 있습니다.따라서 갭 버퍼는 Emacs와 [2]같은 텍스트[1] 편집기에서 사용하기 위한 로프 대신 더 단순해집니다.

버퍼 갭이 있는 조작의 예를 다음에 나타냅니다.간격은 각 괄호 사이의 빈 공간으로 표시됩니다.이 표현은 약간 오해의 소지가 있습니다.일반적인 구현에서는 포인터 또는 배열 인덱스를 사용하여 갭의 엔드포인트를 추적하고 갭의 내용은 무시됩니다.예를 들어 버퍼 내의 텍스트를 변경하지 않고 포인터를 조정함으로써 삭제할 수 있습니다.갭 포인터에 세미 오픈 인터벌을 사용하는 것은 일반적인 프로그래밍 관행입니다.즉, 갭의 시작은 첫 번째 버퍼의 마지막 문자 뒤에 있는 비활성 문자를 가리키고, 갭의 끝은 두 번째 버퍼의 첫 번째 유효한 문자를 가리킵니다(또는 동등한 포인터는 "사이의" 문자를 가리킨다고 간주됩니다).

초기 상태:

이쪽이 출구입니다. 

사용자가 몇 가지 새 텍스트를 삽입합니다.

세상은 이렇게 시작되었다. 

사용자가 커서를 "시작"하기 전에 이동하고 시스템은 "시작"을 첫 번째 버퍼에서 두 번째 버퍼로 이동합니다.

세상은 이렇게 시작되었다. 

사용자가 빈칸을 채우는 텍스트를 추가합니다.시스템에 의해 새로운 빈칸이 생성됩니다.

세상은 이렇게 시작되었다. 

「 」를 참조해 주세요.

레퍼런스

  1. ^ 마크 C. 추-카롤"Gap Buffer, 아니면 로프로 묶지 마세요?"ScienceBlogs, 2009-02-18.2013-01-30에 접속.
  2. ^ emacs gap buffer info 2013-01-30에 액세스했습니다.

외부 링크