comp.lang.ada
 help / color / mirror / Atom feed
From: Laurent <daemon2@internet.lu>
Subject: A few questions
Date: Sat, 7 Feb 2015 09:43:27 -0800 (PST)
Date: 2015-02-07T09:43:27-08:00	[thread overview]
Message-ID: <a62b917d-f06f-4d2b-9471-679c0a5f4645@googlegroups.com> (raw)

Hi

1) Trying to implement a search function in my linked list. Doesn't compile because the return type :List_Ptr is not visible in the ads file?

spec:

   function Search (L : in List; Element : in Element_Type) return List_Ptr;
   -- Pre: L is defined; L may be empty; Element is a scalar type
   -- Post: returns access to found node

body

   function Search (L : in List; Element : in Element_Type) return List_Ptr is
      Temp : List_Ptr;
      Current : List;

   begin
      Current := L.Head;
      while Current.Head /= null loop
         if Equals(Current.Head.Element, Element) then
            Temp:= Current.Head;
            return Temp;
         end if;
         Current.Head := Current.Head.Next;
      end loop;
   end Search;

The List_Ptr is defined as:

private

   ----------
   -- List --
   ----------

   type List_Node;
   type List_Ptr is access List_Node;
   type List_Node is record
      Element : Element_Type;
      Next    : List_Ptr;
      Previous:List_Ptr;
   end record;

   type List is record
      Head : List_Ptr;
      Tail : List_Ptr;
   end record;

I have put the search function in a child package.

2) Tried the same thing but this time using an iterator but fails with 

        65:20 (Ada 2005) cannot copy object of a limited type (RM-2005 6.5(5.5/2))
        65:20 return by reference not permitted in Ada 2005
on 

return It;

spec

   function Search (L : access List; Element : Element_Type) return Iterator;
   -- Pre: L is defined; L may be empty; Element is a scalar type
   -- Post: returns access to found node

body

   function Search (L : access List; Element : Element_Type) return  Iterator is
      It : Iterator (L);

   begin
      Start (It);
      while not Done (It) loop
         if Equals (It.This.Element, Element) then
            return It;
         end if;
         Next(It);
      end loop;
   end Search;

The Iterator is defined as:

private

   --------------
   -- Iterator --
   --------------

   type Iterator (L : access List) is limited
      record
         This :  List_Ptr;
      end record;

I have tried to understand RM-2005 6.5(5.5/2) but don't know what 

"If the result subtype of the function is defined by a subtype_mark, the return_subtype_indication shall be a subtype_indication. The type of the subtype_indication shall be the result type of the function"

is supposed to look like. 

If someone could enlighten me on both problems.

https://github.com/Chutulu/Chapter-15.git

3) How can I take a look at the assembler code of both versions? Just curious to see if there is actually a difference between both versions. I have no idea of assembler but that doesn't keep me from trying.

Thanks

Laurent

             reply	other threads:[~2015-02-07 17:43 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-07 17:43 Laurent [this message]
2015-02-07 22:15 ` A few questions Brad Moore
2015-02-08 22:37   ` Laurent
2015-02-09 13:56     ` Brad Moore
2015-02-09 18:36       ` Laurent
  -- strict thread matches above, loose matches on Subject: below --
2015-10-31 20:29 Laurent
2015-10-31 20:49 ` Dmitry A. Kazakov
2015-11-01 13:16   ` Laurent
2015-11-01  0:25 ` Jeffrey R. Carter
2015-11-01 13:30   ` Laurent
2015-11-03  6:25   ` Randy Brukardt
2015-11-01  9:05 ` Jacob Sparre Andersen
2015-11-01 13:40   ` Laurent
2015-11-01 18:14     ` Jacob Sparre Andersen
2015-11-01 18:40       ` Laurent
2015-11-01 13:42 ` brbarkstrom
2015-11-01 13:52   ` Laurent
2015-11-01 17:59     ` Jeffrey R. Carter
2015-11-01 18:35       ` Laurent
2015-11-02 13:25     ` brbarkstrom
2015-11-01 15:15   ` Dennis Lee Bieber
2015-11-01 16:33 ` gautier_niouzes
2015-11-01 16:36   ` gautier_niouzes
2015-11-01 18:17 ` Stephen Leake
2015-11-01 18:53   ` Laurent
2015-11-02  0:41     ` Dennis Lee Bieber
2015-11-02 16:42     ` Stephen Leake
2015-11-02 17:45 ` Simon Wright
2015-11-02 18:48   ` Simon Wright
2015-11-03  6:33     ` Randy Brukardt
2015-11-03  8:26       ` Simon Wright
2015-11-03  6:40   ` Randy Brukardt
2015-11-03  8:34     ` Simon Wright
2015-11-04 16:19       ` Simon Wright
2015-11-05  1:20         ` Randy Brukardt
2015-11-05  8:34           ` briot.emmanuel
2015-11-12 18:28             ` Randy Brukardt
2015-11-12 20:19               ` Simon Wright
2015-11-12 20:56               ` Dmitry A. Kazakov
2015-11-12 21:15                 ` Randy Brukardt
2015-11-13  8:40                   ` Dmitry A. Kazakov
2015-11-13 17:52                     ` Randy Brukardt
2015-11-13 20:37                       ` Dmitry A. Kazakov
2015-11-13 22:15                         ` Randy Brukardt
2015-11-14 11:42                           ` Dmitry A. Kazakov
2015-11-14 12:37                           ` Simon Wright
2015-11-14 17:24                             ` Shark8
2015-11-14 20:09                               ` Simon Wright
2015-11-15 18:54                             ` Brad Moore
2015-11-13  8:45               ` briot.emmanuel
2015-11-13 17:41                 ` Randy Brukardt
2015-11-14 19:57                   ` briot.emmanuel
2015-11-16 19:13                     ` Randy Brukardt
2015-11-16 20:47                       ` Dmitry A. Kazakov
2015-11-17 21:30                         ` Randy Brukardt
2015-11-18  9:53                           ` Dmitry A. Kazakov
2015-11-18 22:27                             ` Randy Brukardt
2015-11-19  8:52                               ` Dmitry A. Kazakov
2015-11-19 21:15                                 ` Randy Brukardt
2015-11-16 21:50                       ` Simon Wright
2015-11-17 21:33                         ` Randy Brukardt
2015-11-17 23:14                           ` Simon Wright
2015-11-17  8:49                       ` briot.emmanuel
2015-11-17 22:09                         ` Randy Brukardt
2015-11-05  8:45           ` Simon Wright
2015-11-05  8:52             ` Simon Wright
2015-11-12 18:29               ` Randy Brukardt
2015-11-12 18:32               ` Randy Brukardt
2015-11-12 20:02                 ` Simon Wright
2015-11-12 21:08                   ` Randy Brukardt
2015-11-15 17:56                     ` Brad Moore
2015-11-15 21:42                       ` Simon Wright
2015-11-16 19:16                       ` Randy Brukardt
replies disabled

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