comp.lang.ada
 help / color / mirror / Atom feed
* Saturation arithmetic woes.
@ 2009-07-29 17:03 xorque
  2009-07-29 17:13 ` Martin
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: xorque @ 2009-07-29 17:03 UTC (permalink / 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...



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2009-07-30 11:51 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-07-29 17:03 Saturation arithmetic woes xorque
2009-07-29 17:13 ` 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

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