00001 /* 00002 * CntmLib - Подсчет ссылок, потоки, синхронизация, асинхронные процедуры, события 00003 * Copyright (c) 2005, Овсеевич Роман, CntmLib@mail.ru 00004 * _______________________________________________________________________________ 00005 * Разрешено свободное использование, копирование, распространение, изменение 00006 * (изменение сведений об авторских правах запрещено). Запрещена продажа и 00007 * включение всей библиотеки или ее частей в другие библиотеки. В сведениях об 00008 * авторских правах на программу (или сведениях о программе, об авторах, 00009 * использованных средствах разработки и т.д.) должна быть указана информация 00010 * о библиотеке CntmLib, ее авторе и, возможно, сайте или email'е. 00011 * Библиотека поставляется "как есть", без каких-либо гарантий со стороны автора. 00012 */ 00013 00014 #ifndef CNTM_AGGREGATEDBASE_H 00015 #define CNTM_AGGREGATEDBASE_H 00016 #include <Cntm/Exceptions/NullArgException.h> 00017 #include <Cntm/RefCount/IRefObject.h> 00018 00019 namespace Cntm 00020 { 00021 00022 /** 00023 * Базовый класс для объектов, являющихся составными частями агрегата (агрегированных объектов). Время жизни агрегированных объектов в точности совпадает с временем жизни агрегата, т.к. агрегат непосредственно обеспечивает создание и уничтожение агрегированных объектов. 00024 * 00025 * Основная задача класса: при создании ссылки на агрегированный объект косвенно увеличивать кол-во ссылок на агрегата, а при потере - уменьшать. Т.о. агрегат будет существовать, пока есть ссылки на него или на его агрегированные объекты. 00026 * 00027 * Аггрегированные объекты могут быть полями класса-агрегата или создаваться в динамической памяти. В последнем случае для доступа к агрегированному объекту следует использовать обычный указатель, т.к. использование ссылочного приведет к созданию косвенной ссылки на себя. 00028 * 00029 * Данный класс обеспечивает многопоточность. 00030 * @author Овсеевич Р. 00031 * \ingroup RefCount 00032 */ 00033 class AggregatedBase : virtual public IRefObject 00034 { 00035 protected: 00036 00037 /** 00038 * Конструктор. 00039 * 00040 * Исключение: NullArgException если аргумент Aggregate равен NULL. 00041 */ 00042 AggregatedBase(IRefObject* Aggregate); 00043 00044 /** 00045 * Виртуальный деструктор. 00046 */ 00047 virtual ~AggregatedBase() {} 00048 00049 private: 00050 00051 /** 00052 * Указатель на агрегат. 00053 */ 00054 IRefObject* aggregate; 00055 00056 /** 00057 * Реализация IRefObject::IncRefCount. 00058 * 00059 * Увеличить кол-во ссылок. Возвращает true, если объект не находится в удаляемом состоянии и кол-во ссылок увеличено, иначе возвращается false. 00060 * 00061 * Вызывает соответствующий метод агрегата. 00062 */ 00063 bool IncRefCount(); 00064 00065 /** 00066 * Реализация IRefObject::DecRefCount. 00067 * 00068 * Уменьшить кол-во ссылок. Если счетчик ссылок достиг 0, то возвращается true, иначе возвращается false. 00069 * 00070 * Вызывает соответствующий метод агрегата. 00071 */ 00072 bool DecRefCount(); 00073 00074 /** 00075 * Реализация IRefObject::IncRefCount. 00076 * 00077 * Уничтожает объект. 00078 * 00079 * Вызывает соответствующий метод агрегата. 00080 */ 00081 void DeleteInstance(); 00082 }; 00083 00084 } 00085 00086 #endif //CNTM_AGGREGATEDBASE_H
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |