Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

Ada Programming/Libraries/Ada.Containers.Doubly Linked Lists

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

Ada.Containers.Doubly_Linked_Lists Ada Containers Doubly_Linked_Lists is a unit of the Predefined Language Environment since Ada 2005. __TOC__ Introduction One of the major additions to Ada 2005 is the container library. This library enables the Ada developer to manipulate data structures such as doubly linked lists, maps, sets and vectors. This page will show how the Ada Containers Doubly_Linked_Lists library works. A doubly linked list is merely a linked list where each element is not only linked to the next, but also the previous. For more information, see doubly linked list. Example This is example usage is from an existing project. worm.ads This file represents the specification of a worm. with Ada Containers Doubly_Linked_Lists; with Wormlevel, Protocol; , Handlers; package Worm is use Wormlevel, Protocol; , Handlers; package Worm_Position_Container is new Adadot .Containersdot .Doubly_Linked_Lists(Position); use Worm_Position_Container; type Worm_State is (Alive,Dead,Observing); type Worm_Type is record Worm_Body : List; Direction : Course := North; Points : Natural := 0; Number : Positive; State : Worm_State := Alive; Full : Boolean := False; end record; type Worm_Type_Access is access Worm_Type; procedure Update_Worm (Worm : in Worm_Type_Access; Lvl : in Level_Access); procedure Turn_Left (Worm : in Worm_Type_Access); procedure Turn_Right (Worm : in Worm_Type_Access); procedure Kill (Worm : in Worm_Type_Access); end Worm; As you can see, Ada.Containers.Doubly_Linked_Lists is instantiated with a type called “Position”. This type represents a tile type in a 2-dimensional array. The worm body is now represented by a doubly linked list, meaning we can loop through each element in either direction, by using the Next and Previous functions. For those interested, the game can be found at GitHub. Specification Standard Ada library specification Copyright (c) 2003-2018 Maxim Reznik <reznikmm@gmail.com> Copyright (c) 2004-2016 AXE Consultants Copyright (c) 2004, 2005, 2006 Ada-Europe Copyright (c) 2000 The MITRE Corporation, Inc. Copyright (c) 1992, 1993, 1994, 1995 Intermetrics, Inc. SPDX-License-Identifier: BSD-3-Clause and LicenseRef-AdaReferenceManual ------------------------------------------------------------------------- generic type Element_Type is private; with function "=" (Left : in Element_Type; Right : in Element_Type) return Boolean is box <>; package Ada Containers Doubly_Linked_Lists is pragma Preelaborate (Doubly_Linked_Lists); type List is tagged private; pragma Preelaborable_Initialization (List); type Cursor is private; pragma Preelaborable_Initialization (Cursor); Empty_List : constant List; No_Element : constant Cursor; function "=" (Left : in List; Right : in List) return Boolean; function Length (Container : in List) return Count_Type; function Is_Empty (Container : in List) return Boolean; procedure Clear (Container : in out List); function Element (Position : in Cursor) return Element_Type; procedure Replace_Element (Container : in out List; Position : in Cursor; New_Item : in Element_Type); procedure Query_Element (Position : in Cursor; Process : not null access procedure (Element : in Element_Type)); procedure Update_Element (Container : in out List; Position : in Cursor; Process : not null access procedure (Element : in out Element_Type)); procedure Move (Target : in out List; Source : in out List); procedure Insert (Container : in out List; Before : in Cursor; New_Item : in Element_Type; Count : in Count_Type := 1); procedure Insert (Container : in out List; Before : in Cursor; New_Item : in Element_Type; Position : out Cursor; Count : in Count_Type := 1); procedure Insert (Container : in out List; Before : in Cursor; Position : out Cursor; Count : in Count_Type := 1); procedure Prepend (Container : in out List; New_Item : in Element_Type; Count : in Count_Type := 1); procedure Append (Container : in out List; New_Item : in Element_Type; Count : in Count_Type := 1); procedure Delete (Container : in out List; Position : in out Cursor; Count : in Count_Type := 1); procedure Delete_First (Container : in out List; Count : in Count_Type := 1); procedure Delete_Last (Container : in out List; Count : in Count_Type := 1); procedure Reverse_Elements (Container : in out List); procedure Swap (Container : in out List; I : in Cursor; J : in Cursor); procedure Swap_Links (Container : in out List; I : in Cursor; J : in Cursor); procedure Splice (Target : in out List; Before : in Cursor; Source : in out List); procedure Splice (Target : in out List; Before : in Cursor; Source : in out List; Position : in out Cursor); procedure Splice (Container : in out List; Before : in Cursor; Position : in Cursor); function First (Container : in List) return Cursor; function First_Element (Container : in List) return Element_Type; function Last (Container : in List) return Cursor; function Last_Element (Container : in List) return Element_Type; function Next (Position : in Cursor) return Cursor; function Previous (Position : in Cursor) return Cursor; procedure Next (Position : in out Cursor); procedure Previous (Position : in out Cursor); function Find (Container : in List; Item : in Element_Type; Position : in Cursor := No_Element) return Cursor; function Reverse_Find (Container : in List; Item : in Element_Type; Position : in Cursor := No_Element) return Cursor; function Contains (Container : in List; Item : in Element_Type) return Boolean; function Has_Element (Position : in Cursor) return Boolean; procedure Iterate (Container : in List; Process : not null access procedure (Position : in Cursor)); procedure Reverse_Iterate (Container : in List; Process : not null access procedure (Position : in Cursor)); generic with function "<" (Left : in Element_Type; Right : in Element_Type) return Boolean is box <>; package Generic_Sorting is function Is_Sorted (Container : in List) return Boolean; procedure Sort (Container : in out List); procedure Merge (Target : in out List; Source : in out List); end Generic_Sorting; private type List is tagged null record; Empty_List : constant List := (null record); type Cursor is null record; No_Element : constant Cursor := (null record); end Adadot .Containersdot .Doubly_Linked_Lists; See also Wikibook Ada Programming/Libraries/Ada Ada Reference Manual Ada 2005 A 18 3 The Package Containers.Doubly_Linked_Lists Ada 2012 A 18 3 The Generic Package Containers.Doubly_Linked_Lists Open-Source Implementations a-cdlili.ads a-cdlili.adb containers/a-cdlili.ads containers/a-cdlili.adb