with Ada.Text_IO, Ada.Strings.Bounded;
with Generic_Memory_Mapped_Arrays;

procedure Test_Memory_Mapped_Arrays is
   package Text_File_Strings is
     new Generic_Memory_Mapped_Arrays (Element_Type  => Character,
                                       Index_Range   => Positive,
                                       Element_Array => String,
                                       Default_Value => ' ');
   use Ada.Text_IO, Text_File_Strings;
   Source, ALI : Text_File_Strings.File_Type;
begin
   Open (File => Source,
         Name => "test_memory_mapped_arrays.adb");
   Open (File => ALI,
         Name => "test_memory_mapped_arrays.ali");

   Put_Line ("Source:");
   Put_Line (Slice (Source => Source,
                    Low    => First (Source),
                    High   => Last (Source)));
   Put_Line ("ALI:");
   Put_Line (Slice (Source => ALI,
                    Low    => First (ALI),
                    High   => Last (ALI)));

   Resize (File     => ALI,
           New_Last => Last (ALI) + 10);

   Replace_Slice (Source => ALI,
                  Low    => 1,
                  High   => 3,
                  By     => "Hej");

   Replace_Element (Source => ALI,
                    Index  => Last (ALI),
                    By     => '@');

With_Initialised_Fields:
   declare
      package User_Names is new Ada.Strings.Bounded.Generic_Bounded_Length (16);
      type Password_File_Entry is
         record
            User_Name : User_Names.Bounded_String;
            Password  : User_Names.Bounded_String;
         end record;
      type Password_Array is array (Positive range <>) of Password_File_Entry;
      package Password_DB is new Generic_Memory_Mapped_Arrays
        (Element_Type  => Password_File_Entry,
         Index_Range   => Positive,
         Element_Array => Password_Array,
         Default_Value => (others => User_Names.Null_Bounded_String));
      use Password_DB;
      Passwords : Password_DB.File_Type;
   begin
      Open (File => Passwords,
            Name => "passwd.bin");
      for I in 1000 .. 1004 loop
         Resize (File     => Passwords,
                 New_Last => Last (Passwords) + 1);
         Replace_Element
           (Source => Passwords,
            Index  => Last (Passwords),
            By     => (User_Name => User_Names.To_Bounded_String (I'Img),
                       Password  => User_Names.To_Bounded_String (I'Img)));
      end loop;
      Close (File => Passwords);
   end With_Initialised_Fields;
end Test_Memory_Mapped_Arrays;

