comp.lang.ada
 help / color / mirror / Atom feed
From: xorque <xorquewasp@googlemail.com>
Subject: Saturation arithmetic woes.
Date: Wed, 29 Jul 2009 10:03:45 -0700 (PDT)
Date: 2009-07-29T10:03:45-07:00	[thread overview]
Message-ID: <1a16b458-0201-4320-9787-2836ed58f991@e27g2000yqm.googlegroups.com> (raw)

generic
  type Discrete_Type is (<>);

package Saturation is

  type Saturated_Type is new Discrete_Type;

  function "+"
    (Left  : Saturated_Type;
     Right : Saturated_Type) return Saturated_Type;

end Saturation;

package body Saturation is

  function "+"
    (Left  : Saturated_Type;
     Right : Saturated_Type) return Saturated_Type
  is
    Temp_Left  : constant Discrete_Type := Discrete_Type (Left);
    Temp_Right : constant Discrete_Type := Discrete_Type (Right);
  begin
    if Temp_Left + Temp_Right > Discrete_Type'Last then
      return Saturated_Type (Discrete_Type'Last);
    end if;
    if Temp_Left + Temp_Right < Discrete_Type'First then
      return Saturated_Type (Discrete_Type'First);
    end if;

    return Saturated_Type (Temp_Left + Temp_Right);
  end "+";

end Saturation;

with Saturation;
with Ada.Text_IO;

procedure Main is
  type T is range 1 .. 10;

  package T_Saturated is new Saturation (T);
  package IO          renames Ada.Text_IO;
  package TIO         is new Ada.Text_IO.Integer_IO
(T_Saturated.Saturated_Type);

  use type T_Saturated.Saturated_Type;

  X : constant T_Saturated.Saturated_Type := 5;
  Y : constant T_Saturated.Saturated_Type := 9;
begin
  TIO.Put (X + Y); -- 10
  IO.New_Line;
end Main;

saturation.adb:10:18: there is no applicable operator "+" for type
"Discrete_Type" defined at saturation.ads:2
saturation.adb:13:18: there is no applicable operator "+" for type
"Discrete_Type" defined at saturation.ads:2
saturation.adb:17:38: there is no applicable operator "+" for type
"Discrete_Type" defined at saturation.ads:2

I'm afraid I'm not well versed in the rules regarding operator name
resolution...



             reply	other threads:[~2009-07-29 17:03 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-29 17:03 xorque [this message]
2009-07-29 17:13 ` Saturation arithmetic woes Martin
2009-07-29 18:14 ` Jeffrey R. Carter
2009-07-29 19:14 ` Niklas Holsti
2009-07-29 19:39   ` xorque
2009-07-30  9:09   ` Jean-Pierre Rosen
2009-07-30 11:51     ` Martin
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox