File : lin.adb



package body Lin is

  procedure SetZero(V: in out IVec) is
  begin
    for I in V'Range loop
      V(I) := 0;
    end loop;
  end SetZero;

  procedure SetZero(V: in out IntVec) is
  begin
    for I in V'Range loop
      V(I) := 0;
    end loop;
  end SetZero;

  procedure SetZero(A: in out IMat) is
  begin
    for I in A'Range(1) loop
      for J in A'Range(2) loop
        A(I,J) := 0;
      end loop;
    end loop;
  end SetZero;

  procedure SetOne(A: in out IMat) is
  begin
    for I in A'Range(1) loop
      for J in A'Range(2) loop
        A(I,J) := 0;
      end loop;
      A(I,I) := 1;
    end loop;
  end SetOne;

  procedure SetZero(V: in out RVec) is
  begin
    for I in V'Range loop
      V(I) := Zero;
    end loop;
  end SetZero;

  procedure SetZero(A: in out RMat) is
  begin
    for I in A'Range(1) loop
      for J in A'Range(2) loop
        A(I,J) := Zero;
      end loop;
    end loop;
  end SetZero;

  procedure SetOne(A: in out RMat) is
  begin
    for I in A'Range(1) loop
      for J in A'Range(2) loop
        A(I,J) := Zero;
      end loop;
      A(I,I) := One;
    end loop;
  end SetOne;

  procedure SetZero(A: in out QMat) is
  begin
    SetZero(A.P);
    A.Q := 1;
  end SetZero;

  function QZero(Dim: in Positive) return QMat is
    A: Qmat(Dim);
  begin
    SetZero(A.P);
    A.Q := 1;
    return A;
  end QZero;

  procedure SetOne(A: in out QMat) is
  begin
    SetOne(A.P);
    A.Q := 1;
  end SetOne;

  function QOne(Dim: in Positive) return QMat is
    A: Qmat(Dim);
  begin
    SetOne(A.P);
    A.Q := 1;
    return A;
  end QOne;

  procedure SetRow(I: in Positive; V: in IVec; A: in out QMat) is
  begin
    for J in V'Range loop
      A.P(I,J) := V(J);
    end loop;
  end SetRow;

end Lin;