From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,ccb8bd6b4c3162fd X-Google-Attributes: gid103376,public From: Matthew Heaney Subject: Re: Beginner's questions Date: 1999/05/02 Message-ID: #1/1 X-Deja-AN: 473252208 References: <372da49c.12366381@news.rwth-aachen.de> NNTP-Posting-Date: Sun, 02 May 1999 12:15:01 PDT Newsgroups: comp.lang.ada Date: 1999-05-02T00:00:00+00:00 List-Id: marcoschmidt@geocities.com (Marco Schmidt) writes: > 1) I couldn't find out how to use bitwise operations "and" and "or" > (which would be "and" / "or" in Pascal and "&" / "|" in C). Do I have > to include a certain package? Those operations predefined for all modular types. Were you using an integer type? > 2) I want to use a fixed-size array of constant strings to store some > names which do not all have the same length, but no name is longer > than 20 characters. My approach looks like this: > > type t_my_array is array(0..17) of String; > > names : constant t_my_array := ("string 1", "string 2", ..., > "string 18"); > > The compiler doesn't like this (unconstrained element type). If I > replace String with String(0..19), it is compiled, but a runtime error > is raised. How should I do it? You could use an instantation of Ada.Strings.Bounded.Generic_Bounded_Length. Or you could use Ada.Strings.Unbounded. Or you could use a discriminated record: subtype Name_Length_Range is Natural range 0 .. 20; type Name_Buffer (Length : Name_Length_Range := 0) is record Name : String (1 .. Length); end record; function "+" (R : String) return Name_Buffer is begin return (R'length, R); end; type Name_Array is array (Positive range <>) of Name_Buffer; Names : Name_Array := (+"Heckle", +"Jeckle", +"Marvelous", +"Magpies", +"Let's have some fun", +"With name arrays");