summaryrefslogtreecommitdiff
path: root/doc/mainpage.dox
blob: 7e9b54d88101b3c6f69cba4deab8232d07af3f40 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
 * @mainpage
 *
 * @section libusual    libusual
 *
 * libusual is utility library.
 *
 * Unlike APR or GLIB which create their own API world, libusual
 * tries to use standardized API's whenever possible.
 *
 * Goals for portability APIs:
 * - Follow modern POSIX, BSD, glibc.  Make the APIs available everywhere.
 * - If compat is impossible, allow the user code to compile - eg. UNIX
 *   sockets on win32.
 * - Assume cooparating user:
 *   - libusual needs to implement only API that are used and useful.  No need try to provide full POSIX.
 *   - user code survives gracefully when libusual provides less functionality.
 *
 * Goals for new APIs:
 * - Simple, clear API
 * - Simple, clear implementation.
 * - It is preferable to have simple code which can be copied and modified
 *   for some special case than complex code that tries to handle
 *   everything at once.
 *
 * @section antimake  Antimake build system.
 *
 * <a href="mk/">Build system demos and docs</a>.
 *
 * @section modules  Module list.
 *
 * <table>
 * <tr><th colspan=2>  Compat includes  </th></tr>
 * <tr><td>  <usual/base.h>          </td><td>  Base C environment  </td></tr>
 * <tr><td>  <usual/ctype.h>         </td><td>  ctype compat  </td></tr>
 * <tr><td>  <usual/getopt.h>        </td><td>  Command line argument processing  </td></tr>
 * <tr><td>  <usual/err.h>           </td><td>  Error handling for command-line tools  </td></tr>
 * <tr><td>  <usual/netdb.h>         </td><td>  Async DNS lookup  </td></tr>
 * <tr><td>  <usual/pthread.h>       </td><td>  Pthreads compat   </td></tr>
 * <tr><td>  <usual/signal.h>        </td><td>  Signal compat   </td></tr>
 * <tr><td>  <usual/socket.h>        </td><td>  Socket compat and helper functions   </td></tr>
 * <tr><td>  <usual/string.h>        </td><td>  String compat and helper functions   </td></tr>
 * <tr><td>  <usual/time.h>          </td><td>  Time compat and helper functions   </td></tr>
 * <tr><td>  <usual/fnmatch.h>       </td><td>  fnmatch compat   </td></tr>
 * <tr><th colspan=2>  Data Structures  </th></tr>
 * <tr><td>  <usual/aatree.h>        </td><td>  Binary Tree   </td></tr>
 * <tr><td>  <usual/cbtree.h>        </td><td>  Crit-Bit Tree   </td></tr>
 * <tr><td>  <usual/hashtab-impl.h>  </td><td>  Hash table   </td></tr>
 * <tr><td>  <usual/heap.h>          </td><td>  Binary heap   </td></tr>
 * <tr><td>  <usual/list.h>          </td><td>  Double-linked list   </td></tr>
 * <tr><td>  <usual/mbuf.h>          </td><td>  Memory buffer   </td></tr>
 * <tr><td>  <usual/mdict.h          </td><td>  Minimal dict   </td></tr>
 * <tr><td>  <usual/shlist.h>        </td><td>  Double-linked list for shared mem   </td></tr>
 * <tr><td>  <usual/statlist.h>      </td><td>  List with stats   </td></tr>
 * <tr><td>  <usual/strpool.h>       </td><td>  Refcounted strings   </td></tr>
 * <tr><th colspan=2>  Data Processing  </th></tr>
 * <tr><td>  <usual/bits.h>          </td><td>  Bit arithmetic   </td></tr>
 * <tr><td>  <usual/bytemap.h>       </td><td>  Byte processing   </td></tr>
 * <tr><td>  <usual/cfparser.h>      </td><td>  Config parser   </td></tr>
 * <tr><td>  <usual/endian.h>        </td><td>  Endianess conversion   </td></tr>
 * <tr><td>  <usual/misc.h>          </td><td>  Misc arithmetic   </td></tr>
 * <tr><td>  <usual/regex.h>         </td><td>  POSIX regex compat   </td></tr>
 * <tr><td>  <usual/pgutil.h>        </td><td>  PostgreSQL data formats   </td></tr>
 * <tr><td>  <usual/utf8.h>          </td><td>  Low-level UTF8 handling   </td></tr>
 * <tr><th colspan=2>  Non-cryptographic hashing  </th></tr>
 * <tr><td>  <usual/hashing/crc32.h>         </td><td>  CRC32   </td></tr>
 * <tr><td>  <usual/hashing/lookup3.h>       </td><td>  Jenkins' lookup3 hash   </td></tr>
 * <tr><td>  <usual/hashing/siphash.h>       </td><td>  Siphash   </td></tr>
 * <tr><td>  <usual/hashing/memhash.h>       </td><td>  In-memory hashing   </td></tr>
 * <tr><td>  <usual/hashing/spooky.h>       </td><td>  Jenkins' SpookyHash for 64-bit CPUs  </td></tr>
 * <tr><td>  <usual/hashing/xxhash.h>       </td><td>  XXHash for 32-bit CPUs  </td></tr>
 * <tr><th colspan=2>  Cryptography  </th></tr>
 * <tr><td>  <usual/crypto/csrandom.h> </td><td>  Cryptographically Secure Randomness </td></tr>
 * <tr><td>  <usual/crypto/digest.h> </td><td>  Common API for cryptographic message digests </td></tr>
 * <tr><td>  <usual/crypto/hmac.h>   </td><td>  HMAC with digest </td></tr>
 * <tr><td>  <usual/crypto/md5.h>    </td><td>  MD5 hash  </td></tr>
 * <tr><td>  <usual/crypto/sha1.h>   </td><td>  SHA1 hash  </td></tr>
 * <tr><td>  <usual/crypto/sha256.h> </td><td>  SHA256/224 hashes  </td></tr>
 * <tr><td>  <usual/crypto/sha512.h> </td><td>  SHA512/384 hashes  </td></tr>
 * <tr><td>  <usual/crypto/sha3.h>   </td><td>  SHA3/SHAKE hashes  </td></tr>
 * <tr><td>  <usual/crypto/keccak.h> </td><td>  Keccak sponge API  </td></tr>
 * <tr><td>  <usual/crypto/keccak_prng.h> </td><td>  PRNG based on Keccak  </td></tr>
 * <tr><th colspan=2>  Memory Allocation  </th></tr>
 * <tr><td>  <usual/cxalloc.h>       </td><td>  Context Allocator framework   </td></tr>
 * <tr><td>  <usual/cxextra.h>       </td><td>  Extra allocators   </td></tr>
 * <tr><td>  <usual/mempool.h>       </td><td>  Simple append-only memory pool   </td></tr>
 * <tr><td>  <usual/slab.h>          </td><td>  Slab allocator for same-size objects   </td></tr>
 * <tr><th colspan=2>  OS support  </th></tr>
 * <tr><td>  <usual/event.h>         </td><td>  libevent compat   </td></tr>
 * <tr><td>  <usual/daemon.h>        </td><td>  Process daemonization   </td></tr>
 * <tr><td>  <usual/fileutil.h>      </td><td>  Various file I/O tools   </td></tr>
 * <tr><td>  <usual/logging.h>       </td><td>  Logging framework for daemons   </td></tr>
 * <tr><td>  <usual/pgsocket.h>      </td><td>  Async Postgres connection framework   </td></tr>
 * <tr><td>  <usual/safeio.h>        </td><td>  Safety wrappers around OS I/O   </td></tr>
 * </table>
 */