--  Copyright 2021 Free Software Foundation, Inc.
--
--  This program is free software; you can redistribute it and/or modify
--  it under the terms of the GNU General Public License as published by
--  the Free Software Foundation; either version 3 of the License, or
--  (at your option) any later version.
--
--  This program is distributed in the hope that it will be useful,
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--  GNU General Public License for more details.
--
--  You should have received a copy of the GNU General Public License
--  along with this program.  If not, see <http://www.gnu.org/licenses/>.

package body Twovecs is

   function Pt (X, Y : My_Integer) return Twovec is
   begin
      return Twovec'(X, Y);
   end Pt;

   function "+" (P0, P1 : Twovec) return Twovec is
   begin
      return Twovec' (P0.X + P1.X, P0.Y + P1.Y);
   end "+";

   function "-" (P0, P1 : Twovec) return Twovec is
   begin
      return Twovec' (P0.X - P1.X, P0.Y - P1.Y);
   end "-";

   function "*" (P0, P1 : Twovec) return Twovec is
   begin
      return Twovec' (P0.X * P1.X, P0.Y * P1.Y);
   end "*";

   function "/" (P0, P1 : Twovec) return Twovec is
   begin
      return Twovec' (P0.X / P1.X, P0.Y / P1.Y);
   end "/";

   function "mod" (P0, P1 : Twovec) return Twovec is
   begin
      -- Make sure we get a different answer than "-".
      return Twovec' (17, 18);
   end "mod";

   function "rem" (P0, P1 : Twovec) return Twovec is
   begin
      -- Make sure we get a different answer than "-".
      return Twovec' (38, 39);
   end "rem";

   function "**" (P0, P1 : Twovec) return Twovec is
   begin
      -- It just has to do something recognizable.
      return Twovec' (20 * P0.X + P1.X, 20 * P0.Y + P1.Y);
   end "**";

   function "<" (P0, P1 : Twovec) return Boolean is
   begin
      return P0.X < P1.X and then P0.Y < P1.Y;
   end "<";

   function "<=" (P0, P1 : Twovec) return Boolean is
   begin
      return P0.X <= P1.X and then P0.Y <= P1.Y;
   end "<=";

   function ">" (P0, P1 : Twovec) return Boolean is
   begin
      return P0.X > P1.X and then P0.Y > P1.Y;
   end ">";

   function ">=" (P0, P1 : Twovec) return Boolean is
   begin
      return P0.X >= P1.X and then P0.Y >= P1.Y;
   end ">=";

   function "=" (P0, P1 : Twovec) return Boolean is
   begin
      return P0.X = P1.X and then P0.Y = P1.Y;
   end "=";

   function "and" (P0, P1 : Twovec) return Twovec is
   begin
      return Twovec' (P0.X and P1.X, P0.Y and P1.Y);
   end "and";

   function "or" (P0, P1 : Twovec) return Twovec is
   begin
      return Twovec' (P0.X or P1.X, P0.Y or P1.Y);
   end "or";

   function "xor" (P0, P1 : Twovec) return Twovec is
   begin
      return Twovec' (P0.X xor P1.X, P0.Y xor P1.Y);
   end "xor";

   function "&" (P0, P1 : Twovec) return Twovec is
   begin
      -- It just has to do something recognizable.
      return Twovec' (10 * P0.X + P1.X, 10 * P0.Y + P1.Y);
   end "&";

   function "abs" (P0 : Twovec) return Twovec is
   begin
      return Twovec' (abs (P0.X), abs (P0.Y));
   end "abs";

   function "not" (P0 : Twovec) return Twovec is
   begin
      return Twovec' (not (P0.X), not (P0.Y));
   end "not";

   function "+" (P0 : Twovec) return Twovec is
   begin
      -- It just has to do something recognizable.
      return Twovec' (+ (P0.Y), + (P0.X));
   end "+";

   function "-" (P0 : Twovec) return Twovec is
   begin
      return Twovec' (- (P0.X), - (P0.Y));
   end "-";

   procedure Do_Nothing (P : Twovec) is
   begin
      null;
   end Do_Nothing;

end Twovecs;
