ArConfig Class Reference

#include <ArConfig.h>

Inheritance diagram for ArConfig:

ArRobotParams List of all members.

Detailed Description

Stores configuration information which may be read to and from files or other sources.

The configuration is a set of parameters (or config arguments), organized into sections. Parameters contain a key or name (a short string), a value (which may be one of several types), a priority (important, normal, or trivial to most users), a longer description, and a display hint which suggests what kind of UI control might be most appropriate for the parameter. After adding a parameter to the configuration, its value may be changed when the configuration is loaded or reloaded from a file. Various program modules may register callbacks to be notified when a shared global configuration (such as the static ArConfig object kept by the Aria class) is loaded or otherwise changed.

Classes dealing with more specialized kinds of config files inherit from this one.

Important methods in this class are: addParam(), addProcessFileCB(), remProcessFileCB(), parseFile(), writeFile().

Usually, configuration data are read from and written to a file using parseFile() and writeFile(), or are set by a remote client via ArNetworking. It is also possible to import configuration settings from an ArArgumentParser (which, for example, may contain a program's command line arguments) using useArgumentParser().

Warning:
ArConfig does not escape any special characters when writing or loading to/from a file. Therefore in general parameter names, values, section names, and comments must not contain characters which have special meaning in a config file, such as '#', ';', tab or newline. (see also ArFileParser) Parameter names may have spaces, though by convention they generally do not.


Public Member Functions

bool addComment (const char *comment, const char *sectionName="", ArPriority::Priority priority=ArPriority::NORMAL)
 Command to add a new comment to the given section with given priority.
bool addParam (const ArConfigArg &arg, const char *sectionName="", ArPriority::Priority priority=ArPriority::NORMAL, const char *displayHint=NULL)
 Command to add a parameter to the given section with given priority.
void addProcessFileCB (ArRetFunctor2< bool, char *, size_t > *functor, int priority=0)
void addProcessFileCB (ArRetFunctor< bool > *functor, int priority=0)
void addProcessFileWithErrorCB (ArRetFunctor2< bool, char *, size_t > *functor, int priority=0)
bool addSectionFlags (const char *sectionName, const char *flags)
 adds a flag to a section
 ArConfig (const ArConfig &config)
 Copy constructor.
 ArConfig (const char *baseDirectory=NULL, bool noBlanksBetweenParams=false, bool ignoreBounds=false, bool failOnBadSection=false, bool saveUnknown=true)
 Constructor.
bool callProcessFileCallBacks (bool continueOnError, char *errorBuffer=NULL, size_t errorBufferLen=0)
 Call the processFileCBs.
void clearAll (void)
 Clears out all the section information and the processFileCBs.
void clearAllValueSet (void)
 calls clearValueSet on the whole config (internal for default configs)
void clearSections (void)
 Clears out all the section information.
ArConfigSectionfindSection (const char *sectionName) const
const char * getBaseDirectory (void) const
 Get the base directory.
const char * getFileName (void) const
 Get the file name we loaded.
bool getNoBlanksBetweenParams (void)
 Get whether we have blanks between the params or not.
ArLog::LogLevel getProcessFileCallbacksLogLevel (void)
 Get the log level used when loading or reloading the configuration.
bool getSaveUnknown (void)
 Gets whether we save unknowns (if we don't save 'em we ignore 'em).
std::list< ArConfigSection * > * getSections (void)
 Get the sections themselves (use only if you know what to do).
void log (bool isSummary=true)
ArConfigoperator= (const ArConfig &config)
bool parseArgument (ArArgumentBuilder *arg, char *errorBuffer=NULL, size_t errorBufferLen=0)
 This parses the argument given (for parser or other use).
bool parseArgumentParser (ArArgumentParser *parser, bool continueOnError=false, char *errorBuffer=NULL, size_t errorBufferLen=0)
 Use an argument parser to change the config.
bool parseFile (const char *fileName, bool continueOnError=false, bool noFileNotFoundMessage=false, char *errorBuffer=NULL, size_t errorBufferLen=0, std::list< std::string > *sectionsToParse=NULL)
 Parse a config file.
bool parseSection (ArArgumentBuilder *arg, char *errorBuffer=NULL, size_t errorBufferLen=0)
 This parses the section change (for parser or other use).
bool parseUnknown (ArArgumentBuilder *arg, char *errorBuffer=NULL, size_t errorBufferLen=0)
 This parses an unknown argument (so we can save it).
virtual bool processFile (void)
 for inheritors this is called after the file is processed
void removeAllUnsetValues (void)
 Removes all unset values from the config (internal for default configs).
void remProcessFileCB (ArRetFunctor2< bool, char *, size_t > *functor)
 Removes a processedFile callback.
void remProcessFileCB (ArRetFunctor< bool > *functor)
 Removes a processedFile callback.
bool remSectionFlag (const char *sectionName, const char *flag)
 Removes a flag from a section.
void setBaseDirectory (const char *baseDirectory)
 Set the base directory.
virtual void setConfigName (const char *configName, const char *robotName=NULL)
 Stores an optional config and robot name to be used in log messages.
void setNoBlanksBetweenParams (bool noBlanksBetweenParams)
 Set whether we have blanks between the params or not.
void setProcessFileCallbacksLogLevel (ArLog::LogLevel level)
 Set the log level used when loading or reloading the configuration.
virtual void setQuiet (bool isQuiet)
 Turn on this flag to reduce the number of verbose log messages.
void setSaveUnknown (bool saveUnknown)
 Sets whether we save unknown items (if we don't save 'em we ignore 'em).
void setSectionComment (const char *sectionName, const char *comment)
 Sets the comment for a section.
void useArgumentParser (ArArgumentParser *parser)
 Uses this argument parser after it parses a file before it processes.
bool writeFile (const char *fileName, bool append=false, std::set< std::string > *alreadyWritten=NULL, bool writePriorities=false, std::list< std::string > *sectionsToWrite=NULL)
 Write out a config file.
virtual ~ArConfig ()
 Destructor.

Protected Member Functions

void addParserHandlers (void)
void copySectionsToParse (std::list< std::string > *from)
void writeSection (ArConfigSection *section, FILE *file, std::set< std::string > *alreadyWritten, bool writePriorities)
 Write out a section.

Protected Attributes

ArArgumentParsermyArgumentParser
std::string myBaseDirectory
std::string myConfigName
 Optional name of the config instance.
bool myDuplicateParams
bool myFailOnBadSection
std::string myFileName
bool myIgnoreBounds
bool myIsQuiet
std::string myLogPrefix
 Prefix to be inserted in log messages (contains the robot and config names).
bool myNoBlanksBetweenParams
ArFileParser myParser
ArRetFunctor3C< bool, ArConfig,
ArArgumentBuilder *, char *,
size_t > 
myParserCB
ArLog::LogLevel myProcessFileCallbacksLogLevel
std::multimap< int, ProcessFileCBType * > myProcessFileCBList
std::string myRobotName
 Optional name of the robot with which the config is associated.
bool mySaveUnknown
std::string mySection
bool mySectionBroken
ArRetFunctor3C< bool, ArConfig,
ArArgumentBuilder *, char *,
size_t > 
mySectionCB
bool mySectionIgnored
std::list< ArConfigSection * > mySections
std::list< std::string > * mySectionsToParse
ArRetFunctor3C< bool, ArConfig,
ArArgumentBuilder *, char *,
size_t > 
myUnknownCB
bool myUsingSections

Classes

class  ProcessFileCBType


Member Function Documentation

void ArConfig::addProcessFileCB ( ArRetFunctor2< bool, char *, size_t > *  functor,
int  priority = 0 
)

Adds a callback to be invoked when the configuration is loaded or reloaded.... if you really want errors you should use addProcessFileWithErrorCB, this is just to catch mistakes

void ArConfig::addProcessFileCB ( ArRetFunctor< bool > *  functor,
int  priority = 0 
)

Adds a callback to be invoked when the configuration is loaded or reloaded.

void ArConfig::addProcessFileWithErrorCB ( ArRetFunctor2< bool, char *, size_t > *  functor,
int  priority = 0 
)

Adds a callback to be invoked when the configuration is loaded or reloaded, which may also receive error messages

ArConfigSection* ArConfig::findSection ( const char *  sectionName  )  const

Find the section with the given name.

Returns:
section object, or NULL if not found.

virtual bool ArConfig::processFile ( void   )  [inline, virtual]

for inheritors this is called after the file is processed

For classes that inherit from ArConfig this function is called after parseFile and all of the processFileCBs are called... If you want to call something before the processFileCBs then just add a processFileCB... this is only called if there were no errors parsing the file or continueOnError was set to false when parseFile was called

Returns:
true if the config parsed was good (parseFile will return true) false if the config parsed wasn't (parseFile will return false)


The documentation for this class was generated from the following file:
Generated on Thu Aug 6 09:39:34 2009 for Aria by  doxygen 1.5.1