array, list: a + a1 a * 3
stack, queue: s += 3; q += 3
This commit is contained in:
parent
f75579bed5
commit
ea1be89a80
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue