comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <stephen.a.leake.1@gsfc.nasa.gov>
Subject: Re: Problem trying to implement generics.
Date: 12 Apr 2001 14:06:33 -0400
Date: 2001-04-12T18:21:17+00:00	[thread overview]
Message-ID: <ud7aigfh2.fsf@gsfc.nasa.gov> (raw)
In-Reply-To: 9b1oe1$i4m$1@taliesin.netcom.net.uk

"Ayende Rahien" <Dont@spam.me> writes:

> I've just started to learn Ada, and I've some problem solving some problems.

Congratulations; you are learning the best language around :).

> 
> 
> Here is the spec I'm trying to compile:
> 
> with Ada.Finalization;
> generic
>  type data_type is private;
>  type Sort_by is private;

This is part of your problem. A private type does not have ">"
defined, so you can't use ">" in the body of this package (that
explains one of the compiler errors). You have a couple choices:

1) change this to "type Sort_by is new integer"

This is ok, but not very flexible. Suppose you want to sort by
strings?

2) Replace with a function:

with function Greater_Than (Left, Right : in Data_Type) return
Boolean;

Now, in the body, call "Greater_Than (Data_1, Data_2)".

> package Binary_Trees is
>  type binary_Tree is new Ada.Finalization.controlled with private;
>  type node is private;
>  type node_access is access all Node;
>  type data_access is access all Data_type;
>  procedure insert(insert_this : in data_type; Sort : in sort_by);
>  --Insert into the binary tree, sort according to sort.
>  function Delete(Delete_this: in Sort_by; Index : in natural := 1) return
> boolean;
>  -- Delete a node from the tree, return true if succeeded, return false if
>  -- the node does not exist.
>  function Get(Search_For: in sort_by; index : in natural := 1) return
> data_access;
>  -- Search for nodes with duplicate sort_by variable. It find the first
>  -- node with the sort_by equal to the given one, and then continue to check
> for Index
>  -- number of duplicated. It return null if it there isn't a suitable node
> in the
>  -- correct index.
>  private
>   type Binary_Tree is new Ada.Finalization.controlled with record
>    root: Node_access := null;
>   end record;
>   type node is record
>    Data : Data_type;
>    Sorted_by: Sort_by;
>    Parent, Left, right : Node_access;
>   end record;
>      procedure Adjust(Object : in out Binary_Tree );
>      procedure Finalize(Object : in out Binary_Tree );
> end Binary_Trees;
> 
> I trying to put the defination of Node in the body, but it results in
> compilation error, is there some way to put the defination in the
> body? 

Yes; you use an "incomplete type declaration":

   package A_Package is
   private
      type Node_Type;
      type Node_Access_Type is access all Node_Type;
   end A_Package;

   package body A_Package is
      type Node_Type is record
         A : Integer;
      end record;
   end A_Package;

Note that the incomplete type must be declared in the private part.
Since you are referencing Node_Type in functions in the public part,
this won't work for you.


> does it matter naught, because it's on the private part of the
> package?
 
Users cannot see the "insides" of Node, so you still have data hiding
and abstraction. Moving Node to the body would let you change its
"insides" without recompiling. Sometimes that is important in a large
project; not here.


You could probably benefit from a good example; see my binary tree
package at 

http://users.erols.com/leakstan/Stephe/Ada/sal.html

But don't give up on yours; making your own binary tree is a good way
to learn!

<snipped the rest> 

-- 
-- Stephe



      parent reply	other threads:[~2001-04-12 18:06 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-04-11 15:04 Problem trying to implement generics Ayende Rahien
2001-04-12  1:41 ` tmoran
2001-04-12 13:15   ` Ayende Rahien
2001-04-12 18:15     ` tmoran
2001-04-13 11:18       ` Ayende Rahien
2001-04-13 10:35         ` chris.danx
2001-04-13 11:54           ` Ayende Rahien
2001-04-13 11:49             ` chris.danx
2001-04-13 23:03               ` Ayende Rahien
2001-04-13 23:01                 ` Robert A Duff
2001-04-14  0:05                   ` Brian Rogoff
2001-04-14  1:12                     ` Ayende Rahien
2001-04-14  1:44                       ` Brian Rogoff
2001-04-14 14:03                         ` Dmitry A. Kazakov
2001-04-14 16:30                           ` Ayende Rahien
2001-04-14 16:28                             ` Michael Erdmann
2001-04-15  3:27                             ` James Rogers
2001-04-15 12:20                               ` Ayende Rahien
2001-04-15 14:09                               ` Dmitry A. Kazakov
2001-04-15 18:22                                 ` tmoran
2001-04-15 13:48                             ` Dmitry A. Kazakov
2001-04-15 20:44                               ` Ayende Rahien
2001-04-16 14:34                                 ` Dmitry A. Kazakov
2001-04-14  1:33                     ` Robert A Duff
2001-04-17  8:50                     ` Jean-Pierre Rosen
2001-04-17 13:20                   ` Tucker Taft
2001-04-17 16:51                     ` Ayende Rahien
2001-04-17 17:16                       ` Larry Hazel
2001-04-17 18:11                         ` Brian Rogoff
2001-04-17 19:10                           ` Marin David Condic
2001-04-17 21:08                             ` Brian Rogoff
2001-04-18 15:16                               ` Chad R. Meiners
2001-04-18 16:33                                 ` Marin David Condic
2001-04-17 21:09                             ` chris.danx
2001-04-17 21:11                             ` chris.danx
2001-04-17 21:17                             ` chris.danx
2001-05-08  5:40                             ` Lao Xiao Hai
2001-05-11  9:43                               ` John English
2001-05-12 19:16                                 ` Lao Xiao Hai
2001-04-17 19:32                           ` Larry Hazel
2001-04-17 21:03                           ` Ayende Rahien
2001-04-18 15:48                             ` Brian Rogoff
2001-04-20 12:34                               ` Georg Bauhaus
2001-04-20 12:42                                 ` Lutz Donnerhacke
2001-04-20 12:45                                 ` Lutz Donnerhacke
2001-04-20 19:48                                 ` Brian Rogoff
2001-04-20 20:36                                   ` David Starner
2001-04-20 23:02                                   ` Robert A Duff
2001-04-23  2:45                                     ` Brian Rogoff
2001-04-24  1:15                                       ` Robert A Duff
2001-04-24  2:00                                         ` Brian Rogoff
2001-04-24 15:12                                           ` Georg Bauhaus
2001-04-24 15:09                                         ` Georg Bauhaus
2001-04-24 18:36                                           ` Marius Amado Alves
2001-04-19 13:08                           ` Larry Kilgallen
     [not found]                           ` <9bi4g4$97m$1@nh.pace.Organization: LJK Software <YlSyXUaQmD+$@eisner.encompasserve.org>
2001-04-19 14:20                             ` Marin David Condic
2001-04-18  5:34                       ` Mike Silva
2001-04-18 16:55                       ` Ray Blaak
2001-04-24 16:00                       ` Tucker Taft
2001-04-12 13:57 ` Andy
2001-04-13  6:34   ` Simon Wright
2001-04-13 11:11   ` Ayende Rahien
2001-04-12 18:06 ` Stephen Leake [this message]
replies disabled

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