JeVois  1.0
JeVois Smart Embedded Machine Vision Toolkit

#include <jevois/Component/Manager.H>

Manager of a hierarchy of Component objects.

A Manager should be the top-level Component of any hierarchy of Components. It is primarily responsible for handling the setting of Parameter values via the command-line or otherwise.

Users should only need to construct a Manager (including Engine, which derives from Manager), add any Component to it, and then call init() on the Manager, which will parse all command line options, bind them to the relevant Parameters, and call init() on all subComponents (which in turn calls init() on all of their subComponents, etc.). See the documentation of Component for more information about the init() flow.

Definition at line 66 of file Manager.H.

Inheritance diagram for jevois::Manager:
Collaboration diagram for jevois::Manager:

Public Member Functions

Manager construction, destruction, parsing command-line arguments
 Manager (std::string const &instance="TheManager")
 Constructor without command-line args. More...
 
 Manager (int argc, char const *argv[], std::string const &instance="TheManager")
 Constructor. More...
 
void setCommandLineArgs (int argc, char const *argv[])
 Set the command-line arguments, call this before start() if args were not passed at construction. More...
 
virtual ~Manager ()
 Destructor. More...
 
Component hierarchies unser the Manager
template<class Comp , typename... Args>
std::shared_ptr< Comp > addComponent (std::string const &instanceName, Args &&...args)
 Pseudo-constructor: construct a top-level Component. More...
 
template<class Comp , typename... Args>
std::shared_ptr< Comp > addSubComponent (std::string const &instanceName, Args &&...args)=delete
 Use addComponent() on the Manager as opposed to jevois::Component::addSubComponent() More...
 
template<class Comp >
void removeComponent (std::shared_ptr< Comp > &component)
 Remove a top-level Component from the Manager, by shared_ptr. More...
 
template<class Comp >
void removeSubComponent (std::shared_ptr< Comp > &component)=delete
 Use removeComponent() on the Manager as opposed to jevois::Component::removeSubComponent() More...
 
void removeComponent (std::string const &instanceName, bool warnIfNotFound=true)
 Remove a top-level Component from the Manager, by instance name. More...
 
void removeSubComponent (std::string const &instanceName, bool warnIfNotFound)=delete
 Use removeComponent() on the Manager as opposed to jevois::Component::removeSubComponent() More...
 
template<class Comp = jevois::Component>
std::shared_ptr< Comp > getComponent (std::string const &instanceName) const
 Get a top-level component by instance name. More...
 
template<class Comp >
std::shared_ptr< Comp > getSubComponent (std::string const &instanceName) const =delete
 Use getComponent() on the Manager as opposed to jevois::Component::getSubComponent() More...
 
Manager runtime
std::vector< std::string > const & remainingArgs () const
 Get the remaining arguments that were not parsed by the command line. More...
 
- Public Member Functions inherited from jevois::Component
 Component (std::string const &instance)
 Constructor. More...
 
virtual ~Component ()
 Virtual destructor for safe inheritance. More...
 
template<>
std::shared_ptr< ComponentgetSubComponent (std::string const &instance) const
 
template<class Comp , typename... Args>
std::shared_ptr< Comp > addSubComponent (std::string const &instance, Args &&...args)
 Pseudo-constructor: construct and add another component as a subcomponent of this one. More...
 
template<class Comp >
void removeSubComponent (std::shared_ptr< Comp > &component)
 Remove a sub-Component from this Component, by shared_ptr. More...
 
void removeSubComponent (std::string const &instance, bool warnIfNotFound=true)
 Remove a sub-Component from this Component, by instance name. More...
 
template<class Comp = jevois::Component>
std::shared_ptr< Comp > getSubComponent (std::string const &instance) const
 Get a sub-component by instance name. More...
 
bool isTopLevel () const
 Returns true if this component is top-level, i.e., its parent is jevois::Manager. More...
 
bool initialized () const
 Has this component been initialized yet? More...
 
std::string const & className () const
 The class name of this component. More...
 
std::string const & instanceName () const
 The instance name of this component. More...
 
template<typename T >
std::vector< std::string > setParamVal (std::string const &paramdescriptor, T const &val)
 Set a parameter value. More...
 
template<typename T >
void setParamValUnique (std::string const &paramdescriptor, T const &val)
 Set a parameter value, simple version assuming only one parameter match. More...
 
template<typename T >
std::vector< std::pair< std::string, T > > getParamVal (std::string const &paramdescriptor) const
 Get parameter(s) value(s) by descriptor. More...
 
template<typename T >
getParamValUnique (std::string const &paramdescriptor) const
 Get a parameter value, simple version assuming only one parameter match. More...
 
std::vector< std::string > setParamString (std::string const &paramdescriptor, std::string const &val)
 Set a parameter value, by string. More...
 
void setParamStringUnique (std::string const &paramdescriptor, std::string const &val)
 Set a parameter value by string, simple version assuming only one parameter match. More...
 
std::vector< std::pair< std::string, std::string > > getParamString (std::string const &paramdescriptor) const
 Get a parameter value, by string. More...
 
std::string getParamStringUnique (std::string const &paramdescriptor) const
 Get a parameter value by string, simple version assuming only one parameter match. More...
 
void freezeParam (std::string const &paramdescriptor)
 Freeze a parameter, by name, see ParameterBase::freeze() More...
 
void unFreezeParam (std::string const &paramdescriptor)
 Unfreeze a parameter, by name, see ParameterBase::unFreeze() More...
 
void freezeAllParams ()
 Freeze all parameters. More...
 
void unFreezeAllParams ()
 Unfreeze all parameters. More...
 
std::string descriptor () const
 Get our full descriptor (including all parents) as [Instancename]:[...]:[...]. More...
 
void setParamsFromFile (std::string const &filename)
 Set some parameters from a file. More...
 
std::istream & setParamsFromStream (std::istream &is, std::string const &absfile)
 Set some parameters from an open stream. More...
 
void setPath (std::string const &path)
 Assign a filesystem path to this component. More...
 
std::string absolutePath (std::string const &path="")
 If given path is relative (not starting with /), prepend the Component path to it. More...
 
- Public Member Functions inherited from jevois::ParameterRegistry
virtual ~ParameterRegistry ()
 Virtual destructor for safe inheritance. More...
 

Protected Member Functions

void onParamChange (manager::loglevel const &param, manager::LogLevel const &newval)
 Parameter callback. More...
 
void onParamChange (manager::tracelevel const &param, unsigned int const &newval)
 Parameter callback. More...
 
void preInit () override
 Calls parseCommandLine() More...
 
void postInit () override
 Checks for the –help flag. More...
 
void constructHelpMessage (std::ostream &out) const
 Constructs a help message from all parameters in the model, and outputs it to 'out'. More...
 
void printHelpMessage () const
 Constructs a help message and tries to send it to /usr/bin/less. More...
 
- Protected Member Functions inherited from jevois::Component
virtual void preUninit ()
 Called before all sub-Components are uninit()ed. More...
 
virtual void postUninit ()
 Called after all sub-Components are uninit()ed. More...
 
- Protected Member Functions inherited from jevois::ParameterRegistry
void addParameter (ParameterBase *const param)
 The Parameter class uses this method to register itself on construction with its owning Component. More...
 
void removeParameter (ParameterBase *const param)
 The Parameter class uses this method to un-register itself on destruction with its owning Component. More...
 
void callbackInitCall ()
 For all parameters that have a callback which has never been called, call it with the default param value. More...
 

Related Functions

(Note that these are not member functions.)

static ParameterCategory const ParamCateg ("General Options")
 Parameter category. More...
 
#define JEVOIS_DECLARE_PARAMETER(ParamName, ParamType, ...)
 Parameter. More...
 
 JEVOIS_DEFINE_ENUM_CLASS (LogLevel,(fatal)(error)(info)(debug))
 Enum for Parameter. More...
 
#define JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK(ParamName, ParamType, ...)
 Parameter. More...
 
#define JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK(ParamName, ParamType, ...)
 Parameter. More...
 

Constructor & Destructor Documentation

jevois::Manager::Manager ( std::string const &  instance = "TheManager")

Constructor without command-line args.

The command-line args should be passed later using setArgs(), before you init(), otherwise the manager will issue a non-fatal warning.

Definition at line 27 of file Manager.C.

jevois::Manager::Manager ( int  argc,
char const *  argv[],
std::string const &  instance = "TheManager" 
)

Constructor.

Creates the Manager, and optionally takes in the command line arguments.

Definition at line 32 of file Manager.C.

jevois::Manager::~Manager ( )
virtual

Destructor.

Definition at line 45 of file Manager.C.

Member Function Documentation

template<class Comp , typename... Args>
std::shared_ptr< Comp > jevois::Manager::addComponent ( std::string const &  instanceName,
Args &&...  args 
)
inline

Pseudo-constructor: construct a top-level Component.

A component of type Comp (which must derive from jevois::Component) will be created and added as a sub-component of the manager (making it a so-called top-level component). The child logically "belongs" to the Manager, and will automatically be deleted when the Manager is deleted. In addition to construction, the component will be brought to the same initialized state as the Manager.

Definition at line 26 of file ManagerImpl.H.

References jevois::Component::absolutePath(), and LDEBUG.

template<class Comp , typename... Args>
std::shared_ptr<Comp> jevois::Manager::addSubComponent ( std::string const &  instanceName,
Args &&...  args 
)
delete
void jevois::Manager::constructHelpMessage ( std::ostream &  out) const
protected

Constructs a help message from all parameters in the model, and outputs it to 'out'.

Definition at line 82 of file Manager.C.

template<class Comp >
std::shared_ptr< Comp > jevois::Manager::getComponent ( std::string const &  instanceName) const
inline

Get a top-level component by instance name.

This method does a dynamic_pointer_cast to Comp if it is not the default (jevois::Component). Throws if component is not found by instance name, or it is found but not of type Comp (if Comp is specified). Note that once you hold a shared_ptr to a Component, it is guaranteed that the component will not be destroyed until that shared_ptr is released. If the JeVois system tries to destroy the component, e.g., someone calls removeComponent(), the component will be un-initialized and its parent will be unset, so it will not be fully operational, and will be actually deleted when the last shared_ptr to it runs out of scope.

Definition at line 60 of file ManagerImpl.H.

References LFATAL.

template<class Comp >
std::shared_ptr<Comp> jevois::Manager::getSubComponent ( std::string const &  instanceName) const
delete
void jevois::Manager::onParamChange ( manager::loglevel const &  param,
manager::LogLevel const &  newval 
)
protected

Parameter callback.

void jevois::Manager::onParamChange ( manager::tracelevel const &  param,
unsigned int const &  newval 
)
protected

Parameter callback.

void jevois::Manager::postInit ( )
overrideprotectedvirtual

Checks for the –help flag.

Reimplemented from jevois::Component.

Reimplemented in jevois::Engine.

Definition at line 58 of file Manager.C.

References LINFO.

Referenced by jevois::Engine::postInit().

void jevois::Manager::preInit ( )
overrideprotectedvirtual

Calls parseCommandLine()

Reimplemented from jevois::Component.

Reimplemented in jevois::Engine.

Definition at line 49 of file Manager.C.

References LERROR.

Referenced by jevois::Engine::preInit().

void jevois::Manager::printHelpMessage ( ) const
protected

Constructs a help message and tries to send it to /usr/bin/less.

Definition at line 76 of file Manager.C.

std::vector< std::string > const & jevois::Manager::remainingArgs ( ) const

Get the remaining arguments that were not parsed by the command line.

Any command line arguments after a lone '–' will be available in remainingArgs()

Definition at line 168 of file Manager.C.

template<class Comp >
void jevois::Manager::removeComponent ( std::shared_ptr< Comp > &  component)

Remove a top-level Component from the Manager, by shared_ptr.

Note
Beware that the passed shared_ptr is invalidated in the process. A warning is issued if the use_count is not down to zero after that (i.e., there are additional shared_ptr pointers to this Component floating around, which prevent it from actually being deleted.

Definition at line 100 of file ManagerImpl.H.

References LERROR.

void jevois::Manager::removeComponent ( std::string const &  instanceName,
bool  warnIfNotFound = true 
)

Remove a top-level Component from the Manager, by instance name.

Definition at line 172 of file Manager.C.

References LERROR.

template<class Comp >
void jevois::Manager::removeSubComponent ( std::shared_ptr< Comp > &  component)
delete
void jevois::Manager::removeSubComponent ( std::string const &  instanceName,
bool  warnIfNotFound 
)
delete
void jevois::Manager::setCommandLineArgs ( int  argc,
char const *  argv[] 
)

Set the command-line arguments, call this before start() if args were not passed at construction.

Definition at line 38 of file Manager.C.

Friends And Related Function Documentation

#define JEVOIS_DECLARE_PARAMETER (   ParamName,
  ParamType,
  ... 
)
related
Value:
struct ParamName : public virtual jevois::ParameterRegistry, public jevois::ParameterCore<ParamType> \
{ \
typedef ParamType type; \
\
inline ParamName() : jevois::ParameterCore<ParamType>(jevois::ParameterDef<ParamType>(#ParamName, __VA_ARGS__)) \
\
inline virtual ~ParamName() \
\
inline virtual jevois::Component const * owner() const override \
{ return dynamic_cast<jevois::Component const *>(static_cast<jevois::ParameterRegistry const *>(this)); } \
};

Parameter.

#define JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK (   ParamName,
  ParamType,
  ... 
)
related
Value:
struct ParamName : public virtual jevois::ParameterRegistry, public jevois::ParameterCore<ParamType> \
{ \
typedef ParamType type; \
\
virtual void onParamChange(ParamName const & param, ParamType const & newval) = 0; \
\
inline ParamName() : jevois::ParameterCore<ParamType>(jevois::ParameterDef<ParamType>(#ParamName, __VA_ARGS__)) \
{ setCallback([this](ParamType const & newval) { this->onParamChange(*this, newval); }); \
\
inline virtual ~ParamName() \
\
inline virtual jevois::Component const * owner() const override \
{ return dynamic_cast<jevois::Component const *>(static_cast<jevois::ParameterRegistry const *>(this)); } \
};

Parameter.

#define JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK (   ParamName,
  ParamType,
  ... 
)
related
Value:
struct ParamName : public virtual jevois::ParameterRegistry, public jevois::ParameterCore<ParamType> \
{ \
typedef ParamType type; \
\
virtual void onParamChange(ParamName const & param, ParamType const & newval) = 0; \
\
inline ParamName() : jevois::ParameterCore<ParamType>(jevois::ParameterDef<ParamType>(#ParamName, __VA_ARGS__)) \
{ setCallback([this](ParamType const & newval) { this->onParamChange(*this, newval); }); \
\
inline virtual ~ParamName() \
\
inline virtual jevois::Component const * owner() const override \
{ return dynamic_cast<jevois::Component const *>(static_cast<jevois::ParameterRegistry const *>(this)); } \
};

Parameter.

JEVOIS_DEFINE_ENUM_CLASS ( LogLevel  ,
(fatal)(error)(info)(debug)   
)
related

Enum for Parameter.

ParameterCategory const ParamCateg("General Options")
related

Parameter category.


The documentation for this class was generated from the following files: