    /**************************************************************************\

    MODULE: ZZ_limbs

    SUMMARY:

    Defines low-level access to the "limbs" of a ZZ.

    \**************************************************************************/

    #include <NTL/ZZ.h>

    #ifdef NTL_GMP_LIP
    #include <gmp.h>
    #endif
    // NOTE: unlike other NTL header files, this one needs access
    // to GMP's header file, which means that C++ files that include
    // this file will need to ensure that the compiler has the
    // right "include path" to get at GMP's header file.

    typedef ... ZZ_limb_t;
    // The type of a limb.
    // With GMP, this is mp_limb_t, wich is usually (but not always)
    // typedef'd to unsigned long.
    // Without GMP, this is unisigned long (although that is subject to change).
    // In any case, all that one should assume is that this is an
    // unisgned integral type.

    #define NTL_BITS_PER_LIMB_T (...)
    // Integral constant defining the number of bits of ZZ_limb_t.

    const ZZ_limb_t * ZZ_limbs_get(const ZZ& a);
    // Get a pointer to the limbs of a (possibly null).
    // The number of limbs can be obtained by invoking a.size().

    void ZZ_limbs_set(ZZ& x, const ZZ_limb_t *p, long n);
    // Sets the limbs of x to p[0..n-1].
    // An error is raised on n < 0 or p == NULL and n > 0.
    // It will work correctly even if p points to a limb of x
    // itself.