#include <vector>
#include "../utility/common.h"
-#include "../utility/uniqueptr.h"
#include "optionflags.h"
class OptionManagerContainer;
class Options;
-//! Smart pointer for managing an AbstractOptionStorage object.
-typedef gmx_unique_ptr<AbstractOptionStorage>::type
- AbstractOptionStoragePointer;
-
/*! \brief
* Abstract base class for specifying option properties.
*
* They should also throw APIError if they detect problems.
*
* Should only be called by Options::addOption().
+ *
+ * The ownership of the return value is passed, but is not using a
+ * smart pointer to avoid introducing such a dependency in an installed
+ * header. The implementation will always consist of a single `new`
+ * call and returning that value, and the caller always immediately
+ * wraps the pointer in a smart pointer, so there is not exception
+ * safety issue.
*/
- virtual AbstractOptionStoragePointer createStorage(
+ virtual AbstractOptionStorage *createStorage(
const OptionManagerContainer &managers) const = 0;
//! Sets the description for the option.
* BooleanOption
*/
-AbstractOptionStoragePointer
+AbstractOptionStorage *
BooleanOption::createStorage(const OptionManagerContainer & /*managers*/) const
{
- return AbstractOptionStoragePointer(new BooleanOptionStorage(*this));
+ return new BooleanOptionStorage(*this);
}
* IntegerOption
*/
-AbstractOptionStoragePointer
+AbstractOptionStorage *
IntegerOption::createStorage(const OptionManagerContainer & /*managers*/) const
{
- return AbstractOptionStoragePointer(new IntegerOptionStorage(*this));
+ return new IntegerOptionStorage(*this);
}
* Int64Option
*/
-AbstractOptionStoragePointer
+AbstractOptionStorage *
Int64Option::createStorage(const OptionManagerContainer & /*managers*/) const
{
- return AbstractOptionStoragePointer(new Int64OptionStorage(*this));
+ return new Int64OptionStorage(*this);
}
* DoubleOption
*/
-AbstractOptionStoragePointer
+AbstractOptionStorage *
DoubleOption::createStorage(const OptionManagerContainer & /*managers*/) const
{
- return AbstractOptionStoragePointer(new DoubleOptionStorage(*this));
+ return new DoubleOptionStorage(*this);
}
* FloatOption
*/
-AbstractOptionStoragePointer
+AbstractOptionStorage *
FloatOption::createStorage(const OptionManagerContainer & /*managers*/) const
{
- return AbstractOptionStoragePointer(new FloatOptionStorage(*this));
+ return new FloatOptionStorage(*this);
}
* StringOption
*/
-AbstractOptionStoragePointer
+AbstractOptionStorage *
StringOption::createStorage(const OptionManagerContainer & /*managers*/) const
{
- return AbstractOptionStoragePointer(new StringOptionStorage(*this));
+ return new StringOptionStorage(*this);
}
} // namespace gmx
private:
//! Creates a BooleanOptionStorage object.
- virtual AbstractOptionStoragePointer createStorage(
+ virtual AbstractOptionStorage *createStorage(
const OptionManagerContainer &managers) const;
};
private:
//! Creates an IntegerOptionStorage object.
- virtual AbstractOptionStoragePointer createStorage(
+ virtual AbstractOptionStorage *createStorage(
const OptionManagerContainer &managers) const;
/*! \brief
private:
//! Creates an Int64OptionStorage object.
- virtual AbstractOptionStoragePointer createStorage(
+ virtual AbstractOptionStorage *createStorage(
const OptionManagerContainer &managers) const;
/*! \brief
private:
//! Creates a DoubleOptionStorage object.
- virtual AbstractOptionStoragePointer createStorage(
+ virtual AbstractOptionStorage *createStorage(
const OptionManagerContainer &managers) const;
bool bTime_;
private:
//! Creates a FloatOptionStorage object.
- virtual AbstractOptionStoragePointer createStorage(
+ virtual AbstractOptionStorage *createStorage(
const OptionManagerContainer &managers) const;
bool bTime_;
private:
//! Creates a StringOptionStorage object.
- virtual AbstractOptionStoragePointer createStorage(
+ virtual AbstractOptionStorage *createStorage(
const OptionManagerContainer &managers) const;
const char *const *enumValues_;
* FileNameOption
*/
-AbstractOptionStoragePointer
+AbstractOptionStorage *
FileNameOption::createStorage(const OptionManagerContainer &managers) const
{
- return AbstractOptionStoragePointer(
- new FileNameOptionStorage(*this, managers.get<FileNameOptionManager>()));
+ return new FileNameOptionStorage(*this, managers.get<FileNameOptionManager>());
}
} // namespace gmx
using MyBase::defaultValueIfSet;
//! Creates a FileNameOptionStorage object.
- virtual AbstractOptionStoragePointer createStorage(
+ virtual AbstractOptionStorage *createStorage(
const OptionManagerContainer &managers) const;
OptionFileType optionType_;
#include "abstractoption.h"
#include "optionmanagercontainer.h"
#include "options.h"
+#include "gromacs/utility/uniqueptr.h"
namespace gmx
{
class Options::Impl
{
public:
+ //! Smart pointer for managing an AbstractOptionStorage object.
+ typedef gmx_unique_ptr<AbstractOptionStorage>::type
+ AbstractOptionStoragePointer;
//! Convenience type for list of sections.
typedef std::vector<Options *> SubSectionList;
//! Convenience type for list of options.
{
root = root->parent_->impl_.get();
}
- AbstractOptionStoragePointer option(settings.createStorage(root->managers_));
+ Impl::AbstractOptionStoragePointer option(settings.createStorage(root->managers_));
if (impl_->findOption(option->name().c_str()) != NULL)
{
GMX_THROW(APIError("Duplicate option: " + option->name()));
}
private:
- virtual gmx::AbstractOptionStoragePointer createStorage(
+ virtual gmx::AbstractOptionStorage *createStorage(
const gmx::OptionManagerContainer & /*managers*/) const
{
- return gmx::AbstractOptionStoragePointer(new MockOptionStorage(*this));
+ return new MockOptionStorage(*this);
}
};
explicit SelectionFileOption(const char *name);
private:
- virtual AbstractOptionStoragePointer createStorage(
+ virtual AbstractOptionStorage *createStorage(
const OptionManagerContainer &managers) const;
};
* SelectionOption
*/
-AbstractOptionStoragePointer
+AbstractOptionStorage *
SelectionOption::createStorage(const OptionManagerContainer &managers) const
{
- return AbstractOptionStoragePointer(
- new SelectionOptionStorage(
- *this, managers.get<SelectionOptionManager>()));
+ return new SelectionOptionStorage(
+ *this, managers.get<SelectionOptionManager>());
}
setDescription("Provide selections from files");
}
-AbstractOptionStoragePointer
+AbstractOptionStorage *
SelectionFileOption::createStorage(const OptionManagerContainer &managers) const
{
- return AbstractOptionStoragePointer(
- new SelectionFileOptionStorage(
- *this, managers.get<SelectionOptionManager>()));
+ return new SelectionFileOptionStorage(
+ *this, managers.get<SelectionOptionManager>());
}
} // namespace gmx
using MyBase::defaultValue;
using MyBase::defaultValueIfSet;
- virtual AbstractOptionStoragePointer createStorage(
+ virtual AbstractOptionStorage *createStorage(
const OptionManagerContainer &managers) const;
const char *defaultText_;
#include <stdlib.h>
#include <stdio.h>
+#include "config.h"
+
namespace gmx
{
namespace test