--R_i = C_i + (ceiling[R_i0/P_j])*C_j function compute (My_Tasks : in Tasks_Set; Current_Task : in Generic_Task_Ptr) return Double is Iterator : Tasks_Iterator; Taskj : Generic_Task_Ptr; calcul, tmp : Double; begin calcul := 0.0; tmp:=-0.1; While (tmp/=calcul) or (calcul > Double(Periodic_Task_Ptr (Taski).period )) loop reset_iterator (My_Tasks, Iterator); tmp :=calcul; calcul := Double(Current_Task.capacity); loop current_element (My_Tasks, Taskj, Iterator); if (Taskj.priority > Current_Task.priority) then calcul := calcul + double((Double(Taskj.capacity)*Double'Ceiling((tmp/Double(Periodic_Task_Ptr (Taskj).period))))); end if; exit when is_last_element (My_Tasks, Iterator); next_element (My_Tasks, Iterator); end loop; end loop; return calcul; end compute;