diff options
author | maciej <maciej@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2018-04-17 11:16:28 +0000 |
---|---|---|
committer | maciej <maciej@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2018-04-17 11:16:28 +0000 |
commit | ca74a26723b73a615eefc45d55830c6b38dde902 (patch) | |
tree | 068e37641b7da2a9de5d32562605b5e57055f95a /packages/rtl-generics | |
parent | 70b141df3c16bca83c7d6b203f7a0c50cbafafa9 (diff) | |
download | fpc-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.inc | 8 | ||||
-rw-r--r-- | packages/rtl-generics/tests/tests.generics.hashmaps.pas | 8 |
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 |