51 #define NCBI_USE_ERRCODE_X ObjMgr_Main
65 static bool s_DebugScope(
void)
68 return sx_Value->
Get();
76 if ( s_DebugScope() ) {
78 s_ScopeRegisterMap.
Get()[&scope] = st;
84 if ( s_DebugScope() ) {
85 s_ScopeRegisterMap.
Get().erase(&scope);
89 void s_DumpScopes(
void)
91 if ( s_DebugScope() ) {
92 ITERATE ( TScopeRegisterMap, it, s_ScopeRegisterMap.
Get() ) {
93 ERR_POST(
"Scope "<<it->first<<
" registered at "<<*it->second);
123 ERR_POST_X(1,
"Attempt to delete Object Manager with open scopes");
138 ERR_POST_X(2,
"Attempt to delete Object Manager with used datasources");
165 "CObjectManager::RegisterDataLoader: " << e.
GetMsg());
189 const string& driver_name)
198 TDLVersion::ePatchLevel),
205 string loader_name = loader.
GetName();
210 if ( my_loader != &loader ) {
212 "Data loader " + loader_name +
" not registered");
227 "Data loader " + loader_name +
" not registered");
239 iter->second->RevokeDataLoader();
262 source->RevokeDataLoader();
273 _ASSERT(iter->second->GetDataLoader() == loader);
275 if ( !iter->second->ReferencedOnlyOnce() ) {
279 ERR_POST_X(5,
"CObjectManager::RevokeDataLoader: "
280 "data loader is in use");
305 names.push_back(it->first);
319 "Data loader " + loader_name +
" not registered");
332 data_source->second->GetDefaultPriority() != priority) {
333 data_source->second->SetDefaultPriority(priority);
346 s_RegisterScope(scope);
356 s_RevokeScope(scope);
389 "Data loader " + loader_name +
" not found");
406 source->DoDeleteThisObject();
428 source->DoDeleteThisObject();
452 source->DoDeleteThisObject();
481 string loader_name = loader.
GetName();
485 pair<TMapNameToLoader::iterator, bool> ins =
488 if ( ins.first->second != &loader ) {
490 "Attempt to register different data loaders "
491 "with the same name");
495 "CObjectManager::RegisterDataLoader() -- data loader " <<
496 loader_name <<
" already registered");
502 ins.first->second = &loader;
506 source->DoDeleteThisObject();
508 source->SetDefaultPriority(priority);
546 ERR_POST_X(7,
"CObjectManager::ReleaseDataSource: "
547 "unknown data source");
551 _ASSERT(pSource == iter->second);
557 pSource = iter->second;
CDataLoader * GetDataLoader(void) const
const CConstRef< CObject > & GetSharedObject(void) const
void Release()
Manually force the resource to be released.
Base class for all object manager exceptions.
@ eLifeLevel_AppMain
Destroyed in CNcbiApplication::AppMain, if possible.
T & Get(void)
Create the variable if not created yet, return the reference.
definition of a Culling tree
container_type::const_iterator const_iterator
container_type::iterator iterator
const_iterator begin() const
const_iterator end() const
iterator_bool insert(const value_type &val)
container_type::value_type value_type
const_iterator find(const key_type &key) const
iterator_bool insert(const value_type &val)
const_iterator begin() const
parent_type::iterator iterator
const_iterator find(const key_type &key) const
const_iterator end() const
static const struct name_t names[]
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define ERASE_ITERATE(Type, Var, Cont)
Non-constant version with ability to erase current element, if container permits.
#define NON_CONST_ITERATE(Type, Var, Cont)
Non constant version of ITERATE macro.
#define ERR_POST_X(err_subcode, message)
Error posting with default error code and given error subcode.
#define ERR_POST(message)
Error posting with file, line number information but without error codes.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
const string & GetMsg(void) const
Get message string.
void Warning(CExceptionArgs_Base &args)
void Set(CDataLoader *loader, bool created)
void AcquireDefaultDataSources(TDataSourcesLock &sources)
TMapNameToLoader m_mapNameToLoader
TDataSourceLock AcquireSharedSeq_entry(const CSeq_entry &object)
static CRef< CObjectManager > GetInstance(void)
Return the existing object manager or create one.
TDataSourceLock x_RevokeDataLoader(CDataLoader *loader)
virtual CDataLoader * CreateLoader(void) const =0
void RevokeDataLoaders(IDataLoaderFilter &filter)
Revoke data loaders by filter, even if they were still used.
void RevokeScope(CScope_Impl &scope)
TSetDefaultSource m_setDefaultSource
string GetName(void) const
void RevokeAllDataLoaders(void)
Revoke all registered data loaders, even if they were still used.
void SetLoaderOptions(const string &loader_name, EIsDefault is_default, TPriority priority=kPriority_Default)
Update loader's default-ness and priority.
CDataLoader * FindDataLoader(const string &loader_name) const
Try to find a registered data loader by name.
virtual ~CObjectManager(void)
TRegisterInfo_Base m_RegisterInfo
TMapToSource m_mapToSource
EIsDefault
Flag defining if the data loader is included in the "default" group.
CDataLoader * RegisterDataLoader(TPluginManagerParamTree *params=0, const string &driver_name=kEmptyStr)
Add data loader using plugin manager.
TDataSourceLock AcquireSharedBioseq(const CBioseq &object)
TDataSourceLock AcquireSharedSeq_annot(const CSeq_annot &object)
void RegisterScope(CScope_Impl &scope)
virtual bool IsDataLoaderMatches(CDataLoader &loader) const =0
CRef< CDataSource > TDataSourceLock
unique_ptr< TPluginManager > m_PluginManager
TDataSourceLock AcquireDataLoader(CDataLoader &loader)
void GetRegisteredNames(TRegisteredNames &names)
Get names of all registered data loaders.
virtual ~IDataLoaderFilter()
vector< string > TRegisteredNames
TDataSourceLock x_RegisterLoader(CDataLoader &loader, TPriority priority, EIsDefault is_default=eNonDefault, bool no_warning=false)
TPluginManager & x_GetPluginManager(void)
TDataSourceLock x_FindDataSource(const CObject *key)
void ReleaseDataSource(TDataSourceLock &data_source)
bool RevokeDataLoader(CDataLoader &loader)
Revoke previously registered data loader.
CDataLoader * x_GetLoaderByName(const string &loader_name) const
@ kPriority_Default
Use default priority for added data.
CRef< C > Ref(C *object)
Helper functions to get CRef<> and CConstRef<> objects.
void Reset(void)
Reset reference object.
bool NotEmpty(void) const THROWS_NONE
Check if CRef is not empty – pointing to an object and has a non-null value.
bool Referenced(void) const THROWS_NONE
Check if object is referenced.
bool ReferencedOnlyOnce(void) const THROWS_NONE
Check if object is referenced only once.
#define NCBI_PARAM_TYPE(section, name)
Generate typename for a parameter from its {section, name} attributes.
#define NCBI_PARAM_DECL(type, section, name)
Parameter declaration.
#define NCBI_PARAM_DEF(type, section, name, default_value)
Parameter definition.
TClass * CreateInstance(const string &driver=kEmptyStr, const CVersionInfo &version=GetDefaultDrvVers(), const TPluginManagerParamTree *params=0)
Create class instance.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define END_SCOPE(ns)
End the previously defined scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
#define BEGIN_SCOPE(ns)
Define a new scope.
TSet & SetSet(void)
Select the variant.
TAnnot & SetAnnot(void)
Assign a value to Annot data member.
TSeq & SetSeq(void)
Select the variant.
TSeq_set & SetSeq_set(void)
Assign a value to Seq_set data member.
Definition of all error codes used in objmgr libraries (xobjmgr.lib, xobjutil.lib and others).
const struct ncbi::grid::netcache::search::fields::KEY key
const CharType(& source)[N]
Static variables safety - create on demand, destroy on application termination.
NCBI_DEFINE_ERR_SUBCODE_X(7)