![]() |
|
|
Generated: 18 Jul 2008 |
#include <GaudiKernel/IPartitionControl.h>
Inheritance diagram for IPartitionControl:


Partitioning is used to switch between different instances of multi-services like it is used e.g. in the event buffer tampering.
Example code: =============
Switch between buffers for data processing. Use this technique to populate e.g. different datastores in order to later compare the different results.
SmartIF<IPartitionControl> partCtrl(eventSvc()); if ( partCtrl.isValid() ) { if ( partCtrl.activate("Partition_1").isSuccess() ) { SmartDataPtr mcparts(eventSvc(), "MC/Particles"); .... work with particles from buffer "Partition 1" all data registered by code here will go to "Partition 2" } if ( partCtrl.activate("Partition_2").isSuccess() ) { SmartDataPtr mcparts(eventSvc(), "MC/Particles"); .... work with particles from buffer "Partition 2" they are NOT they same as those in buffer 1 all data registered by code here will go to "Partition 2" } }
The access to the underlying service is also possible.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Be careful: This usage MAY NOT MODIFY e.g. the datastore by adding additional objects! This should solely by used for analysis after buffer tampering. In particular with "data on demand" this can easily have unexpected results.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SmartIF<IPartitionControl> partCtrl(eventSvc()); if ( partCtrl ) { IInterface* ptr = 0; if ( partCtrl->get("Partition 1", ptr).isSuccess() ) { SmartIF<IDataProviderSvc> partition(ptr); // Now we can work directly with this partition // There is no additional dispathing in the "eventSvc()". SmartDataPtr mcparts(partition, "MC/Particles"); if ( mcparts ) { } } }
Definition at line 69 of file IPartitionControl.h.
Public Types | |
| enum | { PARTITION_NOT_PRESENT = 2, PARTITION_EXISTS = 4, NO_ACTIVE_PARTITION = 6 } |
Public Member Functions | |
| virtual StatusCode | create (const std::string &name, const std::string &type)=0 |
| Create a new partition. | |
| virtual StatusCode | create (const std::string &name, const std::string &type, IInterface *&pPartition)=0 |
| Create a new partition. | |
| virtual StatusCode | drop (const std::string &name)=0 |
| Remove a partition object. | |
| virtual StatusCode | drop (IInterface *pPartition)=0 |
| Remove a partition object. | |
| virtual StatusCode | activate (const std::string &name)=0 |
| Access an existing partition object. | |
| virtual StatusCode | activate (IInterface *pPartition)=0 |
| Access an existing partition object. | |
| virtual StatusCode | get (const std::string &name, IInterface *&pPartition) const =0 |
| Access an existing partition object. | |
| virtual StatusCode | activePartition (std::string &name, IInterface *&pPartition) const =0 |
| Access the active partition object. | |
Static Public Member Functions | |
| static const InterfaceID & | interfaceID () |
| Retrieve interface ID. | |
| anonymous enum |
Definition at line 181 of file IPartitionControl.h.
00181 { PARTITION_NOT_PRESENT = 2, 00182 PARTITION_EXISTS = 4, 00183 NO_ACTIVE_PARTITION = 6 00184 };
| static const InterfaceID& IPartitionControl::interfaceID | ( | ) | [inline, static] |
Retrieve interface ID.
Reimplemented from IInterface.
Definition at line 73 of file IPartitionControl.h.
References IID_IPartitionControl.
Referenced by PartitionSwitchTool::queryInterface(), PartitionSwitchAlg::queryInterface(), and MultiStoreSvc::queryInterface().
00073 { return IID_IPartitionControl; }
| virtual StatusCode IPartitionControl::create | ( | const std::string & | name, | |
| const std::string & | type | |||
| ) | [pure virtual] |
Create a new partition.
If the partition exists already the existing object is returned. In this event the return code is PARTITION_EXISTS. The partition type typically contains all the information necessary to access the corresponding service, typically a pair "<service-type>/<service name>"
| name | [IN] Partition name | |
| type | [IN] Partition type |
Referenced by PartitionSwitchAlg::create().
| virtual StatusCode IPartitionControl::create | ( | const std::string & | name, | |
| const std::string & | type, | |||
| IInterface *& | pPartition | |||
| ) | [pure virtual] |
Create a new partition.
If the partition exists already the existing object is returned. In this event the return code is PARTITION_EXISTS. The partition type typically contains all the information necessary to access the corresponding service, typically a pair "<service-type>/<service name>"
| name | [IN] Partition name | |
| type | [IN] Partition type | |
| pPartition | [OUT] Reference to the created/existing partition |
| virtual StatusCode IPartitionControl::drop | ( | const std::string & | name | ) | [pure virtual] |
Remove a partition object.
If the partition object does not exists, the return code is PARTITION_NOT_PRESENT. The partition may not be used anymore after this call.
| name | [IN] Partition name |
Referenced by PartitionSwitchAlg::drop().
| virtual StatusCode IPartitionControl::drop | ( | IInterface * | pPartition | ) | [pure virtual] |
Remove a partition object.
If the partition object does not exists, the return code is PARTITION_NOT_PRESENT. The partition may not be used anymore after this call. If the interface pointer is invalid, IInterface::NO_INTERFACE is returned.
| pPartition | [IN] Reference to existing partition |
Implemented in MultiStoreSvc, PartitionSwitchAlg, and PartitionSwitchTool.
| virtual StatusCode IPartitionControl::activate | ( | const std::string & | name | ) | [pure virtual] |
Access an existing partition object.
Preferred call. The activation of a partition does not change the state of the partition. It only means that any call issued to the corresponding multi-service will be redirected to the this partition - typically a service implementing the same interfaces as the multi-service.
| name | [IN] Partition name |
Referenced by PartitionSwitchAlg::activate(), and PartitionSwitchAlg::execute().
| virtual StatusCode IPartitionControl::activate | ( | IInterface * | pPartition | ) | [pure virtual] |
Access an existing partition object.
The activation of a partition does not change the state of the partition. It only means that any call issued to the corresponding multi-service will be redirected to the this partition - typically a service implementing the same interfaces as the multi-service.
If the interface pointer is invalid, IInterface::NO_INTERFACE is returned.
| pPartition | [IN] Pointer to the partition. |
Implemented in MultiStoreSvc, PartitionSwitchAlg, and PartitionSwitchTool.
| virtual StatusCode IPartitionControl::get | ( | const std::string & | name, | |
| IInterface *& | pPartition | |||
| ) | const [pure virtual] |
Access an existing partition object.
| name | [IN] Partition name | |
| pPartition | [IN] Location to store the pointer to the partition. |
Referenced by PartitionSwitchAlg::get(), and PartitionSwitchAlg::initialize().
| virtual StatusCode IPartitionControl::activePartition | ( | std::string & | name, | |
| IInterface *& | pPartition | |||
| ) | const [pure virtual] |
Access the active partition object.
| name | [OUT] Partition name | |
| pPartition | [OUT] Location to store the pointer to the partition. |
Implemented in MultiStoreSvc, PartitionSwitchAlg, and PartitionSwitchTool.
Referenced by PartitionSwitchAlg::activePartition().