갭 버퍼
Gap buffer컴퓨터 사이언스에서의 갭 버퍼는 같은 장소 근처에 클러스터된 효율적인 삽입 및 삭제 작업을 가능하게 하는 동적 어레이입니다.공백 버퍼는 텍스트 편집기에서 특히 일반적이며, 텍스트에 대한 대부분의 변경은 커서의 현재 위치 또는 근처에서 발생합니다.텍스트는 새 텍스트를 삽입하기 위한 간격을 두고 두 개의 연속된 세그먼트에 큰 버퍼에 저장됩니다.커서를 이동하려면 공백의 한 쪽에서 다른 쪽으로 텍스트를 복사해야 합니다(텍스트를 변경하는 다음 작업까지 복사가 지연될 수 있습니다).삽입하면 첫 번째 세그먼트 끝에 새 텍스트가 추가되고 삭제되면 삭제됩니다.
갭 버퍼 내의 텍스트는 링크 리스트와 같은 보다 정교한 데이터 구조에 비해 여유 공간이 거의 없으며 검색 및 표시 속도가 매우 빠릅니다.다만, 텍스트내의 다른 장소에서의 조작과 빈칸을 메우는 조작(새로운 갭을 작성할 필요가 있다)에서는, 대부분의 텍스트를 카피할 필요가 있는 경우가 있습니다.이것은 큰 파일의 경우 특히 비효율적입니다.갭 버퍼의 사용은 그러한 재복사가 보다 일반적인 저비용 운용에 걸쳐서 그 비용을 상각할 수 있을 정도로 거의 발생하지 않는다는 가정에 기초하고 있습니다.따라서 갭 버퍼는 Emacs와 [2]같은 텍스트[1] 편집기에서 사용하기 위한 로프 대신 더 단순해집니다.
예
버퍼 갭이 있는 조작의 예를 다음에 나타냅니다.간격은 각 괄호 사이의 빈 공간으로 표시됩니다.이 표현은 약간 오해의 소지가 있습니다.일반적인 구현에서는 포인터 또는 배열 인덱스를 사용하여 갭의 엔드포인트를 추적하고 갭의 내용은 무시됩니다.예를 들어 버퍼 내의 텍스트를 변경하지 않고 포인터를 조정함으로써 삭제할 수 있습니다.갭 포인터에 세미 오픈 인터벌을 사용하는 것은 일반적인 프로그래밍 관행입니다.즉, 갭의 시작은 첫 번째 버퍼의 마지막 문자 뒤에 있는 비활성 문자를 가리키고, 갭의 끝은 두 번째 버퍼의 첫 번째 유효한 문자를 가리킵니다(또는 동등한 포인터는 "사이의" 문자를 가리킨다고 간주됩니다).
초기 상태:
이쪽이 출구입니다.
사용자가 몇 가지 새 텍스트를 삽입합니다.
세상은 이렇게 시작되었다.
사용자가 커서를 "시작"하기 전에 이동하고 시스템은 "시작"을 첫 번째 버퍼에서 두 번째 버퍼로 이동합니다.
세상은 이렇게 시작되었다.
사용자가 빈칸을 채우는 텍스트를 추가합니다.시스템에 의해 새로운 빈칸이 생성됩니다.
세상은 이렇게 시작되었다.
「 」를 참조해 주세요.
- Dynamic Array, 갭이 항상 끝에 있는 갭 버퍼의 특수한 경우
- 지퍼(데이터 구조), 개념적으로 갭 버퍼의 일반화.
- 링크 리스트
- 순환 버퍼
- 로프(컴퓨터 과학)
- 조각표 - Bravo 및 Microsoft Word에서 사용되는 데이터 구조
레퍼런스
- ^ 마크 C. 추-카롤"Gap Buffer, 아니면 로프로 묶지 마세요?"ScienceBlogs, 2009-02-18.2013-01-30에 접속.
- ^ emacs gap buffer info 2013-01-30에 액세스했습니다.
외부 링크
- C에서의 실장
- 의 개요와 실장.네트워크/C#
- 개요와 샘플 C++ 코드
- 에서의 순환 정렬된 갭버퍼의 실장네트워크/C#
- 갭 버퍼의 초기 에디터에서의 사용(1969~1971년 사이에 처음 작성)
- emacs 갭버퍼 정보(Emacs 갭버퍼 참조)
- 유연성:편집 가능한 시퀀스 및 그 갭 버퍼 구현