Четвертый Borland C++ и его окружение

         

Реквизиты и объекты окон реквизита


Ниже обсуждаются реквизиты и объекты окон реквизита. Функционально реквизиты аналогичны управляющим элементам - они используются для получения информации от пользователя или ее вывода.

Однако реквизиты реализуются по-другому. В отличие от большинства

других интерфейсных элементов, реквизиты не являются окнами: они

не имеют описателей окна, не получают событий и сообщений и не

базируются на TWindow. Реквизиты ограничиваются окном реквизита,

которое управляет их представлением, обрабатывает все сообщения и

т.д. Реквизит получает команды и указания от этого окна.



Родительские и дочерние интерфейсные элементы


В Windows-приложениях интерфейсные элементы (окна, блоки диалога и управляющие элементы) связаны между собой отношениями родитель-потомок. Два интерфейсных элемента являются связанными,

когда один из них является родительским окном, а другой дочерним.

Не путайте эти родительские взаимоотношения с наследованием или

владением экземпляров, которые являются отношениями между объектами. Дочернее окно не обязательно происходит из своего родительского окна или наследует его свойства.

Дочернее окно - это интерфейсный элемент, управляемый другим

интерфейсным элементом. Например, блоки списков управляются окном

или блоком диалога в котором они появляются. Они выводятся только

в случае вывода их родительских окон. И наоборот, блоки диалога

являются дочерними окнами, управляемыми порождающими их окнами.

При закрытии родительского окна, дочерние окна закрываются автоматически. Аналогично, при перемещении родительского окна, все

его дочерние окна перемещаются вместе с ним.



Все интерфейсные элементы (окна, блоки диалога и управляющие

элементы) могут выступать как родительские и как дочерние окна.



- S -


Segment сегмент exceeds 64K


Сообщение об ошибке утилиты TLINK

(сегмент превышает 64К)

Данная ошибка возникает, если определено слишком много дан-

ных для данного сегмента кода или данных, когда утилита TLINK

комбинирует сегменты с одним именем из разных исходных файлов.

Segment сегмент is in two groups: группа_1 and группа_2


Предупреждение утилиты TLINK

(указанный сегмент содержится в двух группах)

Компоновщик обнаружил конфликт в двух указанных группах.

Обычно это происходит только в программах на языке Ассемблера.

Это означает, что два модуля присваивают сегмент двум различным

группам.

Segment сегмент in two groups: группу_1 and группа_2


Предупреждение утилиты TLINK

(сегмент содержится в двух группах)

Компоновщик встретил конфликтное требование двух групп имен.

Обычно это происходит в программах на ассемблере. Это означает,

что два модуля присваивают сегмент двум различным группам.

Self relative fixup overflowed in module модуль


Предупреждение утилиты TLINK

(переполнение корректировок в модуле "модуль")

Это сообщение выводится в результате самоотносительной ссыл-

ки (обычно вызова) из одного физического сегмента в другой. Обыч-

но это происходит при использовании кода ассемблера, но может

возникать и при указании параметров именования сегмента компиля-

тора. При ссылке из одного сегмента кода на другой все нормально.

Однако ссылка на сегмент данных может означать ошибку.

Size of идентификатор unknown or zero

Сообщение об ошибке этапа компиляции

(Размер идентификатора неизвестен или нулевой)

Данный идентификатор использоваться в контексте, где нужен

размер. Без размера могут быть объявлены только признак (тег)

структуры (структура еще не определена), либо массив extern.

Ссылки на такие элементы (например, операцией sizeof) или обраще-

ние к ним через указатель к этому типу запрещены. Реорганизуйте

объявление таким образом, чтобы размер данного идентификатора был

известен.

sizeof may not be applied to a bit field






Сообщение об ошибке этапа компиляции

(операция sizeof неприменима к битовому полю)

Операция sizeof возвращает размер объекта данных в байтах и

неприменима к битовым полям.

sizeof may not be applied to a function



Сообщение об ошибке этапа компиляции

(операция sizeof неприменима к функции)

Операция sizeof применима только к объектам данных, а не к

функциям. Можно запросить размер указателя функции.

Size of the type is unknown or zero



Сообщение об ошибке этапа компиляции

(размер типа неизвестен или нулевой)

Данный тип использовался в контексте, где необходим размер.

Например, тег структуры может быть только объявлен (а структура

еще не определена). Тогда некоторые ссылки к ней (например, опе-

рацией sizeof) или обращение к ней через указатель недопустимы.

Реорганизуйте объявления данного типа таким образом, чтобы размер

этого типа был доступен.

идентификатор specifies multiple or duplicate access



Сообщение об ошибке этапа компиляции

(идентификатор задает многократный или дублирующийся доступ)

Базовый класс должен описываться как public или private, но

не то и другое одновременно. Спецификатор доступа не должен зада-

ваться для базового класса более одного раза.

Stack overflow



Сообщение об ошибке этапа выполнения

(переполнение стека)

По умолчанию размер стека для программ Borland C++ равен

4096 байт. Для большинства программ этого достаточно, однако

программы с рекурсивными функциями или большими объемами локаль-

ных данных могут переполнить стек. Данное сообщение выдается

только в том случае, когда включено средство контроля стека. При

получении этого сообщения вы можете перейти к большей модели па-

мяти, увеличить размер стека, либо уменьшить использование стека

вашей программой. Информацию о том, как изменить размер стека с

помощью глобальной переменной _stklen, см. в Главе 3, "Глобальные

переменные" в "Справочнике по библиотеке". Для уменьшения коли-

чества используемых функцией локальных данных можно поступить



так, как показано в приводимом ниже примере. Переменная buffer

объявлена как static и потому, в отличие от list, не расходует

стек.

void anyfunction( void )

{

static int buffer[ 2000 ]; /* размещается в сегменте

данных */

int list[ 2000 ]; /* размещается в стеке */

}

Объявление локальных переменных как static имеет два недостатка.

Теперь такая переменная занимает место, отводимое обычно

глобальным переменным и динамически распределяемой облас-

ти. (Чтобы заплатить Павлу, приходится грабить Петра).

Однако этот недостаток не самый главный.

Функция не может более являться реентерабельной. Это оз-

начает, что если функция должна вызываться рекурсивно или

асинхронно, и при этом важно, чтобы каждый вызов функции

работал со своей собственной копией переменной, то такая

переменная не может быть статической. Это связано с тем,

что при каждом вызове функции данная переменная будет за-

нимать ту же самую область памяти, вместо того, чтобы ей

распределялась всякий раз новая. Также возникает проблема

с разделением доступа к переменной, если функция содержит

вызов самой себя (рекурсивно), либо должна выполняться

одновременно сама с собой (асинхронно). Для большинства

программ DOS это не проблема. Если вы не пишете рекурсив-

ных функций и не работаете в мультизадачном режиме, то

вам не о чем беспокоиться. В противном случае приведенные

выше объяснения помогут вам разобраться, что к чему.

Statement missing ;



Сообщение об ошибке этапа компиляции

(в операторе отсутствует ;)

Компилятор встретил выражение с оператором без завершающей

точки с запятой.

Storage class класс памяти not allowed here



Сообщение об ошибке этапа компиляции

(класс памяти здесь не разрешен)

Данный класс памяти здесь не допускается. Возможно, заданы

два класса памяти (можно задать только 1).

String type not allowed with this operand



Сообщение об ошибке утилиты MAKE

(строковый тип в данном операторе недопустим)

Вы пытаетесь использовать операнд, который не допускается



для сравнения строковых типов. Допускаются операнды: ==, !=, <,

>, <= и >=.

Structure passed by value



Предупреждение этапа компиляции

(структура передана по значению)

Если выдача данного предупреждения разрешена, то оно будет

генерироваться всякий раз, когда структура передается в качестве

аргумента по значению. Распространенная ошибка состоит в том, что

при передаче структуры как аргумента программист опускает опера-

цию получения адреса &. Поскольку передача структуры по значению

не запрещена, то опустить данную операцию можно. Это предупрежде-

ние сообщает вам о нерациональности ваших действий.

Structure required on left side of . or .*



Сообщение об ошибке этапа компиляции

(в левой части операции . или .* требуется структура)

При вычислении левой части операции . или .* должна полу-

чаться структура. В данном случае это не так.

Structure size too large



Сообщение об ошибке этапа компиляции

(слишком большой размер структуры)

В исходном файле объявлена структура размером более 64К.

Style of function definition is now obsolete



Предупреждение этапа компиляции

(этот вид определения функции устарел)

В С++ старый стиль определения функции запрещен:

int func(p1, p2) int p1, p2; { /* ... */ }

Он также не допускается и многими другими компиляторами С++.

Subscripting missing ]



Сообщение об ошибке этапа компиляции

(В индексе отсутствует ])

Компилятор встретил выражение с индексом, в котором отсутс-

твует закрывающая квадратная скобка. Это может являться следстви-

ем отсутствия необходимой операции или наличия лишней, либо несо-

ответствия числа открывающих числу закрывающих круглых скобок.

Superfluous & with function

Предупреждение этапа компиляции

(избыточная операция & с функцией)

Операция адресации (&) с именем функции не требуется; любая

подобная операция отвергается.

Suspicious pointer conversion



Предупреждение этапа компиляции

(подозрительное преобразование указателя)

Компилятор встретил некоторое преобразование указателя, ко-



торое изменило тип, на который он указывает. Если это преобразо-

вание вам нужно, то для подавления данного предупреждения вос-

пользуйтесь явным приведением типа.

Switch selection expression must be of integral type



Сообщение об ошибке этапа компиляции

(выражение выбора в операторе switch должно быть целого ти-

па)

Задаваемое в круглых скобках выражение выбора оператора switch должно давать значение целого типа (char, short, int,

long, enum). Для того, чтобы выполнить данное требование, можно

воспользоваться явным приведением типов.

Switch statement missing (



Сообщение об ошибке этапа компиляции

(в операторе switch отсутствует ()

В операторе switch компилятор не смог обнаружить левой круг-

лой скобки после ключевого слова switch.

Switch statement missing )

Сообщение об ошибке этапа компиляции

(в операторе switch отсутствует ))

В операторе switch компилятор после выражения проверки не

смог обнаружить левой круглой скобки.

имя_файла(номер_строки): Syntax error



Сообщение об ошибке утилиты TLINK

(синтаксическая ошибка)

Компоновщик обнаружил в файле определения модуля синтакси-

ческую ошибку. Место ошибки указывается именем файла и номером

строки.

Назад | Содержание | Вперед


Считывание и запись базовых классов


В своем текущем программном коде вы можете считывать и записывать базовые классы непосредственно, например:

void Derived::write( opstream& out )

{

Base::write( out );

...

}

void *Derived::read( ipstream& in )

{

Base::read( in );

...

}

Этот метод продолжает работать, но не будет записывать в базовый класс никакого номера версии. Чтобы использовать все преимущества отслеживания версий, измените эти вызовы и используете

новые шаблоны функций, которые работают с версиями:

void Derived::Write( opstreams& out )

{

WriteBaseObject( (Base *)this, out );

...

}

void *Derived::Read( ipstream& in, uint32 ver )

{

ReadBaseObject( (Base *)this, out );

...

}

Важно привести указатель к базовому классу, иначе ваша программа может аварийно завершиться.



Сегментация для модели памяти compact


Сегментные регистры: Размер сегмента:

Младший ^ CS

адрес _TEXT класс 'CODE'

код до 64К

DS

_DATA класс 'DATA'

инициализированные данные

DGROUP до 64К

_BSS класс 'BSS'

не инициализирован.данные

SS Свободная

область

SP(TOS) памяти

^

стек до 64К

Начало SP

динамически До конца

распределя- памяти

емая область v

Свободная

Старший область

адрес v памяти



Сегментация для модели памяти Huge


Несколько

sfile

sfile A

sfile B

CS sfile Z

Сегментные регистры: Размер сегмента:

Младший ^

адрес sfile_TEXT класс 'CODE' до 64К

код каждый

sfile

Несколько

sfile

sfile_DATA класс 'DATA' до 64К

sfile A инициализированные данные каждый

DS sfile B sfile

sfile Z

SS Свободная

область

SP(TOS) памяти

^

стек До 64К

Начало SP

динамически До конца

распределя- памяти

емая область v

Свободная

Старший область

адрес v памяти

В следующей таблице сведены различные модели и их сравнение

друг с другом. Модели часто группируются по модели кода или данных на малые (64К) и большие (16М); эти группы соответственно отражены в столбцах и строках таблицы.

Модели tiny, small и compact относятся к малым моделям кода,

поскольку по умолчанию указатели кода являются ближними (near).

Аналогичным образом, модели compact, large huge относятся к большим моделями данных, поскольку по умолчанию указатели на данные

являются дальними (far).



Сегментация для модели памяти large


Несколько

sfile

sfile A

CS sfile B

sfile Z

Сегментные регистры: Размер сегмента:

Младший ^

адрес _TEXT класс 'CODE' до 64К

sfile код каждый

DS sfile

_DATA класс 'DATA'

инициализирован. данные

DGROUP до 64К

_BSS класс 'BSS'

не инициализирован.данные

SS Свободная

область

SP(TOS) памяти

^

стек до 64К

Начало SP

динамически До конца

распределя- памяти

емая область v

Свободная

Старший область

адрес v памяти

CS и DS указывают одновременно только на один sfile.



Сегментация для модели памяти medium


Сегментные регистры: Размер сегмента:

Младший ^

адрес _TEXT класс 'CODE' до 64К

sfile код каждый

DS,SS sfile

_DATA класс 'DATA'

Несколько инициализирован. данные

sfile

_BSS класс 'BSS'

CS sfile A не инициализирован.данные до 64К

sfile B

динамически распределяе-

sfile Z мая область памяти

v

DGROUP Свободная

область

SP(TOS) памяти

^

стек

Начало SP

дальняя

динамически До конца

распределя- памяти

емая область v

Свободная

Старший область

адрес v памяти

CS указывает одновременно только на один sfile.



Сегментация для модели памяти small


Сегментные регистры: Размер сегмента:

Младший ^ CS

адрес _TEXT класс 'CODE'

код до 64К

DS,SS

_DATA класс 'DATA'

инициализированные данные

_BSS класс 'BSS'

DGROUP не инициализирован.данные до 64К

динамически

распределя-

емая об-

ласть памя-

ти v

Свободная

область

SP(TOS) - памяти

^

стек

Начало SP

дальняя

динамически До конца

распределя- памяти

емая область v

Свободная

Старший область

адрес v памяти



Сегментация для модели памяти tiny


Сегментные регистры: Размер сегмента:

Младший ^ CS,DS,SS

адрес _TEXT класс 'CODE'

код

_DATA класс 'DATA'

инициализированные данные

_BSS класс 'BSS'

DGROUP не инициализирован.данные до 64К

динамически

распределя-

емая область v

Свободная

область

SP(TOS) памяти

^

Старший стек

адрес v Начало SP



Сегментация памяти


Память микропроцессора Intel 80x86 имеет сегментированную

архитектуру. Непосредственно можно адресоваться к 64К памяти сегменту. Процессор 80x86 отслеживает 4 различных сегмента: сегмент кода, сегмент данных, сегмент стека и дополнительный сегмент. В сегменте кода находятся машинные инструкции, а в дополнительном сегменте - дополнительные данные. Процессор 80x86 имеет 4

16-разрядных сегмента (по одному на сегмент) - CS, DS, SS и ES,

которые указывают на сегмент кода, данных, стека и дополнительный

сегмент соответственно. Сегмент может находиться в любом месте

памяти, но начинаться должен по адресу, кратному 10. Сегменты могут перекрываться. Например, все четыре сегмента могут начинаться

с одного адреса.

Стандартная запись адреса имеет форму "сегмент:смещение",

например, 2F84:0546. Начальный адрес сегмента всегда представляет

собой 20-битовое число, но так как сегментный регистр содержит

только 16 бит, нижние 4 бита полагаются равными 0. Это значит,

что сегменты могут начинаться только с тех адресов, у которых

последние 4 бита равны 0.



Сегментные адресные регистры


CS Сегментный регистр кода
DS Сегментный регистр данных
SS Указатель сегмента стека
ES Дополнительный регистр сегмента



Секция системной информации


В разделе системной информации файла регистрации показывается режим и версия Windows, под которой выполняется ваша программа. Показывается также следующее:

информация процессора:

наибольший свободный блок памяти;

общее пространство линейной памяти;

свободное пространство линейной памяти;

страницы свопинга файлов.



Шаблон TArrayAsVector (arrays.h)


Реализует массив объектов типа T, используя в качестве основы реализации вектор. Для управления памятью используется TStandardAllocator.



Шаблон TArrayAsVectorIterator (arrays.h)


Реализует объект итератора для перебора объектов TArrayAsVector. Элементы см. в TMArrayAsVectorIterator.



Шаблон TBagAsVector (bags.h)


Реализует множество объектов типа T, используя в качестве

основы реализации вектор. Для управления памятью используется

TStandardAllocator. Элементы описываются в TMBagAsVector.



Шаблон TBinarySearchTreeImp (binimp.h)


Реализует несбалансированное двоичное дерево. Класс T должен

иметь операции < и == и заданный по умолчанию конструктор.



Шаблон TBinarySearchTreeIteratorImp (binimp.h)


Реализует итератор, выполняющий перебор по всем объектам

TBinarySearchTreeImp.



Шаблон TCVectorImp (vectimp.h)


Реализует счетный вектор объектов типа T. Предполагается,

что T имеет операцию копирования и используемый по умолчанию

конструктор.



Шаблон TCVectorIteratorImp (vectimp.h)


Реализует итератор вектора, работающий с непосредственным

счетным вектором объектов типа T. Функции-элементы см. в TMCVectorIteratorImp.



Шаблон TDDAssociation (assoc.h)


Стандартная ассоциация (непосредственный ключ, непосредственное значение). Реализует ассоциацию, связывая непосредственный ключ K с непосредственным (прямым) значением L. Предполагается, что K имеет функцию-элемент HashValue, или что существует

глобальная функция со следующим прототипом:

unsigned HashValue( K & );

K должно также иметь допустимую операцию ==. Элементы см. в

TMDDAssociation.



Шаблон TDDAssociation (assoc.h)


Реализует управляемую ассоциацию, связывая косвенный ключ K

с косвенным значением L. Предполагается, что K имеет функцию-элемент HashValue, или что существует глобальная функция со следующим прототипом:

unsigned HashValue( K & );

K должно также иметь допустимую операцию ==. Класс A представляет администратор хранения, заданный пользователем.



Шаблон TDequeAsDoubleList (deques.h)


Реализует управляемую двунаправленную очередь косвенных объектов T, используя в качестве основы реализации двусвязанный список, а в качестве администратора памяти - TStandardAllocator.

Элементы см. в TMDequeAsDoubleList.



Шаблон TDequeAsDoubleListIterator (deques.h)


Для управляемой двунаправленной очереди на основе двусвязанного списка реализует итератор объектов.



Шаблон TDequeAsDoubleListIterator (deques.h)


Для управляемой двунаправленной очереди на основе двусвязанного списка реализует итератор объектов.



Шаблон TDequeAsVector (deques.h)


Реализует управляемую двунаправленную очередь объектов T,

используя в качестве основы реализации вектор. Для управления

памятью используется TStandardAllocator. Элементы см. в TMDequeAsVector.



Шаблон TDequeAsVectorIterator (deques.h)


Для управляемой двунаправленной очереди на основе вектора

реализует итератор объектов. Элементы см. в TMDequeAsVectorIterator.



Шаблон TDIAssociation (assoc.h)


Реализует ассоциацию, связывая непосредственный ключ K с непосредственным (прямым) значением L. Предполагается, что K имеет

функцию-элемент HashValue, или что существует глобальная функция

со следующим прототипом:

unsigned HashValue( K & );

K должно также иметь допустимую операцию ==. Элементы см. в

TMDIAssociation.



Шаблон TDictionary (dict.h)


Упрощенное имя для TIDictionaryAsHashTable. Функции-элементы

см. в TIDictionaryAsHashTable.



Шаблон TDictionaryAsHashTable (dict.h)


Используя в качестве основы хеш-таблицу и стандартное средство распределения TStandardAllocator, реализует словарь объектов T. Подразумевается, что T - это один из четырех ассоциативных типов, который имеет используемый по умолчанию конструктор и операцию ==. Функции-элементы см. в TMDictionaryAsHashTable.



Шаблон TDictionaryAsHashTableIterator (dict.h)


Реализует итератор, который выполняет перебор по объектам

TDictionaryAsHashTable, используя стандартное средство распределения памяти TStandardAllocator.



Шаблон TDictionaryIterator (dict.h)


Упрощенное имя для TDictionaryAsHashTableIterator. Функции-элементы см. в TDictionaryAsHashTableIterator.



Шаблон TDoubleListImp (dlistimp.h)


Реализует управляемый двусвязанный список объектов типа T,

используя для управления памятью TStandardAllocator. Предполагается, что T имеет операцию копирования и заданный по умолчанию конструктор.



Шаблон TDoubleListIteratorImp (dlistimp.h)


Реализует итератор двусвязанного списка. Этот итератор работает с непосредственными двунаправленными списками. Функции-элементы см. в TMDoubleListIteratorImp.



Шаблон THashTableImp (hashimp.h)


Используя заданный распределитель памяти TStandardAllocator,

реализует управляемую хеш-таблицу объектов типа T. Предполагается, что T имеет операцию копирования и заданный по умолчанию конструктор.



Шаблон THashTableIteratorImp (hashimp.h)


Реализует итератор для перебора контейнеров THashTableImp.

Функции-элементы см. в TMHashTableIteratorImp.



Шаблон TIArrayAsVector (arrays.h)


Реализует косвенный массив объектов типа T, используя в качестве основы реализации вектор. Для управления памятью используется TStandardAllocator. Элементы см. в TMIArrayAsVector.



Шаблон TIArrayAsVectorItetator (arrays.h)


Реализует объект итератора для перебора объектов TIArrayAsVector. Для управления памятью использует TSrandarsAllocator.

Элементы и операции см. в TMIArrayAsVectorIterator.



Шаблон TIBagAsVector (bags.h)


Реализует множество объектов типа T, используя в качестве

основы реализации вектор. Для управления памятью используется

TStandardAllocator. Элементы описываются в TMIBagAsVector.



Шаблон TIBagAsVectorIterator (bags.h)


Реализует итератор объекта для перебора объектов TIBagAsVector. Для управления памятью используется TStandardAllocator. Элементы описываются в TMBagAsVector. Элементы описываются в TMArrayAsVectorIterator.



Шаблон TIBinarySearchTreeImp (binimp.h)


Реализует косвенное несбалансированное двоичное дерево.

Класс T должен иметь операции < и == и заданный по умолчанию

конструктор.



Шаблон TIBinarySearchTreeIteratorImp (binimp.h)


Реализует итератор, выполняющий перебор по всем объектам

TIBinarySearchTreeImp.



Шаблон TICVectorImp (vectimp.h)


Реализует счетный вектор указателей на объекты типа T. Предполагается, что указатели всегда имеют операцию копирования, поэтому данный класс может работать с любым типом объектов.



Шаблон TICVectorIteratorImp (vectimp.h)


Реализует итератор вектора, работающий с косвенным счетным

вектором объектов типа T. Функции-элементы см. в TMIVectorIteratorImp.



Шаблон TIDAssociation (assoc.h)


Реализует ассоциацию, связывая косвенный ключ K с косвенным

значением L. Предполагается, что K имеет функцию-элемент HashValue, или что существует глобальная функция со следующим прототипом:

unsigned HashValue( K & );

K должно также иметь допустимую операцию ==. Элементы см. в

TMDIAssociation.

Constructor Строит объект, который связывает объект ключа с объектом значения.



Шаблон TIDequeAsDoubleList (deques.h)


Реализует косвенную двунаправленную очередь объектов T, используя в качестве основы реализации двусвязанный список. Элемента см. в TMDoubleListIteratorImp.



Шаблон TIDequeAsVector (deques.h)


Реализует двунаправленную очередь косвенных объектов T, используя в качестве основы реализации вектор. Элементы см. в TMIDequeAsVector.



Шаблон TIDictionaryAsHashTable (dict.h)


Используя в качестве основы хеш-таблицу и стандартное распределение TStandardAllocator, реализует косвенный словарь. Подразумевается, что T - это один из четырех ассоциативных типов.

Функции-элементы см. в TMIDictionaryAsHashTable.



Шаблон TIDictionaryAsHashTableIterator (dict.h)


Реализует итератор, который выполняет перебор по объектам

TIDictionaryAsHashTable, используя заданное пользователем средство распределения памяти. Функции-элементы см. в TMIDictionaryAsHashTable.



Шаблон TIDoubleListImp (dlistimp.h)


Реализует двусвязанный список указателей на объекты типа T,

используя для управления памятью TStandardAllocator. Обрабатывает

любые типы объектов.



Шаблон TIDoubleListIteratorImp (dlistimp.h)

Реализует итератор двусвязанного списка. Этот итератор работает с любыми косвенными двунаправленными списками. Функции-элементы см. в TMIDoubleListIteratorImp.



Шаблон TIHashTableImp (hashimp.h)


Используя стандартные распределитель памяти TStandardAllocator, реализует хеш-таблицу указателей на объекты типа T. Функции-элементы см. в TMIHashTableImp.



Шаблон TIHashTableIteratorImp (hashimp.h)


Используя системный распределитель памяти TStandardAllocator, реализует итератор объектов для перебора контейнеров TIHashTableImp. Функции-элементы см. TMIHashTableIteratorImp.



Шаблон TIIAssociation (assoc.h)


Реализует управляемую ассоциацию, связывая косвенный ключ K

с косвенным значением L. Предполагается, что K имеет функцию-элемент HashValue, или что существует глобальная функция со следующим прототипом:

unsigned HashValue( K & );

K должно также иметь допустимую операцию ==. Элементы см. в

TMIIAssociation.



Шаблон TIListImp (listimp.h)


Реализует список указателей на объекты типа T. Так как указатели всегда имеют операцию копирования, этот класс может обрабатывать любой тип объектов. Функции-элементы см. в TMListImp.



Шаблон TIListIteratorImp (listimp.h)


Реализует итератор списка, работающий с любым косвенным управляемым списком. Функции-элементы см. в TMListIteratorImp.



Шаблон TIQueueAsDoubleList (queues.h)


Реализует косвенную очередь объектов типа T, используя в качестве основы реализации двусвязанный список. Функции-элементы см. в TMIDequeueDoubleList.



Шаблон TIQueueAsVector (queues.h)


Реализует очередь из указателей на объекты типа T, используя

в качестве основы реализации вектор.



Шаблон TIQueueAsVectorIterator (queues.h)


Реализует итератор для косвенных очередей, построенных на

основе списка. Функции-элементы см. в TMDequeueAsVectorIterator.



Шаблон TISArrayAsVector (arrays.h)


Реализует косвенный отсортированный массив объектов типа T,

используя в качестве основы реализации вектор. Функции-элементы

см. в TMIArrayAsVector.



Шаблон TISArrayAsVectorItetator (arrays.h)


Реализует объект итератора для перебора объектов TISArrayAsVector. Элементы и операции см. в TMArrayAsVectorIterator.



Шаблон TISDoubleListImp (dlistimp.h)


Реализует отсортированный двусвязанный список указателей на

объекты типа T, используя для управления памятью TStandardAllocator. Обрабатывает любые типы объектов. Наследует функции-элементы

TMIDoubleListImp.



Шаблон TISDoubleListIteratorImp (dlistimp.h)


Реализует итератор двусвязанного списка. Этот итератор работает с любыми косвенными отсортированными двунаправленными списками. Функции-элементы см. в TMIDoubleListIteratorImp.



Шаблон TISetAsVector (sets.h)


Реализует очередь указателей на объекты типа T, используя в

качестве основы реализации вектор. Для управления памятью используется TStandsardAllocator. См. также функции-элементы в TMIBagAsVector.



Шаблон TISetAsVectorIterator (sets.h)


Реализует итератор для перебора объектов TISetAsVector.

Функции-элементы см. в TMIArrayAsVectorIterator.



Шаблон TISListImp (listimp.h)


Реализует отсортированный список указателей на объекты типа

T. Так как указатели всегда имеют операцию копирования, этот

класс может обрабатывать любой тип объектов. Функции-элементы см.

в TMISListImp.



Шаблон TIStackAsList (stacks.h)


Реализует управляемый стек указателей на объекты типа T, используя в качестве основы реализации список. Функции-элементы см.

в TMIStackAsVector.



Шаблон TIStackAsListIterator (stacks.h)


Реализует итератор для управляемых стеков, построенных на

основе вектора. Функции-элементы см. в TMIVectorIteratorImp.



Шаблон TIStackAsVector (stacks.h)


Реализует косвенный стек указателей на объекты типа T, используя в качестве основы реализации вектор. Функции-элементы см.

в TMIVectorIteratorImp.



Шаблон TIStackAsVectorIterator (stacks.h)


Реализует итератор для косвенных стеков, построенных на основе вектора. Функции-элементы см. в TMVectorIteratorImp.



Шаблон TISVectorImp (vectimp.h)


Реализует отсортированный вектор указателей на объекты типа

T. Предполагается, что указатели всегда имеют операцию копирования, поэтому данный класс может работать с любым типом объектов.



Шаблон TISVectorIteratorImp (vectimp.h)


Реализует итератор вектора, работающий с косвенным управляемым и отсортированным вектором объектов типа T. Функции-элементы

см. в TMIVectorIteratorImp.



Шаблон TIVectorImp (vectimp.h)


Реализует вектор указателей на объекты типа T. Указатели

всегда имеют операцию копирования, поэтому данный класс может работать с любым типом объектов. Функции-элементы могут работать с

TMIVectorImp.



Шаблон TIVectorIteratorImp (vectimp.h)


Реализует итератор вектора, работающий с косвенным управляемым вектором объектов типа T. Функции-элементы см. в TMIVectorIteratorImp.



Шаблон TListIteratorImp (listimp.h)


Реализует итератор списка, работающий с непосредственным

управляемым списком. Функции-элементы см. в TMListIteratorImp.



Шаблон TMArrayAsVectorIterator (arrays.h)


Реализует объект итератора для перебора объектов TMArrayAsVector.



Шаблон TMArrayVector (arrays.h)


Реализует управляемый массив объектов типа T, использующий в

качестве основы вектор. Для типа T требуется операция ==.



Шаблон TMBagAsVector (bags.h)


Реализует управляемое мультимножество объектов T, используя

в качестве основы реализации вектор. В отличие от множеств, мультимножества могут содержать дублируемые объекты.



Шаблон TMBagAsVectorIterator (bags.h)


Реализует итератор объекта для перебора объектов TMBagAsVector. Элементы см. в TMArrayAsVectorIterator.



Шаблон TMBagAsVectorIterator (bags.h)

Реализует итератор объекта для перебора объектов TBagAsVector. Для управления памятью используется TStandardAllocator. Элементы описываются в TMArrayAsVectorIterator.



Шаблон TMCVectorImp (vectimp.h)


Реализует управляемый счетный вектор объектов типа T. Предполагается, что T имеет операцию копирования и используемый по

умолчанию конструктор. Кроме перечисленных элементов данных они

также наследуются из TMVectorImp.



Шаблон TMCVectorIteratorImp (vectimp.h)


Реализует итератор вектора, работающий с непосредственным

управляемым и счетным вектором объектов типа T. Функции-элементы

см. в TMVectorIteratorImp.



Шаблон TMDAssociation (assoc.h)


Реализует управляемую ассоциацию, связывая непосредственный

ключ K с непосредственным (прямым) значением L. Предполагается,

что K имеет функцию-элемент HashValue, или что существует глобальная функция со следующим прототипом:

unsigned HashValue( K & );

K должно также иметь допустимую операцию ==. Класс A представляет администратор хранения, заданный пользователем.



Шаблон TMDequeAsDoubleList (deques.h)


Реализует управляемую двунаправленную очередь объектов T,

используя в качестве основы реализации двусвязанный список.



Шаблон TMDequeAsDoubleListIterator (deques.h)


Для управляемой двунаправленной очереди на основе двусвязанного списка реализует итератор объектов. Элементы см. в TMDoubleListIteratorImp.



Шаблон TMDequeAsVector (deques.h)


Реализует управляемую двунаправленную очередь объектов T,

используя в качестве основы реализации вектор.



Шаблон TMDequeAsVectorIterator (deques.h)


Для управляемой двунаправленной очереди на основе вектора

реализует итератор объектов.



Шаблон TMDictionaryAsHashTable (dict.h)


Используя в качестве основы хеш-таблицу и заданное пользователем распределение A реализует управляемый словарь. Подразумевается, что T - это один из четырех ассоциативных типов, который имеет используемый по умолчанию конструктор и операцию ==.



Шаблон TMDictionaryAsHashTableIterator (dict.h)


Реализует итератор, который выполняет перебор по объектам

TMDictionaryAsHashTable, используя заданный пользователем механизм распределения A.



Шаблон TMDoubleListElement (dlistimp.h)


Определяет узлы для двусвязанного списка TMDoubleListImp и TMIDoubleListImp.



Шаблон TMDoubleListImp (dlistimp.h)


Реализует управляемый двусвязанный список объектов типа T.

Предполагается, что T имеет операцию == и заданный по умолчанию

конструктор.



Шаблон TMDoubleListIteratorImp (dlistimp.h)


Реализует итератор двусвязанного списка объектов. Этот итератор работает с непосредственными двунаправленными списками. Для косвенных списков см. TMIDoubleListIteratorImp.



Шаблон TMIArrayAsVector (arrays.h)


Реализует управляемый косвенный массив объектов типа T, используя в качестве основы реализации вектор.



Шаблон TMIArrayAsVectorIterator (arrays.h)

Реализует объект итератора для перебора объектов TMIArrayAsVector. Базируется на TMVectorIteratorImp.



Шаблон TMIBagAsVector (bags.h)


Реализует множество управляемых объектов типа T, используя в

качестве основы реализации вектор.



Шаблон TMIBagAsVectorIterator (bags.h)


Реализует итератор объекта для перебора объектов TMIBagAsVector. Элементы описываются в TMArrayAsVectorIterator.



Шаблон TMICVectorImp (vectimp.h)


Реализует управляемый счетный вектор указателей на объекты

типа T. Предполагается, что указатели всегда имеют операцию копирования, поэтому данный класс может работать с любым типом объектов.



Шаблон TMICVectorIteratorImp (vectimp.h)


Реализует итератор вектора, работающий с косвенным управляемым и счетным вектором объектов типа T. Функции-элементы см. в

TMIVectorIteratorImp.



Шаблон TMIDAssociation (assoc.h)


Реализует управляемую ассоциацию, связывая косвенный ключ K

с косвенным значением L. Предполагается, что K имеет функцию-элемент HashValue, или что существует глобальная функция со следующим прототипом:

unsigned HashValue( K & );

K должно также иметь допустимую операцию ==. Класс A представляет администратор хранения, заданный пользователем.



Шаблон TMIDequeAsDoubleList (deques.h)


Реализует управляемую двунаправленную очередь косвенных объектов T, используя в качестве основы реализации двусвязанный список.