이 글의 소스 코드는 File Structures: An Object-Oriented Approach with C++ 3rd Edition의 내용을 수정하여 작성한 것 입니다.
인덱스 파일을 구현하기에 앞서, TextIndex라는 인덱스를 저장하는 자료구조를 정의한다. TextIndex는 일정 수의 인덱스들을 저장하는 자료구조로써, 인덱스의 추가, 제거, 검색 등의 연산을 갖는다. TextIndex의 class 정의는 아래와 같다.
TextIndex의 insert 함수는 인덱스를 구성하는 키 값과 레코드 주소를 인자로 받아 인덱스를 메모리에 저장한다. 그러나 TextIndex의 insert 함수는 원하는 위치에 데이터를 저장하는 것이 아니라, 정렬된 순서를 유지하기 위해 키 값에 따라 데이터를 특정 위치에 추가한다.
위의 insert 함수는 인덱스를 키 값에 따라 인덱스를 오름차순으로 보관한다. 함수의 구현에 사용된 strdup는 소스 문자열의 크기만큼 메모리를 동적할당한 후에 할당된 공간에 소스의 값을 넣은 후, 첫 주소를 반환하는 함수이다.
TextIndex의 remove 함수는 인자로 전달받은 키 값에 해당하는 인덱스를 TextIndex에서 제거하는 동작을 한다. 제거하려는 인덱스를 발견하면 해당 인덱스의 다음 위치부터 한 칸씩 shift-left한다.
TextIndex의 search 함수는 구현이 매우 간단하다. Search 함수는 TextIndex의 private 멤버 함수인 find를 호출하여 인자로 전달받은 key 값에 해당하는 인덱스에 저장된 레코드 주소를 반환한다.
TextIndex의 find 함수는 인자로 전달받은 키 값에 해당하는 인덱스의 위치를 반환하는 함수로써, TextIndex의 모든 연산에서 이용된다. TextIndex의 find 함수는 순차 탐색으로도 구현할 수 있지만, TextIndex는 고정 길이 데이터를 정렬된 상태로 저장하기 때문에 이진 탐색으로 구현하였다.
'객체지향설계' 카테고리의 다른 글
[파일구조] - 트리 구조를 이용한 인덱스 관리 (0) | 2016.06.11 |
---|---|
[파일구조] - 인덱스 파일의 구현 II (0) | 2016.06.10 |
[파일구조] - 인덱싱(Indexing) (0) | 2016.06.08 |
[파일구조] - 레코드 검색 (0) | 2016.04.24 |
[파일구조] - 레코드 관리 (0) | 2016.04.24 |