JeVois  1.20
JeVois Smart Embedded Machine Vision Toolkit
Share this page:

#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.

The parameter nickname is not internally used by the Manager. It can be set, for example, in initscript.cfg to a different value for each camera, in systems that use multiple JeVois cameras connected to a single USB bus.

Definition at line 73 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 under 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
const std::vector< std::string > & 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<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...
 
Engineengine () const
 Get a handle to our Engine, or throw if we do not have an Engine as root ancestor. More...
 
bool initialized () const
 Has this component been initialized yet? More...
 
const std::string & className () const
 The class name of this component. More...
 
const std::string & 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...
 
virtual void paramInfo (std::shared_ptr< UserInterface > s, std::map< std::string, std::string > &categs, bool skipFrozen, std::string const &cname="", std::string const &pfx="")
 Get machine-oriented descriptions of all parameters. More...
 
void foreachParam (std::function< void(std::string const &compname, ParameterBase *p)> func, std::string const &cname="")
 Run a function on every param we hold. More...
 
template<typename T >
std::shared_ptr< DynamicParameter< T > > addDynamicParameter (std::string const &name, std::string const &description, T const &defaultValue, ParameterCategory const &category)
 Add a new parameter after the Component has already been constructed. More...
 
template<typename T , template< typename > class ValidValuesSpec>
std::shared_ptr< DynamicParameter< T > > addDynamicParameter (std::string const &name, std::string const &description, T const &defaultValue, ValidValuesSpec< T > const &validValuesSpec, ParameterCategory const &category)
 Add a new parameter after the Component has already been constructed. More...
 
template<typename T >
void setDynamicParameterCallback (std::string const &name, std::function< void(T const &)> cb, bool callnow=true)
 Register a callback with a previously created dynamic parameter. More...
 
void removeDynamicParameter (std::string const &name)
 Remove a previously added dynamic parameter. More...
 
void setPath (std::string const &path)
 Assign a filesystem path to this component. More...
 
std::filesystem::path absolutePath (std::filesystem::path 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) override
 Parameter callback. More...
 
void onParamChange (manager::tracelevel const &param, unsigned int const &newval) override
 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 const ParameterCategory ParamCateg ("General Options")
 Parameter category. More...
 
 JEVOIS_DECLARE_PARAMETER (help, bool, "Print this help message", false, ParamCateg)
 Parameter. More...
 
 JEVOIS_DEFINE_ENUM_CLASS (LogLevel,(fatal)(error)(info)(debug))
 Enum for Parameter. More...
 
 JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK (loglevel, LogLevel, "Set the minimum log level to display", LogLevel::info, LogLevel_Values, ParamCateg)
 Parameter. More...
 
 JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK (tracelevel, unsigned int, "Set the minimum trace level to display", 0, ParamCateg)
 Parameter. More...
 
 JEVOIS_DECLARE_PARAMETER (nickname, std::string, "Nickname associated with this camera, useful when multiple " "JeVois cameras are connected to a same USB bus", "jevois", ParamCateg)
 Parameter. More...
 

Constructor & Destructor Documentation

◆ Manager() [1/2]

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.

◆ Manager() [2/2]

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.

◆ ~Manager()

jevois::Manager::~Manager ( )
virtual

Destructor.

Definition at line 45 of file Manager.C.

Member Function Documentation

◆ addComponent()

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

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.

◆ addSubComponent()

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

◆ constructHelpMessage()

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.

◆ getComponent()

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

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.

Referenced by jevois::GUIhelper::drawConsole().

◆ getSubComponent()

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

◆ onParamChange() [1/2]

void jevois::Manager::onParamChange ( manager::loglevel const &  param,
manager::LogLevel const &  newval 
)
overrideprotected

Parameter callback.

◆ onParamChange() [2/2]

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

Parameter callback.

◆ postInit()

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 jevois::imu::get(), and LINFO.

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

◆ preInit()

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().

◆ printHelpMessage()

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.

◆ remainingArgs()

const std::vector< std::string > & 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.

◆ removeComponent() [1/2]

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.

◆ removeComponent() [2/2]

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.

◆ removeSubComponent() [1/2]

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

◆ removeSubComponent() [2/2]

void jevois::Manager::removeSubComponent ( std::string const &  instanceName,
bool  warnIfNotFound 
)
delete

◆ setCommandLineArgs()

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

◆ JEVOIS_DECLARE_PARAMETER() [1/2]

JEVOIS_DECLARE_PARAMETER ( help  ,
bool  ,
"Print this help message"  ,
false  ,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DECLARE_PARAMETER() [2/2]

JEVOIS_DECLARE_PARAMETER ( nickname  ,
std::string  ,
"Nickname associated with this  camera,
useful when multiple " "JeVois cameras are connected to a same USB bus"  ,
"jevois"  ,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK() [1/2]

JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK ( loglevel  ,
LogLevel  ,
"Set the minimum log level to display"  ,
LogLevel::info  ,
LogLevel_Values  ,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK() [2/2]

JEVOIS_DECLARE_PARAMETER_WITH_CALLBACK ( tracelevel  ,
unsigned int  ,
"Set the minimum trace level to display"  ,
,
ParamCateg   
)
related

Parameter.

◆ JEVOIS_DEFINE_ENUM_CLASS()

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

Enum for Parameter.

◆ ParamCateg

const ParameterCategory ParamCateg("General Options")
related

Parameter category.


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