comp.lang.ada
 help / color / mirror / Atom feed
From: "chris.danx" <chris.danx@ntlworld.com>
Subject: Re: Problem trying to implement generics.
Date: Fri, 13 Apr 2001 12:49:38 +0100
Date: 2001-04-13T12:49:38+01:00	[thread overview]
Message-ID: <0JBB6.10484$FD1.1197250@news6-win.server.ntlworld.com> (raw)
In-Reply-To: 9b6m27$68e$1@taliesin.netcom.net.uk


> >
> > >  private
> > >   type Binary_Tree is new Ada.Finalization.controlled with record
> > >    root: Node_access := null;
> > >   end record;
> >
> > the error comes because
> >
> > > package body binTree is
> > [snip]
> > >  procedure insert(insert_this : in data_type; Sort : in sort_by) is
> > >   New_node : Node_Access := new node;
> > >   current : Node_access := root; -- This is the line it compline
about!!
> >
> > you've forgot to that Root is in Binary_Tree.
>
> Okay, so how do I fix it? And what is wrong, anyway?

What you do is pass in a Binary_Tree type with appropriate mode.  In C++ you
have objects that store the methods with the data in the class.  This means
you don't need to refer to the object name and you can just use "root".  In
Ada methods are simply procedures and functions that work with objects
passed in.

In C++ you'd have

    BinTree.insert(insert_this, sort);

but in Ada

    insert(BinTree, insert_this, sort);

You use the methods with the object type.  So you'd have to pass in an item
of type Binary_Tree with appropriate mode and use the "root" field in this.

e.g.
    procedure insert (BT            :     in out Binary_Tree;
                                insert_this : ...
                                sort          : ...) is
        New_node : Node_Access := new node;
        current : Node_access := BT.root; -- This is what you need to do!
    begin
        .........................
        .........................
    end insert;

If your interested i have a generic doubly linked list ADT written in Ada.
It's part of the Heather modules i'm writing.  I know it isn't based on
tagged types(Ada objects), but it does show how to build an ADT.  Your
implementation of Binary_Tree is "Limited controlled" which means it's a
tagged type, but i haven't added this property to it yet.  I may soon, or at
least make it controlled.  It really doesn't matter that much since it's
just an example.

I will put it up on my site if you let me know you want it.


>
> > I have a question.  From your code it doesn't look like an ADT.  Is this
> > what you intended?  I can't remember the term for what this looks like,
> but
> > I think it's to do with storing the Tree as a global variable in the
> package
> > not as an ADT.
>
> Okay, major cocept problem here.
> I'm coming here with C/C++ background, and I understand that Ada has a
> different OO paradigm.
> I assumed that for each Binary_Tree spesific type that I create, there
would
> be its own Root.
> I mean:
> package Int_BinTree is new Binary_Tree(data_type=>
> Integer,Sort_by=>Integer);
>
> Bin_Tree_First, Bin_Tree_Second : Int_BinTree;
>
> Does Bin_Tree_First.Root = Bin_Tree_Second.Root ?
>
>
> > If you want an ADT you need to pass in a Binary_Tree type as necessary.
I
> > didn't see it any where in your code so i'm assuming it's based on a
> global
> > variable.
>
> I think that you are talking about ADO vs ADT , right?
> generic abstract data type & generic abstract data object

Yes, that's it.  ADO -- i must remember that!


> > There's nothing wrong doing it this way!
>
> Then why doesn't it compile?

It doesn't compile because Ada's OO is based on extensible records.  You
have to pass the record in even though it's an Object.  In C++ the object
methods are held inside the class which means they have access to the
variables inside.  This is not the same as Ada.

Maybe, this is a better explanation, it's just like C records.  Just pass in
the record and use it as you wish.  Remember to get the correct mode, and
use the record like you would in C.

There's more to Ada's OO but you don't need it for your Binary_Tree and I'm
still learning about it myself.


Regards,
Chris Campbell





  reply	other threads:[~2001-04-13 11:49 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 [this message]
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
replies disabled

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