throw;
}
- impl->m_Config = this;
- impl->Start();
m_Impl = impl;
}
m_Impl->Stop();
}
+/**
+ * Starts the component. Called when the DynamicObject is fully
+ * constructed/registered.
+ */
+void Component::Start(void)
+{
+ m_Impl->m_Config = GetSelf();
+ m_Impl->Start();
+}
+
/**
* Adds a directory to the component search path.
*
*/
DynamicObject::Ptr IComponent::GetConfig(void) const
{
- return m_Config->GetSelf();
+ return m_Config.lock();
}
/**
DynamicObject::Ptr GetConfig(void) const;
private:
- DynamicObject *m_Config; /**< The configuration object for this
+ DynamicObject::WeakPtr m_Config; /**< The configuration object for this
component. */
friend class Component;
Component(const Dictionary::Ptr& properties);
~Component(void);
+ virtual void Start(void);
+
static void AddSearchDir(const String& componentDirectory);
private:
ti.first->second.insert(make_pair(GetName(), GetSelf()));
OnRegistered(GetSelf());
+
+ Start();
+}
+
+void DynamicObject::Start(void)
+{
+ /* Nothing to do here. */
}
void DynamicObject::Unregister(void)
void Register(void);
void Unregister(void);
+ virtual void Start(void);
+
static DynamicObject::Ptr GetObject(const String& type, const String& name);
static pair<TypeMap::iterator, TypeMap::iterator> GetTypes(void);
static pair<NameMap::iterator, NameMap::iterator> GetObjects(const String& type);