File : fouriers_init.ads


with Reps;
use Reps;

package Fouriers_Init is

  pragma Pure;

  subtype Parity is Integer range 0 .. 1;
  type IntVec is array(Integer range <>) of Integer;
  subtype DegType is Integer range -1 .. Integer'Last;
  type Degrees is array(Integer range <>, Integer range <>) of DegType;

  type Weights is
    record
      Q: Radius := Zero;
      P: Radius := Zero;
    end record;

  function NumErrs(L,W: Positive) return Integer;             -- number of error terms H.E
  function Nmin(M: Integer; J: Parity := 0) return Integer;   -- smallest allowed N, given M
  function Join(M,N,K: Integer) return Integer;               -- (M,N,K) -> ((100+M)*100+N)*100+K
  procedure UnJoin(MNK: in Integer; M,N,K: out Integer);      -- Reverse of Join, if ...
  function Min(R1,R2: Weights) return Weights;                -- component-wise minimum

  pragma Inline_Always (Nmin,Join,UnJoin);

end Fouriers_Init;