+/********************************************************************
+ * OptionsImpl::Group
+ */
+
+IOptionsContainer &OptionsImpl::Group::addGroup()
+{
+ subgroups_.push_back(Group(parent_));
+ return subgroups_.back();
+}
+
+OptionInfo *OptionsImpl::Group::addOption(const AbstractOption &settings)
+{
+ OptionsImpl *root = parent_;
+ while (root->parent_ != NULL)
+ {
+ root = root->parent_->impl_.get();
+ }
+ AbstractOptionStoragePointer option(settings.createStorage(root->managers_));
+ options_.reserve(options_.size() + 1);
+ std::pair<OptionMap::iterator, bool> insertionResult =
+ parent_->optionMap_.insert(std::make_pair(option->name(),
+ move(option)));
+ if (!insertionResult.second)
+ {
+ GMX_THROW(APIError("Duplicate option: " + option->name()));
+ }
+ AbstractOptionStorage &insertedOption = *insertionResult.first->second;
+ options_.push_back(&insertedOption);
+ return &insertedOption.optionInfo();
+}
+
+} // namespace internal
+
+using internal::OptionsImpl;
+