Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Tablesaw | 5,520 | 95 | 7 | 7 months ago | 54 | March 19, 2019 | mit | JavaScript | ||
A group of plugins for responsive tables. | ||||||||||
Qlibc | 802 | 5 months ago | 3 | other | C | |||||
qLibc is a simple and yet powerful C library providing generic data structures and algorithms | ||||||||||
Joy | 473 | a month ago | 16 | mit | Clojure | |||||
A full stack web framework written in janet | ||||||||||
Expandingstackcells | 318 | 7 years ago | 5 | mit | Swift | |||||
Expanding table view cells using UIStackView in iOS 9 | ||||||||||
Strips | 301 | 5 | 1 | 4 months ago | 10 | May 18, 2017 | JavaScript | |||
AI Automated Planning with STRIPS and PDDL in Node.js | ||||||||||
Eris | 120 | 3 years ago | 7 | other | C | |||||
Heavy Duty Persistence for Lua 5.2 and 5.3 | ||||||||||
Todomvc Nix | 119 | a year ago | 11 | Nix | ||||||
Example on how to nixify a project [[email protected]] | ||||||||||
Fliplog | 42 | 232 | 34 | 6 years ago | 71 | June 15, 2017 | 11 | JavaScript | ||
fluent logging with verbose insight, colors, tables, emoji, filtering, spinners, progress bars, timestamps, capturing, stack traces, tracking, presets, & more... | ||||||||||
Llvm Statepoint Utils | 31 | 3 years ago | mit | C | ||||||
Runtime support for LLVM's GC Statepoints | ||||||||||
Huff | 31 | 3 years ago | 2 | February 06, 2020 | 1 | JavaScript | ||||
Repository for Huff - an EVM programming language |
qLibc is currently one of the most functionally-complete, publicly-licensed C/C++ libraries. The goal of the qLibc project is to provide a simple and powerful general purpose C/C++ library that includes all kinds of containers and general library routines. It provides a ready-made set of common container APIs with a consistent API look.
qLibc is published under 2-clause BSD license known as Simplified BSD License. Please refer the LICENSE document included in the package for more details.
Characteristics | Tree Table | Hash Table | Static Hash Table | List Table |
---|---|---|---|---|
Data structure | Binary Tree | Slot Index | Block Array | Linked-List |
Search complexity | O(log n) | O(1) / O(n) | O(1) / O(n) | O(n) |
Insert complexity | O(log n) | O(1) / O(n) | O(1) / O(n) | O(1) |
Delete complexity | O(log n) | O(1) / O(n) | O(1) / O(n) | O(n) |
Space complexity | O(n) | O(n) | - | O(n) |
Space allocation | Dynamic | Dynamic | Pre-allocation | Dynamic |
Key Stored Sorted | Yes | No | No | Yes (option) |
User comparator | Supported | - | - | Supported |
Duplicated keys | No | No | No | Yes (option) |
Key stored digested | No | No | Yes | No |
Search Nearest Key | Yes | No | No | No |
Iterator support | Yes | Yes | Yes | Yes |
Iterator visit order | min -> max | random | random | insert order |
Thread-safe option | Supported | Suported | User | Supported |
Can use shared mem | No | No | Yes | No |
All container APIs have a consistent look and feel. It basically provides a creator function which usually returns a pointer to a container structure. Also, all functions related to the container can be accessed through function pointers inside of the container or traditional style direct access APIs. For an example,
So, regardless of which container you use, you can simply put elements into
a list with container->put(container, ...)
or you can call them using
direct API like qtreetbl_pub(container, ...).
An examples below illustrates how it looks like.
// 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("%d\n", *px);
free(px);
}
// release table
tbl->free(tbl);
Here is an identical implementation with a Linked-List-Table container. You may notice that there aren't any code changes at all, except for 1 line in the table creation. This is why qLibc encapsulates corresponding function pointers inside of the container object.
// 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("%d\n", *px);
free(px);
}
// release table
tbl->free(tbl);
We're looking for people who want to work together to develop and improve qLibc. Currently, we have high demands on following areas.
The following people have helped with suggestions, ideas, code or fixing bugs: (in alphabetical order by first name)
If we have forgotten or misspelled your name, please let us know.