--------------------------------------------------------------- {{{1 ---------- --: Copyright © 2003 … 2023 Martin Krischik «krischik@users.sourceforge.net» ------------------------------------------------------------------------------- --: This library is free software; you can redistribute it and/or modify it --: under the terms of the GNU Library General Public License as published by --: the Free Software Foundation; either version 2 of the License, or (at your --: option) any later version. --: --: This library is distributed in the hope that it will be useful, but --: WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --: or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public --: License for more details. --: --: You should have received a copy of the GNU Library General Public License --: along with this library; if not, write to the Free Software Foundation, --: Inc., 675 Mass Ave, Cambridge, MA 02139, USA. --------------------------------------------------------------- }}}1 ---------- pragma License (Modified_Gpl); pragma Ada_2022; with Ada.Strings.Wide_Fixed; with Ada.Wide_Text_IO; package body AdaCL.Wide_Strings.Hex is function Generic_Image (Value : in Unsigned_Type) return Wide_String is use Ada.Strings.Wide_Fixed; package IO is new Ada.Wide_Text_IO.Modular_IO (Num => Unsigned_Type); Lead : constant := 3; Tail : constant := 1; Text : Wide_String (1 .. Lead + Width + Tail); Retval : Wide_String (1 .. Width); begin IO.Put (To => Text, Item => Value, Base => 16); declare Start : constant Natural := Index (Source => Text, Pattern => "#"); Padding : constant Natural := Start - Lead; begin Retval := (Padding * '0') & Text (Start + 1 .. Lead + Width); end; return Retval; end Generic_Image; function Generic_Value (Image : in Wide_String) return Unsigned_Type is package IO is new Ada.Wide_Text_IO.Modular_IO (Num => Unsigned_Type); Last : Positive; Retval : Unsigned_Type; begin IO.Get (From => "16#" & Image & "#", Item => Retval, Last => Last); return Retval; end Generic_Value; ---------------------------------------------------------------------------- function Image (Value : in Interfaces.Unsigned_8) return Wide_String is function Delegate is new Generic_Image (Unsigned_Type => Interfaces.Unsigned_8, Width => 2); begin return Delegate (Value); end Image; function Image (Value : in Interfaces.Unsigned_16) return Wide_String is function Delegate is new Generic_Image (Unsigned_Type => Interfaces.Unsigned_16, Width => 4); begin return Delegate (Value); end Image; function Image (Value : in Interfaces.Unsigned_32) return Wide_String is function Delegate is new Generic_Image (Unsigned_Type => Interfaces.Unsigned_32, Width => 8); begin return Delegate (Value); end Image; function Image (Value : in Interfaces.Unsigned_64) return Wide_String is function Delegate is new Generic_Image (Unsigned_Type => Interfaces.Unsigned_64, Width => 16); begin return Delegate (Value); end Image; ---------------------------------------------------------------------------- function Value (Image : in Wide_String) return Interfaces.Unsigned_8 is function Delegate is new Generic_Value (Unsigned_Type => Interfaces.Unsigned_8); begin return Delegate (Image); end Value; function Value (Image : in Wide_String) return Interfaces.Unsigned_16 is function Delegate is new Generic_Value (Unsigned_Type => Interfaces.Unsigned_16); begin return Delegate (Image); end Value; function Value (Image : in Wide_String) return Interfaces.Unsigned_32 is function Delegate is new Generic_Value (Unsigned_Type => Interfaces.Unsigned_32); begin return Delegate (Image); end Value; function Value (Image : in Wide_String) return Interfaces.Unsigned_64 is function Delegate is new Generic_Value (Unsigned_Type => Interfaces.Unsigned_64); begin return Delegate (Image); end Value; end AdaCL.Wide_Strings.Hex; ---------------------------------------------------------------- {{{ ---------- --: vim: set textwidth=0 nowrap tabstop=8 shiftwidth=3 softtabstop=3 expandtab : --: vim: set filetype=ada fileencoding=utf-8 fileformat=unix foldmethod=expr : --: vim: set spell spelllang=en_gb