QLIBC는 현재 가장 기능적으로 완료되고 공개적으로 공개 된 C/C ++ 라이브러리 중 하나입니다. QLIBC 프로젝트의 목표는 모든 종류의 컨테이너와 일반 라이브러리 루틴을 포함하는 간단하고 강력한 범용 C/C ++ 라이브러리를 제공하는 것입니다. 일관된 API 모양의 기성품 컨테이너 API 세트를 제공합니다.
QLIBC는 단순화 된 BSD 라이센스로 알려진 2 명 BSD 라이센스에 따라 게시됩니다. 자세한 내용은 패키지에 포함 된 라이센스 문서를 참조하십시오.
QLIBC 코어 API 참조
QLIBC 확장 API 참조
| 형질 | 나무 테이블 | 해시 테이블 | 정적 해시 테이블 | 목록 테이블 |
|---|---|---|---|---|
| 데이터 구조 | 이진 트리 | 슬롯 인덱스 | 블록 어레이 | 링크리스트 |
| 복잡성 검색 | O (로그 N) | o (1) / o (n) | o (1) / o (n) | 에) |
| 복잡성을 삽입하십시오 | O (로그 N) | o (1) / o (n) | o (1) / o (n) | o (1) |
| 복잡성을 삭제하십시오 | O (로그 N) | o (1) / o (n) | o (1) / o (n) | 에) |
| 공간 복잡성 | 에) | 에) | - | 에) |
| 공간 할당 | 동적 | 동적 | 사전 할당 | 동적 |
| 키가 정렬 된 키 | 예 | 아니요 | 아니요 | 예 (옵션) |
| 사용자 비교기 | 지원 | - | - | 지원 |
| 복제 된 키 | 아니요 | 아니요 | 아니요 | 예 (옵션) |
| 키가 소화 된 키 | 아니요 | 아니요 | 예 | 아니요 |
| 가장 가까운 키를 검색하십시오 | 예 | 아니요 | 아니요 | 아니요 |
| 반복자 지원 | 예 | 예 | 예 | 예 |
| 반복자 방문 주문 | 최소 -> 최대 | 무작위의 | 무작위의 | 주문 삽입 |
| 스레드 안전 옵션 | 지원 | 서명 | 사용자 | 지원 |
| 공유 MEM을 사용할 수 있습니다 | 아니요 | 아니요 | 예 | 아니요 |
모든 컨테이너 API에는 일관된 모양과 느낌이 있습니다. 기본적으로 일반적으로 컨테이너 구조에 대한 포인터를 반환하는 Creator 기능을 제공합니다. 또한 컨테이너와 관련된 모든 기능은 컨테이너 내부의 기능 포인터 또는 기존 스타일 직접 액세스 API를 통해 액세스 할 수 있습니다 . 예를 들어,
따라서 사용하는 컨테이너에 관계없이 container->put(container, ...) 사용하여 요소를 목록에 단순히 넣을 수 있거나 qtreetBl_pub (컨테이너, ...)와 같은 직접 API를 사용하여 호출 할 수 있습니다.
아래 예제는 어떻게 생겼는지 보여줍니다.
// create a hash-table.
qhashtbl_t *tbl = qhashtbl(0, QHASHTBL_THREADSAFE);
// add an element which key name is "score".
int x = 12345;
tbl->put(tbl, "score", &x, sizeof(int));
// get the value of the element.
int *px = tbl->get(tbl, "score", NULL, true);
if(px != NULL) {
printf("%dn", *px);
free(px);
}
// release table
tbl->free(tbl);
다음은 연결된 목록 테이블 컨테이너와 동일한 구현입니다. 테이블 생성에서 1 줄을 제외하고 코드 변경이 전혀 없다는 것을 알 수 있습니다. 이것이 QLIBC가 컨테이너 객체 내부의 해당 기능 포인터를 캡슐화하는 이유입니다.
// create a linked-list-table. THE ONLY LINE YOU NEED TO CHANGE.
qlisttbl_t *tbl = qlisttbl(QLISTTBL_THREADSAFE);
// add an element which key name is "score".
int x = 12345;
tbl->put(tbl, "score", &x, sizeof(int));
// get the value of the element.
int *px = tbl->get(tbl, "score", NULL, true);
if(px != NULL) {
printf("%dn", *px);
free(px);
}
// release table
tbl->free(tbl);
우리는 QLIBC를 개발하고 개선하기 위해 함께 일하고 싶은 사람들을 찾고 있습니다. 현재 우리는 다음 영역에 대한 높은 요구가 있습니다.
다음 사람들은 제안, 아이디어, 코드 또는 고정 버그를 도왔습니다. (이름으로 알파벳 순서로)
귀하의 이름을 잊어 버렸거나 철자를 틀 렸다면 알려주십시오.