Index

Package: Swarm_Structures

Description

package Swarm_Structures is
Jan & Uwe R. Zimmer, Australia, July 2011

Packages

Distance_Vectors (new Ada.Containers.Vectors)

package Distance_Vectors is new Vectors (Swarm_Element_Index, Distance_Entries);

Sort_Distances (new Ada.Containers.Vectors.Generic_Sorting)

package Sort_Distances is new Distance_Vectors.Generic_Sorting;

Buffers_Outgoing (new Generic_Realtime_Buffer)

Buffers_Incoming (new Generic_Realtime_Buffer)

Swarm_Vectors (new Ada.Containers.Vectors)

package Swarm_Vectors is new Vectors (Swarm_Element_Index, Swarm_Element_State);

Tasks & Protected

Swarm_Lock (protected)

Types

Distance_Entries

type Distance_Entries is
      record
         Index         : Swarm_Element_Index;
         Distance      : Distances;
         Position_Diff : Positions;
         Velocity_Diff : Velocities;
      end record;

Buffer_Size_Outgoing

type Buffer_Size_Outgoing is mod No_Of_Buffered_Outgoing_Messages;

References:

swarm_structures.ads:39:9 (declaration)
swarm_structures.ads:42:85 (reference)

Buffer_Size_Incoming

type Buffer_Size_Incoming is mod No_Of_Buffered_Incoming_Messages;

References:

swarm_structures.ads:40:9 (declaration)
swarm_structures.ads:43:85 (reference)

Globes_Touched_A

type Globes_Touched_A is array (Energy_Globes_Defaults'Range) of Boolean;

References:

swarm_structures.ads:70:9 (declaration)
swarm_structures.ads:72:33 (reference)
swarm_structures.ads:78:24 (reference)

Charge_Info

type Charge_Info is record
      Level          : Vehicle_Charges;     pragma Atomic (Level);
      Charge_Time    : Time;                pragma Atomic (Charge_Time);
      Charge_No      : Natural;             pragma Atomic (Charge_No);
      Globes_Touched : Globes_Touched_A := No_Globes_Touched;
   end record;

References:

swarm_structures.ads:74:9 (declaration)
swarm_structures.ads:92:25 (reference)

Neighbours_P

type Neighbours_P       is access all Distance_Vectors.Vector;

References:

swarm_structures.ads:81:9 (declaration)
swarm_structures.ads:93:25 (reference)
swarm_structures.ads:103:104 (reference)

Vehicle_Comms_P

type Vehicle_Comms_P    is access all Vehicle_Comms;

References:

swarm_structures.ads:82:9 (declaration)
swarm_structures.ads:95:25 (reference)
swarm_structures.ads:105:104 (reference)

Vehicle_Controls_P

type Vehicle_Controls_P is access all Vehicle_Controls;

References:

swarm_structures.ads:83:9 (declaration)
swarm_structures.ads:94:25 (reference)
swarm_structures.ads:104:104 (reference)

Vehicle_Task_P

type Vehicle_Task_P     is access all Vehicle_Task;

References:

swarm_structures.ads:84:9 (declaration)
swarm_structures.ads:96:25 (reference)
swarm_structures.ads:106:104 (reference)

Swarm_Element_State

type Swarm_Element_State is
      record
         Position     : Positions;           pragma Atomic (Position);
         Rotation     : Quaternion_Rotation; pragma Atomic (Rotation);
         Velocity     : Velocities;          pragma Atomic (Velocity);
         Acceleration : Accelerations;       pragma Atomic (Acceleration);
         Charge       : Charge_Info;
         Neighbours   : Neighbours_P;
         Controls     : Vehicle_Controls_P;
         Comms        : Vehicle_Comms_P;
         Process      : Vehicle_Task_P;
         Process_Id   : Task_Id;
         Last_Update  : Time;
      end record;

Constants & Global variables

No_Of_Buffered_Incoming_Messages (positive)

No_Of_Buffered_Incoming_Messages : constant Positive := 10;

References:

swarm_structures.ads:20:4 (declaration)
swarm_structures.ads:40:37 (reference)

No_Of_Buffered_Outgoing_Messages (positive)

No_Of_Buffered_Outgoing_Messages : constant Positive := 2;

References:

swarm_structures.ads:21:4 (declaration)
swarm_structures.ads:39:37 (reference)

No_Globes_Touched (Globes_Touched_A)

No_Globes_Touched : constant Globes_Touched_A := (others => False);

Subprograms & Entries

Vehicle_Comms. Has_Incoming_Messages

function  Has_Incoming_Messages return Boolean;

Vehicle_Comms. Has_Outgoing_Messages

function  Has_Outgoing_Messages return Boolean;

Vehicle_Controls. Steering_Direction (private)

Steering_Direction: Vector_3D  := Zero_Vector_3D;

References:

Simulator_Tick. Wait_For_Next_Tick (abstract)

entry Wait_For_Next_Tick;

<

function "<" 
(L, R: Distance_Entries)
return Boolean;
"<" hides a default operator in package Standard

Free_Neighbours

procedure Free_Neighbours is new Unchecked_Deallocation 
(Object => Distance_Vectors.Vector, Name => Neighbours_P);

References:

swarm_structures.ads:103:14 (declaration)
swarm_control.adb:79:13 (reference)

Free_Controls

procedure Free_Controls   is new Unchecked_Deallocation 
(Object => Vehicle_Controls, Name => Vehicle_Controls_P);

References:

swarm_structures.ads:104:14 (declaration)
swarm_control.adb:81:13 (reference)

Free_Comms

procedure Free_Comms      is new Unchecked_Deallocation 
(Object => Vehicle_Comms, Name => Vehicle_Comms_P);

References:

swarm_structures.ads:105:14 (declaration)
swarm_control.adb:80:13 (reference)

Free_Process

procedure Free_Process    is new Unchecked_Deallocation 
(Object => Vehicle_Task, Name => Vehicle_Task_P);

References:

swarm_structures.ads:106:14 (declaration)
swarm_control.adb:78:13 (reference)