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
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |