Kaydet (Commit) 8bfdc161 authored tarafından Michael Meeks's avatar Michael Meeks

configmgr: re-factor findNode and clone into NodeMap.

Change-Id: Ib170b3cec17402e38bf5555e21f83f44d70bb574
üst ff1d2ba5
...@@ -357,7 +357,7 @@ void Components::removeExtensionXcuFile( ...@@ -357,7 +357,7 @@ void Components::removeExtensionXcuFile(
rtl::Reference< Node > node; rtl::Reference< Node > node;
for (Path::const_iterator j(i->begin()); j != i->end(); ++j) { for (Path::const_iterator j(i->begin()); j != i->end(); ++j) {
parent = node; parent = node;
node = Data::findNode(Data::NO_LAYER, *map, *j); node = map->findNode(Data::NO_LAYER, *j);
if (!node.is()) { if (!node.is()) {
break; break;
} }
......
...@@ -179,14 +179,6 @@ bool Data::equalTemplateNames( ...@@ -179,14 +179,6 @@ bool Data::equalTemplateNames(
} }
} }
rtl::Reference< Node > Data::findNode(
int layer, NodeMap const & map, OUString const & name)
{
NodeMap::const_iterator i(map.find(name));
return i == map.end() || i->second->getLayer() > layer
? rtl::Reference< Node >() : i->second;
}
Data::Data(): root_(new RootNode) {} Data::Data(): root_(new RootNode) {}
rtl::Reference< Node > Data::resolvePathRepresentation( rtl::Reference< Node > Data::resolvePathRepresentation(
...@@ -298,7 +290,7 @@ rtl::Reference< Node > Data::resolvePathRepresentation( ...@@ -298,7 +290,7 @@ rtl::Reference< Node > Data::resolvePathRepresentation(
rtl::Reference< Node > Data::getTemplate( rtl::Reference< Node > Data::getTemplate(
int layer, OUString const & fullName) const int layer, OUString const & fullName) const
{ {
return findNode(layer, templates, fullName); return templates.findNode(layer, fullName);
} }
NodeMap & Data::getComponents() const { NodeMap & Data::getComponents() const {
......
...@@ -67,9 +67,6 @@ struct Data: private boost::noncopyable { ...@@ -67,9 +67,6 @@ struct Data: private boost::noncopyable {
static bool equalTemplateNames( static bool equalTemplateNames(
OUString const & shortName, OUString const & longName); OUString const & shortName, OUString const & longName);
static rtl::Reference< Node > findNode(
int layer, NodeMap const & map, OUString const & name);
Data(); Data();
rtl::Reference< Node > resolvePathRepresentation( rtl::Reference< Node > resolvePathRepresentation(
......
...@@ -59,7 +59,7 @@ int GroupNode::getMandatory() const { ...@@ -59,7 +59,7 @@ int GroupNode::getMandatory() const {
GroupNode::GroupNode(GroupNode const & other, bool keepTemplateName): GroupNode::GroupNode(GroupNode const & other, bool keepTemplateName):
Node(other), extensible_(other.extensible_), mandatory_(other.mandatory_) Node(other), extensible_(other.extensible_), mandatory_(other.mandatory_)
{ {
cloneNodeMap(other.members_, &members_); other.members_.cloneInto(&members_);
if (keepTemplateName) { if (keepTemplateName) {
templateName_ = other.templateName_; templateName_ = other.templateName_;
} }
......
...@@ -50,7 +50,7 @@ LocalizedPropertyNode::LocalizedPropertyNode( ...@@ -50,7 +50,7 @@ LocalizedPropertyNode::LocalizedPropertyNode(
LocalizedPropertyNode const & other): LocalizedPropertyNode const & other):
Node(other), staticType_(other.staticType_), nillable_(other.nillable_) Node(other), staticType_(other.staticType_), nillable_(other.nillable_)
{ {
cloneNodeMap(other.members_, &members_); other.members_.cloneInto(&members_);
} }
LocalizedPropertyNode::~LocalizedPropertyNode() {} LocalizedPropertyNode::~LocalizedPropertyNode() {}
......
...@@ -29,13 +29,21 @@ ...@@ -29,13 +29,21 @@
namespace configmgr { namespace configmgr {
void cloneNodeMap(NodeMap const & source, NodeMap * target) { void NodeMap::cloneInto(NodeMap * target) const
{
assert(target != 0 && target->empty()); assert(target != 0 && target->empty());
NodeMap clone(source); NodeMapImpl clone(aImpl);
for (NodeMap::iterator i(clone.begin()); i != clone.end(); ++i) { for (NodeMapImpl::iterator i(clone.begin()); i != clone.end(); ++i) {
i->second = i->second->clone(true); i->second = i->second->clone(true);
} }
std::swap(clone, *target); std::swap(clone, target->aImpl);
}
rtl::Reference< Node > NodeMap::findNode(int layer, OUString const & name) const
{
const_iterator i(aImpl.find(name));
return i == end() || i->second->getLayer() > layer
? rtl::Reference< Node >() : i->second;
} }
} }
......
...@@ -31,6 +31,9 @@ typedef std::map< OUString, rtl::Reference< Node > > NodeMapImpl; ...@@ -31,6 +31,9 @@ typedef std::map< OUString, rtl::Reference< Node > > NodeMapImpl;
class NodeMap class NodeMap
{ {
NodeMapImpl aImpl; NodeMapImpl aImpl;
NodeMap(const NodeMap &rMap) :
aImpl(rMap.aImpl) {}
public: public:
typedef NodeMapImpl::iterator iterator; typedef NodeMapImpl::iterator iterator;
typedef NodeMapImpl::const_iterator const_iterator; typedef NodeMapImpl::const_iterator const_iterator;
...@@ -39,7 +42,7 @@ class NodeMap ...@@ -39,7 +42,7 @@ class NodeMap
NodeMap() {} NodeMap() {}
~NodeMap() {} ~NodeMap() {}
void clear() { aImpl.clear(); } void clear() { aImpl.clear(); }
bool empty() { return aImpl.empty(); } bool empty() const { return aImpl.empty(); }
void erase(const iterator &it) { aImpl.erase(it); } void erase(const iterator &it) { aImpl.erase(it); }
void erase(const OUString &aStr) { aImpl.erase(aStr); } void erase(const OUString &aStr) { aImpl.erase(aStr); }
iterator find(const OUString &aStr) { return aImpl.find( aStr ); } iterator find(const OUString &aStr) { return aImpl.find( aStr ); }
...@@ -52,9 +55,10 @@ class NodeMap ...@@ -52,9 +55,10 @@ class NodeMap
iterator end() { return aImpl.end(); } iterator end() { return aImpl.end(); }
const_iterator end() const { return aImpl.end(); } const_iterator end() const { return aImpl.end(); }
std::pair<iterator,bool> insert(const value_type &vt) { return aImpl.insert(vt); } std::pair<iterator,bool> insert(const value_type &vt) { return aImpl.insert(vt); }
};
void cloneNodeMap(NodeMap const & source, NodeMap * target); rtl::Reference< Node > findNode(int layer, OUString const & name) const;
void cloneInto(NodeMap * target) const;
};
} }
......
...@@ -95,7 +95,7 @@ SetNode::SetNode(SetNode const & other, bool keepTemplateName): ...@@ -95,7 +95,7 @@ SetNode::SetNode(SetNode const & other, bool keepTemplateName):
additionalTemplateNames_(other.additionalTemplateNames_), additionalTemplateNames_(other.additionalTemplateNames_),
mandatory_(other.mandatory_) mandatory_(other.mandatory_)
{ {
cloneNodeMap(other.members_, &members_); other.members_.cloneInto(&members_);
if (keepTemplateName) { if (keepTemplateName) {
templateName_ = other.templateName_; templateName_ = other.templateName_;
} }
......
...@@ -568,7 +568,7 @@ void writeModFile( ...@@ -568,7 +568,7 @@ void writeModFile(
{ {
writeModifications( writeModifications(
components, tmp.handle, "", rtl::Reference< Node >(), j->first, components, tmp.handle, "", rtl::Reference< Node >(), j->first,
Data::findNode(Data::NO_LAYER, data.getComponents(), j->first), data.getComponents().findNode(Data::NO_LAYER, j->first),
j->second); j->second);
} }
writeData_(tmp.handle, RTL_CONSTASCII_STRINGPARAM("</oor:items>\n")); writeData_(tmp.handle, RTL_CONSTASCII_STRINGPARAM("</oor:items>\n"));
......
...@@ -291,8 +291,8 @@ void XcuParser::handleComponentData(xmlreader::XmlReader & reader) { ...@@ -291,8 +291,8 @@ void XcuParser::handleComponentData(xmlreader::XmlReader & reader) {
} }
} }
rtl::Reference< Node > node( rtl::Reference< Node > node(
Data::findNode( data_.getComponents().findNode(valueParser_.getLayer(),
valueParser_.getLayer(), data_.getComponents(), componentName_)); componentName_));
if (!node.is()) { if (!node.is()) {
SAL_WARN( SAL_WARN(
"configmgr", "configmgr",
...@@ -788,7 +788,7 @@ void XcuParser::handleGroupNode( ...@@ -788,7 +788,7 @@ void XcuParser::handleGroupNode(
} }
} }
rtl::Reference< Node > child( rtl::Reference< Node > child(
Data::findNode(valueParser_.getLayer(), group->getMembers(), name)); group->getMembers().findNode(valueParser_.getLayer(), name));
if (!child.is()) { if (!child.is()) {
SAL_WARN( SAL_WARN(
"configmgr", "configmgr",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment