/jcl/source/prototypes/containers/JclArraySets.imp
https://github.com/the-Arioch/jcl · Unknown · 96 lines · 88 code · 8 blank · 0 comment · 0 complexity · a3a618ece522cc90cc59fd053cf0c8d0 MD5 · raw file
- (*$JPPDEFINEMACRO JCLARRAYSETIMP(SELFCLASSNAME, COLLECTIONINTERFACENAME, ITRINTERFACENAME, CONSTKEYWORD, PARAMETERNAME, TYPENAME, DEFAULTVALUE, GETTERFUNCTIONNAME)
- //=== { SELFCLASSNAME } ====================================================
- function SELFCLASSNAME.Add(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;
- var
- Idx: Integer;
- begin
- {$JPPDEFINE WRITE}{$JPPEXPANDMACRO LOCK}
- Result := FAllowDefaultElements or not ItemsEqual(PARAMETERNAME, DEFAULTVALUE);
- if Result then
- begin
- Idx := BinarySearch(PARAMETERNAME);
- if Idx >= 0 then
- Result := not ItemsEqual(GETTERFUNCTIONNAME(Idx), PARAMETERNAME) or CheckDuplicate
- else
- Result := True;
- if Result then
- Result := inherited Insert(Idx + 1, PARAMETERNAME);
- end;
- {$JPPEXPANDMACRO UNLOCK}
- end;
- function SELFCLASSNAME.AddAll(const ACollection: COLLECTIONINTERFACENAME): Boolean;
- var
- It: ITRINTERFACENAME;
- begin
- {$JPPDEFINE WRITE}{$JPPEXPANDMACRO LOCK}
- Result := False;
- if ACollection = nil then
- Exit;
- It := ACollection.First;
- while It.HasNext do
- Result := Add(It.Next) and Result;
- {$JPPEXPANDMACRO UNLOCK}
- end;
- function SELFCLASSNAME.BinarySearch(CONSTKEYWORDPARAMETERNAME: TYPENAME): Integer;
- var
- HiPos, LoPos, CompPos: Integer;
- Comp: Integer;
- begin
- {$JPPUNDEF WRITE}{$JPPEXPANDMACRO LOCK}
- LoPos := 0;
- HiPos := Size - 1;
- CompPos := (HiPos + LoPos) div 2;
- while HiPos >= LoPos do
- begin
- Comp := ItemsCompare(GETTERFUNCTIONNAME(CompPos), PARAMETERNAME);
- if Comp < 0 then
- LoPos := CompPos + 1
- else
- if Comp > 0 then
- HiPos := CompPos - 1
- else
- begin
- HiPos := CompPos;
- LoPos := CompPos + 1;
- end;
- CompPos := (HiPos + LoPos) div 2;
- end;
- Result := HiPos;
- {$JPPEXPANDMACRO UNLOCK}
- end;
- function SELFCLASSNAME.Contains(CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;
- var
- Idx: Integer;
- begin
- {$JPPUNDEF WRITE}{$JPPEXPANDMACRO LOCK}
- Idx := BinarySearch(PARAMETERNAME);
- if Idx >= 0 then
- Result := ItemsEqual(GETTERFUNCTIONNAME(Idx), PARAMETERNAME)
- else
- Result := False;
- {$JPPEXPANDMACRO UNLOCK}
- end;
- function SELFCLASSNAME.Insert(Index: Integer; CONSTKEYWORDPARAMETERNAME: TYPENAME): Boolean;
- begin
- raise EJclOperationNotSupportedError.Create;
- end;
- procedure SELFCLASSNAME.Intersect(const ACollection: COLLECTIONINTERFACENAME);
- begin
- RetainAll(ACollection);
- end;
- procedure SELFCLASSNAME.Subtract(const ACollection: COLLECTIONINTERFACENAME);
- begin
- RemoveAll(ACollection);
- end;
- procedure SELFCLASSNAME.Union(const ACollection: COLLECTIONINTERFACENAME);
- begin
- AddAll(ACollection);
- end;*)