From 35524b61526ab0cdb4eee6656d2182e3d1cfb663 Mon Sep 17 00:00:00 2001 From: Bergmann89 Date: Sun, 1 May 2016 17:02:15 +0200 Subject: [PATCH] * [Generics] auto create map entry if not existing --- uutlGenerics.pas | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/uutlGenerics.pas b/uutlGenerics.pas index 7469206..4ab03d1 100644 --- a/uutlGenerics.pas +++ b/uutlGenerics.pas @@ -299,6 +299,7 @@ type end; private + fAutoCreate: Boolean; fHashSetRef: THashSet; fKeyWrapper: TKeyWrapper; fKeyValuePairWrapper: TKeyValuePairWrapper; @@ -315,6 +316,7 @@ type property Keys: TKeyWrapper read fKeyWrapper; property KeyValuePairs: TKeyValuePairWrapper read fKeyValuePairWrapper; property Count: Integer read GetCount; + property AutoCreate: Boolean read fAutoCreate write fAutoCreate; procedure Add(const aKey: TKey; const aValue: TValue); function IndexOf(const aKey: TKey): Integer; @@ -1410,9 +1412,12 @@ begin kvp.Key := aKey; kvp.Value := aValue; i := fHashSetRef.IndexOf(kvp); - if (i < 0) then - raise EutlMap.Create('key not found'); - fHashSetRef[i] := kvp; + if (i < 0) then begin + if not fAutoCreate then + raise EutlMap.Create('key not found'); + fHashSetRef.Add(kvp); + end else + fHashSetRef[i] := kvp; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1501,6 +1506,7 @@ end; constructor TutlMapBase.Create(const aHashSet: THashSet); begin inherited Create; + fAutoCreate := false; fHashSetRef := aHashSet; fKeyWrapper := TKeyWrapper.Create(fHashSetRef); fKeyValuePairWrapper := TKeyValuePairWrapper.Create(fHashSetRef);