QLIBC est actuellement l'une des bibliothèques C / C ++ les plus complètes et les plus complétées par public. L'objectif du projet QLIBC est de fournir une bibliothèque générale simple et puissante C / C ++ qui inclut toutes sortes de conteneurs et les routines de bibliothèque générale. Il fournit un ensemble prêt à l'emploi des API de conteneurs communs avec un look API cohérent.
QLIBC est publié dans le cadre d'une licence BSD de 2 clause connue sous le nom de licence BSD simplifiée. Veuillez référer le document de licence inclus dans le package pour plus de détails.
Référence de l'API Core QLIBC
Référence de l'API d'extension QLIBC
| Caractéristiques | Table d'arbre | Table de hachage | Table de hachage statique | Table de liste |
|---|---|---|---|---|
| Structure de données | Arbre binaire | Index de l'emplacement | Bloc de blocs | Liste liée |
| Complexité de recherche | O (log n) | O (1) / o (n) | O (1) / o (n) | Sur) |
| Insérer la complexité | O (log n) | O (1) / o (n) | O (1) / o (n) | O (1) |
| Supprimer la complexité | O (log n) | O (1) / o (n) | O (1) / o (n) | Sur) |
| Complexité spatiale | Sur) | Sur) | - | Sur) |
| Allocation de l'espace | Dynamique | Dynamique | Pré-allocation | Dynamique |
| Clé stockée triée | Oui | Non | Non | Oui (option) |
| Comparateur d'utilisateurs | Soutenu | - | - | Soutenu |
| Clés dupliquées | Non | Non | Non | Oui (option) |
| Clé stockée digérée | Non | Non | Oui | Non |
| Rechercher la clé la plus proche | Oui | Non | Non | Non |
| Support itérateur | Oui | Oui | Oui | Oui |
| Commande de visite de l'itérateur | min -> max | aléatoire | aléatoire | insérer |
| Option de filetage | Soutenu | Soutenu | Utilisateur | Soutenu |
| Peut utiliser un mem partagé | Non | Non | Oui | Non |
Toutes les API de conteneurs ont une apparence cohérente. Il fournit essentiellement une fonction de créateur qui renvoie généralement un pointeur vers une structure de conteneur. De plus, toutes les fonctions liées au conteneur sont accessibles via des pointeurs de fonction à l'intérieur du conteneur ou des API d'accès direct de style traditionnel. Pour un exemple,
Ainsi, quel que soit le conteneur que vous utilisez, vous pouvez simplement mettre des éléments dans une liste avec container->put(container, ...) ou vous pouvez les appeler en utilisant une API directe comme qtreetbl_pub (conteneur, ...).
Un exemples ci-dessous illustre à quoi cela ressemble.
// 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);
Voici une implémentation identique avec un conteneur de table-liste lié. Vous remarquerez peut-être qu'il n'y a pas de modifications de code du tout, à l'exception de 1 ligne dans la création de table. C'est pourquoi QLIBC résume les pointeurs de fonction correspondants à l'intérieur de l'objet de conteneur.
// 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);
Nous recherchons des personnes qui veulent travailler ensemble pour développer et améliorer QLIBC. Actuellement, nous avons des demandes élevées sur les domaines suivants.
Les personnes suivantes ont aidé avec des suggestions, des idées, du code ou des bugs de correction: (par ordre alphabétique par le prénom)
Si nous avons oublié ou mal orthographié votre nom, veuillez nous le faire savoir.