1-- { dg-do compile } 2-- { dg-options "-O -gnatws" } 3 4package body Opt1 is 5 6 function De_Linear_Index 7 (Index : Natural; 8 D : Natural; 9 Ind_Lengths : Dimention_Length) 10 return Dimension_Indexes 11 is 12 Len : Natural := 1; 13 Tmp_Ind : Natural := Index; 14 Tmp_Res : Natural; 15 Result : Dimension_Indexes (1 .. D); 16 begin 17 for J in 1 .. D loop 18 Len := Len * Ind_Lengths (J); 19 end loop; 20 21 for J in Result'Range loop 22 Result (J) := Tmp_Res; 23 Tmp_Ind := Tmp_Ind - Len * (Result (J) - 1); 24 end loop; 25 26 return Result; 27 end; 28 29end Opt1; 30