From: cantor Date: Wed, 7 Nov 2007 18:41:14 +0000 (+0000) Subject: Add some simple STL predicates. X-Git-Tag: 1.4.1~413 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fxmltooling.git;a=commitdiff_plain;h=f4979ce631dcb3f7e3191ec760821be82455b9ec Add some simple STL predicates. git-svn-id: https://svn.middleware.georgetown.edu/cpp-xmltooling/trunk@413 de75baf8-a10c-0410-a50a-987c0e22f00f --- diff --git a/xmltooling/Makefile.am b/xmltooling/Makefile.am index 511bc26..42d943d 100644 --- a/xmltooling/Makefile.am +++ b/xmltooling/Makefile.am @@ -101,6 +101,7 @@ utilinclude_HEADERS = \ util/DateTime.h \ util/NDC.h \ util/ParserPool.h \ + util/Predicates.h \ util/ReloadableXMLFile.h \ util/ReplayCache.h \ util/StorageService.h \ diff --git a/xmltooling/util/Predicates.h b/xmltooling/util/Predicates.h new file mode 100644 index 0000000..2453a62 --- /dev/null +++ b/xmltooling/util/Predicates.h @@ -0,0 +1,89 @@ +/* + * Copyright 2001-2007 Internet2 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file xmltooling/util/Predicates.h + * + * Useful XMLObject predicates for use with STL algorithms. + */ + +#ifndef __xmltooling_predicates_h__ +#define __xmltooling_predicates_h__ + +#include + +#include + +namespace xmltooling { + + /** + * Predicate that checks the QName of an XMLObject. + */ + class hasQName + { + public: + /** + * Constructor. + * + * @param q the QName to check for + */ + hasQName(const QName& q) : m_q(q) { + } + + /** + * Returns true iff the provided object's QName matches the constructor argument. + * + * @param xmlObject the object to examine + */ + bool operator()(const XMLObject* xmlObject) { + return xmlObject ? (xmlObject->getElementQName() == m_q) : false; + } + + private: + const QName& m_q; + }; + + /** + * Predicate that checks the xsi:type of an XMLObject. + */ + class hasSchemaType + { + public: + /** + * Constructor. + * + * @param q the QName to check for + */ + hasSchemaType(const QName& q) : m_q(q) { + } + + /** + * Returns true iff the provided object's xsi:type matches the constructor argument. + * + * @param xmlObject the object to examine + */ + bool operator()(const XMLObject* xmlObject) { + const QName* xsitype = xmlObject ? xmlObject->getSchemaType() : NULL; + return xsitype ? (*xsitype == m_q) : false; + } + + private: + const QName& m_q; + }; + +}; + +#endif /* __xmltooling_predicates_h__ */