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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
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(A, TComparer.Construct(
- // function (const Left, Right: TIntegerDynArray): Integer
- // begin
- // Result := Right[0] - Left[0];
- // end));
- // Sort descending 1st column, with cutom comparer_1
- TArrayHelper.Sort(A, TComparer.Construct(
- CustomCompare_1));
- Writeln('Descending in column 1:');
- PrintMatrix(A);
-
- // Sort descending 1st column "cascade" -
- // If the line items are equal, compare neighboring
- TArrayHelper.Sort(A, TComparer.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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
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.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(A, TComparer.Construct(
- // function (const Left, Right: Integer): Integer
- // begin
- // Result := Math.CompareValue(Right, Left)
- // end));
-
- // Sort descending, the comparator is constructed
- // using an method
- TArrayHelper.Sort(A, TComparer.Construct(
- ForCompareObj.CompareIntReverseMethod));
- Writeln('Descending by TComparer.Construct(ForCompareObj.Method):');
- PrintMatrix(A);
-
- // Again sort ascending by using defaul
- TArrayHelper.Sort(A, TComparer.Default);
- Writeln('Ascending by TComparer.Default:');
- PrintMatrix(A);
-
- // Again descending using own comparator function
- TArrayHelper.Sort(A, TComparer.Construct(CompareIntReverse));
- Writeln('Descending by TComparer.Construct(CompareIntReverse):');
- PrintMatrix(A);
-
- // Searches for a nonexistent element
- Writeln('BinarySearch nonexistent element');
- if TArrayHelper.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.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.BinarySearch(A, 6, FoundIndex,
- TComparer.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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
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)
- 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;
- CustomersList: TList;
- Comparer: TCustomerComparer;
- Customer: TCustomer;
-begin
- CustomersArray := TArray.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.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.Construct(CustomerCompare));
- WriteLn('CustomersList after descending sort (by using construct with function)');
- WriteLn('CustomersList.Sort(TComparer.Construct(CustomerCompare)):');
- for Customer in CustomersList do
- WriteLn(Customer.ToString);
- WriteLn;
-
- // construct with method
- CustomersList.Sort(TComparer.Construct(Comparer.Compare));
- WriteLn('CustomersList after ascending sort (by using construct with method)');
- WriteLn('CustomersList.Sort(TComparer.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.Sort(CustomersArray, TCustomerComparer.Create);
- WriteLn('CustomersArray after ascending sort (by using interfese - no construct)');
- WriteLn('TArrayHelper.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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
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;
-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): 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;
- TTelephoneArray: array of TPair;
- TTelephoneArrayItem: TPair;
- 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.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>(
- // TTelephoneArray, TComparer>.Construct(
- // function (const Left, Right: TPair): 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.Sort(
- TTelephoneArray, TComparer.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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
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;
- AnsiStringMap: THashMap;
- UnicodeStringMap: THashMap;
- AdvancedHashMapWithBigLoadFactor: TCuckooD6;
- k: String;
-begin
- WriteLn('Working with case insensitive THashMap');
- WriteLn;
- // example constructors for different string types
- StringMap := THashMap.Create(TIStringComparer.Ordinal);
- StringMap.Free;
- AnsiStringMap := THashMap.Create(TIAnsiStringComparer.Ordinal);
- AnsiStringMap.Free;
- UnicodeStringMap := THashMap.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.Create(
- TGIStringComparer.Ordinal);
- AdvancedHashMapWithBigLoadFactor.Free;
-
- // ok lets start
- // another way to create case insensitive hash map
- StringMap := THashMap.Create(TGIStringComparer.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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
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; // THashMap = TCuckooD4
- LTaxPayer: TTaxPayer;
- LSansa: TTaxPayer;
- LPair: TPair;
-begin
- WriteLn('program of tax office - ExtendedEqualityComparer for THashMap');
- WriteLn;
-
- // to identify the taxpayer need only nip
- map := THashMap.Create(
- TExtendedEqualityComparer.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 :)
- 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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
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;
- Player: TPlayer;
- FoundIndex: PtrInt;
-begin
- WriteLn('Working with TObjectList - football manager');
- WriteLn;
-
- PlayersList := TObjectList.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.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.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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
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;
- Customer: TCustomer;
-begin
- WriteLn('Working with TQueue - buy FreeSparta.com');
- WriteLn;
-
- // "Create" turn in sales
- CustomerQueue := TQueue.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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
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;
- Pancake: TPancake;
-
-begin
- WriteLn('Working with TStack - pancakes');
- WriteLn;
-
- // "Create" a plate of pancakes
- PancakesPlate := TStack.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.
-