tail_call_p.adb   [plain text]


package body Tail_Call_P is

  function Start_Side (Element : T) return Index is
  begin
    if Element = 1 then
      raise Program_Error;
    end if;
    if Element = 0 then
      return Second;
    else
      return First;
    end if;
  end;

  function Segment (Element : T) return T is
  begin
    if Element /= 0 then
      raise Program_Error;
    end if;
    return 1;
  end;

  procedure Really_Insert (Into : T; Element : T; Value : T) is
  begin
    if Into /= 0 then
      raise Program_Error;
    end if;
  end;

  procedure Insert (Into : A; Element : T; Value : T) is
  begin
    Really_Insert (Into (Start_Side (Element)), Segment (Element), Value);
  end Insert;

end Tail_Call_P;