Программирование >>  Формирование пользовательского контейнера 

1 ... 40 41 42 [ 43 ] 44 45 46 ... 156


bool operator!=(Iter op2) { return ptr != op2.ptr;

bool operator<(Iter op2) { return ptr < op2.ptr;

bool operator<={Iter op2) { return ptr <= op2.ptr;

bool operator>{Iter op2) { return ptr > op2.ptr;

bool operator>={Iter op2) { return ptr >= op2.ptr;

Вычитает целое значение из Iter. Iter operator-{int n) (

ptr -= n;

return *this;

Прибавляет целое значение к Iter. Iter operator+(int n) {

ptr += n;

return *this;

Возвращает количество элементов между двумя итераторами Iter, int operator-(Iter<Т> &itr2) { return ptr - itr2.ptr;

Этот класс описывает элемент, который хранится



Il ъ информационном списке сбора мусора.

gnplate <class Т> class GCInfo { public:

unsigned refcount; текущий счетчик ссылок Т *memPtr; указатель на вьщеленную память

/* isArray равен true если memPtr указывает на размещенный массив. isArray равен false в противном случае. */

bool isArray; true, если указывает на массив

/* Если memPtr указывает на размещенный

массив, то arraySize содержит размер массива */ unsigned arraySize; размер массива

Здесь mPtr указывает на выделенную память.

Если это массив, то size задает

размер массива.

GCInfo(Т *mPtr, unsigned size=0) {

refcount = 1;

memPtr = mPtr;

if(size != 0) isArray = true;

else

isArray. = false; arraySize = size;

Перегрузка операции == позволяет сравнивать объекты GCInfo.

Это необходимо для класса list из библиотеки STL. template <class Т> bool operator==(const GCInfo<T> &obl, const GCInfo<T> &ob2) { return (obl.memPtr == ob2.memPtr);



Класс GCPtr реализует тип указателя, который применяется при сборе

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

Класс GCPtr должен применяться для указания на память,

которая выделена динамически с помощью операции new.

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

в параметре size задается размер массива.

tenplate <class Т, int size=0> class GCPtr {

gclist содержит список сбора мусора, static list<GCInfo<T> > gclist;

addr указывает на выделенную память,на которую этот указатель GCPtr в данный момент ссылается, Т *addr;

/* isArray равен true если этот указатель GCPtr указывает

на размещенный массив, isArray равен false

в противном случае. */ bool isArray; true, если указывает на массив

Если этот указатель GCPtr ссылается на размещенный массив, arraySize содержит размер массива, unsigned arraySize; размер массива

Переменные для поддержки многопоточности. unsigned tid; идентификатор потока static HANDLE hThrd; дескриптор потока static HANDLE hMutex; дескриптор мьютекса static int instcount; счетчик объектов GCPtr

Возвращает итератор для указателя на GClnfo в списке gclist. typename list<GCInfo<T> >::iterator findPtrInfo(T *ptr);

public:

Определяет тип iterator для GCPtr<T>. typedef Iter<T> GCiterator;



1 ... 40 41 42 [ 43 ] 44 45 46 ... 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика