package Distance_Vectors is new Vectors (Swarm_Element_Index, Distance_Entries);
package Sort_Distances is new Distance_Vectors.Generic_Sorting;
package Buffers_Outgoing is new Generic_Realtime_Buffer (Inter_Vehicle_Messages, Buffer_Size_Outgoing);
package Buffers_Incoming is new Generic_Realtime_Buffer (Inter_Vehicle_Messages, Buffer_Size_Incoming);
package Protected_Time is new Generic_Protected (Time, Time_First);
package Protected_Rotation is new Generic_Protected (Quaternion_Rotation, Zero_Rotation);
package Swarm_Vectors is new Vectors (Swarm_Element_Index, Swarm_Element_State);
type Distance_Entries is record Index : Swarm_Element_Index; Distance : Distances; Position_Diff : Positions; Velocity_Diff : Velocities; end record;
type Buffer_Size_Outgoing is mod No_Of_Buffered_Outgoing_Messages;
type Buffer_Size_Incoming is mod No_Of_Buffered_Incoming_Messages;
type Globes_Touched_A is array (Energy_Globes_Defaults'Range) of Boolean;
type Charge_Info is record Level : Vehicle_Charges; pragma Atomic (Level); Charge_Time : Protected_Time.Monitor_Ptr; Charge_No : Natural; pragma Atomic (Charge_No); Globes_Touched : Globes_Touched_A := No_Globes_Touched; end record;
type Neighbours_P is access all Distance_Vectors.Vector;
type Vehicle_Comms_P is access all Vehicle_Comms;
type Vehicle_Controls_P is access all Vehicle_Controls;
type Vehicle_Task_P is access all Vehicle_Task;
type Swarm_Element_State is record Position : Protected_Point_3D.Monitor_Ptr; Rotation : Protected_Rotation.Monitor_Ptr; Velocity : Protected_Vector_3D.Monitor_Ptr; Acceleration : Protected_Vector_3D.Monitor_Ptr; Charge : Charge_Info; Neighbours : Neighbours_P; Controls : Vehicle_Controls_P; Comms : Vehicle_Comms_P; Process : Vehicle_Task_P; Process_abort : Barrier_Ptr; Process_Id : Task_Id; Vehicle_Id : Positive; Last_Update : Time; end record;
No_Of_Buffered_Incoming_Messages : constant Positive := 10;
No_Of_Buffered_Outgoing_Messages : constant Positive := 2;
No_Globes_Touched : constant Globes_Touched_A := (others => False);
procedure Send
( | Message | : Inter_Vehicle_Messages); |
entry Receive
( | Message | : out Inter_Vehicle_Messages); |
procedure Push_Message
( | Message | : Inter_Vehicle_Messages); |
procedure Fetch_Message
( | Message | : out Inter_Vehicle_Messages); |
function Has_Incoming_Messages return Boolean;
function Has_Outgoing_Messages return Boolean;
Sent_Messages: Buffers_Outgoing.Realtime_Buffer; References:
swarm_structures.ads:59:7 (declaration)swarm_structures.adb:14:15 (reference)swarm_structures.adb:30:15 (reference)swarm_structures.adb:37:76 (reference)Called by:
Fetch_Message defined at swarm_structures.ads:55:17Send defined at swarm_structures.ads:52:17Vehicle_Comms. Received_Messages (private)
Received_Messages
: Buffers_Incoming.Realtime_Buffer; References:
swarm_structures.ads:60:7 (declaration)swarm_structures.adb:22:15 (reference)swarm_structures.adb:35:76 (reference)swarm_structures.adb:41:84 (reference)swarm_structures.adb:44:15 (reference)Called by:
Push_Message defined at swarm_structures.ads:54:17Receive defined at swarm_structures.ads:53:17Receive defined at swarm_structures.ads:53:17Vehicle_Controls. Set_Steering
procedure Set_Steering
( V : Vector_3D); References:
swarm_structures.ads:64:17 (declaration)swarm_structures.adb:55:17 (body)swarm_structures.adb:59:11 (label)vehicle_interface.adb:36:49 (call)Called by:
Vehicle_Controls. Set_Throttle
procedure Set_Throttle
( T : Throttle_T); References:
swarm_structures.ads:65:17 (declaration)swarm_control.adb:392:42 (call)swarm_structures.adb:63:17 (body)swarm_structures.adb:67:11 (label)vehicle_interface.adb:46:49 (call)Called by:
Vehicle_Controls. Read_Steering
function Read_Steering return Vector_3D;References:
swarm_structures.ads:66:16 (declaration)swarm_control.adb:384:97 (call)swarm_structures.adb:71:16 (body)Called by:
Vehicle_Controls. Read_Throttle
function Read_Throttle return Throttle_T;References:
swarm_structures.ads:67:16 (declaration)swarm_control.adb:358:42 (call)swarm_control.adb:380:36 (call)swarm_control.adb:396:47 (call)swarm_structures.adb:73:16 (body)vehicle_interface.adb:50:49 (call)Called by:
Vehicle_Controls. Steering_Direction (private)
Steering_Direction
: Vector_3D := Zero_Vector_3D; References:
swarm_structures.ads:69:7 (declaration)swarm_structures.adb:58:10 (reference)swarm_structures.adb:71:51 (reference)Called by:
Set_Steering defined at swarm_structures.ads:64:17Vehicle_Controls. Throttle (private)
Throttle
: Throttle_T := Idle_Throttle; References:
swarm_structures.ads:70:7 (declaration)swarm_structures.adb:66:10 (reference)swarm_structures.adb:73:52 (reference)Called by:
Set_Throttle defined at swarm_structures.ads:65:17Simulator_Tick. Wait_For_Next_Tick (abstract)
entry Wait_For_Next_Tick;References:
swarm_structures.ads:118:13 (declaration)swarm_structures.adb:89:13 (body)swarm_structures.adb:92:21 (reference)swarm_structures.adb:93:11 (label)vehicle_interface.adb:115:22 (call)Called by:
Simulator_Tick. Tick
procedure Tick;References:
swarm_structures.ads:119:17 (declaration)swarm_structures.adb:95:17 (body)swarm_structures.adb:99:11 (label)Called by:
Simulator_Tick. Trigger (private)
Trigger
: Boolean := False; References:
swarm_structures.ads:121:7 (declaration)swarm_structures.adb:89:37 (reference)swarm_structures.adb:92:10 (reference)swarm_structures.adb:98:10 (reference)Called by:
Tick defined at swarm_structures.ads:119:17Wait_For_Next_Tick defined at swarm_structures.ads:118:13Wait_For_Next_Tick defined at swarm_structures.ads:118:13"<"
function "<"
( L, R : Distance_Entries) return Boolean; Free_Neighbours
procedure Free_Neighbours is new Unchecked_Deallocation
( Object => Distance_Vectors.Vector, Name => Neighbours_P); Called by:
Free_Controls
procedure Free_Controls is new Unchecked_Deallocation
( Object => Vehicle_Controls, Name => Vehicle_Controls_P); Called by:
Free_Comms
procedure Free_Comms is new Unchecked_Deallocation
( Object => Vehicle_Comms, Name => Vehicle_Comms_P); Called by:
Free_Process
procedure Free_Process is new Unchecked_Deallocation
( Object => Vehicle_Task, Name => Vehicle_Task_P); Called by: