stopped using System.Atomic_Counters.Atomic_Counter
This commit is contained in:
		@ -5,8 +5,8 @@ package body H3.MM is
 | 
			
		||||
	begin
 | 
			
		||||
		Finalize (R);
 | 
			
		||||
		R.Data := new Ref_Counted_Record;
 | 
			
		||||
		--R.Data.Ref_Count := 1;
 | 
			
		||||
		System.Atomic_Counters.Initialize (R.Data.Ref_Count); -- initialize to 1
 | 
			
		||||
		R.Data.Ref_Count := 1;
 | 
			
		||||
		--System.Atomic_Counters.Initialize (R.Data.Ref_Count); -- initialize to 1
 | 
			
		||||
	end Create;
 | 
			
		||||
 
 | 
			
		||||
	procedure Create (R: in out Ref_Counted; V: in Item_Type) is
 | 
			
		||||
@ -26,7 +26,8 @@ package body H3.MM is
 | 
			
		||||
 | 
			
		||||
	function Is_Shared (R: in Ref_Counted) return Standard.Boolean is
 | 
			
		||||
	begin
 | 
			
		||||
		return R.Data /= null and then not System.Atomic_Counters.Is_One(R.Data.Ref_Count);
 | 
			
		||||
		--return R.Data /= null and then not System.Atomic_Counters.Is_One(R.Data.Ref_Count);
 | 
			
		||||
		return R.Data /= null and then R.Data.Ref_Count > 1;
 | 
			
		||||
	end Is_Shared;
 | 
			
		||||
 | 
			
		||||
	procedure Initialize (R: in out Ref_Counted) is
 | 
			
		||||
@ -37,8 +38,8 @@ package body H3.MM is
 | 
			
		||||
	procedure Adjust (R: in out Ref_Counted) is
 | 
			
		||||
	begin
 | 
			
		||||
		if R.Data /= null then
 | 
			
		||||
			--R.Data.Ref_Count := R.Data.Ref_Count + 1;
 | 
			
		||||
			System.Atomic_Counters.Increment (R.Data.Ref_Count);
 | 
			
		||||
			R.Data.Ref_Count := R.Data.Ref_Count + 1;
 | 
			
		||||
			--System.Atomic_Counters.Increment (R.Data.Ref_Count);
 | 
			
		||||
		end if;
 | 
			
		||||
	end Adjust;
 | 
			
		||||
 | 
			
		||||
@ -46,11 +47,16 @@ package body H3.MM is
 | 
			
		||||
		procedure Dealloc is new Ada.Unchecked_Deallocation(Ref_Counted_Record, Ref_Counted_Pointer);
 | 
			
		||||
	begin
 | 
			
		||||
		if R.Data /= null then	
 | 
			
		||||
			if System.Atomic_Counters.Decrement(R.Data.Ref_Count) then
 | 
			
		||||
				-- The reference count reached 0
 | 
			
		||||
			--if System.Atomic_Counters.Decrement(R.Data.Ref_Count) then
 | 
			
		||||
			--	-- The reference count reached 0
 | 
			
		||||
			--	Dealloc (R.Data); 
 | 
			
		||||
			--	-- R.DAta must be null here
 | 
			
		||||
			--end if;
 | 
			
		||||
			if R.Data.Ref_Count = 1 then
 | 
			
		||||
				Dealloc (R.Data); 
 | 
			
		||||
				-- R.DAta must be null here
 | 
			
		||||
			else
 | 
			
		||||
				R.Data.Ref_Count := R.Data.Ref_Count - 1;
 | 
			
		||||
			end if;
 | 
			
		||||
		end if;
 | 
			
		||||
	end Finalize;
 | 
			
		||||
end H3.MM;
 | 
			
		||||
end H3.MM;
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,8 @@ package H3.MM is
 | 
			
		||||
	type Item_Pointer is access all Item_Type;
 | 
			
		||||
 | 
			
		||||
	type Ref_Counted_Record is record
 | 
			
		||||
		Ref_Count: System.Atomic_Counters.Atomic_Counter;
 | 
			
		||||
		--Ref_Count: System.Atomic_Counters.Atomic_Counter;
 | 
			
		||||
		Ref_Count: System_Size;
 | 
			
		||||
		Item: aliased Item_Type;
 | 
			
		||||
	end record;
 | 
			
		||||
 | 
			
		||||
@ -32,4 +33,4 @@ package H3.MM is
 | 
			
		||||
	overriding procedure Finalize (R: in out Ref_Counted);
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
end H3.MM;
 | 
			
		||||
end H3.MM;
 | 
			
		||||
 | 
			
		||||
@ -19,7 +19,7 @@ package body H3.Strings is
 | 
			
		||||
	begin
 | 
			
		||||
		return Str.Buffer.Slot'Length;
 | 
			
		||||
	end Get_Hard_Capacity;
 | 
			
		||||
	pragma inline (Get_Hard_Capacity);
 | 
			
		||||
	pragma Inline (Get_Hard_Capacity);
 | 
			
		||||
 | 
			
		||||
	function Get_Length (Str: in Elastic_String) return System_Size is
 | 
			
		||||
	begin
 | 
			
		||||
 | 
			
		||||
@ -16,28 +16,28 @@ package H3.Strings is
 | 
			
		||||
	function To_Character_Array (Str: in Elastic_String) return Character_Array;
 | 
			
		||||
 | 
			
		||||
	function Get_Capacity (Str: in Elastic_String) return System_Size;
 | 
			
		||||
	pragma inline (Get_Capacity);
 | 
			
		||||
	pragma Inline (Get_Capacity);
 | 
			
		||||
 | 
			
		||||
	function Get_Length (Str: in Elastic_String) return System_Size;
 | 
			
		||||
	pragma inline (Get_Length);
 | 
			
		||||
	pragma Inline (Get_Length);
 | 
			
		||||
 | 
			
		||||
	-- the return type is System_Size for consistency with Get_FIrst_Index.
 | 
			
		||||
	function Get_First_Index (Str: in Elastic_String) return System_Size;
 | 
			
		||||
	pragma inline (Get_First_Index);
 | 
			
		||||
	pragma Inline (Get_First_Index);
 | 
			
		||||
 | 
			
		||||
	-- the return type is System_Size because the Last index can be -1 off the System_Index'First.
 | 
			
		||||
	function Get_Last_Index (Str: in Elastic_String) return System_Size;
 | 
			
		||||
	pragma inline (Get_Last_index);
 | 
			
		||||
	pragma Inline (Get_Last_index);
 | 
			
		||||
 | 
			
		||||
	function Get_Item (Str: in Elastic_String; Pos: in System_Index) return Character_Type;
 | 
			
		||||
	pragma inline (Get_Item);
 | 
			
		||||
	pragma Inline (Get_Item);
 | 
			
		||||
 | 
			
		||||
	-- unsafe
 | 
			
		||||
	function Get_Slot_Pointer (Str: in Elastic_String) return Thin_Character_Array_Pointer;
 | 
			
		||||
	pragma inline (Get_Slot_Pointer);
 | 
			
		||||
	pragma Inline (Get_Slot_Pointer);
 | 
			
		||||
 | 
			
		||||
	function Is_Shared(Str: in Elastic_String) return Standard.Boolean;
 | 
			
		||||
	pragma inline (Is_Shared);
 | 
			
		||||
	pragma Inline (Is_Shared);
 | 
			
		||||
 | 
			
		||||
	procedure Purge (Str: in out Elastic_String);
 | 
			
		||||
	procedure Clear (Str: in out Elastic_String);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										18
									
								
								lib2/h3.ads
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								lib2/h3.ads
									
									
									
									
									
								
							@ -1,6 +1,5 @@
 | 
			
		||||
with System;
 | 
			
		||||
with System.Storage_Pools;
 | 
			
		||||
with System.Atomic_Counters;
 | 
			
		||||
with Ada.Finalization;
 | 
			
		||||
 | 
			
		||||
package H3 is
 | 
			
		||||
@ -35,21 +34,4 @@ package H3 is
 | 
			
		||||
	function Align (X: in System_Size; Y: in System_Size) return System_Size;
 | 
			
		||||
	pragma Inline(Align);
 | 
			
		||||
 | 
			
		||||
	-- ---------------------------------------------------------------------
 | 
			
		||||
	-- Reference Counting
 | 
			
		||||
	-- ---------------------------------------------------------------------
 | 
			
		||||
--	type Ref_Counted is abstract tagged record
 | 
			
		||||
--		--Ref_Count: System.Atomic_Counters.Atomic_Counter;
 | 
			
		||||
--		Ref_Count: System_Size;
 | 
			
		||||
--	end record;
 | 
			
		||||
 | 
			
		||||
--	type Ref_Counted_Pointer is access all Ref_Counted'Class;
 | 
			
		||||
--	type Ref is new Ada.Finalization.Controlled with record
 | 
			
		||||
--		Data: Ref_Counted_Pointer;
 | 
			
		||||
--	end record;
 | 
			
		||||
 | 
			
		||||
--	procedure Set (R: in out Ref; Data: in Ref_Counted_Pointer);
 | 
			
		||||
--	function Get (R: in Ref) return Ref_Counted_Pointer;
 | 
			
		||||
--	overriding procedure Adjust (R: in out Ref);
 | 
			
		||||
--	overriding procedure Finalize (R: in out Ref);
 | 
			
		||||
end H3;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user