2021-08-23 23:47:29 +00:00
with H3.Pool ;
with H3.Limited_Pool ;
2021-10-06 03:56:30 +00:00
with H3.Arrays ;
2021-08-23 23:47:29 +00:00
with H3.Strings ;
with H3.Storage_Pools ;
with H3.MM ;
with GNAT.Debug_Pools ;
with System.Storage_Pools ;
with System.Pool_Global ;
with Ada.Unchecked_Deallocation ;
with Ada.Text_IO ;
with Ada.Wide_Text_IO ;
2021-08-24 07:17:32 +00:00
with Ada.Assertions ;
2021-08-23 23:47:29 +00:00
2021-09-30 23:54:50 +00:00
use type H3 . System_Size ;
2021-10-03 16:53:13 +00:00
2021-08-23 23:47:29 +00:00
procedure hello is
2021-10-06 03:56:30 +00:00
package S is new H3.Strings ( Standard.Wide_Character, Wide_Character'Val( 0) ) ;
2021-10-06 17:30:12 +00:00
2021-08-23 23:47:29 +00:00
--type Global_Pool is new System.Storage_Pools.Root_Storage_Pool with null record;
P1 : aliased System . Pool_Global . Unbounded_No_Reclaim_Pool ;
P2 : aliased GNAT . Debug_Pools . Debug_Pool ;
P3 : aliased H3 . Storage_Pools . Global_Pool ;
type T is record
A : Integer := 99 ;
B : Integer := 88 ;
C : Float ;
end record ;
type L is limited record
A : Integer := 1234 ;
B : Integer ;
C : Float ;
end record ;
type T_Pointer is access T ;
package TP is new H3.Pool ( T, T_Pointer, P1'Unchecked_Access) ;
type L_Pointer is access L ;
package LP is new H3.Limited_Pool ( L, L_Pointer, P1'Unchecked_Access) ;
type I_Pointer is access Integer ;
package IP is new H3.Pool ( Integer, I_Pointer, P1'Unchecked_Access) ;
procedure Info is new GNAT . Debug_Pools . Print_Info ( Ada . Text_IO . Put_Line , Ada . Text_IO . Put ) ;
x : T_Pointer ;
i : I_Pointer ;
y : L_Pointer ;
SS : S . Elastic_String ;
2021-09-30 23:54:50 +00:00
2021-10-03 15:38:31 +00:00
procedure print_string_info ( Str : in S . Elastic_String ; Name : in Standard . String ) is
len : H3 . System_Size ;
capa : H3 . System_Size ;
first : H3 . System_Size ;
last : H3 . System_Size ;
begin
len := S . Get_Length ( Str ) ;
capa := S . Get_Capacity ( Str ) ;
first := S . Get_First_Index ( Str ) ;
last := S . Get_Last_Index ( Str ) ;
Ada . Text_IO . Put ( Name & " len:" & len ' Img & " capa:" & capa ' Img & " first:" & first ' img & " last:" & last ' img & " => " ) ;
2021-10-03 16:53:13 +00:00
Ada . Wide_Text_IO . Put_line ( Standard . Wide_String ( S . To_Item_Array ( Str ) ) ) ;
2021-10-03 15:38:31 +00:00
2021-10-03 16:53:13 +00:00
if S . Terminator_Length > 0 then
pragma Assert ( S . Get_Item ( Str , S . Get_Last_Index ( Str ) + 1 ) = S . Terminator_Value ) ;
end if ;
2021-10-03 15:38:31 +00:00
end print_string_info ;
2021-08-23 23:47:29 +00:00
begin
2021-09-30 23:54:50 +00:00
declare
TTT : H3 . System_Size := H3 . System_Size ' Last ;
--NNN: Standard.Natural := Standard.Natural'Last;
begin
TTT := TTT + 1 ;
ada . text_io . put_line ( "-----------------" ) ;
ada . text_io . put_line ( TTT ' Img ) ;
ada . text_io . put_line ( "-----------------" ) ;
--NNN := NNN + 1;
--ada.text_io.put_line ("-----------------");
--ada.text_io.put_line (NNN'Img);
--ada.text_io.put_line ("-----------------");
end ;
2021-08-23 23:47:29 +00:00
x := TP . Allocate ( ( A => 900 , B => 800 , C => 1.1 ) ) ;
i := IP . Allocate ( 200 ) ;
y := LP . Allocate ;
-- can't do this as it's limited
--y.all := (A => 1900, B => 1800, C => 11.1);
-- this works...
--y.A := 1900;
y . B := 1800 ;
y . C := 11.1 ;
declare
type LL_Pointer is access L ;
for LL_Pointer ' Storage_Pool use P3 ;
z : LL_Pointer ;
procedure Dealloc is new Ada . Unchecked_Deallocation ( L , LL_Pointer ) ;
begin
z := new L ' ( A => 9900 , B => 9800 , C => 99.1 ) ;
Ada . Text_IO . Put_Line ( Z . A ' Img ) ;
Dealloc ( z ) ;
end ;
Ada . Text_IO . Put_Line ( Integer ' Image ( x . A ) ) ;
Ada . Text_IO . Put_Line ( Integer ' Image ( x . B ) ) ;
Ada . Text_IO . Put_Line ( Integer ' Image ( i . all ) ) ;
Ada . Text_IO . Put_Line ( Integer ' Image ( y . A ) ) ;
IP . Deallocate ( i ) ;
TP . Deallocate ( x ) ;
LP . Deallocate ( y ) ;
2021-10-03 15:38:31 +00:00
--GNAT.Debug_Pools.Print_Info_Stdout(P2);
--GNAT.Debug_Pools.Dump_Stdout(P2, 100);
2021-08-23 23:47:29 +00:00
declare
str : S . Elastic_String ;
2021-08-24 07:17:32 +00:00
str2 : S . Elastic_String ;
2021-10-03 15:38:31 +00:00
2021-08-23 23:47:29 +00:00
begin
2021-10-03 15:38:31 +00:00
print_string_info ( Str , "Str" ) ;
pragma Assert ( S . Get_Length ( Str ) = 0 ) ;
pragma Assert ( S . Get_First_Index ( Str ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str ) = 0 ) ;
2021-08-23 23:47:29 +00:00
2021-10-03 15:38:31 +00:00
S . Append ( Str , "Hello, world!" ) ;
print_string_info ( Str , "Str" ) ;
pragma Assert ( S . Get_Length ( Str ) = 13 ) ;
pragma Assert ( S . Get_First_Index ( Str ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str ) = 13 ) ;
2021-08-23 23:47:29 +00:00
S . Append ( Str , "" ) ;
2021-10-03 15:38:31 +00:00
print_string_info ( Str , "Str" ) ;
pragma Assert ( S . Get_Length ( Str ) = 13 ) ;
pragma Assert ( S . Get_First_Index ( Str ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str ) = 13 ) ;
S . Append ( Str , ' ' , 0 ) ;
print_string_info ( Str , "Str" ) ;
pragma Assert ( S . Get_Length ( Str ) = 13 ) ;
pragma Assert ( S . Get_First_Index ( Str ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str ) = 13 ) ;
S . Prepend ( Str , ' ' , 0 ) ;
print_string_info ( Str , "Str" ) ;
pragma Assert ( S . Get_Length ( Str ) = 13 ) ;
pragma Assert ( S . Get_First_Index ( Str ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str ) = 13 ) ;
S . Append ( Str , ' ' , 2 ) ;
print_string_info ( Str , "Str" ) ;
pragma Assert ( S . Get_Length ( Str ) = 15 ) ;
pragma Assert ( S . Get_First_Index ( Str ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str ) = 15 ) ;
2021-08-23 23:47:29 +00:00
2021-10-03 15:38:31 +00:00
S . Append ( Str , "donkey" ) ;
print_string_info ( Str , "Str" ) ;
pragma Assert ( S . Get_Length ( Str ) = 21 ) ;
pragma Assert ( S . Get_First_Index ( Str ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str ) = 21 ) ;
S . Prepend ( Str , "Oh! " ) ;
print_string_info ( Str , "Str" ) ;
pragma Assert ( S . Get_Length ( Str ) = 25 ) ;
pragma Assert ( S . Get_First_Index ( Str ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str ) = 25 ) ;
2021-08-23 23:47:29 +00:00
declare
2021-10-03 15:38:31 +00:00
-- unsafe way to access the internal buffer.
2021-10-06 03:56:30 +00:00
--arr: constant S.P.Item_Array := S.To_Item_Array(Str);
arr : constant S . Character_Array := S . To_Item_Array ( Str ) ;
2021-08-23 23:47:29 +00:00
begin
2021-10-03 15:38:31 +00:00
Ada . Wide_Text_IO . Put ( "STR[1] => [" ) ;
2021-08-23 23:47:29 +00:00
for i in arr ' Range loop
Ada . Wide_Text_IO . Put ( arr ( i ) ) ;
end loop ;
2021-10-03 15:38:31 +00:00
Ada . Wide_Text_IO . Put_Line ( "]" ) ;
2021-09-30 23:54:50 +00:00
2021-10-03 15:38:31 +00:00
Ada . Wide_Text_IO . Put ( "STR[2] => [" ) ;
for i in S . Get_First_Index ( Str ) . . S . Get_Last_Index ( Str ) loop
Ada . Wide_Text_IO . Put ( S . Get_Item ( Str , i ) ) ;
end loop ;
Ada . Wide_Text_IO . Put_Line ( "]" ) ;
Ada . Wide_Text_IO . Put ( "STR[3] => [" ) ;
2021-09-30 23:54:50 +00:00
Ada . Wide_Text_IO . Put ( Standard . Wide_String ( arr ) ) ;
2021-10-03 15:38:31 +00:00
Ada . Wide_Text_IO . Put_Line ( "]" ) ;
2021-08-23 23:47:29 +00:00
end ;
2021-10-03 15:38:31 +00:00
pragma Assert ( S . "=" ( Str , "Oh! Hello, world! donkey" ) ) ;
S . Append ( Str , '>' ) ;
print_string_info ( Str , "Str" ) ;
pragma Assert ( S . Get_Length ( Str ) = 26 ) ;
pragma Assert ( S . Get_First_Index ( Str ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str ) = 26 ) ;
pragma Assert ( S . "=" ( Str , "Oh! Hello, world! donkey>" ) ) ;
S . Append ( Str , "donkeyX" ) ;
print_string_info ( Str , "Str" ) ;
pragma Assert ( S . Get_Length ( Str ) = 33 ) ;
pragma Assert ( S . Get_First_Index ( Str ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str ) = 33 ) ;
pragma Assert ( S . "=" ( Str , "Oh! Hello, world! donkey>donkeyX" ) ) ;
S . Append ( Str , "ABCDE" ) ;
print_string_info ( Str , "Str" ) ;
pragma Assert ( S . Get_Length ( Str ) = 38 ) ;
pragma Assert ( S . Get_First_Index ( Str ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str ) = 38 ) ;
pragma Assert ( S . "=" ( Str , "Oh! Hello, world! donkey>donkeyXABCDE" ) ) ;
2021-08-24 07:17:32 +00:00
Str2 := Str ;
S . Append ( Str2 , "EXTRA" ) ;
2021-10-03 15:38:31 +00:00
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 43 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 43 ) ;
pragma Assert ( S . "=" ( Str2 , "Oh! Hello, world! donkey>donkeyXABCDEEXTRA" ) ) ;
pragma Assert ( S . Get_Length ( Str ) = 38 ) ;
pragma Assert ( S . Get_First_Index ( Str ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str ) = 38 ) ;
pragma Assert ( S . "=" ( Str , "Oh! Hello, world! donkey>donkeyXABCDE" ) ) ;
2021-08-24 07:17:32 +00:00
S . Append ( Str2 , " THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3" ) ;
2021-10-03 15:38:31 +00:00
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 91 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 91 ) ;
pragma Assert ( S . "=" ( Str2 , "Oh! Hello, world! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3" ) ) ;
pragma Assert ( S . Get_Length ( Str ) = 38 ) ;
pragma Assert ( S . Get_First_Index ( Str ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str ) = 38 ) ;
pragma Assert ( S . "=" ( Str , "Oh! Hello, world! donkey>donkeyXABCDE" ) ) ;
2021-08-24 07:17:32 +00:00
2021-10-03 15:38:31 +00:00
S . Replace ( Str2 , 1 , 1 , ' Q ' ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 91 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 91 ) ;
pragma Assert ( S . "=" ( Str2 , "Qh! Hello, world! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3" ) ) ;
2021-10-01 11:03:54 +00:00
S . Insert ( Str2 , 1 , ' B ' ) ;
2021-10-03 15:38:31 +00:00
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 92 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 92 ) ;
pragma Assert ( S . "=" ( Str2 , "BQh! Hello, world! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3" ) ) ;
S . Insert ( Str2 , 1 , ' A ' , 3 ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 95 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 95 ) ;
pragma Assert ( S . "=" ( Str2 , "AAABQh! Hello, world! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3" ) ) ;
S . Insert ( Str2 , 3 , ' C ' , 2 ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 97 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 97 ) ;
pragma Assert ( S . "=" ( Str2 , "AACCABQh! Hello, world! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3" ) ) ;
S . Insert ( Str2 , 5 , "" ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 97 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 97 ) ;
pragma Assert ( S . "=" ( Str2 , "AACCABQh! Hello, world! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3" ) ) ;
S . Insert ( Str2 , S . Get_Last_Index ( Str2 ) + 1 , "" ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 97 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 97 ) ;
pragma Assert ( S . "=" ( Str2 , "AACCABQh! Hello, world! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3" ) ) ;
S . Insert ( Str2 , S . Get_Last_Index ( Str2 ) + 1 , " => ABCDEF" ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 107 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 107 ) ;
pragma Assert ( S . "=" ( Str2 , "AACCABQh! Hello, world! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3 => ABCDEF" ) ) ;
2021-08-24 07:17:32 +00:00
2021-10-03 15:38:31 +00:00
S . Prepend ( Str2 , '>' , 3 ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 110 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 110 ) ;
pragma Assert ( S . "=" ( Str2 , ">>>AACCABQh! Hello, world! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3 => ABCDEF" ) ) ;
S . Delete ( Str2 , 1 , 3 ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 107 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 107 ) ;
pragma Assert ( S . "=" ( Str2 , "AACCABQh! Hello, world! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3 => ABCDEF" ) ) ;
S . Delete ( Str2 , S . Get_Last_Index ( Str2 ) - 9 , S . Get_Last_Index ( Str2 ) ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 97 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 97 ) ;
pragma Assert ( S . "=" ( Str2 , "AACCABQh! Hello, world! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3" ) ) ;
S . Delete ( Str2 , 5 , 9 ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 92 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 92 ) ;
pragma Assert ( S . "=" ( Str2 , "AACC Hello, world! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3" ) ) ;
S . Replace ( Str2 , 1 , 5 , "" ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 87 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 87 ) ;
pragma Assert ( S . "=" ( Str2 , "Hello, world! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3" ) ) ;
S . Replace ( Str2 , 8 , 12 , "cougar" ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 88 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 88 ) ;
pragma Assert ( S . "=" ( Str2 , "Hello, cougar! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR H3" ) ) ;
S . Replace ( Str2 , S . Get_Last_Index ( Str2 ) - 1 , S . Get_Last_Index ( Str2 ) + 100 , "HH" ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 88 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 88 ) ;
pragma Assert ( S . "=" ( Str2 , "Hello, cougar! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR HH" ) ) ;
S . Replace ( Str2 , 8 , 13 , "bee" ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 85 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 85 ) ;
pragma Assert ( S . "=" ( Str2 , "Hello, bee! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR HH" ) ) ;
2021-10-03 16:53:13 +00:00
S . Replace ( Str2 , 8 , 10 , "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ" ) ;
print_string_info ( Str2 , "Str2" ) ;
pragma Assert ( S . Get_Length ( Str2 ) = 160 ) ;
pragma Assert ( S . Get_First_Index ( Str2 ) = 1 ) ;
pragma Assert ( S . Get_Last_Index ( Str2 ) = 160 ) ;
pragma Assert ( S . "=" ( Str2 , "Hello, ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ! donkey>donkeyXABCDEEXTRA THIS IS FANTASTIC ELASTIC STRING WRITTEN FOR HH" ) ) ;
2021-08-23 23:47:29 +00:00
declare
2021-10-06 03:56:30 +00:00
--arr: constant S.P.Thin_Item_Array_Pointer := S.Get_Slot_Pointer(Str);
--arr2: constant S.P.Thin_Item_Array_Pointer := S.Get_Slot_Pointer(Str2);
arr : constant S . Thin_Character_Array_Pointer := S . Get_Slot_Pointer ( Str ) ;
arr2 : constant S . Thin_Character_Array_Pointer := S . Get_Slot_Pointer ( Str2 ) ;
2021-08-23 23:47:29 +00:00
use type H3 . System_Word ;
begin
2021-10-03 15:38:31 +00:00
print_string_info ( Str , "Str" ) ;
2021-08-24 07:17:32 +00:00
2021-09-30 23:54:50 +00:00
Ada . Wide_Text_IO . Put ( "STR(By-Pointer) [" ) ;
2021-10-03 16:53:13 +00:00
for i in S . Get_First_Index ( Str ) . . S . Get_Last_Index ( Str ) + S . Terminator_Length loop -- this must loop to the terminating null.
2021-08-23 23:47:29 +00:00
Ada . Wide_Text_IO . Put ( arr . all ( i ) ) ;
end loop ;
Ada . Wide_Text_IO . Put_Line ( "]" ) ;
2021-08-24 07:17:32 +00:00
2021-10-03 15:38:31 +00:00
print_string_info ( Str2 , "Str2" ) ;
2021-08-24 07:17:32 +00:00
2021-09-30 23:54:50 +00:00
Ada . Wide_Text_IO . Put ( "Str2(By-Pointer) [" ) ; -- this must loop to the terminating null.
2021-10-03 16:53:13 +00:00
for i in S . Get_First_Index ( Str2 ) . . S . Get_Last_Index ( Str2 ) + S . Terminator_Length loop
2021-08-24 07:17:32 +00:00
Ada . Wide_Text_IO . Put ( arr2 . all ( i ) ) ;
end loop ;
Ada . Wide_Text_IO . Put_Line ( "]" ) ;
2021-08-23 23:47:29 +00:00
end ;
2021-10-06 07:50:01 +00:00
S . Clear ( Str2 ) ;
print_string_info ( Str2 , "Str2" ) ;
2021-08-23 23:47:29 +00:00
--declare
2021-10-03 16:53:13 +00:00
-- arr: constant Standard.Wide_String := S.To_Item_Array(str);
2021-08-23 23:47:29 +00:00
--begin
-- Ada.Wide_Text_IO.Put_Line (arr);
--end;
SS := Str ;
2021-10-06 07:50:01 +00:00
2021-08-23 23:47:29 +00:00
end ;
declare
type R_Record is record
X : Standard . Integer := 3 ;
Y : Standard . Integer := 4 ;
end record ;
package Q is new H3.MM ( R_Record) ;
T : Q . Ref_Counted ;
T2 : Q . Ref_Counted ;
P : Q . Item_Pointer ;
begin
declare
T3 : Q . Ref_Counted ;
begin
Q . Create ( T3 , ( X => 20 , Y => 30 ) ) ;
T := T3 ;
--Q.Create (T);
end ;
P := Q . Get_Item_Pointer ( T ) ;
T2 := T ;
Q . Get_Item_Pointer ( T ) . X := 12345 ;
Ada . Text_IO . Put_Line ( Q . Get_Item_Pointer ( T ) . Y ' Img ) ;
Ada . Text_IO . Put_Line ( Q . Get_Item_Pointer ( T ) . X ' Img ) ;
Ada . Text_IO . Put_Line ( Q . Get_Item_Pointer ( T2 ) . Y ' Img ) ;
Ada . Text_IO . Put_Line ( Q . Get_Item_Pointer ( T2 ) . X ' Img ) ;
end ;
2021-10-03 16:53:13 +00:00
declare
2021-10-06 17:30:12 +00:00
package S_I is new H3.Arrays ( Integer, 1, 16# FF# ) ;
2021-10-06 03:56:30 +00:00
t1 : S_I . Elastic_Array ;
2021-10-03 16:53:13 +00:00
begin
S_I . Append ( t1 , 20 , 5 ) ;
S_I . Prepend ( t1 , 30 , 2 ) ;
2021-10-06 07:50:01 +00:00
S_I . Append ( t1 , 30 , 5 ) ;
2021-10-03 16:53:13 +00:00
Ada . Text_IO . Put_Line ( "-------------------------------" ) ;
for i in S_I . Get_First_Index ( t1 ) . . S_I . Get_Last_Index ( t1 ) loop
Ada . Text_IO . Put ( " " & S_I . Get_Item ( t1 , i ) ' Img ) ;
end loop ;
Ada . Text_IO . Put_Line ( "" ) ;
2021-10-06 07:50:01 +00:00
Ada . Text_IO . Put_Line ( t1 . Find ( 30 , t1 . Get_Last_Index , S_I . DIRECTION_BACKWARD ) ' Img ) ;
Ada . Text_IO . Put_Line ( t1 . Find ( 30 , t1 . Get_First_Index ) ' Img ) ;
Ada . Text_IO . Put_Line ( t1 . Find ( 90 , t1 . Get_First_Index ) ' Img ) ;
2021-10-06 17:30:12 +00:00
Ada . Text_IO . Put_Line ( t1 . Find ( 90 , t1 . Get_First_Index ) ' Img ) ;
Ada . Text_IO . Put_Line ( t1 . Find ( ( 30 , 30 , 30 , 30 ) , t1 . Get_First_Index ) ' Img ) ;
Ada . Text_IO . Put_Line ( t1 . Find ( ( 20 , 20 ) , t1 . Get_First_Index , S_I . DIRECTION_FORWARD ) ' Img ) ;
Ada . Text_IO . Put_Line ( t1 . Find ( ( 20 , 20 ) , t1 . Get_Last_Index , S_I . DIRECTION_BACKWARD ) ' Img ) ;
Ada . Text_IO . Put_Line ( t1 . Find ( ( 30 , 20 , 20 ) , t1 . Get_First_Index , S_I . DIRECTION_FORWARD ) ' Img ) ;
Ada . Text_IO . Put_Line ( t1 . Find ( ( 30 , 20 , 20 ) , t1 . Get_Last_Index , S_I . DIRECTION_BACKWARD ) ' Img ) ;
2021-10-03 16:53:13 +00:00
end ;
2021-08-23 23:47:29 +00:00
end ;