ปัจจุบัน QLIBC เป็นหนึ่งในไลบรารี C/C ++ ที่ได้รับใบอนุญาตที่ใช้งานได้มากที่สุด เป้าหมายของโครงการ QLIBC คือการจัดหา ห้องสมุด C/C ++ วัตถุประสงค์ทั่วไปที่เรียบง่ายและทรงพลัง ซึ่งรวมถึงภาชนะบรรจุทุกชนิดและกิจวัตรห้องสมุดทั่วไป มันมีชุด APIs คอนเทนเนอร์ทั่วไปที่ทำขึ้นพร้อมด้วย API ที่สอดคล้องกัน
QLIBC เผยแพร่ภายใต้ใบอนุญาต BSD 2 ข้อที่รู้จักกันในชื่อใบอนุญาต BSD แบบง่าย โปรดดูเอกสารใบอนุญาตที่รวมอยู่ในแพ็คเกจสำหรับรายละเอียดเพิ่มเติม
การอ้างอิง qlibc core api
การอ้างอิง API ส่วนขยาย QLIBC
| ลักษณะเฉพาะ | โต๊ะต้นไม้ | ตารางแฮช | ตารางแฮชคงที่ | ตารางรายการ |
|---|---|---|---|---|
| โครงสร้างข้อมูล | ต้นไม้ไบนารี | ดัชนีสล็อต | บล็อกอาร์เรย์ | รายการที่เชื่อมโยง |
| ค้นหาความซับซ้อน | o (log n) | o (1) / o (n) | o (1) / o (n) | บน) |
| แทรกความซับซ้อน | o (log n) | o (1) / o (n) | o (1) / o (n) | o (1) |
| ลบความซับซ้อน | o (log n) | o (1) / o (n) | o (1) / o (n) | บน) |
| ความซับซ้อนของอวกาศ | บน) | บน) | - | บน) |
| การจัดสรรพื้นที่ | พลวัต | พลวัต | การจัดสรรล่วงหน้า | พลวัต |
| คีย์ที่จัดเรียงจัดเรียง | ใช่ | เลขที่ | เลขที่ | ใช่ (ตัวเลือก) |
| ตัวเปรียบเทียบผู้ใช้ | ที่ได้รับการสนับสนุน | - | - | ที่ได้รับการสนับสนุน |
| คีย์ที่ซ้ำกัน | เลขที่ | เลขที่ | เลขที่ | ใช่ (ตัวเลือก) |
| คีย์จัดเก็บย่อย | เลขที่ | เลขที่ | ใช่ | เลขที่ |
| ค้นหาคีย์ที่ใกล้ที่สุด | ใช่ | เลขที่ | เลขที่ | เลขที่ |
| การสนับสนุนตัววนซ้ำ | ใช่ | ใช่ | ใช่ | ใช่ |
| คำสั่งซื้อซ้ำ | ขั้นต่ำ -> สูงสุด | แบบสุ่ม | แบบสุ่ม | แทรกคำสั่งซื้อ |
| ตัวเลือกเธรดที่ปลอดภัย | ที่ได้รับการสนับสนุน | ซบเซา | ผู้ใช้ | ที่ได้รับการสนับสนุน |
| สามารถใช้ MEM ที่ใช้ร่วมกัน | เลขที่ | เลขที่ | ใช่ | เลขที่ |
APIs คอนเทนเนอร์ทั้งหมดมีรูปลักษณ์และความรู้สึกที่สอดคล้องกัน โดยทั่วไปจะให้ฟังก์ชั่นผู้สร้างซึ่งมักจะส่งคืนตัวชี้ไปยังโครงสร้างคอนเทนเนอร์ นอกจากนี้ ฟังก์ชั่นทั้งหมดที่เกี่ยวข้องกับคอนเทนเนอร์สามารถเข้าถึงได้ผ่านพอยน์เตอร์ฟังก์ชั่นภายในคอนเทนเนอร์ หรือ APIs การเข้าถึงโดยตรงสไตล์แบบดั้งเดิม ตัวอย่างเช่น
ดังนั้นไม่ว่าคุณจะใช้คอนเทนเนอร์ใดคุณสามารถใส่องค์ประกอบลงในรายการที่มี container->put(container, ...) หรือคุณสามารถเรียกพวกเขาโดยใช้ API โดยตรงเช่น qtreetbl_pub (คอนเทนเนอร์, ... )
ตัวอย่างด้านล่างแสดงให้เห็นว่ามันเป็นอย่างไร
// 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 ปัจจุบันเรามีความต้องการสูงในพื้นที่ดังต่อไปนี้
คนต่อไปนี้ได้ช่วยด้วยคำแนะนำความคิดรหัสหรือการแก้ไขข้อบกพร่อง: (ตามลำดับตัวอักษรตามชื่อแรก)
หากเราลืมหรือสะกดชื่อคุณโปรดแจ้งให้เราทราบ