comp.lang.ada
 help / color / mirror / Atom feed
From: stt@houdini.camb.inmet.com (Tucker Taft)
Subject: Re: ??? Help!: how to do unconstraned arrays/records???
Date: 1998/11/05
Date: 1998-11-05T00:00:00+00:00	[thread overview]
Message-ID: <F1xI6L.8Dy.0.-s@inmet.camb.inmet.com> (raw)
In-Reply-To: 36407C96.731EEB90@avionics2.robins.af.mil

al johnston (johnstona@avionics2.robins.af.mil) wrote:

: HELP!!!!

: I a trying to convert the following "static" ada data
: structure to a structure that can be created dynamically,
: ie via the "new" ada function, and setting the two
: constrants at that time.

: I can not seem to find anything that will work (as
: far as type declarations) short of
: moving the second level array (Host_array) into
: the top level structure (system_config_type) and
: making it 2d.  That is TOO ugly!!!!

: Can one of you ada guru's help me out?
: the current type definitions (ie the "static"
: version) are below....

: thanks!!!!

:       -al
: -------------------------------------------------------------

: NUMBER_OF_HOST_WIDGETS : Integer := some bound;
: NUMBER_OF_NODE_WIDGETS : Integer := some other bound;


:  type Host_Config_Typ is
:     record
:       ID        : Integer;
:       Label     : String;
:     end record;

:   type Host_Array is array (natural range <>) of Host_Config_Typ;

:   type Node_Config_Typ is
:     record
:       ID              : integer;
:       Label           : String;
:       Number_of_hosts : Natural := 0;
:       Hosts           : Host_Array(1..NUMBER_OF_HOSTS_WIDGETS);
:     end record;

:   type Node_Array is array (natural rangee <>) of Node_Config_Typ;

:   type System_Config_Typ is
:     record
:       Number_of_nodes :  Natural := 0;
:       Nodes : Node_Array(NUMBER_OF_NODE_WIDGETS);
:     end record;

:   Config                : System_Config_Typ;

How about:

 type Host_Config_Typ is
    record
      ID        : Integer;
      Label     : String;
    end record;

  type Host_Array is array (Positive range <>) of Host_Config_Typ;
  type Host_Array_Ptr is access Host_Array;

  type Node_Config_Typ(Number_Of_Hosts_Widgets : Natural := 0) is
    record
      ID              : integer;
      Label           : String;
      Number_of_hosts : Natural := 0;
      Hosts           : Host_Array_Ptr := 
        new Host_Array(1..Number_Of_Hosts_Widgets);
    end record;

  type Node_Array is array (Positive range <>) of Node_Config_Typ;

  type System_Config_Typ(Number_Of_Node_Widgets : Natural; 
	Number_Of_Hosts_Widgets : Natural) is
    record
      Number_of_nodes :  Natural := 0;
      Nodes : Node_Array(1..Number_Of_Node_Widgets) := 
	(others => Node_Config_Typ(Number_Of_Hosts_Widgets));
    end record;

  type System_Config_Typ_Ptr is access System_Config_Typ;

Now you can create a heap-resident structure as follows:

    X : System_Config_Typ_Ptr := new System_Config_Typ(Num_Nodes, Num_Hosts);


Admittedly, there is an extra level of indirection to get to
each Host_Array, but that's the canonical solution to any 
software engineering problem!

--
-Tucker Taft   stt@inmet.com   http://www.inmet.com/~stt/
Intermetrics, Inc.  Burlington, MA  USA
An AverStar Company




  parent reply	other threads:[~1998-11-05  0:00 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1998-11-04  0:00 ??? Help!: how to do unconstraned arrays/records??? al johnston
1998-11-04  0:00 ` Albert S. Johnston
1998-11-05  0:00   ` dewarr
1998-11-05  0:00     ` al johnston
1998-11-05  0:00       ` dewar
1998-11-05  0:00       ` Stephen Leake
1998-11-05  0:00 ` Tucker Taft [this message]
1998-11-05  0:00   ` Tucker Taft
1998-11-05  0:00     ` al johnston
1998-11-05  0:00   ` Tucker Taft
1998-11-05  0:00     ` Mats Weber
1998-11-05  0:00       ` Tucker Taft
1998-11-05  0:00         ` al johnston
1998-11-05  0:00           ` Tucker Taft
1998-11-06  0:00             ` Mats Weber
1998-11-06  0:00               ` Tucker Taft
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox