array, list: a + a1 a * 3

stack, queue: s += 3; q += 3
This commit is contained in:
miks1965 2017-02-17 12:03:32 +03:00
parent f75579bed5
commit ea1be89a80
4 changed files with 139 additions and 32 deletions

View file

@ -468,6 +468,9 @@ type
procedure Erase;
/// Переименовывает файл, давая ему имя newname
procedure Rename(newname: string);
///- f.Write(a,b,...)
/// Выводит значения a,b,... в двоичный файл
procedure Write(params vals: array of object);
end;
// Class for typed files
@ -501,9 +504,6 @@ type
function FileSize: int64;
/// Устанавливает текущую позицию файлового указателя в бестиповом файле на байт с номером n
procedure Seek(n: int64);
///- f.Write(a,b,...)
/// Выводит значения a,b,... в двоичный файл
procedure Write(params vals: array of object);
end;
//{{{doc: Начало секции интерфейса для документации }}}
@ -3232,6 +3232,18 @@ begin
Result := a.Contains(x);
end;
function operator*<T>(a: array of T; n: integer): array of T; extensionmethod;
begin
Result := new T[a.Length*n];
for var i:=0 to n-1 do
a.CopyTo(Result,a.Length*i);
end;
function operator*<T>(n: integer; a: array of T): array of T; extensionmethod;
begin
Result := a*n
end;
//------------------------------------------------------------------------------
// Операции для List<T>
//------------------------------------------------------------------------------
@ -3241,6 +3253,12 @@ begin
Result := a;
end;
function operator+<T>(a, b: List<T>): List<T>; extensionmethod;
begin
Result := new List<T>(a);
Result.AddRange(b);
end;
function operator+=<T>(a: List<T>; x: T): List<T>; extensionmethod;
begin
a.Add(x);
@ -5174,6 +5192,11 @@ begin
PABCSystem.Rename(Self, newname);
end;
procedure AbstractBinaryFile.Write(params vals: array of object);
begin
PABCSystem.Write(Self, vals);
end;
// -----------------------------------------------------
// TypedFile & BinaryFile methods
// -----------------------------------------------------
@ -5207,11 +5230,6 @@ begin
PABCSystem.Seek(Self, n);
end;
procedure BinaryFile.Write(params vals: array of object);
begin
PABCSystem.Write(Self, vals);
end;
// -----------------------------------------------------
// Eoln - Eof
// -----------------------------------------------------
@ -8582,17 +8600,6 @@ end;
function SliceListImpl<T>(Self: List<T>; from,step,count: integer): List<T>;
begin
CorrectCountForSlice(Self.Count,from,step,count);
{if step = 0 then
raise new ArgumentException(GetTranslation(PARAMETER_STEP_MUST_BE_NOT_EQUAL_0));
if (from < 0) or (from > Self.Count - 1) then
raise new ArgumentException(GetTranslation(PARAMETER_FROM_OUT_OF_RANGE));
var cnt := step > 0 ? Self.Count - from : from + 1;
var cntstep := (cnt-1) div abs(step) + 1;
if count > cntstep then
count := cntstep;}
Result := CreateSliceFromListInternal(Self,from,step,count);
end;

View file

@ -5,16 +5,55 @@ unit PABCExtensions;
uses PABCSystem;
/// Открывает типизированный файл и возвращает значение для инициализации файловой переменной
function OpenBinary<T>(fname: string): file of T;
begin
PABCSystem.Reset(Result, fname);
end;
/// Создаёт или обнуляет типизированный файл и возвращает значение для инициализации файловой переменной
function CreateBinary<T>(fname: string): file of T;
begin
PABCSystem.Rewrite(Result, fname);
end;
/// Открывает типизированный файл и возвращает значение для инициализации файловой переменной
function OpenFile<T>(fname: string): file of T;
begin
PABCSystem.Reset(Result, fname);
end;
/// Создаёт или обнуляет типизированный файл и возвращает значение для инициализации файловой переменной
function CreateFile<T>(fname: string): file of T;
begin
PABCSystem.Rewrite(Result, fname);
end;
/// Открывает типизированный файл целых и возвращает значение для инициализации файловой переменной
function OpenFileInteger(fname: string): file of integer;
begin
Result := OpenFile&<integer>(fname);
end;
/// Открывает типизированный файл вещественных и возвращает значение для инициализации файловой переменной
function OpenFileReal(fname: string): file of real;
begin
Result := OpenFile&<real>(fname);
end;
/// Создаёт или обнуляет типизированный файл целых и возвращает значение для инициализации файловой переменной
function CreateFileInteger(fname: string): file of integer;
begin
Result := CreateFile&<integer>(fname);
end;
/// Создаёт или обнуляет типизированный файл вещественных и возвращает значение для инициализации файловой переменной
function CreateFileReal(fname: string): file of real;
begin
Result := CreateFile&<real>(fname);
end;
/// Возвращает последовательность элементов открытого типизированного файла
function Elements<T>(Self: file of T): sequence of T; extensionmethod;
begin
while not Self.Eof do
@ -25,11 +64,13 @@ begin
end;
end;
/// Считывает и возвращает следующий элемент типизированного файла
function ReadElement<T>(Self: file of T): T; extensionmethod;
begin
Read(Self, Result);
end;
/// Открывает типизированный файл, возвращает последовательность элементов и закрывает его
function ReadElements<T>(fname: string): sequence of T;
begin
var f := OpenBinary&<T>(fname);
@ -41,11 +82,11 @@ begin
f.Close
end;
procedure Write<T>(Self: file of T; params vals: array of T); extensionmethod;
{procedure Write<T>(Self: file of T; params vals: array of T); extensionmethod;
begin
foreach var x in vals do
PABCSystem.Write(Self, x);
end;
end;}
var __initialized: boolean;

Binary file not shown.

View file

@ -468,6 +468,11 @@ type
procedure Erase;
/// Переименовывает файл, давая ему имя newname
procedure Rename(newname: string);
///- f.Write(a,b,...)
/// Выводит значения a,b,... в двоичный файл
procedure Write(params vals: array of object);
/// Устанавливает файловый указатель на начало файла
procedure Reset;
end;
// Class for typed files
@ -501,9 +506,6 @@ type
function FileSize: int64;
/// Устанавливает текущую позицию файлового указателя в бестиповом файле на байт с номером n
procedure Seek(n: int64);
///- f.Write(a,b,...)
/// Выводит значения a,b,... в двоичный файл
procedure Write(params vals: array of object);
end;
//{{{doc: Начало секции интерфейса для документации }}}
@ -1523,7 +1525,11 @@ procedure Sort<T>(l: List<T>; less: (T,T)->boolean);
/// Изменяет порядок элементов в динамическом массиве на противоположный
procedure Reverse<T>(a: array of T);
/// Изменяет порядок элементов на противоположный в диапазоне динамического массива длины length начиная с индекса index
procedure Reverse<T>(a: array of T; index,length: integer);
procedure Reverse<T>(a: array of T; index,count: integer);
/// Изменяет порядок элементов в списке на противоположный
procedure Reverse<T>(a: List<T>);
/// Изменяет порядок элементов на противоположный в диапазоне списка длины length начиная с индекса index
procedure Reverse<T>(a: List<T>; index,count: integer);
/// Перемешивает динамический массив случайным образом
procedure Shuffle<T>(a: array of T);
/// Перемешивает список случайным образом
@ -3247,18 +3253,21 @@ end;
//------------------------------------------------------------------------------
// Операции для List<T>
//------------------------------------------------------------------------------
///--
function operator+=<T>(a, b: List<T>): List<T>; extensionmethod;
begin
a.AddRange(b);
Result := a;
end;
///--
function operator+<T>(a, b: List<T>): List<T>; extensionmethod;
begin
Result := new List<T>(a);
Result.AddRange(b);
end;
///--
function operator+=<T>(a: List<T>; x: T): List<T>; extensionmethod;
begin
a.Add(x);
@ -3271,6 +3280,40 @@ begin
Result := Self.Contains(x);
end;
///--
function operator*<T>(a: List<T>; n: integer): List<T>; extensionmethod;
begin
Result := new List<T>();
for var i := 1 to n do
Result.AddRange(a);
end;
///--
function operator*<T>(n: integer; a: List<T>): List<T>; extensionmethod;
begin
Result := a*n;
end;
//------------------------------------------------------------------------------
// Операции для Stack<T>
//------------------------------------------------------------------------------
///--
function operator+=<T>(s: Stack<T>; x: T): Stack<T>; extensionmethod;
begin
s.Push(x);
Result := s;
end;
//------------------------------------------------------------------------------
// Операции для Queue<T>
//------------------------------------------------------------------------------
///--
function operator+=<T>(q: Queue<T>; x: T): Queue<T>; extensionmethod;
begin
q.Enqueue(x);
Result := q;
end;
//------------------------------------------------------------------------------
// Операции для HashSet<T>
//------------------------------------------------------------------------------
@ -5192,6 +5235,16 @@ begin
PABCSystem.Rename(Self, newname);
end;
procedure AbstractBinaryFile.Write(params vals: array of object);
begin
PABCSystem.Write(Self, vals);
end;
procedure AbstractBinaryFile.Reset;
begin
PABCSystem.Reset(Self);
end;
// -----------------------------------------------------
// TypedFile & BinaryFile methods
// -----------------------------------------------------
@ -5225,11 +5278,6 @@ begin
PABCSystem.Seek(Self, n);
end;
procedure BinaryFile.Write(params vals: array of object);
begin
PABCSystem.Write(Self, vals);
end;
// -----------------------------------------------------
// Eoln - Eof
// -----------------------------------------------------
@ -7072,11 +7120,22 @@ begin
System.Array.Reverse(a);
end;
procedure Reverse<T>(a: array of T; index,length: integer);
procedure Reverse<T>(a: array of T; index,count: integer);
begin
System.Array.Reverse(a,index,length);
System.Array.Reverse(a,index,count);
end;
procedure Reverse<T>(a: List<T>);
begin
a.Reverse
end;
procedure Reverse<T>(a: List<T>; index,count: integer);
begin
a.Reverse(index,count)
end;
procedure Shuffle<T>(a: array of T);
begin
var n := a.Length;