diff --git a/.gitattributes b/.gitattributes index 913875311c..7861285056 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4457,24 +4457,6 @@ components/sparta/dockedformeditor/source/spartaapi.pas svneol=native#text/pasca components/sparta/dockedformeditor/sparta_dockedformeditor.lpk svneol=native#text/plain components/sparta/dockedformeditor/sparta_dockedformeditor.pas svneol=native#text/pascal components/sparta/dockedformeditor/sparta_strconsts.pas svneol=native#text/pascal -components/sparta/generics/examples/TArrayDouble/TArrayProjectDouble.lpi svneol=native#text/plain -components/sparta/generics/examples/TArrayDouble/TArrayProjectDouble.lpr svneol=native#text/plain -components/sparta/generics/examples/TArraySingle/TArrayProjectSingle.lpi svneol=native#text/plain -components/sparta/generics/examples/TArraySingle/TArrayProjectSingle.lpr svneol=native#text/plain -components/sparta/generics/examples/TComparer/TComparerProject.lpi svneol=native#text/plain -components/sparta/generics/examples/TComparer/TComparerProject.lpr svneol=native#text/plain -components/sparta/generics/examples/THashMap/THashMapProject.lpi svneol=native#text/plain -components/sparta/generics/examples/THashMap/THashMapProject.lpr svneol=native#text/plain -components/sparta/generics/examples/THashMapCaseInsensitive/THashMapCaseInsensitive.lpi svneol=native#text/plain -components/sparta/generics/examples/THashMapCaseInsensitive/THashMapCaseInsensitive.lpr svneol=native#text/plain -components/sparta/generics/examples/THashMapExtendedEqualityComparer/THashMapExtendedEqualityComparer.lpi svneol=native#text/plain -components/sparta/generics/examples/THashMapExtendedEqualityComparer/THashMapExtendedEqualityComparer.lpr svneol=native#text/plain -components/sparta/generics/examples/TObjectList/TObjectListProject.lpi svneol=native#text/plain -components/sparta/generics/examples/TObjectList/TObjectListProject.lpr svneol=native#text/plain -components/sparta/generics/examples/TQueue/TQueueProject.lpi svneol=native#text/plain -components/sparta/generics/examples/TQueue/TQueueProject.lpr svneol=native#text/plain -components/sparta/generics/examples/TStack/TStackProject.lpi svneol=native#text/plain -components/sparta/generics/examples/TStack/TStackProject.lpr svneol=native#text/plain components/sparta/generics/source/generics.collections.pas svneol=native#text/pascal components/sparta/generics/source/generics.defaults.pas svneol=native#text/pascal components/sparta/generics/source/generics.hashes.pas svneol=native#text/pascal diff --git a/components/sparta/generics/examples/TArrayDouble/TArrayProjectDouble.lpi b/components/sparta/generics/examples/TArrayDouble/TArrayProjectDouble.lpi deleted file mode 100644 index ed63b53594..0000000000 --- a/components/sparta/generics/examples/TArrayDouble/TArrayProjectDouble.lpi +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - <UseAppBundle Value="False"/> - <ResourceType Value="res"/> - </General> - <i18n> - <EnableI18N LFM="False"/> - </i18n> - <VersionInfo> - <StringTable ProductVersion=""/> - </VersionInfo> - <BuildModes Count="1"> - <Item1 Name="Default" Default="True"/> - </BuildModes> - <PublishOptions> - <Version Value="2"/> - </PublishOptions> - <RunParams> - <local> - <FormatVersion Value="1"/> - </local> - </RunParams> - <Units Count="1"> - <Unit0> - <Filename Value="TArrayProjectDouble.lpr"/> - <IsPartOfProject Value="True"/> - </Unit0> - </Units> - </ProjectOptions> - <CompilerOptions> - <Version Value="11"/> - <PathDelim Value="\"/> - <Target> - <Filename Value="TArrayProjectDouble"/> - </Target> - <SearchPaths> - <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="..\..\src"/> - <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> - </SearchPaths> - </CompilerOptions> - <Debugging> - <Exceptions Count="3"> - <Item1> - <Name Value="EAbort"/> - </Item1> - <Item2> - <Name Value="ECodetoolError"/> - </Item2> - <Item3> - <Name Value="EFOpenError"/> - </Item3> - </Exceptions> - </Debugging> -</CONFIG> diff --git a/components/sparta/generics/examples/TArrayDouble/TArrayProjectDouble.lpr b/components/sparta/generics/examples/TArrayDouble/TArrayProjectDouble.lpr deleted file mode 100644 index 8ed5c2bf4a..0000000000 --- a/components/sparta/generics/examples/TArrayDouble/TArrayProjectDouble.lpr +++ /dev/null @@ -1,91 +0,0 @@ -// Generic types for FreeSparta.com and FreePascal! -// Original version by keeper89.blogspot.com, 2011 -// FPC version by Maciej Izak (hnb), 2014 - -program TArrayProjectDouble; - -{$MODE DELPHI} -{$APPTYPE CONSOLE} - -uses - SysUtils, Math, Types, Generics.Collections, Generics.Defaults; - -type - TDoubleIntegerArray = array of TIntegerDynArray; - -procedure PrintMatrix(A: TDoubleIntegerArray); -var - i, j: Integer; -begin - for i := Low(A) to High(A) do - begin - for j := Low(A[0]) to High(A[0]) do - Write(A[i, j]: 3, ' '); - Writeln; - end; - Writeln; Writeln; -end; - -function CustomCompare_1(constref Left, Right: TIntegerDynArray): Integer; -begin - Result := TCompare.Integer(Right[0], Left[0]); -end; - -function CustomCompare_2(constref Left, Right: TIntegerDynArray): Integer; -var - i: Integer; -begin - i := 0; - repeat - Result := TCompare.Integer(Right[i], Left[i]); - Inc(i); - until ((Result <> 0) or (i = Length(Left))); -end; - -var - A: TDoubleIntegerArray; - FoundIndex: Integer; - i, j: Integer; - -begin - WriteLn('Working with TArray - a two-dimensional integer array'); - WriteLn; - - // Fill integer array with random numbers [1 .. 50] - SetLength(A, 4, 7); - Randomize; - for i := Low(A) to High(A) do - for j := Low(A[0]) to High(A[0]) do - A[i, j] := Math.RandomRange(1, 50); - - // Equate some of the elements for further "cascade" sorting - A[1, 0] := A[0, 0]; - A[2, 0] := A[0, 0]; - A[1, 1] := A[0, 1]; - - // Print out what happened - Writeln('The original array:'); - PrintMatrix(A); - - // ! FPC don't support anonymous methods yet - //TArray.Sort<TIntegerDynArray>(A, TComparer<TIntegerDynArray>.Construct( - // function (const Left, Right: TIntegerDynArray): Integer - // begin - // Result := Right[0] - Left[0]; - // end)); - // Sort descending 1st column, with cutom comparer_1 - TArrayHelper<TIntegerDynArray>.Sort(A, TComparer<TIntegerDynArray>.Construct( - CustomCompare_1)); - Writeln('Descending in column 1:'); - PrintMatrix(A); - - // Sort descending 1st column "cascade" - - // If the line items are equal, compare neighboring - TArrayHelper<TIntegerDynArray>.Sort(A, TComparer<TIntegerDynArray>.Construct( - CustomCompare_2)); - Writeln('Cascade sorting, starting from the 1st column:'); - PrintMatrix(A); - - Readln; -end. - diff --git a/components/sparta/generics/examples/TArraySingle/TArrayProjectSingle.lpi b/components/sparta/generics/examples/TArraySingle/TArrayProjectSingle.lpi deleted file mode 100644 index c2e966889f..0000000000 --- a/components/sparta/generics/examples/TArraySingle/TArrayProjectSingle.lpi +++ /dev/null @@ -1,71 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<CONFIG> - <ProjectOptions> - <Version Value="9"/> - <PathDelim Value="\"/> - <General> - <Flags> - <MainUnitHasCreateFormStatements Value="False"/> - <MainUnitHasTitleStatement Value="False"/> - </Flags> - <SessionStorage Value="InProjectDir"/> - <MainUnit Value="0"/> - <Title Value="TArrayProjectSingle"/> - <UseAppBundle Value="False"/> - <ResourceType Value="res"/> - </General> - <i18n> - <EnableI18N LFM="False"/> - </i18n> - <VersionInfo> - <StringTable ProductVersion=""/> - </VersionInfo> - <BuildModes Count="1"> - <Item1 Name="Default" Default="True"/> - </BuildModes> - <PublishOptions> - <Version Value="2"/> - </PublishOptions> - <RunParams> - <local> - <FormatVersion Value="1"/> - </local> - </RunParams> - <Units Count="1"> - <Unit0> - <Filename Value="TArrayProjectSingle.lpr"/> - <IsPartOfProject Value="True"/> - </Unit0> - </Units> - </ProjectOptions> - <CompilerOptions> - <Version Value="11"/> - <PathDelim Value="\"/> - <Target> - <Filename Value="TArrayProjectSingle"/> - </Target> - <SearchPaths> - <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="..\..\src"/> - <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> - </SearchPaths> - <Parsing> - <SyntaxOptions> - <SyntaxMode Value="Delphi"/> - </SyntaxOptions> - </Parsing> - </CompilerOptions> - <Debugging> - <Exceptions Count="3"> - <Item1> - <Name Value="EAbort"/> - </Item1> - <Item2> - <Name Value="ECodetoolError"/> - </Item2> - <Item3> - <Name Value="EFOpenError"/> - </Item3> - </Exceptions> - </Debugging> -</CONFIG> diff --git a/components/sparta/generics/examples/TArraySingle/TArrayProjectSingle.lpr b/components/sparta/generics/examples/TArraySingle/TArrayProjectSingle.lpr deleted file mode 100644 index 49bec2cfca..0000000000 --- a/components/sparta/generics/examples/TArraySingle/TArrayProjectSingle.lpr +++ /dev/null @@ -1,111 +0,0 @@ -// Generic types for FreeSparta.com and FreePascal! -// Original version by keeper89.blogspot.com, 2011 -// FPC version by Maciej Izak (hnb), 2014 - -program TArrayProjectSingle; - -{$MODE DELPHI} -{$APPTYPE CONSOLE} - -uses - SysUtils, Math, Types, Generics.Collections, Generics.Defaults; - -function CompareIntReverse(constref Left, Right: Integer): Integer; -begin - Result := TCompare.Integer(Right, Left); -end; - -type - TForCompare = class - public - function CompareIntReverseMethod(constref Left, Right: Integer): Integer; - end; - -function TForCompare.CompareIntReverseMethod(constref Left, Right: Integer): Integer; -begin - Result := TCompare.Integer(Right, Left); -end; - -procedure PrintMatrix(A: TIntegerDynArray); -var - item: Integer; -begin - for item in A do - Write(item, ' '); - Writeln; Writeln; -end; - -var - A: TIntegerDynArray; - FoundIndex: PtrInt; - ForCompareObj: TForCompare; -begin - WriteLn('Working with TArray - one-dimensional integer array'); - WriteLn; - - // Fill a one-dimensional array of integers by random numbers [1 .. 10] - A := TIntegerDynArray.Create(1, 6, 3, 2, 9); - - // Print out what happened - Writeln('The original array:'); - PrintMatrix(A); - - // Sort ascending without comparator - TArrayHelper<Integer>.Sort(A); - Writeln('Ascending Sort without parameters:'); - PrintMatrix(A); - - // ! FPC don't support anonymous methods yet - // Sort descending, the comparator is constructed - // using an anonymous method - //TArray.Sort<Integer>(A, TComparer<Integer>.Construct( - // function (const Left, Right: Integer): Integer - // begin - // Result := Math.CompareValue(Right, Left) - // end)); - - // Sort descending, the comparator is constructed - // using an method - TArrayHelper<Integer>.Sort(A, TComparer<Integer>.Construct( - ForCompareObj.CompareIntReverseMethod)); - Writeln('Descending by TComparer<Integer>.Construct(ForCompareObj.Method):'); - PrintMatrix(A); - - // Again sort ascending by using defaul - TArrayHelper<Integer>.Sort(A, TComparer<Integer>.Default); - Writeln('Ascending by TComparer<Integer>.Default:'); - PrintMatrix(A); - - // Again descending using own comparator function - TArrayHelper<Integer>.Sort(A, TComparer<Integer>.Construct(CompareIntReverse)); - Writeln('Descending by TComparer<Integer>.Construct(CompareIntReverse):'); - PrintMatrix(A); - - // Searches for a nonexistent element - Writeln('BinarySearch nonexistent element'); - if TArrayHelper<Integer>.BinarySearch(A, 5, FoundIndex) then - Writeln('5 is found, its index ', FoundIndex) - else - Writeln('5 not found!'); - Writeln; - - // Search for an existing item with default comparer - Writeln('BinarySearch for an existing item '); - if TArrayHelper<Integer>.BinarySearch(A, 6, FoundIndex) then - Writeln('6 is found, its index ', FoundIndex) - else - Writeln('6 not found!'); - Writeln; - - // Search for an existing item with custom comparer - Writeln('BinarySearch for an existing item with custom comparer'); - if TArrayHelper<Integer>.BinarySearch(A, 6, FoundIndex, - TComparer<Integer>.Construct(CompareIntReverse)) then - Writeln('6 is found, its index ', FoundIndex) - else - Writeln('6 not found!'); - Writeln; - - Readln; -end. - diff --git a/components/sparta/generics/examples/TComparer/TComparerProject.lpi b/components/sparta/generics/examples/TComparer/TComparerProject.lpi deleted file mode 100644 index 431fce72d6..0000000000 --- a/components/sparta/generics/examples/TComparer/TComparerProject.lpi +++ /dev/null @@ -1,66 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<CONFIG> - <ProjectOptions> - <Version Value="9"/> - <PathDelim Value="\"/> - <General> - <Flags> - <MainUnitHasCreateFormStatements Value="False"/> - <MainUnitHasTitleStatement Value="False"/> - </Flags> - <SessionStorage Value="InProjectDir"/> - <MainUnit Value="0"/> - <Title Value="TComparerProject"/> - <UseAppBundle Value="False"/> - <ResourceType Value="res"/> - </General> - <i18n> - <EnableI18N LFM="False"/> - </i18n> - <VersionInfo> - <StringTable ProductVersion=""/> - </VersionInfo> - <BuildModes Count="1"> - <Item1 Name="Default" Default="True"/> - </BuildModes> - <PublishOptions> - <Version Value="2"/> - </PublishOptions> - <RunParams> - <local> - <FormatVersion Value="1"/> - </local> - </RunParams> - <Units Count="1"> - <Unit0> - <Filename Value="TComparerProject.lpr"/> - <IsPartOfProject Value="True"/> - </Unit0> - </Units> - </ProjectOptions> - <CompilerOptions> - <Version Value="11"/> - <PathDelim Value="\"/> - <Target> - <Filename Value="TComparerProject"/> - </Target> - <SearchPaths> - <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="..\..\src"/> - <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> - </SearchPaths> - </CompilerOptions> - <Debugging> - <Exceptions Count="3"> - <Item1> - <Name Value="EAbort"/> - </Item1> - <Item2> - <Name Value="ECodetoolError"/> - </Item2> - <Item3> - <Name Value="EFOpenError"/> - </Item3> - </Exceptions> - </Debugging> -</CONFIG> diff --git a/components/sparta/generics/examples/TComparer/TComparerProject.lpr b/components/sparta/generics/examples/TComparer/TComparerProject.lpr deleted file mode 100644 index b7c12823a0..0000000000 --- a/components/sparta/generics/examples/TComparer/TComparerProject.lpr +++ /dev/null @@ -1,124 +0,0 @@ -// Generic types for FreeSparta.com and FreePascal! -// by Maciej Izak (hnb), 2014 - -program TComparerProject; - -{$MODE DELPHI} -{$APPTYPE CONSOLE} - -uses - SysUtils, Generics.Collections, Generics.Defaults; - -type - - { TCustomer } - - TCustomer = record - private - FName: string; - FMoney: Currency; - public - constructor Create(const Name: string; Money: Currency); - property Name: string read FName write FName; - property Money: Currency read FMoney write FMoney; - function ToString: string; - end; - - TCustomerComparer = class(TComparer<TCustomer>) - function Compare(constref Left, Right: TCustomer): Integer; override; - end; - -{ TCustomer } - -constructor TCustomer.Create(const Name: string; Money: Currency); -begin - FName := Name; - FMoney := Money; -end; - -function TCustomer.ToString: string; -begin - Result := Format('Name: %s >>> Money: %m', [Name, Money]); -end; - -// Ascending -function TCustomerComparer.Compare(constref Left, Right: TCustomer): Integer; -begin - Result := TCompare.&String(Left.Name, Right.Name); - if Result = 0 then - Result := TCompare.Currency(Left.Money, Right.Money); -end; - -// Descending -function CustomerCompare(constref Left, Right: TCustomer): Integer; -begin - Result := TCompare.&String(Right.Name, Left.Name); - if Result = 0 then - Result := TCompare.Currency(Right.Money, Left.Money); -end; - -var - CustomersArray: TArray<TCustomer>; - CustomersList: TList<TCustomer>; - Comparer: TCustomerComparer; - Customer: TCustomer; -begin - CustomersArray := TArray<TCustomer>.Create( - TCustomer.Create('Derp', 2000), - TCustomer.Create('Sheikh', 2000000000), - TCustomer.Create('Derp', 1000), - TCustomer.Create('Bill Gates', 1000000000)); - - Comparer := TCustomerComparer.Create; - Comparer._AddRef; - - // create TList with custom comparer - CustomersList := TList<TCustomer>.Create(Comparer); - CustomersList.AddRange(CustomersArray); - - WriteLn('CustomersList before sort:'); - for Customer in CustomersList do - WriteLn(Customer.ToString); - WriteLn; - - // default sort - CustomersList.Sort; // will use TCustomerComparer (passed in the constructor) - WriteLn('CustomersList after ascending sort (default with interface from constructor):'); - for Customer in CustomersList do - WriteLn(Customer.ToString); - WriteLn; - - // construct with simple function - CustomersList.Sort(TComparer<TCustomer>.Construct(CustomerCompare)); - WriteLn('CustomersList after descending sort (by using construct with function)'); - WriteLn('CustomersList.Sort(TComparer<TCustomer>.Construct(CustomerCompare)):'); - for Customer in CustomersList do - WriteLn(Customer.ToString); - WriteLn; - - // construct with method - CustomersList.Sort(TComparer<TCustomer>.Construct(Comparer.Compare)); - WriteLn('CustomersList after ascending sort (by using construct with method)'); - WriteLn('CustomersList.Sort(TComparer<TCustomer>.Construct(Comparer.Compare)):'); - for Customer in CustomersList do - WriteLn(Customer.ToString); - WriteLn; - - WriteLn('CustomersArray before sort:'); - for Customer in CustomersArray do - WriteLn(Customer.ToString); - WriteLn; - - // sort with interface - TArrayHelper<TCustomer>.Sort(CustomersArray, TCustomerComparer.Create); - WriteLn('CustomersArray after ascending sort (by using interfese - no construct)'); - WriteLn('TArrayHelper<TCustomer>.Sort(CustomersArray, TCustomerComparer.Create):'); - for Customer in CustomersArray do - WriteLn(Customer.ToString); - WriteLn; - - CustomersList.Free; - Comparer._Release; - ReadLn; -end. - diff --git a/components/sparta/generics/examples/THashMap/THashMapProject.lpi b/components/sparta/generics/examples/THashMap/THashMapProject.lpi deleted file mode 100644 index e430b64ba2..0000000000 --- a/components/sparta/generics/examples/THashMap/THashMapProject.lpi +++ /dev/null @@ -1,71 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<CONFIG> - <ProjectOptions> - <Version Value="9"/> - <PathDelim Value="\"/> - <General> - <Flags> - <MainUnitHasCreateFormStatements Value="False"/> - <MainUnitHasTitleStatement Value="False"/> - </Flags> - <SessionStorage Value="InProjectDir"/> - <MainUnit Value="0"/> - <Title Value="THashMapProject"/> - <UseAppBundle Value="False"/> - <ResourceType Value="res"/> - </General> - <i18n> - <EnableI18N LFM="False"/> - </i18n> - <VersionInfo> - <StringTable ProductVersion=""/> - </VersionInfo> - <BuildModes Count="1"> - <Item1 Name="Default" Default="True"/> - </BuildModes> - <PublishOptions> - <Version Value="2"/> - </PublishOptions> - <RunParams> - <local> - <FormatVersion Value="1"/> - </local> - </RunParams> - <Units Count="1"> - <Unit0> - <Filename Value="THashMapProject.lpr"/> - <IsPartOfProject Value="True"/> - </Unit0> - </Units> - </ProjectOptions> - <CompilerOptions> - <Version Value="11"/> - <PathDelim Value="\"/> - <Target> - <Filename Value="THashMapProject"/> - </Target> - <SearchPaths> - <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="..\..\src"/> - <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> - </SearchPaths> - <Parsing> - <SyntaxOptions> - <SyntaxMode Value="Delphi"/> - </SyntaxOptions> - </Parsing> - </CompilerOptions> - <Debugging> - <Exceptions Count="3"> - <Item1> - <Name Value="EAbort"/> - </Item1> - <Item2> - <Name Value="ECodetoolError"/> - </Item2> - <Item3> - <Name Value="EFOpenError"/> - </Item3> - </Exceptions> - </Debugging> -</CONFIG> diff --git a/components/sparta/generics/examples/THashMap/THashMapProject.lpr b/components/sparta/generics/examples/THashMap/THashMapProject.lpr deleted file mode 100644 index d9598cab9d..0000000000 --- a/components/sparta/generics/examples/THashMap/THashMapProject.lpr +++ /dev/null @@ -1,218 +0,0 @@ -// Generic types for FreeSparta.com and FreePascal! -// Original version by keeper89.blogspot.com, 2011 -// FPC version by Maciej Izak (hnb), 2014 - -program THashMapProject; - -{$MODE DELPHI} -{$APPTYPE CONSOLE} - -uses - SysUtils, Generics.Collections, Generics.Defaults; - -type - TSubscriberInfo = record - Name, SName: string; - class function Create(const Name, SName: string): TSubscriberInfo; static; - function ToString: string; - end; - - // Class containing handlers add / remove items in the dictionary - THashMapEventsHandler = class - public - class procedure OnKeyNotify(Sender: TObject; constref Item: string; - Action: TCollectionNotification); - class procedure OnValueNotify(Sender: TObject; constref Item: TSubscriberInfo; - Action: TCollectionNotification); - end; - -class function TSubscriberInfo.Create(const Name, - SName: string): TSubscriberInfo; -begin - Result.Name := Name; - Result.SName := SName; -end; - -function TSubscriberInfo.ToString: string; -begin - Result := Format('%s %s', [Name, SName]); -end; - -// Function to generate the dictionary contents into a string -function PrintTelephoneDirectory( - TelephoneDirectory: THashMap<string, TSubscriberInfo>): string; -var - PhoneNumber: string; -begin - Result := Format('Content directory (%d):', [TelephoneDirectory.Count]); - - for PhoneNumber in TelephoneDirectory.Keys do - Result := Result + Format(LineEnding + '%s: %s', - [PhoneNumber, TelephoneDirectory[PhoneNumber].ToString]); -end; - -// Handlers add / remove items dictionary -class procedure THashMapEventsHandler.OnKeyNotify(Sender: TObject; - constref Item: string; Action: TCollectionNotification); -begin - case Action of - cnAdded: - Writeln(Format('OnKeyNotify! Phone %s added!', [Item])); - cnRemoved: - Writeln(Format('OnKeyNotify! Number %s deleted!', [Item])); - end; -end; - -class procedure THashMapEventsHandler.OnValueNotify(Sender: TObject; - constref Item: TSubscriberInfo; Action: TCollectionNotification); -begin - case Action of - cnAdded: - Writeln(Format('OnValueNotify! Subscriber %s added!', [Item.ToString])); - cnRemoved: - Writeln(Format('OnValueNotify! Subscriber %s deleted!', [Item.ToString])); - end; -end; - -function CustomCompare(constref Left, Right: TPair<string, TSubscriberInfo>): Integer; -begin - // Comparable full first names, and then phones if necessary - Result := TCompare.&String(Left.Value.ToString, Right.Value.ToString); - if Result = 0 then - Result := TCompare.&String(Left.Key, Right.Key); -end; - -var - // Declare the "dictionary" - // key is the telephone number which will be possible - // to determine information about the owner - TelephoneDirectory: THashMap<string, TSubscriberInfo>; - TTelephoneArray: array of TPair<string, TSubscriberInfo>; - TTelephoneArrayItem: TPair<string, TSubscriberInfo>; - PhoneNumber: string; - Subscriber: TSubscriberInfo; -begin - WriteLn('Working with THashMap - phonebook'); - WriteLn; - - // create a directory - // Constructor has several overloaded options which will - // enable the capacity of the container, a comparator for values - // or the initial data - we use the easiest option - TelephoneDirectory := THashMap<string, TSubscriberInfo>.Create; - - // --------------------------------------------------- - // 1) Adding items to dictionary - - // Add new users to the phonebook - TelephoneDirectory.Add('9201111111', TSubscriberInfo.Create('Arnold', 'Schwarzenegger')); - TelephoneDirectory.Add('9202222222', TSubscriberInfo.Create('Jessica', 'Alba')); - TelephoneDirectory.Add('9203333333', TSubscriberInfo.Create('Brad', 'Pitt')); - TelephoneDirectory.Add('9204444444', TSubscriberInfo.Create('Brad', 'Pitt')); - TelephoneDirectory.Add('9205555555', TSubscriberInfo.Create('Sandra', 'Bullock')); - // Adding a new subscriber if number already exist - TelephoneDirectory.AddOrSetValue('9204444444', - TSubscriberInfo.Create('Angelina', 'Jolie')); - // Print list - Writeln(PrintTelephoneDirectory(TelephoneDirectory)); - - // --------------------------------------------------- - // 2) Working with the elements - - // Set the "capacity" of the dictionary according to the current number of elements - TelephoneDirectory.TrimExcess; - // Is there a key? - ContainsKey - if TelephoneDirectory.ContainsKey('9205555555') then - Writeln('Phone 9205555555 registered!'); - // Is there a subscriber? - ContainsValue - Subscriber := TSubscriberInfo.Create('Sandra', 'Bullock'); - if TelephoneDirectory.ContainsValue(Subscriber) then - Writeln(Format('%s is in the directory!', [Subscriber.ToString])); - // Try to get information via telephone. TryGetValue - if TelephoneDirectory.TryGetValue('9204444444', Subscriber) then - Writeln(Format('Number 9204444444 belongs to %s', [Subscriber.ToString])); - // Directly access by phone number - Writeln(Format('Phone 9201111111 subscribers: %s', [TelephoneDirectory['9201111111'].ToString])); - // Number of people in the directory - Writeln(Format('Total subscribers in the directory: %d', [TelephoneDirectory.Count])); - - // --------------------------------------------------- - // 3) Delete items - - // Schwarzenegger now will not be listed - TelephoneDirectory.Remove('9201111111'); - // Completely clear the list - TelephoneDirectory.Clear; - - // --------------------------------------------------- - // 4) Events add / remove values - // - // Events OnKeyNotify OnValueNotify are designed for "tracking" - // for adding / removing keys and values ​​respectively - TelephoneDirectory.OnKeyNotify := THashMapEventsHandler.OnKeyNotify; - TelephoneDirectory.OnValueNotify := THashMapEventsHandler.OnValueNotify; - - Writeln; - // Try events - TelephoneDirectory.Add('9201111111', TSubscriberInfo.Create('Arnold', 'Schwarzenegger')); - TelephoneDirectory.Add('9202222222', TSubscriberInfo.Create('Jessica', 'Alba')); - TelephoneDirectory['9202222222'] := TSubscriberInfo.Create('Monica', 'Bellucci'); - TelephoneDirectory.Clear; - WriteLn; - - TelephoneDirectory.Add('9201111111', TSubscriberInfo.Create('Monica', 'Bellucci')); - TelephoneDirectory.Add('9202222222', TSubscriberInfo.Create('Sylvester', 'Stallone')); - TelephoneDirectory.Add('9203333333', TSubscriberInfo.Create('Bruce', 'Willis')); - WriteLn; - - // Show keys (phones) - Writeln('Keys (phones):'); - for PhoneNumber in TelephoneDirectory.Keys do - Writeln(PhoneNumber); - Writeln; - - // Show values ​​(subscribers) - Writeln('Values (subscribers):'); - for Subscriber in TelephoneDirectory.Values do - Writeln(Subscriber.ToString); - Writeln; - - // All together now - Writeln('Subscribers list with phones:'); - for PhoneNumber in TelephoneDirectory.Keys do - Writeln(Format('%s: %s', - [PhoneNumber, TelephoneDirectory[PhoneNumber].ToString])); - Writeln; - - // In addition, we can "export" from the dictionary - // to TArray - // Sort the resulting array and display - TTelephoneArray := TelephoneDirectory.ToArray; - - // partial specializations not allowed - // same for anonymous methods - //TArray.Sort<TPair<string, TSubscriberInfo>>( - // TTelephoneArray, TComparer<TPair<string, TSubscriberInfo>>.Construct( - // function (const Left, Right: TPair<string, TSubscriberInfo>): Integer - // begin - // // Comparable full first names, and then phones if necessary - // Result := CompareStr(Left.Value.ToString, Right.Value.ToString); - // if Result = 0 then - // Result := CompareStr(Left.Key, Right.Key); - // end)); - - TArrayHelper<TelephoneDirectory.TDictionaryPair>.Sort( - TTelephoneArray, TComparer<TelephoneDirectory.TDictionaryPair>.Construct( - CustomCompare)); - // Print - Writeln('Sorted list of subscribers into TArray (by name, and eventually by phone):'); - for TTelephoneArrayItem in TTelephoneArray do - Writeln(Format('%s: %s', - [TTelephoneArrayItem.Value.ToString, TTelephoneArrayItem.Key])); - - Writeln; - FreeAndNil(TelephoneDirectory); - - Readln; -end. - diff --git a/components/sparta/generics/examples/THashMapCaseInsensitive/THashMapCaseInsensitive.lpi b/components/sparta/generics/examples/THashMapCaseInsensitive/THashMapCaseInsensitive.lpi deleted file mode 100644 index 78fdae9010..0000000000 --- a/components/sparta/generics/examples/THashMapCaseInsensitive/THashMapCaseInsensitive.lpi +++ /dev/null @@ -1,66 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<CONFIG> - <ProjectOptions> - <Version Value="9"/> - <PathDelim Value="\"/> - <General> - <Flags> - <MainUnitHasCreateFormStatements Value="False"/> - <MainUnitHasTitleStatement Value="False"/> - </Flags> - <SessionStorage Value="InProjectDir"/> - <MainUnit Value="0"/> - <Title Value="THashMapCaseInsensitive"/> - <UseAppBundle Value="False"/> - <ResourceType Value="res"/> - </General> - <i18n> - <EnableI18N LFM="False"/> - </i18n> - <VersionInfo> - <StringTable ProductVersion=""/> - </VersionInfo> - <BuildModes Count="1"> - <Item1 Name="Default" Default="True"/> - </BuildModes> - <PublishOptions> - <Version Value="2"/> - </PublishOptions> - <RunParams> - <local> - <FormatVersion Value="1"/> - </local> - </RunParams> - <Units Count="1"> - <Unit0> - <Filename Value="THashMapCaseInsensitive.lpr"/> - <IsPartOfProject Value="True"/> - </Unit0> - </Units> - </ProjectOptions> - <CompilerOptions> - <Version Value="11"/> - <PathDelim Value="\"/> - <Target> - <Filename Value="THashMapCaseInsensitive"/> - </Target> - <SearchPaths> - <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="..\..\src"/> - <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> - </SearchPaths> - </CompilerOptions> - <Debugging> - <Exceptions Count="3"> - <Item1> - <Name Value="EAbort"/> - </Item1> - <Item2> - <Name Value="ECodetoolError"/> - </Item2> - <Item3> - <Name Value="EFOpenError"/> - </Item3> - </Exceptions> - </Debugging> -</CONFIG> diff --git a/components/sparta/generics/examples/THashMapCaseInsensitive/THashMapCaseInsensitive.lpr b/components/sparta/generics/examples/THashMapCaseInsensitive/THashMapCaseInsensitive.lpr deleted file mode 100644 index 377bd69c19..0000000000 --- a/components/sparta/generics/examples/THashMapCaseInsensitive/THashMapCaseInsensitive.lpr +++ /dev/null @@ -1,55 +0,0 @@ -// Generic types for FreeSparta.com and FreePascal! -// by Maciej Izak (hnb), 2014 - -program THashMapCaseInsensitive; - -{$MODE DELPHI} -{$APPTYPE CONSOLE} - -uses - Generics.Collections, Generics.Defaults; - -var - StringMap: THashMap<String, TEmptyRecord>; - AnsiStringMap: THashMap<AnsiString, TEmptyRecord>; - UnicodeStringMap: THashMap<UnicodeString, TEmptyRecord>; - AdvancedHashMapWithBigLoadFactor: TCuckooD6<RawByteString, TEmptyRecord>; - k: String; -begin - WriteLn('Working with case insensitive THashMap'); - WriteLn; - // example constructors for different string types - StringMap := THashMap<String, TEmptyRecord>.Create(TIStringComparer.Ordinal); - StringMap.Free; - AnsiStringMap := THashMap<AnsiString, TEmptyRecord>.Create(TIAnsiStringComparer.Ordinal); - AnsiStringMap.Free; - UnicodeStringMap := THashMap<UnicodeString, TEmptyRecord>.Create(TIUnicodeStringComparer.Ordinal); - UnicodeStringMap.Free; - - // standard TI*Comparer is dedicated for MAX_HASHLIST_COUNT = 4 and lower. For example DArrayCuckoo where D = 6 - // we need to create extra specialized TGIStringComparer type - AdvancedHashMapWithBigLoadFactor := TCuckooD6<RawByteString, TEmptyRecord>.Create( - TGIStringComparer<RawByteString, TDelphiSixfoldHashFactory>.Ordinal); - AdvancedHashMapWithBigLoadFactor.Free; - - // ok lets start - // another way to create case insensitive hash map - StringMap := THashMap<String, TEmptyRecord>.Create(TGIStringComparer<String>.Ordinal); - - WriteLn('Add Cat and Dog'); - StringMap.Add('Cat', EmptyRecord); - StringMap.Add('Dog', EmptyRecord); - - // - WriteLn('Contains CAT = ', StringMap.ContainsKey('CAT')); - WriteLn('Contains dOG = ', StringMap.ContainsKey('dOG')); - WriteLn('Contains Fox = ', StringMap.ContainsKey('Fox')); - - WriteLn('Enumerate all keys :'); - for k in StringMap.Keys do - WriteLn(' > ', k); - - ReadLn; - StringMap.Free; -end. - diff --git a/components/sparta/generics/examples/THashMapExtendedEqualityComparer/THashMapExtendedEqualityComparer.lpi b/components/sparta/generics/examples/THashMapExtendedEqualityComparer/THashMapExtendedEqualityComparer.lpi deleted file mode 100644 index da3826c227..0000000000 --- a/components/sparta/generics/examples/THashMapExtendedEqualityComparer/THashMapExtendedEqualityComparer.lpi +++ /dev/null @@ -1,66 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<CONFIG> - <ProjectOptions> - <Version Value="9"/> - <PathDelim Value="\"/> - <General> - <Flags> - <MainUnitHasCreateFormStatements Value="False"/> - <MainUnitHasTitleStatement Value="False"/> - </Flags> - <SessionStorage Value="InProjectDir"/> - <MainUnit Value="0"/> - <Title Value="THashMapExtendedEqualityComparer"/> - <UseAppBundle Value="False"/> - <ResourceType Value="res"/> - </General> - <i18n> - <EnableI18N LFM="False"/> - </i18n> - <VersionInfo> - <StringTable ProductVersion=""/> - </VersionInfo> - <BuildModes Count="1"> - <Item1 Name="Default" Default="True"/> - </BuildModes> - <PublishOptions> - <Version Value="2"/> - </PublishOptions> - <RunParams> - <local> - <FormatVersion Value="1"/> - </local> - </RunParams> - <Units Count="1"> - <Unit0> - <Filename Value="THashMapExtendedEqualityComparer.lpr"/> - <IsPartOfProject Value="True"/> - </Unit0> - </Units> - </ProjectOptions> - <CompilerOptions> - <Version Value="11"/> - <PathDelim Value="\"/> - <Target> - <Filename Value="THashMapExtendedEqualityComparer"/> - </Target> - <SearchPaths> - <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="..\..\src"/> - <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> - </SearchPaths> - </CompilerOptions> - <Debugging> - <Exceptions Count="3"> - <Item1> - <Name Value="EAbort"/> - </Item1> - <Item2> - <Name Value="ECodetoolError"/> - </Item2> - <Item3> - <Name Value="EFOpenError"/> - </Item3> - </Exceptions> - </Debugging> -</CONFIG> diff --git a/components/sparta/generics/examples/THashMapExtendedEqualityComparer/THashMapExtendedEqualityComparer.lpr b/components/sparta/generics/examples/THashMapExtendedEqualityComparer/THashMapExtendedEqualityComparer.lpr deleted file mode 100644 index d3c9116c77..0000000000 --- a/components/sparta/generics/examples/THashMapExtendedEqualityComparer/THashMapExtendedEqualityComparer.lpr +++ /dev/null @@ -1,108 +0,0 @@ -// Generic types for FreeSparta.com and FreePascal! -// by Maciej Izak (hnb), 2014 - -program THashMapExtendedEqualityComparer; - -{$MODE DELPHI} -{$APPTYPE CONSOLE} - -uses - SysUtils, Generics.Collections, Generics.Defaults; - -type - - { TTaxPayer } - - TTaxPayer = record - TaxID: Integer; - Name: string; - - constructor Create(ATaxID: Integer; const AName: string); - function ToString: string; - end; - -constructor TTaxPayer.Create(ATaxID: Integer; const AName: string); -begin - TaxID := ATaxID; - Name := AName; -end; - -function TTaxPayer.ToString: string; -begin - Result := Format('TaxID = %-10d Name = %-17s', [TaxID, Name]); -end; - -function EqualityComparison(constref ALeft, ARight: TTaxPayer): Boolean; -begin - Result := ALeft.TaxID = ARight.TaxID; -end; - -procedure ExtendedHasher(constref AValue: TTaxPayer; AHashList: PUInt32); -begin - // don't work with TCuckooD6 map because default TCuckooD6 needs TDelphiSixfoldHashFactory - // and TDefaultHashFactory = TDelphiQuadrupleHashFactory - // (TDelphiQuadrupleHashFactory is compatible with TDelphiDoubleHashFactory and TDelphiHashFactory) - TDefaultHashFactory.GetHashList(@AValue.TaxID, SizeOf(Integer), AHashList); -end; - -var - map: THashMap<TTaxPayer, string>; // THashMap = TCuckooD4 - LTaxPayer: TTaxPayer; - LSansa: TTaxPayer; - LPair: TPair<TTaxPayer, string>; -begin - WriteLn('program of tax office - ExtendedEqualityComparer for THashMap'); - WriteLn; - - // to identify the taxpayer need only nip - map := THashMap<TTaxPayer, string>.Create( - TExtendedEqualityComparer<TTaxPayer>.Construct(EqualityComparison, ExtendedHasher)); - - map.Add(TTaxPayer.Create(1234567890, 'Joffrey Baratheon'), 'guilty'); - map.Add(TTaxPayer.Create(90, 'Little Finger'), 'swindler'); - map.Add(TTaxPayer.Create(667, 'John Snow'), 'delinquent tax'); - - // useless in this place but we can convert Keys to TArray<TKey> :) - WriteLn(Format('All taxpayers (count = %d)', [Length(map.Keys.ToArray)])); - for LTaxPayer in map.Keys do - WriteLn(' > ', LTaxPayer.ToString); - - LSansa := TTaxPayer.Create(667, 'Sansa Stark'); - - // exist because custom EqualityComparison and ExtendedHasher - WriteLn; - WriteLn(LSansa.Name, ' exist in map = ', map.ContainsKey(LSansa)); - WriteLn; - - // - WriteLn('All taxpayers'); - for LPair in map do - WriteLn(' > ', LPair.Key.ToString, ' is ', LPair.Value); - - // Add or set sansa? :) - WriteLn; - WriteLn(Format('AddOrSet(%s, ''innocent'')', [LSansa.ToString])); - map.AddOrSetValue(LSansa, 'innocent'); - WriteLn; - - // - WriteLn('All taxpayers'); - for LPair in map do - WriteLn(' > ', LPair.Key.ToString, ' is ', LPair.Value); - - // Add or set sansa? :) - WriteLn; - LSansa.TaxID := 668; - WriteLn(Format('AddOrSet(%s, ''innocent'')', [LSansa.ToString])); - map.AddOrSetValue(LSansa, 'innocent'); - WriteLn; - - // - WriteLn('All taxpayers'); - for LPair in map do - WriteLn(' > ', LPair.Key.ToString, ' is ', LPair.Value); - - ReadLn; - map.Free; -end. - diff --git a/components/sparta/generics/examples/TObjectList/TObjectListProject.lpi b/components/sparta/generics/examples/TObjectList/TObjectListProject.lpi deleted file mode 100644 index ac0b8be424..0000000000 --- a/components/sparta/generics/examples/TObjectList/TObjectListProject.lpi +++ /dev/null @@ -1,66 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<CONFIG> - <ProjectOptions> - <Version Value="9"/> - <PathDelim Value="\"/> - <General> - <Flags> - <MainUnitHasCreateFormStatements Value="False"/> - <MainUnitHasTitleStatement Value="False"/> - </Flags> - <SessionStorage Value="InProjectDir"/> - <MainUnit Value="0"/> - <Title Value="TObjectListProject"/> - <UseAppBundle Value="False"/> - <ResourceType Value="res"/> - </General> - <i18n> - <EnableI18N LFM="False"/> - </i18n> - <VersionInfo> - <StringTable ProductVersion=""/> - </VersionInfo> - <BuildModes Count="1"> - <Item1 Name="Default" Default="True"/> - </BuildModes> - <PublishOptions> - <Version Value="2"/> - </PublishOptions> - <RunParams> - <local> - <FormatVersion Value="1"/> - </local> - </RunParams> - <Units Count="1"> - <Unit0> - <Filename Value="TObjectListProject.lpr"/> - <IsPartOfProject Value="True"/> - </Unit0> - </Units> - </ProjectOptions> - <CompilerOptions> - <Version Value="11"/> - <PathDelim Value="\"/> - <Target> - <Filename Value="TObjectListProject"/> - </Target> - <SearchPaths> - <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="..\..\src"/> - <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> - </SearchPaths> - </CompilerOptions> - <Debugging> - <Exceptions Count="3"> - <Item1> - <Name Value="EAbort"/> - </Item1> - <Item2> - <Name Value="ECodetoolError"/> - </Item2> - <Item3> - <Name Value="EFOpenError"/> - </Item3> - </Exceptions> - </Debugging> -</CONFIG> diff --git a/components/sparta/generics/examples/TObjectList/TObjectListProject.lpr b/components/sparta/generics/examples/TObjectList/TObjectListProject.lpr deleted file mode 100644 index 179d88595e..0000000000 --- a/components/sparta/generics/examples/TObjectList/TObjectListProject.lpr +++ /dev/null @@ -1,194 +0,0 @@ -// Generic types for FreeSparta.com and FreePascal! -// Original version by keeper89.blogspot.com, 2011 -// FPC version by Maciej Izak (hnb), 2014 - -program TObjectListProject; - -{$MODE DELPHI} -{$APPTYPE CONSOLE} - -uses - SysUtils, Generics.Collections, Generics.Defaults, DateUtils; - -type - TPlayer = class - public - Name, Team: string; - BirthDay: TDateTime; - NTeamGoals: Byte; // Number of goals for the national team - constructor Create(const Name: string; BirthDay: TDateTime; - const Team: string; NTeamGoals: Byte = 0); - function ToString: string; - end; - - // Class containing handlers add / remove list items - TListEventsHandler = class - public - class procedure OnListChanged(Sender: TObject; constref Item: TPlayer; - Action: TCollectionNotification); - end; - - -constructor TPlayer.Create(const Name: string; BirthDay: TDateTime; - const Team: string; NTeamGoals: Byte); -begin - Self.Name := Name; - Self.BirthDay := BirthDay; - Self.Team := Team; - Self.NTeamGoals := NTeamGoals; -end; - -function TPlayer.ToString: string; -begin - Result := Format('%s - Age: %d Team: %s Goals: %d', - [Name, - DateUtils.YearsBetween(Date, BirthDay), - Team, NTeamGoals]) -end; - -// Function sort descending goals for the national team -function ComparePlayersByGoalsDecs(constref Player1, Player2: TPlayer): Integer; -begin - Result := TCompare.UInt8(Player2.NTeamGoals, Player1.NTeamGoals); -end; - -class procedure TListEventsHandler.OnListChanged(Sender: TObject; constref Item: TPlayer; - Action: TCollectionNotification); -var - Mes: string; -begin - // Unlike TDictionary we added Action = cnExtracted - case Action of - cnAdded: - Mes := 'added to the list!'; - cnRemoved: - Mes := 'removed from the list!'; - cnExtracted: - Mes := 'extracted from the list!'; - end; - Writeln(Format('Football player %s %s ', [Item.ToString, Mes])); -end; - -var - // Declare TObjectList as storage for TPlayer - PlayersList: TObjectList<TPlayer>; - Player: TPlayer; - FoundIndex: PtrInt; -begin - WriteLn('Working with TObjectList - football manager'); - WriteLn; - - PlayersList := TObjectList<TPlayer>.Create; - - // --------------------------------------------------- - // 1) Adding items - - PlayersList.Add( - TPlayer.Create('Zinedine Zidane', EncodeDate(1972, 06, 23), 'France', 31)); - PlayersList.Add( - TPlayer.Create('Raul', EncodeDate(1977, 06, 27), 'Spain', 44)); - PlayersList.Add( - TPlayer.Create('Ronaldo', EncodeDate(1976, 09, 22), 'Brazil', 62)); - // Adding the specified position - PlayersList.Insert(0, - TPlayer.Create('Luis Figo', EncodeDate(1972, 11, 4), 'Portugal', 33)); - // Add a few players through InsertRange (AddRange works similarly) - PlayersList.InsertRange(0, - [TPlayer.Create('David Beckham', EncodeDate(1975, 05, 2), 'England', 17), - TPlayer.Create('Alessandro Del Piero', EncodeDate(1974, 11, 9), 'Italy ', 27), - TPlayer.Create('Raul', EncodeDate(1977, 06, 27), 'Spain', 44)]); - Player := TPlayer.Create('Raul', EncodeDate(1977, 06, 27), 'Spain', 44); - PlayersList.Add(Player); - - - // --------------------------------------------------- - // 2) Access and check the items - - // Is there a player in the list - Contains - if PlayersList.Contains(Player) then - Writeln('Raul is in the list!'); - // Player index and count of items in the list - Writeln(Format('Raul is %d-th on the list of %d players.', - [PlayersList.IndexOf(Player) + 1, PlayersList.Count])); - // Index access - Writeln(Format('1st in the list: %s', [PlayersList[0].ToString])); - // The first player - Writeln(Format('1st in the list: %s', [PlayersList.First.ToString])); - // The last player - Writeln(Format('Last in the list: %s', [PlayersList.Last.ToString])); - // "Reverse" elements - PlayersList.Reverse; - Writeln('List items have been "reversed"'); - Writeln; - - - // --------------------------------------------------- - // 3) Moving and removing items - - // Changing places players in the list - PlayersList.Exchange(0, 1); - // Move back 1 player - PlayersList.Move(1, 0); - - // Removes the element at index - PlayersList.Delete(5); - // Or a number of elements starting at index - PlayersList.DeleteRange(5, 2); - // Remove the item from the list, if the item - // exists returns its index in the list - Writeln(Format('Removed %d-st player', [PlayersList.Remove(Player) + 1])); - - // Extract and return the item, if there is no Player in the list then - // Extract will return = nil, (anyway Raul is already removed via Remove) - Player := PlayersList.Extract(Player); - if Assigned(Player) then - Writeln(Format('Extracted: %s', [Player.ToString])); - - // Clear the list completely - PlayersList.Clear; - Writeln; - - // --------------------------------------------------- - // 4) Event OnNotify, sorting and searching - - PlayersList.OnNotify := TListEventsHandler.OnListChanged; - - PlayersList.Add( - TPlayer.Create('Zinedine Zidane', EncodeDate(1972, 06, 23), 'France', 31)); - PlayersList.Add( - TPlayer.Create('Raul', EncodeDate(1977, 06, 27), 'Spain', 44)); - PlayersList.Add( - TPlayer.Create('Ronaldo', EncodeDate(1976, 09, 22), 'Brazil', 62)); - PlayersList.AddRange( - [TPlayer.Create('David Beckham', EncodeDate(1975, 05, 2), 'England', 17), - TPlayer.Create('Alessandro Del Piero', EncodeDate(1974, 11, 9), 'Italy ', 27), - TPlayer.Create('Raul', EncodeDate(1977, 06, 27), 'Spain', 44)]); - - PlayersList.Remove(PlayersList.Last); - Player := PlayersList.Extract(PlayersList[0]); - - PlayersList.Sort(TComparer<TPlayer>.Construct(ComparePlayersByGoalsDecs)); - Writeln; - Writeln('Sorted list of players:'); - for Player in PlayersList do - Writeln(Player.ToString); - Writeln; - - // Find Ronaldo! - // TArray BinarySearch requires sorted list - // IndexOf does not require sorted list - // but BinarySearch is usually faster - Player := PlayersList[0]; - if PlayersList.BinarySearch(Player, FoundIndex, - TComparer<TPlayer>.Construct(ComparePlayersByGoalsDecs)) then - Writeln(Format('Ronaldo is in the sorted list at position %d', [FoundIndex + 1])); - - Writeln; - - // With the destruction of the list remove all elements - // OnNotify show it - FreeAndNil(PlayersList); - - Readln; -end. - diff --git a/components/sparta/generics/examples/TQueue/TQueueProject.lpi b/components/sparta/generics/examples/TQueue/TQueueProject.lpi deleted file mode 100644 index 3c415de782..0000000000 --- a/components/sparta/generics/examples/TQueue/TQueueProject.lpi +++ /dev/null @@ -1,66 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<CONFIG> - <ProjectOptions> - <Version Value="9"/> - <PathDelim Value="\"/> - <General> - <Flags> - <MainUnitHasCreateFormStatements Value="False"/> - <MainUnitHasTitleStatement Value="False"/> - </Flags> - <SessionStorage Value="InProjectDir"/> - <MainUnit Value="0"/> - <Title Value="TQueueProject"/> - <UseAppBundle Value="False"/> - <ResourceType Value="res"/> - </General> - <i18n> - <EnableI18N LFM="False"/> - </i18n> - <VersionInfo> - <StringTable ProductVersion=""/> - </VersionInfo> - <BuildModes Count="1"> - <Item1 Name="Default" Default="True"/> - </BuildModes> - <PublishOptions> - <Version Value="2"/> - </PublishOptions> - <RunParams> - <local> - <FormatVersion Value="1"/> - </local> - </RunParams> - <Units Count="1"> - <Unit0> - <Filename Value="TQueueProject.lpr"/> - <IsPartOfProject Value="True"/> - </Unit0> - </Units> - </ProjectOptions> - <CompilerOptions> - <Version Value="11"/> - <PathDelim Value="\"/> - <Target> - <Filename Value="TQueueProject"/> - </Target> - <SearchPaths> - <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="..\..\src"/> - <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> - </SearchPaths> - </CompilerOptions> - <Debugging> - <Exceptions Count="3"> - <Item1> - <Name Value="EAbort"/> - </Item1> - <Item2> - <Name Value="ECodetoolError"/> - </Item2> - <Item3> - <Name Value="EFOpenError"/> - </Item3> - </Exceptions> - </Debugging> -</CONFIG> diff --git a/components/sparta/generics/examples/TQueue/TQueueProject.lpr b/components/sparta/generics/examples/TQueue/TQueueProject.lpr deleted file mode 100644 index 87e51cd101..0000000000 --- a/components/sparta/generics/examples/TQueue/TQueueProject.lpr +++ /dev/null @@ -1,89 +0,0 @@ -// Generic types for FreeSparta.com and FreePascal! -// Original version by keeper89.blogspot.com, 2011 -// FPC version by Maciej Izak (hnb), 2014 - -program TQueueProject; - -{$MODE DELPHI} -{$APPTYPE CONSOLE} - -uses - SysUtils, Generics.Collections; - -type - // This is FreeSpaaarta! versions =) - TSpartaVersion = (svFreeSparta, svBasic, svStarter, svProfessional); - - TCustomer = record - strict private - const - SV_NAMES: array [TSpartaVersion] of string = - ('FreeSparta', 'Basic', 'Starter', 'Professional'); - public - var - SpartaVersion: TSpartaVersion; - class function Create(SpartaVersion: TSpartaVersion): TCustomer; static; - function ToString: string; - end; - -class function TCustomer.Create(SpartaVersion: TSpartaVersion): TCustomer; -begin - Result.SpartaVersion := SpartaVersion; -end; - -function TCustomer.ToString: string; -begin - Result := Format('Sparta %s', [SV_NAMES[SpartaVersion]]) -end; - -var - CustomerQueue: TQueue<TCustomer>; - Customer: TCustomer; -begin - WriteLn('Working with TQueue - buy FreeSparta.com'); - WriteLn; - - // "Create" turn in sales - CustomerQueue := TQueue<TCustomer>.Create; - - // Add a few people in the queue - // Enqueue - puts the item in the queue - CustomerQueue.Enqueue(TCustomer.Create(svFreeSparta)); - CustomerQueue.Enqueue(TCustomer.Create(svBasic)); - CustomerQueue.Enqueue(TCustomer.Create(svBasic)); - CustomerQueue.Enqueue(TCustomer.Create(svBasic)); - CustomerQueue.Enqueue(TCustomer.Create(svStarter)); - CustomerQueue.Enqueue(TCustomer.Create(svStarter)); - CustomerQueue.Enqueue(TCustomer.Create(svProfessional)); - CustomerQueue.Enqueue(TCustomer.Create(svProfessional)); - - // Part of customers served - // Dequeue - remove an element from the queue - // btw if TQueue is TObjectQueue also call Free for object - Customer := CustomerQueue.Dequeue; - Writeln(Format('Sold (Dequeue): %s', [Customer.ToString])); - // Extract - similar to Dequeue, but causes in OnNotify - // Action = cnExtracted instead cnRemoved - Customer := CustomerQueue.Extract; - Writeln(Format('Sold (Extract): %s', [Customer.ToString])); - - // For what came next buyer? - // Peek - returns the first element, but does not remove it from the queue - Writeln(Format('Serves customers come for %s', - [CustomerQueue.Peek.ToString])); - - // The remaining buyers - Writeln; - Writeln(Format('Buyers left: %d', [CustomerQueue.Count])); - for Customer in CustomerQueue do - Writeln(Customer.ToString); - - // We serve all - // Clear - clears the queue - CustomerQueue.Clear; - - FreeAndNil(CustomerQueue); - - Readln; -end. - diff --git a/components/sparta/generics/examples/TStack/TStackProject.lpi b/components/sparta/generics/examples/TStack/TStackProject.lpi deleted file mode 100644 index 805ef88ed7..0000000000 --- a/components/sparta/generics/examples/TStack/TStackProject.lpi +++ /dev/null @@ -1,66 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<CONFIG> - <ProjectOptions> - <Version Value="9"/> - <PathDelim Value="\"/> - <General> - <Flags> - <MainUnitHasCreateFormStatements Value="False"/> - <MainUnitHasTitleStatement Value="False"/> - </Flags> - <SessionStorage Value="InProjectDir"/> - <MainUnit Value="0"/> - <Title Value="TStackProject"/> - <UseAppBundle Value="False"/> - <ResourceType Value="res"/> - </General> - <i18n> - <EnableI18N LFM="False"/> - </i18n> - <VersionInfo> - <StringTable ProductVersion=""/> - </VersionInfo> - <BuildModes Count="1"> - <Item1 Name="Default" Default="True"/> - </BuildModes> - <PublishOptions> - <Version Value="2"/> - </PublishOptions> - <RunParams> - <local> - <FormatVersion Value="1"/> - </local> - </RunParams> - <Units Count="1"> - <Unit0> - <Filename Value="TStackProject.lpr"/> - <IsPartOfProject Value="True"/> - </Unit0> - </Units> - </ProjectOptions> - <CompilerOptions> - <Version Value="11"/> - <PathDelim Value="\"/> - <Target> - <Filename Value="TStackProject"/> - </Target> - <SearchPaths> - <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="..\..\src"/> - <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> - </SearchPaths> - </CompilerOptions> - <Debugging> - <Exceptions Count="3"> - <Item1> - <Name Value="EAbort"/> - </Item1> - <Item2> - <Name Value="ECodetoolError"/> - </Item2> - <Item3> - <Name Value="EFOpenError"/> - </Item3> - </Exceptions> - </Debugging> -</CONFIG> diff --git a/components/sparta/generics/examples/TStack/TStackProject.lpr b/components/sparta/generics/examples/TStack/TStackProject.lpr deleted file mode 100644 index a6ddad9b81..0000000000 --- a/components/sparta/generics/examples/TStack/TStackProject.lpr +++ /dev/null @@ -1,85 +0,0 @@ -// Generic types for FreeSparta.com and FreePascal! -// Original version by keeper89.blogspot.com, 2011 -// FPC version by Maciej Izak (hnb), 2014 -program TStackProject; - -{$MODE DELPHI} -{$APPTYPE CONSOLE} - -uses - SysUtils, - Generics.Collections; - -type - // We will cook pancakes, put them on a plate and take the last - TPancakeType = (ptMeat, ptCherry, ptCurds); - - TPancake = record - strict private - const - PANCAKE_TYPE_NAMES: array [TPancakeType] of string = - ('meat', 'cherry', 'curds'); - public - var - PancakeType: TPancakeType; - class function Create(PancakeType: TPancakeType): TPancake; static; - function ToString: string; - end; - -class function TPancake.Create(PancakeType: TPancakeType): TPancake; -begin - Result.PancakeType := PancakeType; -end; - -function TPancake.ToString: string; -begin - Result := Format('Pancake with %s', [PANCAKE_TYPE_NAMES[PancakeType]]) -end; - -var - PancakesPlate: TStack<TPancake>; - Pancake: TPancake; - -begin - WriteLn('Working with TStack - pancakes'); - WriteLn; - - // "Create" a plate of pancakes - PancakesPlate := TStack<TPancake>.Create; - - // Bake some pancakes - // Push - puts items on the stack - PancakesPlate.Push(TPancake.Create(ptMeat)); - PancakesPlate.Push(TPancake.Create(ptCherry)); - PancakesPlate.Push(TPancake.Create(ptCherry)); - PancakesPlate.Push(TPancake.Create(ptCurds)); - PancakesPlate.Push(TPancake.Create(ptMeat)); - - // Eating some pancakes - // Pop - removes an item from the stack - Pancake := PancakesPlate.Pop; - Writeln(Format('Ate a pancake (Pop): %s', [Pancake.ToString])); - // Extract - similar to Pop, but causes in OnNotify - // Action = cnExtracted instead of cnRemoved - Pancake := PancakesPlate.Extract; - Writeln(Format('Ate a pancake (Extract): %s', [Pancake.ToString])); - - // What is the last pancake? - // Peek - returns the last item, but does not remove it from the stack - Writeln(Format('Last pancake: %s', [PancakesPlate.Peek.ToString])); - - // Show the remaining pancakes - Writeln; - Writeln(Format('Total pancakes: %d', [PancakesPlate.Count])); - for Pancake in PancakesPlate do - Writeln(Pancake.ToString); - - // Eat up all - // Clear - clears the stack - PancakesPlate.Clear; - - FreeAndNil(PancakesPlate); - - Readln; -end. -