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