/**
 * \mainpage
 *
 * The modp_b family of encoders/decoders.
 *
 * Most have a similar interface:
 *  - modp_bXXX_encode(char* dest, char* src, int len) -- encodes src, and puts the result in dest.  The caller allocates dest.  It returns the strlen of the output.
 *  - modp_bXXX_encode_len(int len) -- returns the amount of memory needed to be allocated BEFORE calling _encode.
 *  - modp_bXXX_encode_strlen(int len) -- returns the strlen of the encoded output (but without doing the encode operation)
 *  - modp_bXXX_decode(char* dest, char* src, int len) -- decodes src and puts result in dest.  Returns the number of bytes written.
 *  - modp_bXXX_decode_len(int len) -- the amount of memory needed to decode.
 *
 * The header files all include a sample C++ std::string wrapper.
 *
 * In addition:
 * - modp_numtoa.h defines fast integer and float  types to char buffer converts.
 * - modp_ascii.h defines fast toupper, tolower transformations.
 *
 * \section modp_b64
 *
 * Converts 3 bytes into 4 characters, for 1.33 expansion ratio. This
 * version is ridiculously fast -- on some platforms the decode
 * operation is 4x faster than a standard implementation.
 *
 * \section modp_b64w
 *
 * Does the same type of transformation as modp_b64 but uses a
 * slightly different alphabet to make it "safe" to use inside a URL.
 * The mapping is: "/" to "_", * "+" to "-", * "=" to "."  If you are
 * intergating with another base64 encoder, you may need to change
 * this. See the mod_b64w.h header file for details.
 *
 * \section modp_b16
 *
 * This is the standard "binary to ascii" encoding that convert 1 byte
 * into two chars (0-9, a-f).  It's actually slower than base64 so
 * there is not reason to use this except for legacy applications.
 * (how can this be?  Because on decode we have to read 4 bytes to get
 * 2.  and in base64 we read 4 bytes to get 3, so base64's loop is
 * shorter).
 *
 * \section modp_b85
 *
 * Base 85 is the "most dense ascii encoding" possible, converting 4
 * bytes into 5 chars (1.2).  The ouput is 11% smaller than base 64
 * (1.33/1.2), but unfortunately, it's about twice as slow as base-64
 * encoding since true division has to be used (instead of raw bit
 * operations).
 *
 * \section mod_b2
 * Converts the given string to a base 2 or binary encoding (all
 * 1s and 0s).  For useful for debugging.
 *
 * \section modp_burl
 *
 * This performs url-encoding and url-decoding.  While not a true base
 * converted like the others, it does use an optimized base-16
 * converter for the encoded "%XY" data.  This has an alternate
 * encoder that provides a minimal encoding, modp_burl_min_encode.
 * See modp_burl.h for details
 *
 * \section modp_bjavascript
 *
 * Converts a raw c-string into something that can be enbedded into
 * javascript.  This might be useful for server-generated dynamic
 * javascript.  There is no decode function provided.  This is only
 * use when generating raw "text/javascript" files.  It is <b>NOT</b>
 * safe to make javascript that will ultimately be embedded inside
 * HTML via script tags.
 *
 * \section modp_numtoa
 *
 * The functions modp_itoa, modp_uitoa, modp_dtoa converts signed integers,
 * unsigned integers, and 'double' type conversion to char buffer (string).
 * The advantages over sprintf/snprintf are
 *  - core dump proof
 *  - have a fixed maximum size (e.g. try printf("%f", 2.0e100) for example)
 *  - 5-22x faster!
 *
 * See modp_numtoa.h for details
 *
 * \section modp_ascii
 *
 * modp_toupper and modp_tolower upper or lower case a string using the standard C
 * locale (i.e. 7-bit ascii).  These are 2-22x faster than using standard ctype
 * functions.  Also include is "toprint" which replaces "unprintable" characters
 * with a "?".
 *
 *
 */


syntax highlighted by Code2HTML, v. 0.9.1