1 | /* Internal function for converting integers to ASCII. |
---|---|

2 | Copyright (C) 1994,95,96,97,98,99,2002,2003 Free Software Foundation, Inc. |

3 | This file is part of the GNU C Library. |

4 | |

5 | The GNU C Library is free software; you can redistribute it and/or |

6 | modify it under the terms of the GNU Lesser General Public |

7 | License as published by the Free Software Foundation; either |

8 | version 2.1 of the License, or (at your option) any later version. |

9 | |

10 | The GNU C Library is distributed in the hope that it will be useful, |

11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |

12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |

13 | Lesser General Public License for more details. |

14 | |

15 | You should have received a copy of the GNU Lesser General Public |

16 | License along with the GNU C Library; if not, write to the Free |

17 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |

18 | 02111-1307 USA. */ |

19 | |

20 | #ifndef _ITOWA_H |

21 | #define _ITOWA_H 1 |

22 | |

23 | /* Convert VALUE into ASCII in base BASE (2..16). |

24 | Write backwards starting the character just before BUFLIM. |

25 | Return the address of the first (left-to-right) character in the number. |

26 | Use upper case letters iff UPPER_CASE is nonzero. */ |

27 | |

28 | static const wchar_t _itowa_lower_digits[16] = L_("0123456789abcdef"); |

29 | static const wchar_t _itowa_upper_digits[16] = L_("0123456789ABCDEF"); |

30 | |

31 | static inline wchar_t * |

32 | __attribute__ ((unused, always_inline)) |

33 | _itowa_word (unsigned long value, wchar_t *buflim, |

34 | unsigned int base, int upper_case) |

35 | { |

36 | const wchar_t *digits = (upper_case |

37 | ? _itowa_upper_digits : _itowa_lower_digits); |

38 | wchar_t *bp = buflim; |

39 | |

40 | switch (base) |

41 | { |

42 | #define SPECIAL(Base) \ |

43 | case Base: \ |

44 | do \ |

45 | *--bp = digits[value % Base]; \ |

46 | while ((value /= Base) != 0); \ |

47 | break |

48 | |

49 | SPECIAL (10); |

50 | SPECIAL (16); |

51 | SPECIAL (8); |

52 | default: |

53 | do |

54 | *--bp = digits[value % base]; |

55 | while ((value /= base) != 0); |

56 | } |

57 | return bp; |

58 | } |

59 | |

60 | static inline wchar_t * |

61 | __attribute__ ((unused, always_inline)) |

62 | _itowa (uint64_t value, wchar_t *buflim, |

63 | unsigned int base, int upper_case) |

64 | { |

65 | const wchar_t *digits = (upper_case |

66 | ? _itowa_upper_digits : _itowa_lower_digits); |

67 | wchar_t *bp = buflim; |

68 | |

69 | switch (base) |

70 | { |

71 | SPECIAL (10); |

72 | SPECIAL (16); |

73 | SPECIAL (8); |

74 | default: |

75 | do |

76 | *--bp = digits[value % base]; |

77 | while ((value /= base) != 0); |

78 | } |

79 | return bp; |

80 | } |

81 | #undef SPECIAL |

82 | |

83 | #endif /* itowa.h */ |

84 |