dump.c revision 1.1.1.1
1/* THIS IS AN INTERNAL FUNCTION WITH A MUTABLE INTERFACE.  IT IS NOT SAFE TO
2   CALL THIS FUNCTION DIRECTLY.  IN FACT, IT IS ALMOST GUARANTEED THAT THIS
3   FUNCTION WILL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE.
4
5
6Copyright 1996, 2000, 2001, 2002, 2005 Free Software Foundation, Inc.
7
8This file is part of the GNU MP Library.
9
10The GNU MP Library is free software; you can redistribute it and/or modify
11it under the terms of the GNU Lesser General Public License as published by
12the Free Software Foundation; either version 3 of the License, or (at your
13option) any later version.
14
15The GNU MP Library is distributed in the hope that it will be useful, but
16WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
18License for more details.
19
20You should have received a copy of the GNU Lesser General Public License
21along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.  */
22
23#include <stdio.h>
24#include "gmp.h"
25#include "gmp-impl.h"
26
27#if GMP_NUMB_BITS % 4 == 0
28void
29mpn_dump (mp_srcptr ptr, mp_size_t n)
30{
31  MPN_NORMALIZE (ptr, n);
32
33  if (n == 0)
34    printf ("0\n");
35  else
36    {
37      n--;
38#if _LONG_LONG_LIMB
39      if ((ptr[n] >> GMP_LIMB_BITS / 2) != 0)
40	{
41	  printf ("%lX", (unsigned long) (ptr[n] >> GMP_LIMB_BITS / 2));
42	  printf ("%0*lX", (GMP_LIMB_BITS / 2 / 4), (unsigned long) ptr[n]);
43	}
44      else
45#endif
46	printf ("%lX", (unsigned long) ptr[n]);
47
48      while (n)
49	{
50	  n--;
51#if _LONG_LONG_LIMB
52	  printf ("%0*lX", (GMP_NUMB_BITS - GMP_LIMB_BITS / 2) / 4,
53		  (unsigned long) (ptr[n] >> GMP_LIMB_BITS / 2));
54	  printf ("%0*lX", GMP_LIMB_BITS / 2 / 4, (unsigned long) ptr[n]);
55#else
56	  printf ("%0*lX", GMP_NUMB_BITS / 4, (unsigned long) ptr[n]);
57#endif
58	}
59      printf ("\n");
60    }
61}
62
63#else
64
65static void
66mpn_recdump (mp_ptr p, mp_size_t n)
67{
68  mp_limb_t lo;
69  if (n != 0)
70    {
71      lo = p[0] & 0xf;
72      mpn_rshift (p, p, n, 4);
73      mpn_recdump (p, n);
74      printf ("%lX", lo);
75    }
76}
77
78void
79mpn_dump (mp_srcptr p, mp_size_t n)
80{
81  mp_ptr tp;
82  TMP_DECL;
83  TMP_MARK;
84  tp = TMP_ALLOC_LIMBS (n);
85  MPN_COPY (tp, p, n);
86  TMP_FREE;
87}
88
89#endif
90