sandbox: use Genode::update_list_model_from_xml

This patch replaces the former local implementation by the function
provided in 'util/list_model.h'.

Issue #4317
This commit is contained in:
Norman Feske 2021-11-05 15:42:49 +01:00 committed by Christian Helmuth
parent 4df7e6adde
commit 293d545b97
4 changed files with 11 additions and 70 deletions

View File

@ -21,6 +21,8 @@ struct Config_model::Node : Noncopyable, Interface, private List_model<Node>::El
friend class List_model<Node>;
friend class List<Node>;
static bool type_matches(Xml_node const &) { return true; }
virtual bool matches(Xml_node const &) const = 0;
virtual void update(Xml_node const &) = 0;

View File

@ -14,8 +14,10 @@
#ifndef _CONFIG_MODEL_H_
#define _CONFIG_MODEL_H_
/* Genode includes */
#include <util/list_model.h>
/* local includes */
#include <update_list_model.h>
#include <heartbeat.h>
namespace Sandbox {
@ -56,6 +58,8 @@ struct Sandbox::Parent_provides_model : Noncopyable
service.abandon();
}
static bool type_matches(Xml_node const &) { return true; }
bool matches(Xml_node const &xml) const
{
return xml.attribute_value("name", Service::Name()) == service.name();

View File

@ -14,9 +14,13 @@
#ifndef _LIB__SANDBOX__REPORT_H_
#define _LIB__SANDBOX__REPORT_H_
/* Genode includes */
#include <util/noncopyable.h>
#include <util/xml_node.h>
/* local includes */
#include <types.h>
namespace Sandbox {
struct Report_update_trigger;
struct Report_detail;

View File

@ -1,69 +0,0 @@
/*
* \brief Convenience wrapper around 'List_model'
* \author Norman Feske
* \date 2021-04-01
*/
/*
* Copyright (C) 2021 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
#ifndef _UPDATE_LIST_MODEL_H_
#define _UPDATE_LIST_MODEL_H_
/* Genode includes */
#include <util/list_model.h>
/* local includes */
#include <types.h>
namespace Sandbox {
template <typename NODE, typename CREATE_FN, typename DESTROY_FN, typename UPDATE_FN>
static inline void update_list_model_from_xml(List_model<NODE> &,
Xml_node const &,
CREATE_FN const &,
DESTROY_FN const &,
UPDATE_FN const &);
}
template <typename NODE, typename CREATE_FN, typename DESTROY_FN, typename UPDATE_FN>
void Sandbox::update_list_model_from_xml(List_model<NODE> &model,
Xml_node const &xml,
CREATE_FN const &create,
DESTROY_FN const &destroy,
UPDATE_FN const &update)
{
struct Model_update_policy : List_model<NODE>::Update_policy
{
CREATE_FN const &_create_fn;
DESTROY_FN const &_destroy_fn;
UPDATE_FN const &_update_fn;
Model_update_policy(CREATE_FN const &create_fn,
DESTROY_FN const &destroy_fn,
UPDATE_FN const &update_fn)
:
_create_fn(create_fn), _destroy_fn(destroy_fn), _update_fn(update_fn)
{ }
void destroy_element(NODE &node) { _destroy_fn(node); }
NODE &create_element(Xml_node xml) { return _create_fn(xml); }
void update_element(NODE &node, Xml_node xml) { _update_fn(node, xml); }
static bool element_matches_xml_node(NODE const &node, Xml_node xml)
{
return node.matches(xml);
}
} policy(create, destroy, update);
model.update_from_xml(policy, xml);
}
#endif /* _UPDATE_LIST_MODEL_H_ */