AggregatedBase.h

См. документацию.
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

SourceForge.net Logo
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой  doxygen 1.5.3