From: danielcheagle@gmail.com
Subject: ? Is ok return a type derived from ada.finalization.controlled from a "Pure_Function" ? thanks.
Date: Thu, 24 Jan 2019 15:56:10 -0800 (PST)
Date: 2019-01-24T15:56:10-08:00 [thread overview]
Message-ID: <db66050e-9606-4c79-bd21-6c0164913181@googlegroups.com> (raw)
Hi!
Is ok return a type derived from ada.finalization.controlled
from a function declared "Pure_Function" ?
Or yet, is ok declare a fuction returning a
controlled type as "pure_function" ?
Thanks in Advance!!!
[]'s Dani. :-)
note1 : the type has a access value.
note2 : initialize, adjust and finalize overrided and working :-)
fragment example code:
---------------------------------
pragma Ada_2012;
pragma Detect_Blocking;
with Ada.Finalization;
package Arbitrary
with preelaborate
is
type Arbitrary_Type (size : Positive) is
new Ada.Finalization.Controlled with private;
function To_Arbitrary (value : Integer; precision : Integer)
return Arbitrary_Type
with inline; -- Can I add "pure_function" ?
private
type Mantissa_Type is array (Positive range <>) of Integer;
type Mantissa_Pointer is access Mantissa_Type;
type Arbitrary_Type (size : Positive) is
new Ada.Finalization.Controlled with record
mantissa : Mantissa_Pointer;
exponent : Integer;
sign : Integer range -1 .. 1;
precision : Positive := size;
end record;
end arbitrary;
-----------------------------------------------
pragma Ada_2012;
pragma Detect_Blocking;
with Ada.Unchecked_Deallocation;
package body Arbitrary is
procedure Delete is new Ada.Unchecked_Deallocation (Mantissa_Type,
Mantissa_Pointer);
-----------------------------------------------------------------------
-- Initialize an Arbitrary_Type
-----------------------------------------------------------------------
procedure Initialize (Object : in out Arbitrary_Type) is
begin
Object.mantissa := new Mantissa_Type (1 .. Object.precision);
Object.exponent := 0;
Object.sign := 1;
-- "here" for diminish race condition from OS' s
Object.mantissa.all := (others => 0);
end Initialize;
-----------------------------------------------------------------------
-- Fix an Arbitrary_Type after being assigned a value
-----------------------------------------------------------------------
procedure Adjust (Object : in out Arbitrary_Type) is
begin
Object.mantissa := new Mantissa_Type'(Object.mantissa.all);
end Adjust;
-----------------------------------------------------------------------
-- Release an Arbitrary_Type;
-----------------------------------------------------------------------
procedure Finalize (Object : in out Arbitrary_Type) is
begin
if Object.mantissa /= null then
Delete (Object.mantissa);
end if;
Object.mantissa := null;
end Finalize;
-----------------------------------------------------------------------
-- Convert an Integer type to an Arbitrary_Type
-----------------------------------------------------------------------
function To_Arbitrary (value : Integer; precision : Integer)
return Arbitrary_Type is
result : Arbitrary_Type (precision);
begin
result.mantissa (result.exponent + 1) := value;
Normalize (result);
return result;
end To_Arbitrary;
end arbitrary;
-------------------------------------------------------------------
Really Thanks! :-)
[]'s Dani. :-)
next reply other threads:[~2019-01-24 23:56 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-24 23:56 danielcheagle [this message]
2019-01-25 21:20 ` ? Is ok return a type derived from ada.finalization.controlled from a "Pure_Function" ? thanks Randy Brukardt
2019-01-26 0:22 ` Shark8
2019-01-26 11:48 ` Simon Wright
2019-01-26 17:02 ` Daniel Norte Moraes
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox