Intrusive data structures and asynchronous IO library
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


libdlb: data structures and utilities library
Copyright (C) 2013 Daniel Beer <>

This package is a library of (primarily intrusive) data structures and
asynchronous IO facilities for C programs. The subdirectories in this
directory are:

  * src: intrusive data structures, including:
    - bint: arbitrary precision integers
    - cbuf: circular byte-buffers
    - containers: utility macros for intrusive data structures
    - hash: partially intrusive hash table
    - istr: memory-efficient immutable string pool
    - list: intrusive doubly-linked circular list
    - rbt: intrusive red-black tree
    - rbt_iter: functions for iterating over red-black trees
    - rbt_range: functions for efficiently computing aggregates over
      augmented red-black trees.
    - slab: pooled object allocator
    - slist: intrusive singly-linked list
    - strbuf: resizable string-buffer
    - strlcpy: strlcpy() and strlcat()
    - vector: resizable array

  * io: portable asynchronous IO and system utilities:
    - afile: asynchronous file reading/writing
    - clock: portable interface to a monotonic millisecond clock
    - handle: portable file handle abstraction
    - ioq: asynchronous IO queue
    - mailbox: asynchronous IPC primitive
    - runq: thread pool
    - syserr: portable interface to system error codes
    - thr: portable interface to threading primitives
    - waitq: asynchronous timer schedule
    - net: portable network initialization
    - adns: asynchronous DNS
    - asock: asynchronous TCP/IP socket

  * tests: automated test suite

To build the tests, type "make". Nothing is required except the standard
C library and GCC. Type "make test" to run each test.

All the files in this package are covered by the license in the file
"LICENSE". If you want to use them in your own programs, just include
the files you need in your source package -- there's no need to build a
shared library, and you likely don't need every file (dependencies
between files exist, but are easily identified).