package AdaBase is type field_types is (ft_nbyte0, ft_nbyte1, ft_nbyte2, ft_nbyte3, ft_nbyte4, ft_nbyte8, ft_byte1, ft_byte2, ft_byte3, ft_byte4, ft_byte8, ft_real9, ft_real18, ft_textual, ft_widetext, ft_supertext, ft_timestamp, ft_chain, ft_enumtype, ft_settype); end AdaBase; package AdaBase.Results.Field is type Std_Field is tagged private; type Field_Access is access Std_Field; type Variant (datatype : field_types := ft_nbyte8) is record case datatype is when ft_nbyte0 => v00 : Boolean; when ft_nbyte1 => v01 : NByte1; when ft_nbyte2 => v02 : NByte2; when ft_nbyte3 => v03 : NByte3; when ft_nbyte4 => v04 : NByte4; when ft_nbyte8 => v05 : NByte8; when ft_byte1 => v06 : Byte1; when ft_byte2 => v07 : Byte2; when ft_byte3 => v08 : Byte3; when ft_byte4 => v09 : Byte4; when ft_byte8 => v10 : Byte8; when ft_real9 => v11 : Real9; when ft_real18 => v12 : Real18; when ft_textual => v13 : Textual; when ft_widetext => v14 : Textwide; when ft_supertext => v15 : Textsuper; when ft_timestamp => v16 : AC.Time; when ft_chain => v17 : Textual; when ft_enumtype => v18 : Enumtype; when ft_settype => v19 : Textual; end case; end record; function spawn_field (data : Variant; null_data : Boolean := False) return Std_Field; function spawn_field (binob : Chain) return Std_Field; function spawn_field (enumset : String) return Std_Field; end AdaBase.Results.Field;
AdaBase.Results.Field.Std_Field function
spawn_field (see package, x3)
The spawn_field functions are low-level functions that are not typically used in normal applicatons. They create Std_Field variables dynamically and are more typically used for testing.
with AdaBase.Results.Field; with AdaBase.Results.Converters; with Ada.Strings.Unbounded; with Ada.Integer_Text_IO; with Ada.Text_IO; with Ada.Wide_Text_IO; procedure Spawn_Fields is package TIO renames Ada.Text_IO; package WIO renames Ada.Wide_Text_IO; package IIO renames Ada.Integer_Text_IO; package SU renames Ada.Strings.Unbounded; package AR renames AdaBase.Results; package ARC renames AdaBase.Results.Converters; SF : AR.Field.Std_Field := AR.Field.spawn_field (binob => (50, 15, 4, 8)); BR : AR.Field.Std_Field := AR.Field.spawn_field (data => (datatype => AdaBase.ft_textual, v13 => SU.To_Unbounded_String ("Baltimore Ravens"))); myset : AR.Settype (1 .. 3) := ((enumeration => SU.To_Unbounded_String ("hockey")), (enumeration => SU.To_Unbounded_String ("baseball")), (enumeration => SU.To_Unbounded_String ("tennis"))); ST : AR.Field.Std_Field := AR.Field.spawn_field (enumset => ARC.convert (myset)); chain_len : Natural := SF.as_chain'Length; begin TIO.Put_Line ("Chain #1 length:" & chain_len'Img); TIO.Put_Line ("Chain #1 type: " & SF.native_type'Img); for x in 1 .. chain_len loop TIO.Put (" block" & x'Img & " value:" & SF.as_chain (x)'Img); IIO.Put (Item => Natural (SF.as_chain (x)), Base => 16); TIO.Put_Line (""); end loop; TIO.Put ("Chain #1 converted to 4-byte unsigned integer:" & SF.as_nbyte4'Img & " "); IIO.Put (Item => Natural (SF.as_nbyte4), Base => 16); TIO.Put_Line (""); TIO.Put_Line (""); WIO.Put_Line ("Convert BR field to wide string: " & BR.as_wstring); TIO.Put_Line ("Convert ST settype to string: " & ST.as_string); TIO.Put_Line ("Length of ST set: " & myset'Length'Img); end Spawn_Fields;
Chain #1 length: 4 Chain #1 type: FT_CHAIN block 1 value: 50 16#32# block 2 value: 15 16#F# block 3 value: 4 16#4# block 4 value: 8 16#8# Chain #1 converted to 4-byte unsigned integer: 134483762 16#8040F32# Convert BR field to wide string: Baltimore Ravens Convert ST settype to string: hockey,baseball,tennis Length of ST set: 3