with sets;
with Task_Set; use Task_Set;
with unbounded_strings; use unbounded_strings;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Ada.Strings.Unbounded.Text_IO; use Ada.Strings.Unbounded.Text_IO;
use type Task_Set.Tasks_Range;
--#[debug]
with Debug; use Debug;
---------------------------------------------------------------------
-- Package Marzhin_Utils
-- Purpose: Contain types definitions, functions and procedures
-- usefull for sockets manipulations such as IO and configuration.
-- Used mainly to translate Cheddar events to Marzhin event format
-- as well as parsing specific xml event related data.
-- Extra: Documentations on methods are in the specification file.
---------------------------------------------------------------------
package body Marzhin_Utils is
--------------
-- Add_Port --
--------------
-- procedure Add_Port (
-- Task_Name : in Unbounded_String;
-- Resource_Name : in Unbounded_String;
-- State_Value : in Unbounded_String)
-- is
-- begin
-- Ports.Port_Array(Ports.Port_Nb).Task_Data := Task_Name;
-- Ports.Port_Array(Ports.Port_Nb).Resource_Data := Resource_Name;
-- Ports.Port_Array(Ports.Port_Nb).State_Data := State_Value;
-- Ports.Port_Nb := Ports.Port_Nb + 1;
-- end Add_Port;
----------------------------
-- Encode_Task_Capacities --
----------------------------
function Encode_Task_Capacities (
Si : Scheduling_Information)
return Unbounded_String
is
Output : Unbounded_String;
begin
for curr_task in 0 .. Si.Number_Of_Tasks - 1 loop
Put_Debug("__INFO__ :: Task -> " & Si.Tcbs(curr_task).Tsk.name & " || Capacity -> " & Si.Tcbs(curr_task).Tsk.capacity'Img);
end loop;
Output := To_Unbounded_String("");
return Output;
end Encode_Task_Capacities;
-------------------------------
-- Get_Event_String_From_XML --
-------------------------------
procedure Get_Event_String_From_XML (
XML_String : in Unbounded_String;
Event_String : in out Unbounded_String)
is
XML_Start_Tag_Time_Unit_Event : constant String := "";
XML_End_Tag_Time_Unit_Event : constant String := "";
XML_Start_Tag_Type_Event : constant String := "";
XML_End_Tag_Type_Event : constant String := "";
XML_Start_Tag_Position : Natural;
XML_End_Tag_Position : Natural;
XML_Substring : Unbounded_String;
begin
-- Get time_unit_event tag start and end positions in the string
XML_Start_Tag_Position := Index (XML_String, XML_Start_Tag_Time_Unit_Event) + XML_Start_Tag_Time_Unit_Event'Length;
XML_End_Tag_Position := Index (XML_String, XML_End_Tag_Time_Unit_Event) - 1;
-- Get substring without time_unit_event tag
XML_Substring := Substring (XML_String, XML_Start_Tag_Position, XML_End_Tag_Position);
-- Get type_of_event tag start and end positions in the substring
XML_Start_Tag_Position := Index (XML_Substring, XML_Start_Tag_Type_Event) + XML_Start_Tag_Type_Event'Length;
XML_End_Tag_Position := Index (XML_Substring, XML_End_Tag_Type_Event) - 1;
-- Get the type of event string
Event_String := Substring (XML_Substring, XML_Start_Tag_Position, XML_End_Tag_Position);
end Get_Event_String_From_XML;
------------------------------
-- Get_Resource_Id_From_XML --
------------------------------
procedure Get_Resource_Id_From_XML (
XML_String : in Unbounded_String;
Event_String : in Unbounded_String;
Resource_Id_String : in out Unbounded_String)
is
XML_Start_Tag : Unbounded_String := To_Unbounded_String("ref=""");
XML_End_Tag : constant String := """ />";
XML_Start_Tag_Position : Natural;
XML_End_Tag_Position : Natural;
begin
if Event_String = To_Unbounded_String("WAIT_FOR_RESOURCE") then
XML_Start_Tag := To_Unbounded_String("";
XML_Start_Tag_Position : Natural;
XML_End_Tag_Position : Natural;
begin
if Event_String = To_Unbounded_String("PREEMPTION") then
XML_Start_Tag := To_Unbounded_String("[unlock]");
elsif Event_String = To_Unbounded_String("THREAD_GET_RESOURCE") then
Event_String := To_Unbounded_String("RESOURCE [unlock]->[lock]");
end if;
end Set_To_Marzhin_Resource_Event;
------------------------------
-- To_Marzhin_Output_Format --
------------------------------
function To_Marzhin_Output_Format (
Tick : Natural;
Event : Unbounded_String;
Data : Unbounded_String)
return Unbounded_String is
Return_String : Unbounded_String;
begin
Return_String := To_Unbounded_String (Tick'Img);
Return_String := Trim(Return_String, Ada.Strings.Left);
Return_String := "tick=" & Return_String & " " & Event & " " & "root." & Data;
return Return_String;
end To_Marzhin_Output_Format;
end Marzhin_Utils;