SynchroAggregatedBase.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_SYNCHROAGGREGATEDBASE_H
00015 #define CNTM_SYNCHROAGGREGATEDBASE_H
00016 #include <Cntm/RefCount/AggregatedBase.h>
00017 #include <Cntm/Synchro/SynchroObject.h>
00018 #include <Cntm/Synchro/SyncScopes/Sync.h>
00019 #include <Cntm/Synchro/SyncScopes/ReentrantSync.h>
00020 
00021 namespace Cntm
00022 {
00023 
00024         /**
00025          * Базовый класс для синхрообъектов. Объединяет средства синхронизации, предоставляемые классом Cntm::SynchroObject, и подсчета ссылок для агрегированных объектов, предоставляемого классом Cntm::AggregatedBase. См. описания базовых классов, а также класса Cntm::SynchroSpace.
00026          * 
00027          * Данный класс может использоваться в качестве базового класса или примеси для объектов, которым требуются средства синхронизации и которые являются агрегированными объектами.
00028          * 
00029          * Данный класс обеспечивает многопоточность.
00030          * @author Овсеевич Р.
00031          * \ingroup Synchro
00032          */
00033         class SynchroAggregatedBase : public AggregatedBase, public SynchroObject
00034         {
00035         protected:
00036 
00037                 /**
00038                  * Конструктор используется, когда операция создания синхрообъекта уже выполняется внутри пространства, к которому будет принадлежать новый объект. Если синхропространство не указано, то будет использовано главное синхропространство (т.о. если в программе используется только главное синхропространство, то нет необходимости указывать его явно).
00039                  * 
00040                  * @param Aggregate - агрегат, в который будет входить создаваемый объект. Не должен принимать значение NULL.
00041                  * 
00042                  * Исключение Cntm::IllegalStateException - если синхропространство явно не указано, а главное синхропространство отсутствует
00043                  */
00044                 SynchroAggregatedBase(SynchroObject* Aggregate):
00045                         AggregatedBase(Aggregate), SynchroObject(Aggregate->Space()) {}
00046 
00047                 /**
00048                  * Конструктор используется, когда операция создания синхрообъекта уже выполняется внутри пространства, к которому будет принадлежать новый объект. Если синхропространство не указано, то будет использовано главное синхропространство (т.о. если в программе используется только главное синхропространство, то нет необходимости указывать его явно).
00049                  * 
00050                  * @param Aggregate - агрегат, в который будет входить создаваемый объект. Не должен принимать значение NULL.
00051                  * @param Space - (опционально) используется для задания синхропространства, к которому будет принадлежать создаваемый объект.
00052                  * 
00053                  * Исключение Cntm::IllegalStateException - если синхропространство явно не указано, а главное синхропространство отсутствует
00054                  */
00055                 SynchroAggregatedBase(IRefObject* Aggregate, const SynchroSpace::Ptr& Space = Cntm::SynchroSpace::Ptr()):
00056                         AggregatedBase(Aggregate), SynchroObject(Space) {}
00057                 
00058                 /**
00059                  * Конструктор используется, когда объект создается в новом или просто другом синхропространстве. В этом случае конструктор синхрообъекта пытается извлечь синхропространство из ConstructSync и если ConstructSync был проинициализирован, то использует извлеченное синхропространство. Если был указан пустой ConstructSync, то первым делом конструктор синхрообъекта создает дополнительное синхропространство (класс Cntm::ExtraSynchroSpace) и присваивает его ConstructSync (который передан по ссылке). Т.о. работа конструктора SynchroObject и конструкторов производных классов всегда будет осуществляться внутри синхпространства данного объекта.
00060                  * 
00061                  * @param Aggregate - агрегат, в который будет входить создаваемый объект. Определяет синхропространство, к которому будет принадлежать новый объект. Не должен принимать значение NULL.
00062                  * @param ConstructSync - ссылка на синхросекцию, которая обеспечивает нахождение в синхропространстве при создании объекта.
00063                  */
00064                 SynchroAggregatedBase(IRefObject* Aggregate, Sync& ConstructSync):
00065                         AggregatedBase(Aggregate), SynchroObject(ConstructSync) {}
00066                 
00067                 /**
00068                  * Конструктор используется, когда объект создается в новом или просто другом синхропространстве. В этом случае конструктор синхрообъекта пытается извлечь синхропространство из ConstructSync и если ConstructSync был проинициализирован, то использует извлеченное синхропространство. Если был указан пустой ConstructSync, то первым делом конструктор синхрообъекта создает дополнительное синхропространство (класс Cntm::ExtraSynchroSpace) и присваивает его ConstructSync (который передан по ссылке). Т.о. работа конструктора SynchroObject и конструкторов производных классов всегда будет осуществляться внутри синхпространства данного объекта.
00069                  * 
00070                  * @param Aggregate - агрегат, в который будет входить создаваемый объект. Определяет синхропространство, к которому будет принадлежать новый объект. Не должен принимать значение NULL.
00071                  * @param ConstructSync - ссылка на реентерабельную синхросекцию, которая обеспечивает нахождение в синхропространстве при создании объекта.
00072                  */
00073                 SynchroAggregatedBase(IRefObject* Aggregate, ReentrantSync& ConstructSync):
00074                         AggregatedBase(Aggregate), SynchroObject(ConstructSync) {}
00075         };
00076 
00077 }
00078 
00079 #endif //CNTM_SYNCHROAGGREGATEDBASE_H

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