/*!\addtogroup wordsize 32 and 64 bit templates
 *
 * Here is the documentation for the names that are redefined in \c libfid.32
 * and \c libfid.64 via preprocessor to obtain a simple simulation of C++
 * templates. The symbols defined in \c libfid.32 and \c libfid.64 can be
 * undefined again by including \c libfid.undef. This means you can do
 * something like
 * \code
 * #include <libfid.h>
 *
 * /* switch to 32 bit interface */
 * #include <libfid.32>
 * /* use generic names */
 * #include "mygenericcode.h"
 * #include <libfid.undef>
 *
 * /* switch to 64 bit interface */
 * #include <libfid.64>
 * /* use generic names */
 * #include "mygenericcode.h"
 * #include <libfid.undef>
 *
 * /* code below cannot use _32/_64-free versions anymore */
 * \endcode
 *
 * If you are using C++, however, consider using the traits classes from
 * \c libfidxx.h in conjunction with real C++ templates (experimental).
 *
 * \todo Describe how to use \c fid_gen48.pl to generate templates support
 * macros.
 */
/*@{*/

/*!\struct UINT
 * \brief Type of unsigned integers in template code.
 *
 * Use this macro to declare values of 32 or 64 bit unsigned integers in
 * template code. For the 32 bit version this macro will be defined to the the
 * correct unsigned 32 bit integer type, likewise for the 64 bit version. 
 *
 * Example:
 * \code
 * int i = 42;
 * UINT myvalue = 23;
 *
 * myvalue = (UINT)i;
 * \endcode
 *
 * \see #UINTFMT, #fid_Uint32, #fid_Uint64
 *
 * \note The name #UINT really is a macro, not a structure. It is only listed
 * as a structure to trick the documentation system into linking all
 * occurrences of the name to this description.
 */

/*!
 * \brief Name of type of unsigned integers in template code.
 * \see real documentation for #UINT, #UINTFMT
 */
#define UINT

/*!
 * \brief Format string for printing values of type #UINT in template code.
 *
 * When writing template code for 32 and 64 bit integers, use this macro to
 * print a value of type #UINT via \c printf(). The format string defined by
 * this macro is a simple one, there is no possibility to add modifiers to the
 * format string.
 *
 * Example:
 * \code
 * UINT myvalue = 23;
 *
 * printf("My value is " UINTFMT "\n", myvalue);
 * \endcode
 * 
 * \see #UINT, #fid_Uint32, #fid_Uint64
 */
#define UINTFMT

/*!
 * \brief Name of correct member of #fid_Uint48 and #fid_Uint48constptr unions
 * in template code.
 *
 * When writing template code for 32 and 64 bit integers, use this macro to
 * access the 32 or 64 bit part of a #fid_Uint48 and #fid_Uint48constptr value.
 *
 * Example:
 * \code
 * fid_Uint48 myvalue;
 *
 * myvalue.VU = 42;
 * printf("My value is " UINTFMT "\n", myvalue.VU);
 * \endcode
 *
 * \see #fid_Uint48, #fid_Uint48constptr
 */
#define VU

/*!\struct fid_Sequenceiterfun
 * \see #fid_Sequenceiterfun_32 and #fid_Sequenceiterfun_64 */

/*!\struct fid_Suffixinterval
 * \see #fid_Suffixinterval_32 and #fid_Suffixinterval_64 */

/*!\struct fid_Esatraversecallback
 * \see #fid_Esatraversecallback_32 and #fid_Esatraversecallback_64 */

/*@}*/
