diff options
author | Remko Tronçon <git@el-tramo.be> | 2009-07-11 15:27:08 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2009-07-11 15:27:08 (GMT) |
commit | e1a2d258479cd915e8c30c5c996b58da3da3e55d (patch) | |
tree | 5028f999ae6d752b0c5d80752d41f4b8b26f8cae /Swiften/Parser/PayloadParserFactoryCollection.cpp | |
parent | a7963958d9a649dd77c22e65edcf35210a1f66c1 (diff) | |
download | swift-contrib-e1a2d258479cd915e8c30c5c996b58da3da3e55d.zip swift-contrib-e1a2d258479cd915e8c30c5c996b58da3da3e55d.tar.bz2 |
PayloadParserFactoryCollection additions.
Added the ability to set a default PayloadParserFactory.
Check factories in reverse order.
Add PayloadParserFactoryCollection unit test.
Diffstat (limited to 'Swiften/Parser/PayloadParserFactoryCollection.cpp')
-rw-r--r-- | Swiften/Parser/PayloadParserFactoryCollection.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/Swiften/Parser/PayloadParserFactoryCollection.cpp b/Swiften/Parser/PayloadParserFactoryCollection.cpp index f361ce8..6d3a4cf 100644 --- a/Swiften/Parser/PayloadParserFactoryCollection.cpp +++ b/Swiften/Parser/PayloadParserFactoryCollection.cpp @@ -6,7 +6,7 @@ namespace Swift { -PayloadParserFactoryCollection::PayloadParserFactoryCollection() { +PayloadParserFactoryCollection::PayloadParserFactoryCollection() : defaultFactory_(NULL) { } void PayloadParserFactoryCollection::addFactory(PayloadParserFactory* factory) { @@ -17,11 +17,15 @@ void PayloadParserFactoryCollection::removeFactory(PayloadParserFactory* factory factories_.erase(remove(factories_.begin(), factories_.end(), factory), factories_.end()); } +void PayloadParserFactoryCollection::setDefaultFactory(PayloadParserFactory* factory) { + defaultFactory_ = factory; +} + PayloadParserFactory* PayloadParserFactoryCollection::getPayloadParserFactory(const String& element, const String& ns, const AttributeMap& attributes) { - std::vector<PayloadParserFactory*>::const_iterator i = std::find_if( - factories_.begin(), factories_.end(), + std::vector<PayloadParserFactory*>::reverse_iterator i = std::find_if( + factories_.rbegin(), factories_.rend(), boost::bind(&PayloadParserFactory::canParse, _1, element, ns, attributes)); - return (i != factories_.end() ? *i : NULL); + return (i != factories_.rend() ? *i : defaultFactory_); } } |