with ada.exceptions;
with ada.integer_text_io;
package body pairpkg is
function NewPair return Pair is
begin
return (0, 0);
end NewPair;
function NewPair(x, y: Integer) return Pair is
temp: Pair := (x, y);
begin
return temp;
end NewPair;
function tos(i: integer) return String is
s: String := Integer'Image(i);
begin
return s;
end tos;
function toString(p: Pair) return String is
S: String := "("
& tos(p.x) & ", "
& tos(p.y) & ")";
begin
return s;
end toString;
function distanceToOrigin(p: Pair) return Natural is
result: Natural;
begin
result := abs p.x + abs p.y;
return result;
exception
when constraint_error => raise Pair_Distance_Too_Large;
when e: others => raise Unknown_Pair_Error with ada.exceptions.exception_message(e);
end distanceToOrigin;
function distanceBetween(p1, p2: Pair) return Natural is
result: Natural;
begin
result := abs(p1.x - p2.x) + abs(p1.y - p2.y);
return result;
exception
when constraint_error => raise Pair_Distance_Too_Large;
when e: others => raise Unknown_Pair_Error with ada.exceptions.exception_message(e);
end distanceBetween;
function reflect(p: in Pair) return Pair is
t: Pair;
begin
t.x := p.y;
t.y := p.x;
return t;
end reflect;
procedure reflectMe(p: in out Pair) is
t: constant integer := p.x;
begin
p.x := p.y;
p.y := t;
end reflectMe;
procedure put(f: ada.text_io.file_type; p: in Pair) is
begin
ada.integer_text_io.put(f, p.x);
ada.integer_text_io.put(f, p.y);
ada.text_io.new_line;
end put;
procedure put(p: in Pair) is
use ada.integer_text_io;
begin
put(p.x);
put(p.y);
end put;
end pairpkg;