* Question about Ada and constant Arrays @ 2003-11-10 16:49 Stephane Richard 2003-11-10 17:07 ` Preben Randhol 2003-11-11 9:34 ` Lutz Donnerhacke 0 siblings, 2 replies; 7+ messages in thread From: Stephane Richard @ 2003-11-10 16:49 UTC (permalink / raw) [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain, Size: 913 bytes --] Hi everyone, As the subject line says, the object of the question would be. I'd like to make an constant array of a given record type and initialize it upon it's creation. Type TestRecord Is Record Enabled: Boolean; Name: String(60); Value: Integer; End Record; Constant TestArray(1..5): TestRecord = ( (True, "Test1", 1),: (False, "Test2", 2),: (False, "Test3", 4),: (False, "Test4", 8),: (True, "Test5", 16) ); Or something similar to that. Is that possible? and How? Thank you all :-). -- "To err is human. To really screw up, you need C++!" St�phane Richard "Ada World" Webmaster http://www.adaworld.com ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Question about Ada and constant Arrays 2003-11-10 16:49 Question about Ada and constant Arrays Stephane Richard @ 2003-11-10 17:07 ` Preben Randhol 2003-11-10 17:10 ` Stephane Richard ` (2 more replies) 2003-11-11 9:34 ` Lutz Donnerhacke 1 sibling, 3 replies; 7+ messages in thread From: Preben Randhol @ 2003-11-10 17:07 UTC (permalink / raw) On 2003-11-10, Stephane Richard <stephane.richard@verizon.net> wrote: > I'd like to make an constant array of a given record type and initialize it > upon it's creation. [Delete unknown language (VHDL?)] Yes it can be done: ---8<-------8<------8<------- with Ada.Text_IO; use Ada.Text_IO; procedure arrayinit is type Test_Record is record Enabled : Boolean; Name : String(1 .. 5); Value : Integer; end record; type Test_Array is array (1 .. 5) of Test_Record; My_Array : constant Test_Array := (1 => (True, "Test1", 1), 2 => (False, "Test2", 2), 3 => (False, "Test3", 4), 4 => (False, "Test4", 8), 5 => (True, "Test5", 16)); begin -- Printing the values to show that it is correct. for i in My_Array'Range loop Put_Line (Integer'Image (i) & " => " & Boolean'Image (My_Array (i).Enabled) & "," & My_Array (i).Name & "," & Integer'Image (My_Array (i).Value)); end loop; end arrayinit; ---8<-------8<------8<------- -- "Saving keystrokes is the job of the text editor, not the programming language." ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Question about Ada and constant Arrays 2003-11-10 17:07 ` Preben Randhol @ 2003-11-10 17:10 ` Stephane Richard 2003-11-10 17:13 ` Preben Randhol 2003-11-10 17:11 ` Preben Randhol 2003-11-11 5:41 ` Nick Roberts 2 siblings, 1 reply; 7+ messages in thread From: Stephane Richard @ 2003-11-10 17:10 UTC (permalink / raw) [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain, Size: 1643 bytes --] excellent, I sincerely doubted it couldn't, I just never actually saw such an example :-) Thanks Preben :-) -- "To err is human. To really screw up, you need C++!" St�phane Richard "Ada World" Webmaster http://www.adaworld.com "Preben Randhol" <randhol+valid_for_reply_from_news@pvv.org> wrote in message news:slrnbqvhev.97p.randhol+valid_for_reply_from_news@kiuk0156.chembio.ntnu.no... > On 2003-11-10, Stephane Richard <stephane.richard@verizon.net> wrote: > > I'd like to make an constant array of a given record type and initialize it > > upon it's creation. > > [Delete unknown language (VHDL?)] > > Yes it can be done: > > ---8<-------8<------8<------- > > with Ada.Text_IO; use Ada.Text_IO; > > procedure arrayinit > is > > type Test_Record is > record > Enabled : Boolean; > Name : String(1 .. 5); > Value : Integer; > end record; > > type Test_Array is array (1 .. 5) of Test_Record; > > My_Array : constant Test_Array := > (1 => (True, "Test1", 1), > 2 => (False, "Test2", 2), > 3 => (False, "Test3", 4), > 4 => (False, "Test4", 8), > 5 => (True, "Test5", 16)); > begin > > -- Printing the values to show that it is correct. > > for i in My_Array'Range loop > Put_Line (Integer'Image (i) & " => " & > Boolean'Image (My_Array (i).Enabled) & "," & > My_Array (i).Name & "," & > Integer'Image (My_Array (i).Value)); > end loop; > > end arrayinit; > ---8<-------8<------8<------- > > > -- > "Saving keystrokes is the job of the text editor, not the programming > language." ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Question about Ada and constant Arrays 2003-11-10 17:10 ` Stephane Richard @ 2003-11-10 17:13 ` Preben Randhol 0 siblings, 0 replies; 7+ messages in thread From: Preben Randhol @ 2003-11-10 17:13 UTC (permalink / raw) On 2003-11-10, Stephane Richard <stephane.richard@verizon.net> wrote: > excellent, I sincerely doubted it couldn't, I just never actually saw such > an example :-) However, note my change in definition of the String in the record. I guess you understand why. Preben -- "Saving keystrokes is the job of the text editor, not the programming language." ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Question about Ada and constant Arrays 2003-11-10 17:07 ` Preben Randhol 2003-11-10 17:10 ` Stephane Richard @ 2003-11-10 17:11 ` Preben Randhol 2003-11-11 5:41 ` Nick Roberts 2 siblings, 0 replies; 7+ messages in thread From: Preben Randhol @ 2003-11-10 17:11 UTC (permalink / raw) On 2003-11-10, Preben Randhol <randhol+valid_for_reply_from_news@pvv.org> wrote: > My_Array : constant Test_Array := > (1 => (True, "Test1", 1), > 2 => (False, "Test2", 2), > 3 => (False, "Test3", 4), > 4 => (False, "Test4", 8), > 5 => (True, "Test5", 16)); This can also be written as: My_Array : constant Test_Array := ( (True, "Test1", 1), (False, "Test2", 2), (False, "Test3", 4), (False, "Test4", 8), (True, "Test5", 16) ); Depending on your taste :-) HTH Preben -- "Saving keystrokes is the job of the text editor, not the programming language." ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Question about Ada and constant Arrays 2003-11-10 17:07 ` Preben Randhol 2003-11-10 17:10 ` Stephane Richard 2003-11-10 17:11 ` Preben Randhol @ 2003-11-11 5:41 ` Nick Roberts 2 siblings, 0 replies; 7+ messages in thread From: Nick Roberts @ 2003-11-11 5:41 UTC (permalink / raw) Just for fun, a possible refinement might be something like this: ~~~ with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; procedure Array_Init_2 is package Boolean_IO is new Enumeration_IO(Boolean); use Boolean_IO; function "+" (Source: in String) return Unbounded_String renames To_Unbounded_String; procedure Put (Item: in Unbounded_String) is begin Put( To_String(Item) ); end; type Test_Record is record Enabled : Boolean; Name : Unbounded_String; Value : Integer; end record; type Test_Array is array (Positive range <>) of Test_Record; My_Array : constant Test_Array := (1 => (True, +"Test1", 1), 2 => (False, +"Test2", 2), 3 => (False, +"Test3", 4), 4 => (False, +"Test4", 8), 5 => (True, +"Test5 (whoopee)", 16), 6 => (False, +"Test *** 6 ***", 17)); begin -- Printing the values to show that it is correct. for i in My_Array'Range loop Put(i); Put(" => "); Put(My_Array(i).Enabled); Put(", "); Put(My_Array(i).Name); Put(", "); Put(My_Array(i).Value); New_Line; end loop; end Array_Init_2; ~~~ I haven't tested this code. -- Nick Roberts ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Question about Ada and constant Arrays 2003-11-10 16:49 Question about Ada and constant Arrays Stephane Richard 2003-11-10 17:07 ` Preben Randhol @ 2003-11-11 9:34 ` Lutz Donnerhacke 1 sibling, 0 replies; 7+ messages in thread From: Lutz Donnerhacke @ 2003-11-11 9:34 UTC (permalink / raw) * Stephane Richard wrote: > I'd like to make an constant array of a given record type and initialize it > upon it's creation. package Hex_Strings is type Hex_String is new String; function To_Data(h : Hex_String) return String; function To_Hex(d : String) return Hex_String; type Debug_Types is (Hexify, Dehexify); debug : array(Debug_Types) of Boolean := (others => False); end Hex_Strings; with Hex_Strings; package Tests is type Constant_String is access constant String; type Constant_String_Array is array(Positive range <>) of Constant_String; type Constant_Hex_String is access constant Hex_Strings.Hex_String; type Constant_Hex_String_Array is array(Positive range <>) of Constant_Hex_String; end Tests; with Tests, Hex_Strings; use Tests, Hex_Strings; pragma Elaborate_All(Hex_Strings, Tests); package RfC2202 is sha1_k1 : aliased constant String := (1 .. 20 => Character'Val(16#0b#)); md5_k1 : aliased constant String := (1 .. 16 => Character'Val(16#0b#)); d1 : aliased constant String := "Hi There"; sha1_1 : aliased constant Hex_String := "b6173186 55057264 e28bc0b6 fb378c8e f146be00"; md5_1 : aliased constant Hex_String := "9294727a 3638bb1c 13f48ef8 158bfc9d"; sha1_k2 : aliased constant String := "Jefe"; md5_k2 : String renames sha1_k2; d2 : aliased constant String := "what do ya want for nothing?"; sha1_2 : aliased constant Hex_String := "effcdf6a e5eb2fa2 d27416d5 f184df9c 259a7c79"; md5_2 : aliased constant Hex_String := "750c783e 6ab0b503 eaa86e31 0a5db738"; sha1_k3 : aliased constant String := (1 .. 20 => Character'Val(16#aa#)); md5_k3 : aliased constant String := (1 .. 16 => Character'Val(16#aa#)); d3 : aliased constant String := (1 .. 50 => Character'Val(16#dd#)); sha1_3 : aliased constant Hex_String := "125d7342 b9ac11cd 91a39af4 8aa17b4f 63f175d3"; md5_3 : aliased constant Hex_String := "56be3452 1d144c88 dbb8c733 f0e8b3f6"; sha1_k4 : aliased constant String := To_Data("0102030405060708090a0b0c0d0e0f10111213141516171819"); md5_k4 : String renames sha1_k4; d4 : aliased constant String := (1 .. 50 => Character'Val(16#cd#)); sha1_4 : aliased constant Hex_String := "4c9007f4 026250c6 bc8414f9 bf50c86c 2d7235da"; md5_4 : aliased constant Hex_String := "697eaf0a ca3a3aea 3a751647 46ffaa79"; sha1_k5 : aliased constant String := (1 .. 20 => Character'Val(16#0c#)); md5_k5 : aliased constant String := (1 .. 16 => Character'Val(16#0c#)); d5 : aliased constant String := "Test With Truncation"; sha1_5 : aliased constant Hex_String := "4c1a0342 4b55e07f e7f27be1 d58bb932 4a9a5a04"; md5_5 : aliased constant Hex_String := "56461ef2 342edc00 f9bab995 690efd4c"; sha1_k6 : aliased constant String := (1 .. 80 => Character'Val(16#aa#)); md5_k6 : String renames sha1_k6; d6 : aliased constant String := "Test Using Larger Than Block-Size Key - Hash Key First"; sha1_6 : aliased constant Hex_String := "aa4ae5e1 5272d00e 95705637 ce8a3b55 ed402112"; md5_6 : aliased constant Hex_String := "6b1ab7fe 4bd7bf8f 0b62e6ce 61b9d0cd"; sha1_k7 : String renames sha1_k6; md5_k7 : String renames sha1_k7; d7 : aliased constant String := "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"; sha1_7 : aliased constant Hex_String := "e8e99d0f 45237d78 6d6bbaa7 965c7808 bbff1a91"; md5_7 : aliased constant Hex_String := "6f630fad 67cda0ee 1fb1f562 db3aa53e"; sha1_keys : constant Constant_String_Array := ( sha1_k1'Access, sha1_k2'Access, sha1_k3'Access, sha1_k4'Access, sha1_k5'Access, sha1_k6'Access, sha1_k7'Access ); sha1_data : constant Constant_String_Array := ( d1'Access, d2'Access, d3'Access, d4'Access, d5'Access, d6'Access, d7'Access ); sha1_hashes : constant Constant_Hex_String_Array := ( sha1_1'Access, sha1_2'Access, sha1_3'Access, sha1_4'Access, sha1_5'Access, sha1_6'Access, sha1_7'Access ); md5_keys : constant Constant_String_Array := ( md5_k1'Access, md5_k2'Access, md5_k3'Access, md5_k4'Access, md5_k5'Access, md5_k6'Access, md5_k7'Access ); md5_data : Constant_String_Array renames sha1_data; md5_hashes : constant Constant_Hex_String_Array := ( md5_1'Access, md5_2'Access, md5_3'Access, md5_4'Access, md5_5'Access, md5_6'Access, md5_7'Access ); end RfC2202; ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2003-11-11 9:34 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2003-11-10 16:49 Question about Ada and constant Arrays Stephane Richard 2003-11-10 17:07 ` Preben Randhol 2003-11-10 17:10 ` Stephane Richard 2003-11-10 17:13 ` Preben Randhol 2003-11-10 17:11 ` Preben Randhol 2003-11-11 5:41 ` Nick Roberts 2003-11-11 9:34 ` Lutz Donnerhacke
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox