--  Abstract :
--
--  See spec.
--
--  Copyright (C) 2018, 2021 Free Software Foundation, Inc.
--
--  This library is free software;  you can redistribute it and/or modify it
--  under terms of the  GNU General Public License  as published by the Free
--  Software  Foundation;  either version 3,  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 MERCHAN-
--  TABILITY or FITNESS FOR A PARTICULAR PURPOSE.

--  As a special exception under Section 7 of GPL version 3, you are granted
--  additional permissions described in the GCC Runtime Library Exception,
--  version 3.1, as published by the Free Software Foundation.

pragma License (Modified_GPL);

with Ada.Strings.Fixed;
with Ada.Strings.Unbounded;
function SAL.Gen_Unbounded_Definite_Vectors.Gen_Image
  (Item        : in Vector;
   Strict      : in Boolean := False;
   Association : in Boolean := False)
  return String
is
   use all type Ada.Containers.Count_Type;
   use Ada.Strings;
   use Ada.Strings.Fixed;
   use Ada.Strings.Unbounded;
   Result : Unbounded_String        := To_Unbounded_String ("(");
   First  : constant Base_Peek_Type := To_Peek_Type (Item.First_Index);
   Last   : constant Base_Peek_Type := To_Peek_Type (Item.Last_Index);
begin
   if (Strict or Association) and Item.Length = 0 then
      return "(" & Trim (Index_Type'Image (Index_Type'First), Left) & " .. " &
        Trim (Index_Type'Image (Extended_Index'First), Left) & " => <>)";

   elsif (Strict or Association) and Item.Length = 1 then
      return "(" & Trim (Index_Type'Image (Index_Type'First), Left) & " => " &
        Element_Image (Item.Elements (First)) & ")";

   else
      for I in First .. Last loop
         Result := @ & (if Association then Trim (I'Image, Left) & " => " else "") & Element_Image (Item.Elements (I));
         if I /= Last then
            Result := @ & ", ";
         end if;
      end loop;
      Result := Result & ")";
      return To_String (Result);
   end if;
end SAL.Gen_Unbounded_Definite_Vectors.Gen_Image;
