Турбо Паскаль 6.0

       

TCollection Objects


+---------+ | TObject | +----+----+ +======+======+ | TCollection | +======+======+ +---------+---------+ | TSortedCollection | +---------+---------+ +---------+---------+ | TStringCollection | +---------+---------+ +----------+----------+ | TResourceCollection | +---------------------+

TCollection - это абстрактный тип для реализации любой коллекции элементов, включая другие объекты. TCollection это намного более общая концепция, чем обычные массив, множество или список. Размер объектов TCollection динамически устанавливается во время выполнения и TCollection - базовый тип для многих специализированных типов, таких как TSortedCollection, TStringCollection и TResourceCollection. В дополнение к методам добавления и удаления элементов TCollection представляет несколько итераторных программ, которые вызывают процедуру или функцию для каждого элемента коллекции.

Поля

Items Items: PItemList; Только чтение Указатель на массив указателей элементов. См. так же: тип TItemList

Count Count: Integer; Только чтение Текущее число элементов в коллекции, максимально MaxCollectionSize. См. так же: переменная MaxCollectionSize

Limit Limit: Integer; Только чтение Текущий распределенный размер (в элементах) списка Items. См. так же: Delta, TCollection.Init

Delta Delta: Integer; Только чтение Число элементов, на которое увеличивается список Items при заполнении. Если Delta - 0, коллекция не может расти выше размера, установленного в Limit.

Примечание: Увеличение размера коллекции достаточно дорого в смысле производительности. Чтобы минимизировать число раз когда это происходит, попытайтесь установить начальное Limit в такое количество, которое будет достаточно для всех элементов, которые Вы собираетесь коллекционировать, и установите Delta так, чтобы она позволяла расширение на приемлемое количество. См. так же: Limit, TCollection.Init

Методы

Init constructor Init(ALimit, ADelta: Integer); Создает коллекцию с Limit, установленным в ALimit и Delta, установленным в ADelta. Первоначальное число элементов будет ограничено ALimit, но коллекция может расширяться, увеличиваясь по ADelta до тех пор, пока будет достаточно памяти или пока число элементов не достигнет MaxCollectionSize. См. так же: TCollection.Limit, TCollection.Delta.


Load constructor Load(var S: TStream); Создает и загружает коллекцию из потока. TCollection.Load вызывает GetItem для каждого элемента коллекции. См. так же: TCollection.GetItem

Done destructor Done; virtual; Перекрывается: Часто Удаляет и освобождает все элементы коллекции, вызывая TCollection.FreeAll и устанавливая Limit в 0. См. так же: TCollection.FreeAll, TCollection.Init



At function At(Index: Integer) : Pointer; Возвращает указатель на элемент с индексом Index в коллекции. Этот метод позволяет Вам интерпретировать коллекцию как индексированный массив. Если индекс меньше 0 или больше или равно Count, вызывается метод Error с аргументом coIndexError и возвращается значение nil. См. так же: TCollection.IndexOf

AtDelete procedure AtDelete(Index: Integer); Удаляет элемент в позиции Index и перемещает следующие элементы на одну позицию вверх. Count уменьшается на 1, но память, распределенная под коллекцию (как задано в Limit) не сокращается. Если Index меньше 0 или больше или равно Count, вызывается метод Error с аргументом coIndexError. См. так же: TCollection.FreeItem, TCollection.Free, TCollection.Delete

AtInsert procedure AtInsert(Index: Integer; Item: Pointer); Вставляет Item в позицию Index и передвигает следующие элементы на одну позицию вниз. Если Index меньше 0 или больше Count, вызывается метод Error с аргументом coIndexError и новый Item не вставляется. Если Count равен Limit до вызова AtInsert, распределенный размер коллекции расширяется на Delta элементов, вызывая SetLimit. Если вызов SetLimit не может расширить коллекцию, вызывается метод Error с аргументом coOverflow и новый Item не вставляется. См. так же: TCollection.At, TCollection.AtPut

AtPut procedure AtPut(Index: Integer; Item: Pointer); Заменяет элемент в позиции Index элементом, заданным в Item. Если Index меньше 0 или больше или равно Count, вызывается метод Error с аргументом coIndexError. См. так же: TCollection.At, TCollection.AtInsert

Delete procedure Delete(Item: Pointer); Удаляет элемент Item из коллекции. Эквивалентно AtDelete(IndexOf(Item)). См. так же: TCollection.AtDelete, TCollection.DeleteAll



DeleteAll procedure DeleteAll; Удаляет все элементы из коллекции, устанавливая Count в 0. См. так же: TCollection.Delete, TCollection.AtDelete

Error procedure Error(Code, Info: Integer); virtual; Перекрывается: Иногда Вызывается, когда встречается ошибка коллекции. По умолчанию этот метод генерирует ошибку времени выполнения 212. См. так же: константы коллекции coXXXX

FirstThat function FirstThat(Test: Pointer) : Pointer; FirstThat применяет булевскую функцию, заданную указателем на функцию Test к каждому элементу коллекции до тех пор, пока test возвращает True. Результат - указатель на элемент, для которого Test возвращает True, или nil, если функция Test возвращает False для всех элементов. Test должна указывать на дальнюю локальную функцию, использующую только один параметр типа Pointer и возвращающую значение типа Boolean. Например

function Matches(Item: Pointer) : Boolean; far;

Функция Test не может быть глобальной функцией. Предполагая, что List типа TCollection, оператор

P := List.FirstThat(@Matches);

соответствует

I := 0; while (I < List.Count) and not Matches(List.At(I)) do Inc(I); if I < List.Count then P := List.At(I) else P := nil;

См. так же: TCollection.LastThat, TCollection.ForEach

ForEarch procedure ForEarch(Action: Pointer); ForEach применяет действие, определенное процедурой, на которую указывает Action, для каждого элемента коллекции. Action должен указывать на локальную дальнюю процедуру, использующую один параметр типа Pointer. Например

function PrintItem(Item: Pointer);

Процедура Action не может быть глобальной процедурой. Если List типа TCollection, оператор

List.ForEach(@PrintItem);

соответствует

for I := 0 to List.Count - 1 do PrintItem(List.At(I));

См. так же: TCollection.FirstThat, TCollection.LastThat

Free procedure Free(Item: Pointer); Удаляет и освобождает Item. Эквивалентно

FreeItem(Item); Delete(Item);

См. так же: TCollection.FreeItem, TCollection.Delete

FreeAll procedure FreeAll; Удаляет и освобождает все элементы коллекции.



См. так же: TCollection.DeleteAll

FreeItem procedure FreeItem(Item: Pointer); virtual; Перекрывается: Иногда Метод FreeItem должен освобождать Item. По умолчанию TCollection.FreeItem предполагает, что Item - это указатель на объект, порожденный от TObject и поэтому вызывает дестрактор Done:

if Item <> nil then dispopse(PObject(Item), Done);

FreeItem вызывается из Free и FreeAll, но никогда не должен вызываться прямо.

См. так же: TCollection.Free, TCollection.FreeAll

GetItem function TCollection.GetItem(var S: TStream): Pointer; virtual; Перекрывается: Иногда Вызывается из TCollection.Load для каждого элемента коллекции. Этот метод может быть перекрыт, но не должен вызываться напрямую. По умолчанию TCollection.GetItem предполагает, что элементы коллекции порождены от TObject и вызывает TString.Get для загрузки элемента:

GetItem := S.Get;

См. так же: TStream.Get, TCollection.Load, TCollection.Store

IndexOf functionIndexOf(Item: Pointer): Integer; virtual; Перекрывается: Никогда Возвращает индекс для Item. Преобразует операцию в TCollection.At. Если Item - не в коллекции, IndexOf возвращает -1.

См. так же: TCollection.At

Insert procedure Insert(Item: Pointer); virtual; Перекрывается: Никогда Вставляет Item в коллекцию, перестраивая другие индексы, если необходимо. По умолчанию вставка производится в конец коллекции вызовом AtInsert(Count, Item);

См. так же: TCollection.AtInsert;

LastThat function LastThat(Test: Pointer): Pointer; LastThat применяет булевскую функцию, заданную указателем на функцию Test, к каждому элементу коллекции в обратном порядке до тех пор, пока Test не вернет True. Результат - указатель на элемент, для которого Test возвращает True, или nil, если функция Test возвращает False для всех элементов. Test должен указывать на дальнюю локальную функцию, использующую один параметр типа Pointer и возвращающую типа Boolean, например

function Patches(Item: Pointer): Boolean; far;

Функция Test не может быть глобальной функцией. Если List типа TCollection, оператор



P := List.LastThat(@Matches);

соответствует

I := List.Count - 1; while (I >= 0) and Matches(List.At(I)) do Dec(I); if I >= 0 then P := List.At(I) else P := nil;

См. так же: TCollection.FirstThat, TCollection.ForEach;

Pack Procedure Pack; Удаляет все nil указатели в коллекции.

См. так же: TCollection.Delete, TCollection.DeleteAll

PutItem procedure PutItem(var S: TStream; Item: Pointer); virtual; Перекрывается: Иногда Вызывается из TCollection.Store для каждого элемента коллекции. Этот метод может быть перекрыт, но не должен вызываться прямо. По умолчанию TCollection.PutItem предполагает, что элементы коллекций порождаются от TObject и вызов TString.Put сохраняет элемент:

S.Put(Item);

См. так же: TCollection.GetItem, TCollection.Store, TCollection.Load

SetLimit procedure SetLimit(ALimit: Integer); virtual; Перекрывается: Редко Расширяет или сокращает коллекцию, изменяя распределенный размер в ALimit. Если ALimit меньше Count, он устанавливается в Count, и если ALimit больше MaxCollectionSize, он устанавливается в MaxCollectionSize. Кроме того, если ALimit отличается от текущего Limit, распределяется новый массив Items из Alimit элементов, старый массив Items копируется в новый массив и старый массив освобождается.

См.так же: TCollection.Limit, TCollection.Count, переменная MaxCollectionSize

Store procedure Store(var S: TStream); Сохраняет коллекцию и все ее элементы в потоке S. TCollection.Store вызывает TCollection.PutItem для каждого элемента коллекции.

См. так же: TCollection.PutItem






Содержание раздела







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий