summaryrefslogtreecommitdiff
path: root/packages/rtl-generics
diff options
context:
space:
mode:
authormaciej <maciej@3ad0048d-3df7-0310-abae-a5850022a9f2>2018-04-17 11:16:28 +0000
committermaciej <maciej@3ad0048d-3df7-0310-abae-a5850022a9f2>2018-04-17 11:16:28 +0000
commitca74a26723b73a615eefc45d55830c6b38dde902 (patch)
tree068e37641b7da2a9de5d32562605b5e57055f95a /packages/rtl-generics
parent70b141df3c16bca83c7d6b203f7a0c50cbafafa9 (diff)
downloadfpc-ca74a26723b73a615eefc45d55830c6b38dde902.tar.gz
Allow usage of other type kinds than only objects for keys and values for TObjectDictionaries constraints.
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@38780 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/rtl-generics')
-rw-r--r--packages/rtl-generics/src/inc/generics.dictionaries.inc8
-rw-r--r--packages/rtl-generics/tests/tests.generics.hashmaps.pas8
2 files changed, 12 insertions, 4 deletions
diff --git a/packages/rtl-generics/src/inc/generics.dictionaries.inc b/packages/rtl-generics/src/inc/generics.dictionaries.inc
index a3cdbbe36c..8405648346 100644
--- a/packages/rtl-generics/src/inc/generics.dictionaries.inc
+++ b/packages/rtl-generics/src/inc/generics.dictionaries.inc
@@ -2179,7 +2179,7 @@ begin
inherited;
if (doOwnsKeys in FOwnerships) and (ACollectionNotification = cnRemoved) then
- TObject(AKey).Free;
+ TObject((@AKey)^).Free;
end;
procedure TObjectDeamortizedDArrayCuckooMap<CUCKOO_CONSTRAINTS>.ValueNotify(constref AValue: TValue;
@@ -2188,7 +2188,7 @@ begin
inherited;
if (doOwnsValues in FOwnerships) and (ACollectionNotification = cnRemoved) then
- TObject(AValue).Free;
+ TObject((@AValue)^).Free;
end;
constructor TObjectDeamortizedDArrayCuckooMap<CUCKOO_CONSTRAINTS>.Create(
@@ -2227,7 +2227,7 @@ begin
inherited;
if (doOwnsKeys in FOwnerships) and (ACollectionNotification = cnRemoved) then
- TObject(AKey).Free;
+ TObject((@AKey)^).Free;
end;
procedure TObjectOpenAddressingLP<OPEN_ADDRESSING_CONSTRAINTS>.ValueNotify(
@@ -2236,7 +2236,7 @@ begin
inherited;
if (doOwnsValues in FOwnerships) and (ACollectionNotification = cnRemoved) then
- TObject(AValue).Free;
+ TObject((@AValue)^).Free;
end;
constructor TObjectOpenAddressingLP<OPEN_ADDRESSING_CONSTRAINTS>.Create(AOwnerships: TDictionaryOwnerships);
diff --git a/packages/rtl-generics/tests/tests.generics.hashmaps.pas b/packages/rtl-generics/tests/tests.generics.hashmaps.pas
index 6a6b2285c8..1219d88b83 100644
--- a/packages/rtl-generics/tests/tests.generics.hashmaps.pas
+++ b/packages/rtl-generics/tests/tests.generics.hashmaps.pas
@@ -62,6 +62,8 @@ type
procedure Test_OpenAddressingLP_TrimExcess;
procedure Test_CuckooD2_TrimExcess;
+ procedure Test_ObjectDictionary;
+
procedure Test_TryAddOrSetOrGetValue;
end;
@@ -316,6 +318,12 @@ begin
TEST_TRIMEXCESS;
end;
+procedure TTestHashMaps.Test_ObjectDictionary;
+begin
+ with TObjectOpenAddressingLP<TGUID, TGUID>.Create do Free;
+ with TObjectCuckooD2<TGUID, TGUID>.Create do Free;
+end;
+
procedure TTestHashMaps.Test_TryAddOrSetOrGetValue;
// modified test from Castle Game Engine (https://castle-engine.sourceforge.io)
var