|
Gaudi Framework, version v22r2 |
| Home | Generated: Tue May 10 2011 |
Data service base class. More...
#include <GaudiKernel/DataSvc.h>


Public Types | |
| typedef std::vector < DataStoreItem > | LoadItems |
| Define set of load items. | |
Public Member Functions | |
| virtual CLID | rootCLID () const |
| IDataManagerSvc: Accessor for root event CLID. | |
| virtual std::string | rootName () const |
| IDataManagerSvc: Accessor for root event name. | |
| virtual StatusCode | registerAddress (const std::string &fullPath, IOpaqueAddress *pAddress) |
| IDataManagerSvc: Register object address with the data store. | |
| virtual StatusCode | registerAddress (DataObject *parentObj, const std::string &objectPath, IOpaqueAddress *pAddress) |
| IDataManagerSvc: Register object address with the data store. | |
| virtual StatusCode | registerAddress (IRegistry *parentObj, const std::string &objectPath, IOpaqueAddress *pAddress) |
| IDataManagerSvc: Register object address with the data store. | |
| virtual StatusCode | unregisterAddress (const std::string &fullPath) |
| IDataManagerSvc: Unregister object address from the data store. | |
| virtual StatusCode | unregisterAddress (DataObject *pParent, const std::string &objPath) |
| IDataManagerSvc: Unregister object address from the data store. | |
| virtual StatusCode | unregisterAddress (IRegistry *pParent, const std::string &objPath) |
| IDataManagerSvc: Unregister object address from the data store. | |
| virtual StatusCode | objectLeaves (const DataObject *pObject, std::vector< IRegistry * > &refLeaves) |
| IDataManagerSvc: Explore the object store: retrieve all leaves attached to the object. | |
| virtual StatusCode | objectLeaves (const IRegistry *pRegistry, std::vector< IRegistry * > &refLeaves) |
| IDataManagerSvc: Explore the object store: retrieve all leaves attached to the object. | |
| virtual StatusCode | objectParent (const DataObject *pObject, IRegistry *&refpParent) |
| IDataManagerSvc: Explore the object store: retrieve the object's parent. | |
| virtual StatusCode | objectParent (const IRegistry *pRegistry, IRegistry *&refpParent) |
| IDataManagerSvc: Explore the object store: retrieve the object's parent. | |
| virtual StatusCode | clearSubTree (const std::string &sub_tree_path) |
| IDataManagerSvc: Remove all data objects below the sub tree identified by its full path name. | |
| virtual StatusCode | clearSubTree (DataObject *pObject) |
| IDataManagerSvc: Remove all data objects below the sub tree identified by the object. | |
| virtual StatusCode | clearStore () |
| IDataManagerSvc: Remove all data objects in the data store. | |
| virtual StatusCode | traverseSubTree (const std::string &sub_tree_path, IDataStoreAgent *pAgent) |
| IDataManagerSvc: Analyze by traversing all data objects below the sub tree identified by its full path name. | |
| virtual StatusCode | traverseSubTree (DataObject *pObject, IDataStoreAgent *pAgent) |
| IDataManagerSvc: Analyze by traversing all data objects below the sub tree. | |
| virtual StatusCode | traverseTree (IDataStoreAgent *pAgent) |
| IDataManagerSvc: Analyze by traversing all data objects in the data store. | |
| virtual StatusCode | setRoot (const std::string &root_name, DataObject *pRootObj) |
| Initialize data store for new event by giving new event path and root object. | |
| virtual StatusCode | i_setRoot (const std::string &root_name, DataObject *pRootObj) |
| Initialize data store for new event by giving new event path and root object. | |
| virtual StatusCode | setRoot (const std::string &root_path, IOpaqueAddress *pRootAddr) |
| Initialize data store for new event by giving new event path and address of root object. | |
| virtual StatusCode | i_setRoot (const std::string &root_path, IOpaqueAddress *pRootAddr) |
| Initialize data store for new event by giving new event path and address of root object. | |
| virtual StatusCode | setDataLoader (IConversionSvc *svc) |
| IDataManagerSvc: IDataManagerSvc: Pass a default data loader to the service. | |
| virtual StatusCode | addPreLoadItem (const DataStoreItem &item) |
| Add an item to the preload list. | |
| virtual StatusCode | addPreLoadItem (const std::string &itemPath) |
| Add an item to the preload list. | |
| virtual StatusCode | removePreLoadItem (const DataStoreItem &item) |
| Remove an item from the preload list. | |
| virtual StatusCode | removePreLoadItem (const std::string &itemPath) |
| Add an item to the preload list. | |
| virtual StatusCode | resetPreLoad () |
| Clear the preload list. | |
| virtual StatusCode | preLoad (int depth, int load_depth, DataObject *pObject) |
| Execute one level of preloading and recursively load until the final level is reached. | |
| virtual StatusCode | preLoad () |
| load all preload items of the list | |
| virtual StatusCode | registerObject (const std::string &fullPath, DataObject *pObject) |
| Register object with the data store. | |
| virtual StatusCode | registerObject (const std::string &parentPath, const std::string &objPath, DataObject *pObject) |
| Register object with the data store. | |
| virtual StatusCode | registerObject (const std::string &parentPath, int item, DataObject *pObject) |
| Register object with the data store. | |
| virtual StatusCode | registerObject (DataObject *parentObj, const std::string &objPath, DataObject *pObject) |
| Register object with the data store. | |
| virtual StatusCode | registerObject (DataObject *parentObj, int item, DataObject *pObject) |
| Register object with the data store. | |
| virtual StatusCode | unregisterObject (const std::string &fullPath) |
| Unregister object from the data store. | |
| virtual StatusCode | unregisterObject (const std::string &parentPath, const std::string &objectPath) |
| Unregister object from the data store. | |
| virtual StatusCode | unregisterObject (const std::string &parentPath, int item) |
| Unregister object from the data store. | |
| virtual StatusCode | unregisterObject (DataObject *pObject) |
| Unregister object from the data store. | |
| virtual StatusCode | unregisterObject (DataObject *pObject, const std::string &objectPath) |
| Unregister object from the data store. | |
| virtual StatusCode | unregisterObject (DataObject *pObject, int item) |
| Unregister object from the data store. | |
| virtual StatusCode | retrieveObject (IRegistry *pDirectory, const std::string &path, DataObject *&pObject) |
| Retrieve object from data store. | |
| virtual StatusCode | retrieveObject (const std::string &fullPath, DataObject *&pObject) |
| Retrieve object identified by its full path from the data store. | |
| virtual StatusCode | retrieveObject (const std::string &parentPath, const std::string &objPath, DataObject *&pObject) |
| Retrieve object from data store. | |
| virtual StatusCode | retrieveObject (const std::string &parentPath, int item, DataObject *&pObject) |
| Retrieve object from data store. | |
| virtual StatusCode | retrieveObject (DataObject *parentObj, const std::string &objPath, DataObject *&pObject) |
| Retrieve object from data store. | |
| virtual StatusCode | retrieveObject (DataObject *parentObj, int item, DataObject *&pObject) |
| Retrieve object from data store. | |
| virtual StatusCode | findObject (const std::string &fullPath, DataObject *&pObject) |
| Find object identified by its full path in the data store. | |
| virtual StatusCode | findObject (IRegistry *pDirectory, const std::string &path, DataObject *&pObject) |
| Find object identified by its full path in the data store. | |
| virtual StatusCode | findObject (const std::string &parentPath, const std::string &objPath, DataObject *&pObject) |
| Find object in the data store. | |
| virtual StatusCode | findObject (const std::string &parentPath, int item, DataObject *&pObject) |
| Find object in the data store. | |
| virtual StatusCode | findObject (DataObject *parentObj, const std::string &objPath, DataObject *&pObject) |
| Find object in the data store. | |
| virtual StatusCode | findObject (DataObject *parentObj, int item, DataObject *&pObject) |
| Find object in the data store. | |
| virtual StatusCode | linkObject (IRegistry *from, const std::string &objPath, DataObject *to) |
| Add a link to another object. | |
| virtual StatusCode | linkObject (const std::string &fromPath, const std::string &objPath, DataObject *to) |
| Add a link to another object. | |
| virtual StatusCode | linkObject (DataObject *from, const std::string &objPath, DataObject *to) |
| Add a link to another object. | |
| virtual StatusCode | linkObject (const std::string &fullPath, DataObject *to) |
| Add a link to another object. | |
| virtual StatusCode | unlinkObject (IRegistry *from, const std::string &objPath) |
| Remove a link to another object. | |
| virtual StatusCode | unlinkObject (const std::string &fromPath, const std::string &objPath) |
| Remove a link to another object. | |
| virtual StatusCode | unlinkObject (DataObject *fromObj, const std::string &objPath) |
| Remove a link to another object. | |
| virtual StatusCode | unlinkObject (const std::string &fullPath) |
| Remove a link to another object. | |
| virtual StatusCode | updateObject (IRegistry *pDirectory) |
| Update object identified by its directory entry. | |
| virtual StatusCode | updateObject (const std::string &updatePath) |
| Update object. | |
| virtual StatusCode | updateObject (DataObject *toUpdate) |
| Update object. | |
| virtual StatusCode | updateObject (const std::string &parentPath, const std::string &updatePath) |
| Update object. | |
| virtual StatusCode | updateObject (DataObject *pParent, const std::string &updatePath) |
| Update object. | |
| virtual StatusCode | initialize () |
| Service initialization. | |
| virtual StatusCode | reinitialize () |
| Service initialization. | |
| virtual StatusCode | finalize () |
| Service initialization. | |
| DataSvc (const std::string &name, ISvcLocator *svc) | |
| Standard Constructor. | |
| virtual | ~DataSvc () |
| Standard Destructor. | |
Protected Member Functions | |
| bool | checkRoot () |
| Check if root path is valid. | |
| virtual IConversionSvc * | getDataLoader (IRegistry *pReg) |
| Retrieve customizable data loader according to registry entry to be retrieved. | |
| virtual DataObject * | createDefaultObject () const |
| Create default objects in case forced creation of leaves is requested. | |
| virtual StatusCode | loadObject (IRegistry *pNode) |
| Invoke Persistency service to create transient object from its persistent representation. | |
| virtual StatusCode | loadObject (IConversionSvc *pLoader, IRegistry *pNode) |
| Invoke Persistency service to create transient object from its persistent representation. | |
| StatusCode | retrieveEntry (DataSvcHelpers::RegistryEntry *pNode, const std::string &path, DataSvcHelpers::RegistryEntry *&pEntry) |
| Retrieve registry entry from store. | |
| DataObject * | handleDataFault (IRegistry *pReg, const std::string &path="") |
| Invoke data fault handling if enabled. | |
Protected Attributes | |
| CLID | m_rootCLID |
| Integer Property corresponding to CLID of root entry. | |
| std::string | m_rootName |
| Name of root event. | |
| IConversionSvc * | m_dataLoader |
| Pointer to data loader service. | |
| IIncidentSvc * | m_incidentSvc |
| Pointer to incident service. | |
| LoadItems | m_preLoads |
| Items to be pre-loaded. | |
| bool | m_forceLeaves |
| Allow forced creation of default leaves on registerObject. | |
| bool | m_enableAccessHdlr |
| Flag to enable interrupts on data access requests. | |
| bool | m_enableFaultHdlr |
| Flag to enable interrupts on data creation requests. | |
| DataSvcHelpers::RegistryEntry * | m_root |
| Pointer to root entry. | |
| DataSvcHelpers::InhibitMap * | m_inhibitMap |
| Map with object paths to be inhibited from loading. | |
| std::vector< std::string > | m_inhibitPathes |
| Property for the inhibited leaves. | |
| std::string | m_accessName |
| Name of the data access incident. | |
| std::string | m_faultName |
| Name of the data fault incident. | |
Private Member Functions | |
| DataSvc (const DataSvc &) | |
| Fake copy constructor (never implemented). | |
| DataSvc & | operator= (const DataSvc &) |
| Fake assignment operator (never implemented). | |
Friends | |
| class | SvcFactory< DataSvc > |
| The class creator is of course a friend! | |
Data service base class.
A data service manages the transient data stores and implements the IDataProviderSvc and IDataManagerSvc interfaces.
Definition at line 42 of file DataSvc.h.
| typedef std::vector<DataStoreItem> DataSvc::LoadItems |
| DataSvc::DataSvc | ( | const std::string & | name, |
| ISvcLocator * | svc | ||
| ) |
Standard Constructor.
Definition at line 1373 of file DataSvc.cpp.
: base_class(name,svc), m_rootCLID( /*CLID_Event*/ 110), m_rootName( "/Event"), m_root(0) { m_dataLoader = 0; m_inhibitMap = 0; m_incidentSvc = 0; m_forceLeaves = false; m_enableFaultHdlr = false; m_enableAccessHdlr = false; m_faultName = "DataFault"; m_accessName = "DataAccess"; declareProperty("RootCLID", m_rootCLID); declareProperty("RootName", m_rootName); declareProperty("ForceLeaves", m_forceLeaves); declareProperty("InhibitPathes", m_inhibitPathes); declareProperty("DataFaultName", m_faultName); declareProperty("DataAccessName", m_accessName); declareProperty("EnableFaultHandler", m_enableFaultHdlr); declareProperty("EnableAccessHandler", m_enableAccessHdlr); }
| DataSvc::~DataSvc | ( | ) | [virtual] |
Standard Destructor.
Definition at line 1396 of file DataSvc.cpp.
{
setDataLoader(0).ignore();
resetPreLoad().ignore();
clearStore().ignore();
}
| DataSvc::DataSvc | ( | const DataSvc & | ) | [private] |
Fake copy constructor (never implemented).
| StatusCode DataSvc::addPreLoadItem | ( | const DataStoreItem & | item ) | [virtual] |
Add an item to the preload list.
Definition at line 1228 of file DataSvc.cpp.
{
LoadItems::iterator i = std::find(m_preLoads.begin(), m_preLoads.end(), item);
if ( i == m_preLoads.end() ) {
m_preLoads.push_back(item);
}
return StatusCode::SUCCESS;
}
| StatusCode DataSvc::addPreLoadItem | ( | const std::string & | itemPath ) | [virtual] |
Add an item to the preload list.
Definition at line 1237 of file DataSvc.cpp.
{
return addPreLoadItem( DataStoreItem(itemPath,1) );
}
| bool DataSvc::checkRoot | ( | ) | [inline, protected] |
| StatusCode DataSvc::clearStore | ( | ) | [virtual] |
IDataManagerSvc: Remove all data objects in the data store.
Reimplemented in DetDataSvc.
Definition at line 104 of file DataSvc.cpp.
| StatusCode DataSvc::clearSubTree | ( | const std::string & | sub_tree_path ) | [virtual] |
IDataManagerSvc: Remove all data objects below the sub tree identified by its full path name.
Definition at line 66 of file DataSvc.cpp.
{
DataObject* pObject = 0;
StatusCode status = findObject(sub_tree_path, pObject);
if ( status.isSuccess() ) {
RegEntry* node_entry = CAST_REGENTRY(RegEntry*,pObject->registry());
if ( 0 != node_entry ) {
RegEntry* parent = node_entry->parentEntry();
if ( 0 != parent ) {
parent->remove(node_entry);
return StatusCode::SUCCESS;
}
return INVALID_PARENT;
}
return INVALID_OBJECT;
}
return status;
}
| StatusCode DataSvc::clearSubTree | ( | DataObject * | pObject ) | [virtual] |
IDataManagerSvc: Remove all data objects below the sub tree identified by the object.
Definition at line 87 of file DataSvc.cpp.
{
if ( checkRoot() ) {
RegEntry* entry = CAST_REGENTRY(RegEntry*,pObject->registry());
if ( 0 != entry ) {
RegEntry* parent = entry->parentEntry();
if ( 0 != parent ) {
parent->remove(entry);
return SUCCESS;
}
return INVALID_PARENT;
}
return INVALID_OBJECT;
}
return INVALID_ROOT;
}
| DataObject * DataSvc::createDefaultObject | ( | ) | const [protected, virtual] |
Create default objects in case forced creation of leaves is requested.
Definition at line 1361 of file DataSvc.cpp.
{
return new DataObject();
}
| StatusCode DataSvc::finalize | ( | void | ) | [virtual] |
Service initialization.
Service initialisation.
Reimplemented from Service.
Reimplemented in AIDATupleSvc, EvtDataSvc, RecordDataSvc, DetDataSvc, FastContainersSvc, HistogramSvc, NTupleSvc, and TagCollectionSvc.
Definition at line 1338 of file DataSvc.cpp.
{
// Nothing to do: just call base class initialisation
setDataLoader(0).ignore();
resetPreLoad().ignore();
clearStore().ignore();
if ( m_incidentSvc ) {
m_incidentSvc->release();
m_incidentSvc = 0;
}
return Service::finalize();
}
| StatusCode DataSvc::findObject | ( | const std::string & | fullPath, |
| DataObject *& | pObject | ||
| ) | [virtual] |
Find object identified by its full path in the data store.
Definition at line 936 of file DataSvc.cpp.
{
pObject = 0;
if ( checkRoot() ) {
if ( path.length() == 0 || path == m_rootName ) {
pObject = m_root->object();
return (0 == pObject) ? OBJ_NOT_LOADED : IDataProviderSvc_NO_ERROR;
}
else if ( path[0] != SEPARATOR ) {
return findObject(m_rootName, path, pObject);
}
return findObject((IRegistry*)0, path, pObject);
}
return INVALID_ROOT;
}
| StatusCode DataSvc::findObject | ( | IRegistry * | pDirectory, |
| const std::string & | path, | ||
| DataObject *& | pObject | ||
| ) | [virtual] |
Find object identified by its full path in the data store.
Retrieve object identified by its directory from the data store.
Definition at line 917 of file DataSvc.cpp.
{
pObject = 0;
IRegistry* pReg = (0==pRegistry) ? m_root : pRegistry;
RegEntry* root_entry = CAST_REGENTRY(RegEntry*, pReg);
if ( 0 != root_entry ) {
if ( path.length() > 0 ) {
pReg = root_entry->find(path);
}
if ( 0 == pReg ) {
return INVALID_OBJ_PATH;
}
pObject = pReg->object();
}
return (0 == pObject) ? OBJ_NOT_LOADED : IDataProviderSvc_NO_ERROR;
}
| StatusCode DataSvc::findObject | ( | const std::string & | parentPath, |
| const std::string & | objPath, | ||
| DataObject *& | pObject | ||
| ) | [virtual] |
Find object in the data store.
Retrieve object identified by its full path from the data store.
Definition at line 953 of file DataSvc.cpp.
{
DataObject* parent = 0;
StatusCode status = findObject(parentPath, parent);
if ( status.isSuccess() ) {
status = findObject (parent, objectPath, pObject);
}
return status;
}
| StatusCode DataSvc::findObject | ( | const std::string & | parentPath, |
| int | item, | ||
| DataObject *& | pObject | ||
| ) | [virtual] |
Find object in the data store.
Retrieve object identified by its full path from the data store.
Definition at line 965 of file DataSvc.cpp.
{
return findObject(parentPath, itemToPath(item), pObject);
}
| StatusCode DataSvc::findObject | ( | DataObject * | parentObj, |
| const std::string & | objPath, | ||
| DataObject *& | pObject | ||
| ) | [virtual] |
Find object in the data store.
Find object identified by its full path in the data store.
Definition at line 978 of file DataSvc.cpp.
{
IRegistry* pDir = (0==parentObj) ? 0 : parentObj->registry();
return findObject(pDir, path, pObject);
}
| StatusCode DataSvc::findObject | ( | DataObject * | parentObj, |
| int | item, | ||
| DataObject *& | pObject | ||
| ) | [virtual] |
Find object in the data store.
Find object identified by its full path in the data store.
Definition at line 971 of file DataSvc.cpp.
{
return findObject(parentObj, itemToPath(item), pObject);
}
| IConversionSvc * DataSvc::getDataLoader | ( | IRegistry * | pReg ) | [protected, virtual] |
Retrieve customizable data loader according to registry entry to be retrieved.
Reimplemented in NTupleSvc.
Definition at line 1368 of file DataSvc.cpp.
{
return m_dataLoader;
}
| DataObject * DataSvc::handleDataFault | ( | IRegistry * | pReg, |
| const std::string & | path = "" |
||
| ) | [protected] |
Invoke data fault handling if enabled.
| pReg | [IN] Pointer to missing registry entry |
| path | [IN] Sub-path of requested object from pReg |
Definition at line 639 of file DataSvc.cpp.
{
if ( m_enableFaultHdlr ) {
IRegistry* pLeaf = 0;
if ( pReg && path.length() == 0 ) {
DataIncident incident(name(), m_faultName, pReg->identifier());
m_incidentSvc->fireIncident(incident);
return pReg->object();
}
else if ( pReg ) {
std::string p = pReg->identifier();
if (path[0] != SEPARATOR ) p += SEPARATOR;
p += path;
DataIncident incident(name(), m_faultName, p);
m_incidentSvc->fireIncident(incident);
pLeaf = m_root->findLeaf(p);
}
else {
std::string p = m_root->identifier();
if (path[0] != SEPARATOR ) p += SEPARATOR;
p += path;
DataIncident incident(name(), m_faultName, p);
m_incidentSvc->fireIncident(incident);
pLeaf = m_root->findLeaf(p);
}
if ( pLeaf ) {
return pLeaf->object();
}
}
return 0;
}
| StatusCode DataSvc::i_setRoot | ( | const std::string & | root_path, |
| DataObject * | pRootObj | ||
| ) | [virtual] |
Initialize data store for new event by giving new event path and root object.
Does not clear the store before reinitializing it. This could lead to errors and should be handle with care. Use setRoot if unsure
Definition at line 162 of file DataSvc.cpp.
| StatusCode DataSvc::i_setRoot | ( | const std::string & | root_path, |
| IOpaqueAddress * | pRootAddr | ||
| ) | [virtual] |
Initialize data store for new event by giving new event path and address of root object.
Does not clear the store before reinitializing it. This could lead to errors and should be handle with care. Use setRoot if unsure
Definition at line 188 of file DataSvc.cpp.
| StatusCode DataSvc::initialize | ( | ) | [virtual] |
Service initialization.
Reimplemented from Service.
Reimplemented in AIDATupleSvc, EvtDataSvc, RecordDataSvc, DetDataSvc, FastContainersSvc, HistogramSvc, NTupleSvc, and TagCollectionSvc.
Definition at line 1294 of file DataSvc.cpp.
{
// Nothing to do: just call base class initialisation
StatusCode sc = Service::initialize();
if ( !sc.isSuccess() ) {
return sc;
}
sc = service("IncidentSvc", m_incidentSvc, true);
if ( !sc.isSuccess() ) {
MsgStream log(msgSvc(), name());
log << MSG::ERROR << "Failed to access incident service." << endmsg;
}
return sc;
}
| StatusCode DataSvc::linkObject | ( | IRegistry * | from, |
| const std::string & | objPath, | ||
| DataObject * | to | ||
| ) | [virtual] |
Add a link to another object.
Definition at line 1083 of file DataSvc.cpp.
{
if ( checkRoot() ) {
try {
RegEntry* from_entry = CAST_REGENTRY(RegEntry*,from);
if ( 0 != from_entry ) {
// First check if both objects are already registered to the store
RegEntry* to_entry = m_root->findLeaf(to);
if ( 0 == to_entry ) {
return INVALID_OBJECT;
}
else {
std::string::size_type sep = objPath.rfind(SEPARATOR);
if ( sep > 0 && sep != std::string::npos ) { // in case the objPath is a sub-directory itself
DataObject* pO = 0;
std::string fromPath(objPath, 0, sep);
StatusCode sc = retrieveObject(from, fromPath, pO);
if ( sc.isSuccess() ) {
std::string toPath(objPath, sep, objPath.length());
sc = linkObject(pO->registry(), toPath, to);
}
return sc;
}
// Now register the soft link
StatusCode status = from_entry->add( objPath, to, true);
return status.isSuccess() ?
IDataProviderSvc_NO_ERROR : DOUBL_OBJ_PATH;
}
}
}
catch (...) {
}
return INVALID_PARENT;
}
return INVALID_ROOT;
}
| StatusCode DataSvc::linkObject | ( | const std::string & | fromPath, |
| const std::string & | objPath, | ||
| DataObject * | to | ||
| ) | [virtual] |
Add a link to another object.
Definition at line 1136 of file DataSvc.cpp.
{
DataObject* pO = 0;
StatusCode status = retrieveObject(from, pO);
if ( status.isSuccess() ) {
return linkObject(pO->registry(), objPath, to);
}
return status;
}
| StatusCode DataSvc::linkObject | ( | DataObject * | from, |
| const std::string & | objPath, | ||
| DataObject * | to | ||
| ) | [virtual] |
Add a link to another object.
Definition at line 1148 of file DataSvc.cpp.
{
if ( 0 != from ) {
IRegistry* from_entry = from->registry();
if ( 0 != from_entry ) {
return linkObject( from_entry, objPath, to);
}
}
return INVALID_PARENT;
}
| StatusCode DataSvc::linkObject | ( | const std::string & | fullPath, |
| DataObject * | to | ||
| ) | [virtual] |
Add a link to another object.
Definition at line 1121 of file DataSvc.cpp.
{
if ( fullPath.length() > 0 ) {
if ( fullPath[0] != SEPARATOR ) {
return linkObject(m_rootName, fullPath, to);
}
std::string::size_type sep = fullPath.rfind(SEPARATOR);
std::string objPath(fullPath, sep, fullPath.length());
std::string fromPath(fullPath, 0, sep);
return linkObject( fromPath, objPath, to);
}
return INVALID_OBJ_PATH;
}
| StatusCode DataSvc::loadObject | ( | IRegistry * | pNode ) | [protected, virtual] |
Invoke Persistency service to create transient object from its persistent representation.
Definition at line 674 of file DataSvc.cpp.
{
IConversionSvc* pLoader = getDataLoader(pRegistry);
return loadObject(pLoader, pRegistry);
}
| StatusCode DataSvc::loadObject | ( | IConversionSvc * | pLoader, |
| IRegistry * | pNode | ||
| ) | [protected, virtual] |
Invoke Persistency service to create transient object from its persistent representation.
Definition at line 682 of file DataSvc.cpp.
{
StatusCode status = INVALID_OBJ_ADDR;
DataObject* pObject = 0;
if ( 0 == pLoader ) { // Precondition: Data loader must be present
if (handleDataFault(pRegistry) != 0) return SUCCESS;
else return NO_DATA_LOADER;
}
if ( 0 == pRegistry ) { // Precondition: Directory must be valid
if (handleDataFault(pRegistry) != 0) return SUCCESS;
else return INVALID_OBJ_ADDR;
}
MsgStream log( msgSvc(), name() );
log << MSG::VERBOSE << "Requested object " << pRegistry->identifier() << endmsg;
if ( m_enableAccessHdlr ) {
// Fire data access incident
DataIncident incident(name(), m_accessName, pRegistry->identifier());
m_incidentSvc->fireIncident(incident);
}
if ( m_inhibitPathes.size() > 0 ) {
const std::string& ident = pRegistry->identifier();
std::vector<std::string>::iterator inhibit =
std::find(m_inhibitPathes.begin(), m_inhibitPathes.end(), ident);
if ( inhibit != m_inhibitPathes.end() ) {
return NO_ACCESS;
}
}
IOpaqueAddress* pAddress = pRegistry->address();
if ( 0 == pAddress ) { // Precondition:
return INVALID_OBJ_ADDR; // Address must be valid
}
try {
status = pLoader->createObj(pAddress, pObject); // Call data loader
if ( status.isSuccess() ) {
log << MSG::VERBOSE << "Object " << pRegistry->identifier() << " created" << endmsg;
RegEntry *pEntry = CAST_REGENTRY(RegEntry*,pRegistry);
pEntry->setObject(pObject);
log << MSG::VERBOSE << "Filling object " << pRegistry->identifier() << endmsg;
status = pLoader->fillObjRefs(pAddress, pObject);
}
}
catch( const GaudiException& exc ) {
if ( handleDataFault(pRegistry) != 0 ) {
return SUCCESS;
}
throw GaudiException("GaudiException in loadObject() " + pRegistry->identifier(),
name(), StatusCode::FAILURE, exc);
}
catch( const std::exception& x) {
if ( handleDataFault(pRegistry) != 0 ) {
return SUCCESS;
}
throw GaudiException("std::exception in loadObject() " + pRegistry->identifier() +
": " + System::typeinfoName(typeid(x)) + ", " + x.what(),
name(), StatusCode::FAILURE);
}
catch(...) {
if ( handleDataFault(pRegistry) != 0 ) {
return SUCCESS;
}
throw GaudiException("UNKN exception in loadObject() " + pRegistry->identifier(),
name(), StatusCode::FAILURE);
}
if ( !status.isSuccess() ) {
if ( handleDataFault(pRegistry) != 0 ) {
return StatusCode::SUCCESS;
}
}
if ( status.isSuccess() ) {
log << MSG::VERBOSE << "Object " << pRegistry->identifier() << " successfully loaded" << endmsg;
}
return status;
}
| StatusCode DataSvc::objectLeaves | ( | const IRegistry * | pRegistry, |
| std::vector< IRegistry * > & | refLeaves | ||
| ) | [virtual] |
IDataManagerSvc: Explore the object store: retrieve all leaves attached to the object.
IDataManagerSvc: Explore an object identified by the pointer to the registry entry.
Definition at line 244 of file DataSvc.cpp.
{
if ( checkRoot() ) {
const RegEntry* node_entry = CAST_REGENTRY(const RegEntry*,pRegistry);
if ( node_entry ) {
leaves = node_entry->leaves();
return StatusCode::SUCCESS;
}
return INVALID_OBJECT;
}
return INVALID_ROOT;
}
| StatusCode DataSvc::objectLeaves | ( | const DataObject * | pObject, |
| std::vector< IRegistry * > & | refLeaves | ||
| ) | [virtual] |
IDataManagerSvc: Explore the object store: retrieve all leaves attached to the object.
IDataManagerSvc: Explore an object identified by its pointer.
Definition at line 233 of file DataSvc.cpp.
{
if ( pObject ) {
return objectLeaves(pObject->registry(), leaves);
}
return INVALID_OBJECT;
}
| StatusCode DataSvc::objectParent | ( | const DataObject * | pObject, |
| IRegistry *& | refpParent | ||
| ) | [virtual] |
IDataManagerSvc: Explore the object store: retrieve the object's parent.
Definition at line 211 of file DataSvc.cpp.
{
if ( pObject ) {
return objectParent(pObject->registry(), refpParent);
}
return INVALID_OBJECT;
}
| StatusCode DataSvc::objectParent | ( | const IRegistry * | pRegistry, |
| IRegistry *& | refpParent | ||
| ) | [virtual] |
IDataManagerSvc: Explore the object store: retrieve the object's parent.
Definition at line 219 of file DataSvc.cpp.
{
if ( checkRoot() ) {
const RegEntry* node_entry = CAST_REGENTRY(const RegEntry*,pRegistry);
if ( node_entry ) {
refpParent = node_entry->parent();
return StatusCode::SUCCESS;
}
return INVALID_OBJECT;
}
return INVALID_ROOT;
}
Fake assignment operator (never implemented).
| StatusCode DataSvc::preLoad | ( | int | depth, |
| int | load_depth, | ||
| DataObject * | pObject | ||
| ) | [virtual] |
Execute one level of preloading and recursively load until the final level is reached.
Preload one level deep, then recursively call the next level.
| depth | current level of loading from requested parent |
| load_depth | maximum level of object loading |
| pObject | pointer to next level root object |
Definition at line 1263 of file DataSvc.cpp.
{
//unused: StatusCode sc = StatusCode::FAILURE;
if ( 0 != pObject && depth++ < load_depth ) {
RegEntry* dir = CAST_REGENTRY(RegEntry*,pObject->registry());
if ( 0 != dir ) {
for (RegEntry::Iterator i = dir->begin(); i != dir->end(); i++ ) {
DataObject *pObj = 0;
StatusCode status = retrieveObject(pObject, (*i)->name(), pObj);
if ( status.isSuccess() && depth < load_depth ) {
preLoad(depth, load_depth, pObj).ignore();
}
}
}
}
return StatusCode::SUCCESS;
}
| StatusCode DataSvc::preLoad | ( | ) | [virtual] |
load all preload items of the list
Definition at line 1281 of file DataSvc.cpp.
{
DataObject* pObj = 0;
for (LoadItems::iterator i = m_preLoads.begin(); i != m_preLoads.end(); i++) {
StatusCode sc = retrieveObject( (*i).path(), pObj);
int load_depth = (*i).depth();
if ( sc.isSuccess() && load_depth > 1 ) {
preLoad(1, load_depth, pObj).ignore();
}
}
return StatusCode::SUCCESS;
}
| StatusCode DataSvc::registerAddress | ( | DataObject * | parentObj, |
| const std::string & | objectPath, | ||
| IOpaqueAddress * | pAddress | ||
| ) | [virtual] |
IDataManagerSvc: Register object address with the data store.
Definition at line 271 of file DataSvc.cpp.
{
IRegistry* pRegistry = (0 == parentObj) ? 0 : parentObj->registry();
return registerAddress(pRegistry, objectPath, pAddress);
}
| StatusCode DataSvc::registerAddress | ( | IRegistry * | parentObj, |
| const std::string & | objectPath, | ||
| IOpaqueAddress * | pAddress | ||
| ) | [virtual] |
IDataManagerSvc: Register object address with the data store.
Definition at line 279 of file DataSvc.cpp.
{
if ( checkRoot() ) {
if ( objPath.length() > 0 ) {
if ( 0 == parentObj ) {
if ( objPath[0] != SEPARATOR ) {
return registerAddress(m_root, objPath, pAddress);
}
std::string::size_type sep = objPath.find(SEPARATOR,1);
if ( sep != std::string::npos ) {
std::string p_path (objPath, 0, sep);
if ( p_path == m_rootName ) {
std::string o_path (objPath, sep, objPath.length());
return registerAddress(m_root, o_path, pAddress);
}
}
return INVALID_PARENT;
}
if ( objPath[0] != SEPARATOR ) {
std::string path;
path = SEPARATOR;
path += objPath;
return registerAddress(parentObj, path, pAddress);
}
RegEntry* par_entry = CAST_REGENTRY(RegEntry*,parentObj);
if ( 0 != par_entry ) {
std::string::size_type sep = objPath.rfind(SEPARATOR);
if ( sep > 0 && sep != std::string::npos ) {
std::string p_path (objPath, 0, sep);
std::string o_path (objPath, sep, objPath.length());
RegEntry* p_entry = par_entry->findLeaf(p_path);
// Create default object leafs if the
// intermediate nodes are not present
if ( 0 == p_entry && m_forceLeaves ) {
DataObject *pLeaf = createDefaultObject();
StatusCode sc = registerObject(par_entry->identifier(),
p_path,
pLeaf);
if ( ! sc.isSuccess() ) {
delete pLeaf;
}
p_entry = par_entry->findLeaf(p_path);
}
if ( 0 != p_entry ) {
return registerAddress(p_entry, o_path, pAddress);
}
return INVALID_PARENT;
}
StatusCode status = par_entry->add(objPath, pAddress);
if ( status.isSuccess() ) {
return status;
}
return DOUBL_OBJ_PATH;
}
return INVALID_PARENT;
}
return INVALID_OBJ_PATH;
}
return INVALID_ROOT;
}
| StatusCode DataSvc::registerAddress | ( | const std::string & | fullPath, |
| IOpaqueAddress * | pAddress | ||
| ) | [virtual] |
IDataManagerSvc: Register object address with the data store.
Definition at line 258 of file DataSvc.cpp.
{
if ( fullPath.length() > 0 ) {
if ( fullPath[0] != SEPARATOR ) {
return registerAddress(m_root, fullPath, pAddress);
}
IRegistry* pRegistry = 0;
return registerAddress(pRegistry, fullPath, pAddress);
}
return INVALID_OBJ_PATH;
}
| StatusCode DataSvc::registerObject | ( | const std::string & | parentPath, |
| const std::string & | objPath, | ||
| DataObject * | pObject | ||
| ) | [virtual] |
Register object with the data store.
Definition at line 415 of file DataSvc.cpp.
{
DataObject* pO = 0;
StatusCode status = retrieveObject(parentPath, pO);
if ( !status.isSuccess() && m_forceLeaves ) {
pO = createDefaultObject();
status = registerObject(parentPath, pO);
if ( !status.isSuccess() ) {
pO->release();
}
}
if ( status.isSuccess() ) {
status = registerObject(pO, objPath, pObject);
}
return status;
}
| StatusCode DataSvc::registerObject | ( | const std::string & | parentPath, |
| int | item, | ||
| DataObject * | pObject | ||
| ) | [virtual] |
Register object with the data store.
Definition at line 434 of file DataSvc.cpp.
{
return registerObject(parentPath, itemToPath(item), pObject);
}
| StatusCode DataSvc::registerObject | ( | DataObject * | parentObj, |
| const std::string & | objPath, | ||
| DataObject * | pObject | ||
| ) | [virtual] |
Register object with the data store.
Definition at line 448 of file DataSvc.cpp.
{
if ( checkRoot() ) {
if ( 0 == parentObj ) {
if ( objPath.length() > 0 ) {
if ( objPath[0] == SEPARATOR ) {
std::string::size_type sep = objPath.find(SEPARATOR,1);
if ( sep != std::string::npos ) {
std::string p_path (objPath, 0, sep);
std::string o_path (objPath, sep, objPath.length());
return registerObject(p_path, o_path, pObject);
}
}
else {
return registerObject(m_rootName, objPath, pObject);
}
}
return INVALID_OBJ_PATH;
}
RegEntry* node_entry = CAST_REGENTRY(RegEntry*,parentObj->registry());
if ( 0 != node_entry ) {
StatusCode status = INVALID_PARENT;
std::string::size_type sep = objPath.find(SEPARATOR,1);
if ( sep != std::string::npos ) {
std::string p_path (objPath, 0, sep);
std::string o_path (objPath, sep, objPath.length());
RegEntry* par_entry = node_entry->findLeaf(p_path);
// Create default object leafs if the
// intermediate nodes are not present
if ( 0 == par_entry && m_forceLeaves ) {
DataObject *pLeaf = createDefaultObject();
StatusCode sc = registerObject(parentObj, p_path, pLeaf);
if ( ! sc.isSuccess() ) {
delete pLeaf;
}
par_entry = node_entry->findLeaf(p_path);
}
else if ( 0 != par_entry && par_entry->object() == 0 ) {
status = retrieveEntry( node_entry, p_path, par_entry);
if ( !status.isSuccess() && !par_entry->address() && m_forceLeaves ) {
DataObject *pLeaf = createDefaultObject();
StatusCode sc = registerObject(parentObj, p_path, pLeaf);
if ( ! sc.isSuccess() ) {
delete pLeaf;
}
par_entry = node_entry->findLeaf(p_path);
}
}
node_entry = par_entry;
if ( 0 != node_entry ) {
DataObject* obj = node_entry->object();
if ( 0 != obj ) {
status = registerObject( obj, o_path, pObject );
}
}
}
else {
RegEntry* leaf = node_entry->findLeaf(objPath);
if ( 0 == leaf ) {
status = node_entry->add( objPath, pObject );
}
else {
DataObject* obj = leaf->object();
if ( 0 == obj ) {
if (0 == pObject) {
MsgStream log(msgSvc(), name());
log << MSG::ERROR
<< "registerObject: trying to register null DataObject" << endmsg;
return StatusCode::FAILURE;
}
else {
pObject->setRegistry(leaf);
}
leaf->setAddress(0);
leaf->setObject(pObject);
status = StatusCode::SUCCESS;
}
else {
status = DOUBL_OBJ_PATH;
}
}
}
return status;
}
return INVALID_PARENT;
}
return INVALID_ROOT;
}
| StatusCode DataSvc::registerObject | ( | DataObject * | parentObj, |
| int | item, | ||
| DataObject * | pObject | ||
| ) | [virtual] |
Register object with the data store.
Definition at line 441 of file DataSvc.cpp.
{
return registerObject(parentObj, itemToPath(item), pObject);
}
| StatusCode DataSvc::registerObject | ( | const std::string & | fullPath, |
| DataObject * | pObject | ||
| ) | [virtual] |
Register object with the data store.
Definition at line 408 of file DataSvc.cpp.
{
return registerObject(0, fullPath, pObject);
}
| StatusCode DataSvc::reinitialize | ( | ) | [virtual] |
Service initialization.
Service reinitialization.
Reimplemented from Service.
Reimplemented in AIDATupleSvc, EvtDataSvc, RecordDataSvc, DetDataSvc, FastContainersSvc, HistogramSvc, and NTupleSvc.
Definition at line 1309 of file DataSvc.cpp.
{
StatusCode sc;
// the finalize part is copied here
setDataLoader(0).ignore();
resetPreLoad().ignore();
clearStore().ignore();
if ( m_incidentSvc ) {
m_incidentSvc->release();
m_incidentSvc = 0;
}
// re-initialize the base class
sc = Service::reinitialize();
if (!sc.isSuccess()) {
MsgStream log(msgSvc(), name());
log << MSG::ERROR << "Unable to reinitialize base class" << endmsg;
return sc;
}
// the initialize part is copied here
sc = service("IncidentSvc", m_incidentSvc, true);
if ( !sc.isSuccess() ) {
MsgStream log(msgSvc(), name());
log << MSG::ERROR << "Failed to access incident service." << endmsg;
return sc;
}
// return
return StatusCode::SUCCESS;
}
| StatusCode DataSvc::removePreLoadItem | ( | const DataStoreItem & | item ) | [virtual] |
Remove an item from the preload list.
Definition at line 1242 of file DataSvc.cpp.
{
LoadItems::iterator i =
std::remove(m_preLoads.begin(), m_preLoads.end(), item);
if ( i != m_preLoads.end() ) {
m_preLoads.erase(i, m_preLoads.end());
}
return StatusCode::SUCCESS;
}
| StatusCode DataSvc::removePreLoadItem | ( | const std::string & | itemPath ) | [virtual] |
Add an item to the preload list.
Definition at line 1252 of file DataSvc.cpp.
{
return removePreLoadItem( DataStoreItem(itemPath,1) );
}
| StatusCode DataSvc::resetPreLoad | ( | ) | [virtual] |
Clear the preload list.
Definition at line 1257 of file DataSvc.cpp.
{
m_preLoads.erase(m_preLoads.begin(), m_preLoads.end());
return StatusCode::SUCCESS;
}
| StatusCode DataSvc::retrieveEntry | ( | DataSvcHelpers::RegistryEntry * | pNode, |
| const std::string & | path, | ||
| DataSvcHelpers::RegistryEntry *& | pEntry | ||
| ) | [protected] |
Retrieve registry entry from store.
Definition at line 761 of file DataSvc.cpp.
{
std::string::size_type sep = path.find(SEPARATOR,1);
StatusCode status = StatusCode(INVALID_ROOT,true);
pEntry = 0;
// A.Valassi 16.08.2001 avoid core dump if store is empty
if ( checkRoot() ) {
if ( 0 == parentObj ) {
if ( path.length() == 0 || path == m_rootName ) {
return retrieveEntry(m_root, "", pEntry);
}
else if ( path[0] != SEPARATOR ) {
return retrieveEntry(m_root, path, pEntry);
}
else if ( sep != std::string::npos ) {
if ( m_root->object() == 0 ) {
RegEntry* r = 0;
status = retrieveEntry(m_root, "", r);
if ( !status.isSuccess() ) {
return status;
}
}
std::string o_path (path, sep, path.length());
return retrieveEntry(m_root, o_path, pEntry);
}
return INVALID_OBJ_PATH;
}
if ( sep != std::string::npos ) { // the string contains a separator (after pos 0)
std::string p_path (path,0,sep);
std::string o_path (path,sep,path.length());
if (!parentObj->object()) { // if the parent object has not been loaded yet, load it now
status = loadObject(parentObj);
if ( !status.isSuccess() ) {
return status;
}
}
RegEntry* root_entry = parentObj->findLeaf(p_path);
if ( !root_entry && m_enableFaultHdlr ) {
// If not even the parent is there, an incident
// to load the parent must be fired...
handleDataFault(parentObj, p_path);
root_entry = parentObj->findLeaf(p_path);
}
if ( root_entry ) {
DataObject* pO = root_entry->object();
if ( 0 == pO ) {
// Object is not loaded: load the object if at all possible
status = loadObject(root_entry);
if ( !status.isSuccess() ) {
return status;
}
}
if ( root_entry->isSoft() ) {
root_entry = CAST_REGENTRY(RegEntry*,pO->registry());
}
return retrieveEntry (root_entry, o_path, pEntry);
}
return status;
}
else if ( path.length() == 0 ) {
pEntry = parentObj;
}
else {
if (!parentObj->object()) { // if the parent object has not been loaded yet, load it now
status = loadObject(parentObj);
if ( !status.isSuccess() ) {
return status;
}
}
// last leave in search: find leaf and load
pEntry = parentObj->findLeaf(path);
// If no registry entry was found, trigger incident for action-on-demand
if ( !pEntry && m_enableFaultHdlr ) {
handleDataFault(parentObj, path);
pEntry = (0==path.length()) ? parentObj : parentObj->findLeaf(path);
}
}
// Check results and return
if ( 0 == pEntry ) {
status = INVALID_OBJ_PATH;
}
else if ( 0 == pEntry->object() ) {
status = loadObject(pEntry);
}
else if ( m_enableAccessHdlr ) {
// Fire data access incident
// I do not know if this is a good idea....
// This fires too often!
//
//DataIncident incident(name(), m_accessName, pEntry->identifier());
//m_incidentSvc->fireIncident(incident);
status = SUCCESS;
}
else {
status = SUCCESS;
}
}
return status;
}
| StatusCode DataSvc::retrieveObject | ( | IRegistry * | pDirectory, |
| const std::string & | path, | ||
| DataObject *& | pObject | ||
| ) | [virtual] |
Retrieve object from data store.
Retrieve object identified by its directory from the data store.
Definition at line 863 of file DataSvc.cpp.
{
pObject = 0;
RegEntry *result = 0, *parent = CAST_REGENTRY(RegEntry*,pRegistry);
StatusCode status = retrieveEntry(parent, path, result);
if ( status.isSuccess() ) {
pObject = result->object();
}
return status;
}
| StatusCode DataSvc::retrieveObject | ( | const std::string & | fullPath, |
| DataObject *& | pObject | ||
| ) | [virtual] |
Retrieve object identified by its full path from the data store.
Definition at line 876 of file DataSvc.cpp.
{
IRegistry* nullDir = 0;
return retrieveObject(nullDir, fullPath, pObject);
}
| StatusCode DataSvc::retrieveObject | ( | const std::string & | parentPath, |
| const std::string & | objPath, | ||
| DataObject *& | pObject | ||
| ) | [virtual] |
Retrieve object from data store.
Retrieve object identified by its full path from the data store.
Definition at line 883 of file DataSvc.cpp.
{
DataObject* parent = 0;
StatusCode status = retrieveObject(parentPath, parent);
if ( status.isSuccess() ) {
status = retrieveObject (parent, objectPath, pObject);
}
return status;
}
| StatusCode DataSvc::retrieveObject | ( | const std::string & | parentPath, |
| int | item, | ||
| DataObject *& | pObject | ||
| ) | [virtual] |
Retrieve object from data store.
Retrieve object identified by its full path from the data store.
Definition at line 895 of file DataSvc.cpp.
{
return retrieveObject(parentPath, itemToPath(item), pObject);
}
| StatusCode DataSvc::retrieveObject | ( | DataObject * | parentObj, |
| const std::string & | objPath, | ||
| DataObject *& | pObject | ||
| ) | [virtual] |
Retrieve object from data store.
Definition at line 902 of file DataSvc.cpp.
{
IRegistry* pRegistry = (0==parentObj) ? 0 : parentObj->registry();
return retrieveObject(pRegistry, path, pObject);
}
| StatusCode DataSvc::retrieveObject | ( | DataObject * | parentObj, |
| int | item, | ||
| DataObject *& | pObject | ||
| ) | [virtual] |
Retrieve object from data store.
Retrieve registry entry from store.
Definition at line 910 of file DataSvc.cpp.
{
return retrieveObject(parentObj, itemToPath(item), pObject);
}
| CLID DataSvc::rootCLID | ( | ) | const [virtual] |
IDataManagerSvc: Accessor for root event CLID.
CLID for root Event.
Definition at line 1351 of file DataSvc.cpp.
{
return( (CLID)m_rootCLID );
}
| std::string DataSvc::rootName | ( | ) | const [virtual] |
IDataManagerSvc: Accessor for root event name.
Name for root Event.
Definition at line 1356 of file DataSvc.cpp.
{
return( m_rootName );
}
| StatusCode DataSvc::setDataLoader | ( | IConversionSvc * | svc ) | [virtual] |
IDataManagerSvc: IDataManagerSvc: Pass a default data loader to the service.
IDataManagerSvc: Pass a default data loader to the service.
Definition at line 200 of file DataSvc.cpp.
{
if ( 0 != pDataLoader ) pDataLoader->addRef();
if ( 0 != m_dataLoader ) m_dataLoader->release();
if ( 0 != pDataLoader ) {
pDataLoader->setDataProvider(this).ignore();
}
m_dataLoader = pDataLoader;
return SUCCESS;
}
| StatusCode DataSvc::setRoot | ( | const std::string & | root_path, |
| IOpaqueAddress * | pRootAddr | ||
| ) | [virtual] |
Initialize data store for new event by giving new event path and address of root object.
Takes care to clear the store before reinitializing it
Definition at line 177 of file DataSvc.cpp.
{
clearStore().ignore();
return i_setRoot (root_path, pRootAddr);
}
| StatusCode DataSvc::setRoot | ( | const std::string & | root_path, |
| DataObject * | pRootObj | ||
| ) | [virtual] |
Initialize data store for new event by giving new event path and root object.
Takes care to clear the store before reinitializing it
Definition at line 151 of file DataSvc.cpp.
{
clearStore().ignore();
return i_setRoot (root_path, pRootObj);
}
| StatusCode DataSvc::traverseSubTree | ( | DataObject * | pObject, |
| IDataStoreAgent * | pAgent | ||
| ) | [virtual] |
IDataManagerSvc: Analyze by traversing all data objects below the sub tree.
IDataManagerSvc: Analyse by traversing all data objects below the sub tree.
Definition at line 127 of file DataSvc.cpp.
{
if ( checkRoot() ) {
RegEntry* entry = CAST_REGENTRY(RegEntry*,pObject->registry());
if ( 0 != entry ) {
return entry->traverseTree(pAgent);
}
return INVALID_OBJECT;
}
return INVALID_ROOT;
}
| StatusCode DataSvc::traverseSubTree | ( | const std::string & | sub_tree_path, |
| IDataStoreAgent * | pAgent | ||
| ) | [virtual] |
IDataManagerSvc: Analyze by traversing all data objects below the sub tree identified by its full path name.
IDataManagerSvc: Analyse by traversing all data objects below the sub tree identified by its full path name.
Definition at line 116 of file DataSvc.cpp.
{
DataObject* pO = 0;
StatusCode status = findObject(sub_tree_path, pO);
if ( status.isSuccess() ) {
status = traverseSubTree(pO, pAgent);
}
return status;
}
| StatusCode DataSvc::traverseTree | ( | IDataStoreAgent * | pAgent ) | [virtual] |
IDataManagerSvc: Analyze by traversing all data objects in the data store.
IDataManagerSvc: Analyse by traversing all data objects in the data store.
Definition at line 140 of file DataSvc.cpp.
{
if ( checkRoot() ) {
return m_root->traverseTree(pAgent);
}
return INVALID_ROOT;
}
| StatusCode DataSvc::unlinkObject | ( | DataObject * | fromObj, |
| const std::string & | objPath | ||
| ) | [virtual] |
Remove a link to another object.
Definition at line 1218 of file DataSvc.cpp.
{
if ( checkRoot() ) {
IRegistry* from_entry = m_root->findLeaf(from);
return unlinkObject(from_entry, objPath);
}
return INVALID_ROOT;
}
| StatusCode DataSvc::unlinkObject | ( | const std::string & | fullPath ) | [virtual] |
Remove a link to another object.
Definition at line 1193 of file DataSvc.cpp.
{
if ( fullPath.length() > 0 ) {
if ( fullPath[0] != SEPARATOR ) {
return unlinkObject(m_rootName, fullPath);
}
std::string::size_type sep = fullPath.rfind(SEPARATOR);
std::string objPath(fullPath, sep, fullPath.length());
std::string fromPath(fullPath, 0, sep);
return unlinkObject(fromPath, objPath);
}
return INVALID_OBJ_PATH;
}
| StatusCode DataSvc::unlinkObject | ( | IRegistry * | from, |
| const std::string & | objPath | ||
| ) | [virtual] |
Remove a link to another object.
Definition at line 1161 of file DataSvc.cpp.
{
if ( checkRoot() ) {
try {
RegEntry* from_entry = CAST_REGENTRY(RegEntry*,from);
if ( 0 != from_entry ) {
std::string::size_type sep = objPath.rfind(SEPARATOR);
if ( sep > 0 && sep != std::string::npos ) { // in case the objPath is a sub-directory itself
DataObject* pO = 0;
std::string fromPath(objPath, 0, sep);
StatusCode sc = findObject(from, fromPath, pO);
if ( sc.isSuccess() ) {
std::string toPath(objPath, sep, objPath.length());
sc = unlinkObject(pO->registry(), toPath);
}
return sc;
}
StatusCode status = from_entry->remove( objPath );
if ( status.isSuccess() ) {
return status;
}
return INVALID_OBJ_PATH;
}
}
catch (...) {
}
return INVALID_PARENT;
}
return INVALID_ROOT;
}
| StatusCode DataSvc::unlinkObject | ( | const std::string & | fromPath, |
| const std::string & | objPath | ||
| ) | [virtual] |
Remove a link to another object.
Definition at line 1207 of file DataSvc.cpp.
{
DataObject* pObject = 0;
StatusCode status = findObject(from, pObject);
if ( status.isSuccess() ) {
status = unlinkObject(pObject->registry(), objPath);
}
return status;
}
| StatusCode DataSvc::unregisterAddress | ( | const std::string & | fullPath ) | [virtual] |
IDataManagerSvc: Unregister object address from the data store.
Definition at line 342 of file DataSvc.cpp.
{
if ( fullPath.length() > 0 ) {
IRegistry* pRegistry = 0;
if ( fullPath[0] != SEPARATOR ) {
return unregisterAddress(m_root, fullPath);
}
return unregisterAddress(pRegistry, fullPath);
}
return INVALID_OBJ_PATH;
}
| StatusCode DataSvc::unregisterAddress | ( | IRegistry * | pParent, |
| const std::string & | objPath | ||
| ) | [virtual] |
IDataManagerSvc: Unregister object address from the data store.
Definition at line 361 of file DataSvc.cpp.
{
if ( checkRoot() ) {
if ( objPath.length() > 0 ) {
if ( 0 == pParent ) {
if ( objPath[0] != SEPARATOR ) {
return unregisterAddress(m_root, objPath);
}
std::string::size_type sep = objPath.find(SEPARATOR,1);
if ( sep != std::string::npos ) {
std::string p_path (objPath, 0, sep);
if ( p_path == m_rootName ) {
std::string o_path (objPath, sep, objPath.length());
return unregisterAddress(m_root, o_path);
}
}
return INVALID_PARENT;
}
if ( objPath[0] != SEPARATOR ) {
std::string path;
path = SEPARATOR;
path += objPath;
return unregisterAddress(pParent, path);
}
RegEntry* node_entry = CAST_REGENTRY(RegEntry*,pParent);
if ( 0 != node_entry ) {
RegEntry* leaf_entry = node_entry->findLeaf(objPath);
if ( 0 != leaf_entry ) {
std::string::size_type sep = objPath.rfind(SEPARATOR);
if ( sep > 0 && sep != std::string::npos ) {
std::string path = objPath.substr(sep);
return unregisterAddress(leaf_entry->parent(), path);
}
StatusCode status = node_entry->remove(objPath);
if ( status.isSuccess() ) {
return status;
}
}
}
return INVALID_PARENT;
}
return INVALID_OBJ_PATH;
}
return INVALID_ROOT;
}
| StatusCode DataSvc::unregisterAddress | ( | DataObject * | pParent, |
| const std::string & | objPath | ||
| ) | [virtual] |
IDataManagerSvc: Unregister object address from the data store.
Definition at line 354 of file DataSvc.cpp.
{
IRegistry* pRegistry = (0 == pParent) ? 0 : pParent->registry();
return unregisterAddress(pRegistry, objPath);
}
| StatusCode DataSvc::unregisterObject | ( | const std::string & | parentPath, |
| int | item | ||
| ) | [virtual] |
Unregister object from the data store.
Definition at line 575 of file DataSvc.cpp.
{
return unregisterObject(parentPath, itemToPath(item));
}
| StatusCode DataSvc::unregisterObject | ( | const std::string & | fullPath ) | [virtual] |
Unregister object from the data store.
Definition at line 539 of file DataSvc.cpp.
{
DataObject* pObject = 0;
StatusCode status = findObject(fullPath, pObject);
if ( status.isSuccess() ) {
RegEntry* pEntry = CAST_REGENTRY(RegEntry*,pObject->registry());
if ( 0 != pEntry ) {
if ( pEntry->isEmpty() ) {
RegEntry* pParent = pEntry->parentEntry();
if ( 0 != pParent ) {
if ( 0 != pObject ) {
pObject->addRef();
}
pParent->remove(pEntry);
return StatusCode::SUCCESS;
}
return INVALID_PARENT;
}
return DIR_NOT_EMPTY;
}
return INVALID_ROOT;
}
return status;
}
| StatusCode DataSvc::unregisterObject | ( | DataObject * | pObject, |
| int | item | ||
| ) | [virtual] |
Unregister object from the data store.
Definition at line 633 of file DataSvc.cpp.
{
return unregisterObject(pParentObj, itemToPath(item));
}
| StatusCode DataSvc::unregisterObject | ( | const std::string & | parentPath, |
| const std::string & | objectPath | ||
| ) | [virtual] |
Unregister object from the data store.
Definition at line 564 of file DataSvc.cpp.
{
DataObject* pO = 0;
StatusCode status = findObject(parentPath, pO);
if ( status.isSuccess() ) {
status = unregisterObject(pO, objPath);
}
return status;
}
| StatusCode DataSvc::unregisterObject | ( | DataObject * | pObject ) | [virtual] |
Unregister object from the data store.
Definition at line 580 of file DataSvc.cpp.
{
if ( checkRoot() ) {
RegEntry* entry = m_root->findLeaf(pObject);
if ( 0 != entry ) {
RegEntry* parent = entry->parentEntry();
if ( 0 != parent ) {
if ( entry->isEmpty() ) {
if ( 0 != entry->object() ) {
entry->object()->addRef();
}
if ( 0 != parent ) {
parent->remove(entry);
}
return SUCCESS;
}
return INVALID_PARENT;
}
return DIR_NOT_EMPTY;
}
return INVALID_OBJECT;
}
return INVALID_ROOT;
}
| StatusCode DataSvc::unregisterObject | ( | DataObject * | pObject, |
| const std::string & | objectPath | ||
| ) | [virtual] |
Unregister object from the data store.
Definition at line 605 of file DataSvc.cpp.
{
if ( checkRoot() ) {
try {
RegEntry* parent = CAST_REGENTRY(RegEntry*,pParentObj->registry());
if ( 0 != parent ) {
RegEntry* entry = parent->findLeaf(objectPath);
if ( 0 != entry ) {
if ( entry->isEmpty() ) {
if ( 0 != entry->object() ) {
entry->object()->addRef();
}
parent->remove(entry);
return SUCCESS;
}
return DIR_NOT_EMPTY;
}
return INVALID_OBJECT;
}
}
catch(...) {
}
return INVALID_PARENT;
}
return INVALID_ROOT;
}
| StatusCode DataSvc::updateObject | ( | DataObject * | toUpdate ) | [virtual] |
Update object.
Reimplemented in DetDataSvc.
Definition at line 1008 of file DataSvc.cpp.
{
StatusCode status = INVALID_OBJ_ADDR;
if ( 0 == toUpdate ) { // Precondition:
return INVALID_OBJECT; // Address must be valid
}
IRegistry* pRegistry = toUpdate->registry(); // Precondition:
if ( 0 == pRegistry ) { // Need valid registry
return INVALID_OBJECT;
}
IOpaqueAddress* pAddress = pRegistry->address(); // Precondition:
if ( 0 == pAddress ) { // Need valid address
return INVALID_OBJ_ADDR;
}
IConversionSvc* pLoader = getDataLoader(pRegistry);
if ( 0 == pLoader ) { // Precondition:
return NO_DATA_LOADER; // Data loader must be present
}
if ( m_inhibitPathes.size() > 0 ) {
const std::string& ident = pRegistry->identifier();
std::vector<std::string>::iterator inhibit =
std::find(m_inhibitPathes.begin(), m_inhibitPathes.end(), ident);
if ( inhibit != m_inhibitPathes.end() ) {
return NO_ACCESS;
}
}
try {
status = pLoader->updateObj(pAddress, toUpdate); // Call data loader
if ( status.isSuccess() ) {
status = pLoader->updateObjRefs(pAddress, toUpdate);
}
}
catch( const GaudiException& exc ) {
throw GaudiException("GaudiException in updateObject() " +
pRegistry->name(),
name(),
StatusCode::FAILURE, exc);
}
catch( const std::exception& x) {
throw GaudiException("std::exception in updateObject() " +
pRegistry->name() + ": " +
System::typeinfoName(typeid(x)) + ", " +
x.what(),
name(), StatusCode::FAILURE);
}
catch(...) {
throw GaudiException("UNKN exception in updateObject() " +
pRegistry->name(),
name(), StatusCode::FAILURE);
}
return status;
}
| StatusCode DataSvc::updateObject | ( | const std::string & | updatePath ) | [virtual] |
Update object.
Definition at line 986 of file DataSvc.cpp.
{
DataObject* pO = 0;
StatusCode status = findObject(updatePath, pO);
if ( status.isSuccess() ) {
return updateObject(pO);
}
return retrieveObject(updatePath, pO);
}
| StatusCode DataSvc::updateObject | ( | const std::string & | parentPath, |
| const std::string & | updatePath | ||
| ) | [virtual] |
Update object.
Definition at line 1061 of file DataSvc.cpp.
{
DataObject* pParent = 0;
StatusCode status = findObject(parentPath, pParent);
if ( status.isSuccess() ) {
status = updateObject( pParent, updatePath);
}
return status;
}
| StatusCode DataSvc::updateObject | ( | DataObject * | pParent, |
| const std::string & | updatePath | ||
| ) | [virtual] |
Update object.
Definition at line 1072 of file DataSvc.cpp.
{
DataObject* pObject = 0;
StatusCode status = findObject(parent, updatePath, pObject);
if ( status.isSuccess() ) {
status = updateObject(pObject);
}
return status;
}
| StatusCode DataSvc::updateObject | ( | IRegistry * | pDirectory ) | [virtual] |
Update object identified by its directory entry.
Update object.
Definition at line 996 of file DataSvc.cpp.
{
if ( 0 == pRegistry ) { // Precondition:
return INVALID_OBJ_ADDR; // Addres must be valid
}
DataObject* toUpdate = pRegistry->object();
if ( 0 == toUpdate ) { // Try first to load
return loadObject(pRegistry);
}
return updateObject(toUpdate);
}
friend class SvcFactory< DataSvc > [friend] |
std::string DataSvc::m_accessName [protected] |
IConversionSvc* DataSvc::m_dataLoader [protected] |
bool DataSvc::m_enableAccessHdlr [protected] |
bool DataSvc::m_enableFaultHdlr [protected] |
std::string DataSvc::m_faultName [protected] |
bool DataSvc::m_forceLeaves [protected] |
IIncidentSvc* DataSvc::m_incidentSvc [protected] |
DataSvcHelpers::InhibitMap* DataSvc::m_inhibitMap [protected] |
std::vector<std::string> DataSvc::m_inhibitPathes [protected] |
LoadItems DataSvc::m_preLoads [protected] |
DataSvcHelpers::RegistryEntry* DataSvc::m_root [protected] |
CLID DataSvc::m_rootCLID [protected] |
std::string DataSvc::m_rootName [protected] |