Add KBOOT.
This commit is contained in:
115
apps/elftosb/common/OptionDictionary.h
Normal file
115
apps/elftosb/common/OptionDictionary.h
Normal file
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* File: OptionDictionary.h
|
||||
*
|
||||
* Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
|
||||
* See included license file for license details.
|
||||
*/
|
||||
#if !defined(_OptionDictionary_h_)
|
||||
#define _OptionDictionary_h_
|
||||
|
||||
#include "OptionContext.h"
|
||||
#include <map>
|
||||
|
||||
namespace elftosb
|
||||
{
|
||||
/*!
|
||||
* \brief Concrete implementation of OptionContext.
|
||||
*
|
||||
* This context subclass supports having a parent context. If an option is not
|
||||
* found in the receiving instance, the request is passed to the parent.
|
||||
* The hasOption() and getOption() methods will ask up the parent chain
|
||||
* if the requested option does not exist in the receiving instance.
|
||||
* But the setOption() and deleteOption() methods only operate locally,
|
||||
* on the instance on which they were called. This allows a caller to
|
||||
* locally override an option value without affecting any of the parent
|
||||
* contexts.
|
||||
*/
|
||||
class OptionDictionary : public OptionContext
|
||||
{
|
||||
public:
|
||||
//! \brief Default constructor.
|
||||
OptionDictionary()
|
||||
: m_parent(0)
|
||||
{
|
||||
}
|
||||
|
||||
//! \brief Constructor taking a parent context.
|
||||
OptionDictionary(OptionContext *parent)
|
||||
: m_parent(parent)
|
||||
{
|
||||
}
|
||||
|
||||
//! \brief Destructor.
|
||||
~OptionDictionary();
|
||||
|
||||
//! \name Parents
|
||||
//@{
|
||||
//! \brief Returns the current parent context.
|
||||
//! \return The current parent context instance.
|
||||
//! \retval NULL No parent has been set.
|
||||
inline OptionContext *getParent() const { return m_parent; }
|
||||
//! \brief Change the parent context.
|
||||
//! \param newParent The parent context object. May be NULL, in which case
|
||||
//! the object will no longer have a parent context.
|
||||
inline void setParent(OptionContext *newParent) { m_parent = newParent; }
|
||||
//@}
|
||||
|
||||
//! \name Options
|
||||
//@{
|
||||
//! \brief Detemine whether the named option is present in the table.
|
||||
virtual bool hasOption(const std::string &name) const;
|
||||
|
||||
//! \brief Returns the option's value.
|
||||
virtual const Value *getOption(const std::string &name) const;
|
||||
|
||||
//! \brief Adds or changes an option's value.
|
||||
virtual void setOption(const std::string &name, Value *value);
|
||||
|
||||
//! \brief Removes an option from the table.
|
||||
virtual void deleteOption(const std::string &name);
|
||||
//@}
|
||||
|
||||
//! \name Locking
|
||||
//@{
|
||||
//! \brief Returns true if the specified option is locked from further changes.
|
||||
bool isOptionLocked(const std::string &name) const;
|
||||
|
||||
//! \brief Prevent further modifications of an option's value.
|
||||
void lockOption(const std::string &name);
|
||||
|
||||
//! \brief Allow an option to be changed.
|
||||
void unlockOption(const std::string &name);
|
||||
//@}
|
||||
|
||||
//! \name Operators
|
||||
//@{
|
||||
//! \brief Indexing operator; returns the value for the option \a name.
|
||||
const Value *operator[](const std::string &name) const;
|
||||
//@}
|
||||
|
||||
protected:
|
||||
OptionContext *m_parent; //!< Our parent context.
|
||||
|
||||
/*!
|
||||
* \brief Information about one option's value.
|
||||
*/
|
||||
struct OptionValue
|
||||
{
|
||||
Value *m_value; //!< The object for this option's value.
|
||||
bool m_isLocked; //!< True if this value is locked from further changes.
|
||||
|
||||
//! \brief Constructor.
|
||||
OptionValue()
|
||||
: m_value(0)
|
||||
, m_isLocked(false)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::map<std::string, OptionValue> option_map_t; //!< Map from option name to value.
|
||||
option_map_t m_options; //!< The option dictionary.
|
||||
};
|
||||
|
||||
}; // namespace elftosb
|
||||
|
||||
#endif // _OptionDictionary_h_
|
||||
Reference in New Issue
Block a user