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;