Welcome to vppinfra a programming library of basic data structures.

vec.c		dynamic vectors
bitmap.h	dynamic bitmaps
heap.c		allocation heap of objects (sub-objects have variable size)
pool.h		allocation pool (like heap with size always 1)
hash.c		dynamic hash tables
mheap.c		memory allocator (a la dlmalloc)

format.c	extendable printf-like thing built on top of vectors
std-formats.c	formats for unix data structures, networking stuff, ...
timer.c		arrange for functions to be called at given times.


Build, Test, Install, Use...
----------------------------
    If this package came from the distribution tar ball, skip to the
    Build Section.  If this was a gentoo ebuild, after emerge/ebuild,
    skip to the Use Section; otherwise, start with Pre-Build.

Pre-Build
-----------
    1) svn checkout svn://teaktechnologies.com/fn/trunk/clib clib
    2) autoreconf [-v][-f][-i]	# regenerate configuration files

Build
-----
    1) cd BUILD			#  which may be different than this SRC dir
    2) ${SRC}/configure [--host=CHOST]
    3) make

Test
----
    If not cross-compiling (i.e. CBUILD == CHOST), use "make check" to
    run the validation programs.

Install
-------
    With the root effective user ID (i.e. su or sudo), run "make install".

Use
---
    We need to reference man pages and theory of operation.
