xmltooling 3.0.5

base.h File Reference

Licensed to the University Corporation for Advanced Internet Development, Inc. More...

#include <typeinfo>
#include <cstdio>
#include <xmltooling/config_pub_win32.h>
#include <utility>
#include <xmltooling/config_pub_win32.h>

Classes

struct  xmltooling::cleanup< T >
 Functor for cleaning up heap objects in containers. More...
struct  xmltooling::cleanup_pair< A, B >
 Functor for cleaning up heap objects in key/value containers. More...
struct  xmltooling::cleanup_const_pair< A, B >
 Functor for cleaning up const heap objects in key/value containers. More...

Namespaces

namespace  xmltooling
 

Public namespace of XML Tooling library.


Defines

#define nullptr   0
#define XMLTOOL_IMPORT
#define XMLTOOL_EXPORT
#define XMLTOOL_DLLLOCAL
#define XMLTOOL_DLLPUBLIC
#define XMLTOOL_API   XMLTOOL_IMPORT
#define XMLTOOL_EXCEPTIONAPI(api)
#define XMLTOOLING_DOXYGEN(desc)
#define MAKE_NONCOPYABLE(type)
 Blocks copy c'tor and assignment operator for a class.
#define DECL_XMLOBJECT_ABSTRACT(linkage, cname, base, desc)
 Begins the declaration of an XMLObject specialization for an abstract element/type.
#define BEGIN_XMLOBJECT(linkage, cname, base, desc)
 Begins the declaration of an XMLObject specialization.
#define BEGIN_XMLOBJECT2(linkage, cname, base, base2, desc)
 Begins the declaration of an XMLObject specialization with two base classes.
#define BEGIN_XMLOBJECT3(linkage, cname, base, base2, base3, desc)
 Begins the declaration of an XMLObject specialization with three base classes.
#define BEGIN_XMLOBJECT4(linkage, cname, base, base2, base3, base4, desc)
 Begins the declaration of an XMLObject specialization with four base classes.
#define BEGIN_XMLOBJECT5(linkage, cname, base, base2, base3, base4, base5, desc)
 Begins the declaration of an XMLObject specialization with five base classes.
#define END_XMLOBJECT   }
 Ends the declaration of an XMLObject specialization.
#define DECL_ELEMENT_QNAME
 Declares a static variable holding the XMLObject's element QName.
#define DECL_TYPE_QNAME
 Declares a static variable holding the XMLObject's schema type QName.
#define IMPL_ELEMENT_QNAME(cname, namespaceURI, namespacePrefix)   xmltooling::QName cname::ELEMENT_QNAME(namespaceURI,cname::LOCAL_NAME,namespacePrefix)
 Implements a static variable holding an XMLObject's element QName.
#define IMPL_TYPE_QNAME(cname, namespaceURI, namespacePrefix)   xmltooling::QName cname::TYPE_QNAME(namespaceURI,cname::TYPE_NAME,namespacePrefix)
 Implements a static variable holding an XMLObject's schema type QName.
#define DECL_INHERITED_XMLOBJECT_ATTRIB(proper, upcased, type)
 Declares abstract set method for a typed XML attribute.
#define DECL_XMLOBJECT_ATTRIB(proper, upcased, type)
 Declares abstract get/set methods for a typed XML attribute.
#define DECL_INHERITED_STRING_ATTRIB(proper, upcased)   DECL_INHERITED_XMLOBJECT_ATTRIB(proper,upcased,XMLCh)
 Declares abstract set method for a string XML attribute.
#define DECL_STRING_ATTRIB(proper, upcased)   DECL_XMLOBJECT_ATTRIB(proper,upcased,XMLCh)
 Declares abstract get/set methods for a string XML attribute.
#define DECL_INHERITED_DATETIME_ATTRIB(proper, upcased)
 Declares abstract set method for a DateTime XML attribute.
#define DECL_DATETIME_ATTRIB(proper, upcased)
 Declares abstract get/set methods for a DateTime XML attribute.
#define DECL_INHERITED_INTEGER_ATTRIB(proper, upcased)
 Declares abstract set method for an integer XML attribute.
#define DECL_INTEGER_ATTRIB(proper, upcased)
 Declares abstract get/set methods for an integer XML attribute.
#define DECL_BOOLEAN_ATTRIB(proper, upcased, def)
 Declares abstract get/set methods for a boolean XML attribute.
#define IMPL_XMLOBJECT_ATTRIB(proper, type)
 Implements get/set methods and a private member for a typed XML attribute.
#define IMPL_STRING_ATTRIB(proper)   IMPL_XMLOBJECT_ATTRIB(proper,XMLCh)
 Implements get/set methods and a private member for a string XML attribute.
#define IMPL_ID_ATTRIB(proper)
 Implements get/set methods and a private member for a string XML attribute, plus a getXMLID override.
#define IMPL_ID_ATTRIB_EX(proper, ucase, namespaceURI)
 Implements get/set methods and a private member for a string XML attribute, plus a getXMLID override and attribute node clearance when DOM is dropped.
#define IMPL_DATETIME_ATTRIB(proper, fallback)   IMPL_DATETIME_ATTRIB_EX(proper,fallback,false)
 Implements get/set methods and a private member for a DateTime XML attribute.
#define IMPL_DURATION_ATTRIB(proper, fallback)   IMPL_DATETIME_ATTRIB_EX(proper,fallback,true)
 Implements get/set methods and a private member for a duration-valued DateTime XML attribute.
#define IMPL_DATETIME_ATTRIB_EX(proper, fallback, duration)
 Implements get/set methods and a private member for a DateTime XML attribute.
#define IMPL_INTEGER_ATTRIB(proper)
 Implements get/set methods and a private member for an integer XML attribute.
#define IMPL_BOOLEAN_ATTRIB(proper)
 Implements get/set methods and a private member for a boolean XML attribute.
#define IMPL_XMLOBJECT_FOREIGN_ATTRIB(proper, type)
 Implements get/set methods and a private member for a typed, qualified XML attribute.
#define DECL_INHERITED_TYPED_FOREIGN_CHILD(proper, ns)
 Declares abstract set method for a typed XML child object in a foreign namespace.
#define DECL_TYPED_FOREIGN_CHILD(proper, ns)
 Declares abstract get/set methods for a typed XML child object in a foreign namespace.
#define DECL_INHERITED_TYPED_CHILD(proper)
 Declares abstract set method for a typed XML child object.
#define DECL_TYPED_CHILD(proper)
 Declares abstract get/set methods for a typed XML child object.
#define DECL_XMLOBJECT_CHILD(proper)
 Declares abstract get/set methods for a generic XML child object.
#define IMPL_TYPED_CHILD(proper)
 Implements get/set methods and a private list iterator member for a typed XML child object.
#define IMPL_TYPED_FOREIGN_CHILD(proper, ns)
 Implements get/set methods and a private list iterator member for a typed XML child object in a foreign namespace.
#define IMPL_XMLOBJECT_CHILD(proper)
 Implements get/set methods and a private list iterator member for a generic XML child object.
#define DECL_TYPED_CHILDREN(proper)
 Declares abstract get/set methods for a typed XML child collection.
#define DECL_TYPED_FOREIGN_CHILDREN(proper, ns)
 Declares abstract get/set methods for a typed XML child collection in a foreign namespace.
#define DECL_XMLOBJECT_CHILDREN(proper)
 Declares abstract get/set methods for a generic XML child collection.
#define IMPL_TYPED_CHILDREN(proper, fence)
 Implements get method and a private vector member for a typed XML child collection.
#define IMPL_TYPED_FOREIGN_CHILDREN(proper, ns, fence)
 Implements get method and a private vector member for a typed XML child collection in a foreign namespace.
#define IMPL_XMLOBJECT_CHILDREN(proper, fence)
 Implements get method and a private vector member for a generic XML child collection.
#define MARSHALL_STRING_ATTRIB(proper, ucase, namespaceURI)
 Implements marshalling for a string attribute.
#define MARSHALL_DATETIME_ATTRIB(proper, ucase, namespaceURI)
 Implements marshalling for a DateTime attribute.
#define MARSHALL_INTEGER_ATTRIB(proper, ucase, namespaceURI)
 Implements marshalling for an integer attribute.
#define MARSHALL_BOOLEAN_ATTRIB(proper, ucase, namespaceURI)
 Implements marshalling for a boolean attribute.
#define MARSHALL_QNAME_ATTRIB(proper, ucase, namespaceURI)
 Implements marshalling for a QName attribute.
#define MARSHALL_ID_ATTRIB(proper, ucase, namespaceURI)
 Implements marshalling for an ID attribute.
#define PROC_STRING_ATTRIB(proper, ucase, namespaceURI)
 Implements unmarshalling process branch for a string attribute.
#define PROC_ID_ATTRIB(proper, ucase, namespaceURI)
 Implements unmarshalling process branch for an ID attribute.
#define PROC_DATETIME_ATTRIB(proper, ucase, namespaceURI)   PROC_STRING_ATTRIB(proper,ucase,namespaceURI)
 Implements unmarshalling process branch for a DateTime attribute.
#define PROC_QNAME_ATTRIB(proper, ucase, namespaceURI)
 Implements unmarshalling process branch for a DateTime attribute.
#define PROC_INTEGER_ATTRIB(proper, ucase, namespaceURI)   PROC_STRING_ATTRIB(proper,ucase,namespaceURI)
 Implements unmarshalling process branch for an integer attribute.
#define PROC_BOOLEAN_ATTRIB(proper, ucase, namespaceURI)   PROC_STRING_ATTRIB(proper,ucase,namespaceURI)
 Implements unmarshalling process branch for a boolean attribute.
#define PROC_TYPED_CHILDREN(proper, namespaceURI, force)
 Implements unmarshalling process branch for typed child collection element.
#define PROC_TYPED_FOREIGN_CHILDREN(proper, ns, namespaceURI, force)
 Implements unmarshalling process branch for typed child collection element in a foreign namespace.
#define PROC_TYPED_CHILD(proper, namespaceURI, force)
 Implements unmarshalling process branch for typed child singleton element.
#define PROC_TYPED_FOREIGN_CHILD(proper, ns, namespaceURI, force)
 Implements unmarshalling process branch for typed child singleton element in a foreign namespace.
#define PROC_XMLOBJECT_CHILD(proper, namespaceURI)
 Implements unmarshalling process branch for a generic child singleton element.
#define DECL_SIMPLE_CONTENT(proper)
 Declares aliased get/set methods for named XML element simple content.
#define DECL_INTEGER_CONTENT(proper)
 Declares aliased get/set methods for named integer XML element content.
#define IMPL_XMLOBJECT_CLONE(cname)
 Implements cloning methods for an XMLObject specialization implementation class.
#define IMPL_XMLOBJECT_CLONE2(cname, base)
 Implements cloning methods for an XMLObject specialization implementation class that must override a base class clone method.
#define IMPL_XMLOBJECT_CLONE_EX(cname)
 Implements cloning methods for an XMLObject specialization implementation class that needs two stage duplication to avoid invoking virtual methods during construction.
#define IMPL_XMLOBJECT_CLONE_EX2(cname, base)
 Implements cloning methods for an XMLObject specialization implementation class that needs two stage duplication to avoid invoking virtual methods during construction, and must override a base class clone method.
#define IMPL_CLONE_ATTRIB(proper)   set##proper(src.get##proper())
 Implements cloning of a child attribute, for use in copy constructor or deferred clone methods.
#define IMPL_CLONE_FOREIGN_ATTRIB(proper)
 Implements cloning of a child attribute in a foreign namespace, for use in copy constructor or deferred clone methods.
#define IMPL_CLONE_INTEGER_ATTRIB(proper)   set##proper(src.m_##proper)
 Implements cloning of an integer child attribute, for use in copy constructor or deferred clone methods.
#define IMPL_CLONE_BOOLEAN_ATTRIB(proper)   proper(src.m_##proper)
 Implements cloning of a boolean child attribute, for use in copy constructor or deferred clone methods.
#define IMPL_CLONE_XMLOBJECT_CHILD(proper)
 Implements cloning of a child object, for use in copy constructor or deferred clone methods.
#define IMPL_CLONE_TYPED_CHILD(proper)
 Implements cloning of a typed child object, for use in copy constructor or deferred clone methods.
#define IMPL_CLONE_XMLOBJECT_CHILDREN(proper)
 Implements cloning of an untyped child collection, for use in copy constructor or deferred clone methods.
#define IMPL_CLONE_TYPED_CHILDREN(proper)
 Implements cloning of a child collection, for use in copy constructor or deferred clone methods.
#define IMPL_CLONE_TYPED_FOREIGN_CHILDREN(proper, ns)
 Implements cloning of a child collection in a foreign namespace, for use in copy constructor or deferred clone methods.
#define IMPL_CLONE_CHILDBAG_BEGIN   for (list<xmltooling::XMLObject*>::const_iterator _bagit = src.m_children.begin(); _bagit != src.m_children.end(); ++_bagit) {
 Opens an iteration loop over all of the children of an object.
#define IMPL_CLONE_CHILDBAG_END   }
 Closes an iteration loop over all of the children of an object.
#define IMPL_CLONE_TYPED_CHILD_IN_BAG(proper)
 Implements cloning of a typed child in a bag iteration loop based on a cast check.
#define IMPL_CLONE_TYPED_FOREIGN_CHILD_IN_BAG(proper, ns)
 Implements cloning of a typed child in a forign namespace in a bag iteration loop based on a cast check.
#define IMPL_CLONE_XMLOBJECT_CHILD_IN_BAG(proper)
 Implements cloning of an XMLObject child in a bag iteration loop.
#define DECL_XMLOBJECT_SIMPLE(linkage, cname, proper, desc)
 Declares an XMLObject specialization with a simple content model and type, handling it as string data.
#define DECL_XMLOBJECTIMPL_SIMPLE(linkage, cname)
 Declares and defines an implementation class for an XMLObject with a simple content model and type, handling it as string data.
#define BEGIN_XMLOBJECTBUILDER(linkage, cname, namespaceURI, namespacePrefix)
 Begins the declaration of an XMLObjectBuilder specialization.
#define END_XMLOBJECTBUILDER   }
 Ends the declaration of an XMLObjectBuilder specialization.
#define DECL_XMLOBJECTBUILDER(linkage, cname, namespaceURI, namespacePrefix)
 Declares a generic XMLObjectBuilder specialization.
#define IMPL_XMLOBJECTBUILDER(cname)
 Implements the standard XMLObjectBuilder specialization function.
#define BEGIN_XMLOBJECTVALIDATOR(linkage, cname)
 Begins the declaration of a Schema Validator specialization.
#define BEGIN_XMLOBJECTVALIDATOR_SUB(linkage, cname, base)
 Begins the declaration of a Schema Validator specialization subclass.
#define END_XMLOBJECTVALIDATOR   } }
 Ends the declaration of a Validator specialization.
#define XMLOBJECTVALIDATOR_CHECKTYPE(cname)
 Validator code that checks the object type.
#define XMLOBJECTVALIDATOR_REQUIRE(cname, proper)
 Validator code that checks for a required attribute, content, or singleton.
#define XMLOBJECTVALIDATOR_REQUIRE_INTEGER(cname, proper)
 Validator code that checks for a required integer attribute.
#define XMLOBJECTVALIDATOR_ONEOF(cname, proper1, proper2)
 Validator code that checks for one of a pair of required attributes, content, or singletons.
#define XMLOBJECTVALIDATOR_ONLYONEOF(cname, proper1, proper2)
 Validator code that checks for one of a pair of required attributes, content, or singletons, but disallows both.
#define XMLOBJECTVALIDATOR_ONEOF3(cname, proper1, proper2, proper3)
 Validator code that checks for one of a set of three required attributes, content, or singletons.
#define XMLOBJECTVALIDATOR_ONLYONEOF3(cname, proper1, proper2, proper3)
 Validator code that checks for one of a set of three required attributes, content, or singletons but disallows more than one.
#define XMLOBJECTVALIDATOR_NONEORBOTH(cname, proper1, proper2)
 Validator code that checks a co-constraint (if one present, the other must be) between a pair of attributes, content, or singletons.
#define XMLOBJECTVALIDATOR_NONEMPTY(cname, proper)
 Validator code that checks for a non-empty collection.
#define XMLOBJECTVALIDATOR_SIMPLE(linkage, cname)
 Declares/defines a Validator specialization that checks object type and a non-empty simple content model.

Functions

template<class InputSequence , class OutputSequence >
void xmltooling::clone (const InputSequence &in, OutputSequence &out)
 Template function for cloning a sequence of XMLObjects.

Detailed Description

Licensed to the University Corporation for Advanced Internet Development, Inc.

(UCAID) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership.

UCAID licenses this file to you 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.

Base header file definitions. Must be included prior to including any other header.


Define Documentation

#define BEGIN_XMLOBJECT (   linkage,
  cname,
  base,
  desc 
)
Value:
XMLTOOLING_DOXYGEN(desc) \
    class linkage cname : public virtual base { \
    protected: \
        cname() {} \
    public: \
        virtual ~cname() {} \
        XMLTOOLING_DOXYGEN(Type-specific clone method.) \
        virtual cname* clone##cname() const=0; \
        XMLTOOLING_DOXYGEN(Element local name) \
        static const XMLCh LOCAL_NAME[]

Begins the declaration of an XMLObject specialization.

Basic boilerplate includes a protected constructor, empty virtual destructor, and Unicode constants for the default associated element's name and prefix.

Parameters:
linkagelinkage specifier for the class
cnamethe name of the class to declare
basethe base class to derive from using public virtual inheritance
descdocumentation comment for class
#define BEGIN_XMLOBJECT2 (   linkage,
  cname,
  base,
  base2,
  desc 
)
Value:
XMLTOOLING_DOXYGEN(desc) \
    class linkage cname : public virtual base, public virtual base2 { \
    protected: \
        cname() {} \
    public: \
        virtual ~cname() {} \
        XMLTOOLING_DOXYGEN(Type-specific clone method.) \
        virtual cname* clone##cname() const=0; \
        XMLTOOLING_DOXYGEN(Element local name) \
        static const XMLCh LOCAL_NAME[]

Begins the declaration of an XMLObject specialization with two base classes.

Basic boilerplate includes a protected constructor, empty virtual destructor, and Unicode constants for the default associated element's name and prefix.

Parameters:
linkagelinkage specifier for the class
cnamethe name of the class to declare
basethe first base class to derive from using public virtual inheritance
base2the second base class to derive from using public virtual inheritance
descdocumentation comment for class
#define BEGIN_XMLOBJECT3 (   linkage,
  cname,
  base,
  base2,
  base3,
  desc 
)
Value:
XMLTOOLING_DOXYGEN(desc) \
    class linkage cname : public virtual base, public virtual base2, public virtual base3 { \
    protected: \
        cname() {} \
    public: \
        virtual ~cname() {} \
        XMLTOOLING_DOXYGEN(Type-specific clone method.) \
        virtual cname* clone##cname() const=0; \
        XMLTOOLING_DOXYGEN(Element local name) \
        static const XMLCh LOCAL_NAME[]

Begins the declaration of an XMLObject specialization with three base classes.

Basic boilerplate includes a protected constructor, empty virtual destructor, and Unicode constants for the default associated element's name and prefix.

Parameters:
linkagelinkage specifier for the class
cnamethe name of the class to declare
basethe first base class to derive from using public virtual inheritance
base2the second base class to derive from using public virtual inheritance
base3the third base class to derive from using public virtual inheritance
descdocumentation comment for class
#define BEGIN_XMLOBJECT4 (   linkage,
  cname,
  base,
  base2,
  base3,
  base4,
  desc 
)
Value:
XMLTOOLING_DOXYGEN(desc) \
    class linkage cname : public virtual base, public virtual base2, public virtual base3, public virtual base4 { \
    protected: \
        cname() {} \
    public: \
        virtual ~cname() {} \
        XMLTOOLING_DOXYGEN(Type-specific clone method.) \
        virtual cname* clone##cname() const=0; \
        XMLTOOLING_DOXYGEN(Element local name) \
        static const XMLCh LOCAL_NAME[]

Begins the declaration of an XMLObject specialization with four base classes.

Basic boilerplate includes a protected constructor, empty virtual destructor, and Unicode constants for the default associated element's name and prefix.

Parameters:
linkagelinkage specifier for the class
cnamethe name of the class to declare
basethe first base class to derive from using public virtual inheritance
base2the second base class to derive from using public virtual inheritance
base3the third base class to derive from using public virtual inheritance
base4the fourth base class to derive from using public virtual inheritance
descdocumentation comment for class
#define BEGIN_XMLOBJECT5 (   linkage,
  cname,
  base,
  base2,
  base3,
  base4,
  base5,
  desc 
)
Value:
XMLTOOLING_DOXYGEN(desc) \
    class linkage cname : public virtual base, public virtual base2, public virtual base3, public virtual base4, public virtual base5 { \
    protected: \
        cname() {} \
    public: \
        virtual ~cname() {} \
        XMLTOOLING_DOXYGEN(Type-specific clone method.) \
        virtual cname* clone##cname() const=0; \
        XMLTOOLING_DOXYGEN(Element local name) \
        static const XMLCh LOCAL_NAME[]

Begins the declaration of an XMLObject specialization with five base classes.

Basic boilerplate includes a protected constructor, empty virtual destructor, and Unicode constants for the default associated element's name and prefix.

Parameters:
linkagelinkage specifier for the class
cnamethe name of the class to declare
basethe first base class to derive from using public virtual inheritance
base2the second base class to derive from using public virtual inheritance
base3the third base class to derive from using public virtual inheritance
base4the fourth base class to derive from using public virtual inheritance
base5the fifth base class to derive from using public virtual inheritance
descdocumentation comment for class
#define BEGIN_XMLOBJECTBUILDER (   linkage,
  cname,
  namespaceURI,
  namespacePrefix 
)
Value:
XMLTOOLING_DOXYGEN(Builder for cname objects.) \
    class linkage cname##Builder : public xmltooling::ConcreteXMLObjectBuilder { \
    public: \
        virtual ~cname##Builder() {} \
        XMLTOOLING_DOXYGEN(Default builder.) \
        virtual cname* buildObject() const { \
            return buildObject(namespaceURI,cname::LOCAL_NAME,namespacePrefix); \
        } \
        XMLTOOLING_DOXYGEN(Builder that allows element/type override.) \
        virtual cname* buildObject( \
            const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr \
            ) const

Begins the declaration of an XMLObjectBuilder specialization.

Basic boilerplate includes an empty virtual destructor, and a default builder that defaults the element name.

Parameters:
linkagelinkage specifier for the class
cnamethe name of the XMLObject specialization
namespaceURIthe XML namespace of the default associated element
namespacePrefixthe XML namespace prefix of the default associated element
#define BEGIN_XMLOBJECTVALIDATOR (   linkage,
  cname 
)
Value:
class linkage cname##SchemaValidator : public xmltooling::Validator \
    { \
    public: \
        virtual ~cname##SchemaValidator() {} \
        virtual void validate(const xmltooling::XMLObject* xmlObject) const { \
            const cname* ptr=dynamic_cast<const cname*>(xmlObject); \
            if (!ptr) \
                throw xmltooling::ValidationException(#cname"SchemaValidator: unsupported object type ($1).",xmltooling::params(1,typeid(xmlObject).name())); \
            if (ptr->nil() && (ptr->hasChildren() || ptr->getTextContent())) \
                throw xmltooling::ValidationException("Object has nil property but with children or content.")

Begins the declaration of a Schema Validator specialization.

Parameters:
linkagelinkage specifier for the class
cnamethe base name of the Validator specialization
#define BEGIN_XMLOBJECTVALIDATOR_SUB (   linkage,
  cname,
  base 
)
Value:
class linkage cname##SchemaValidator : public base##SchemaValidator \
    { \
    public: \
        virtual ~cname##SchemaValidator() {} \
        virtual void validate(const xmltooling::XMLObject* xmlObject) const { \
            const cname* ptr=dynamic_cast<const cname*>(xmlObject); \
            if (!ptr) \
                throw xmltooling::ValidationException(#cname"SchemaValidator: unsupported object type ($1).",xmltooling::params(1,typeid(xmlObject).name()));

Begins the declaration of a Schema Validator specialization subclass.

Parameters:
linkagelinkage specifier for the class
cnamethe base name of the Validator specialization
basebase class for the validator
#define DECL_BOOLEAN_ATTRIB (   proper,
  upcased,
  def 
)

Declares abstract get/set methods for a boolean XML attribute.

Parameters:
properthe proper name of the attribute
upcasedthe upcased name of the attribute
defthe default/presumed value, if no explicit value has been set
#define DECL_DATETIME_ATTRIB (   proper,
  upcased 
)
Value:
DECL_XMLOBJECT_ATTRIB(proper,upcased,xercesc::XMLDateTime); \
    XMLTOOLING_DOXYGEN(Returns the proper attribute in epoch form.) \
    virtual time_t get##proper##Epoch() const=0; \
    XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
    virtual void set##proper(time_t proper)=0; \
    XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
    virtual void set##proper(const XMLCh* proper)=0

Declares abstract get/set methods for a DateTime XML attribute.

Parameters:
properthe proper name of the attribute
upcasedthe upcased name of the attribute
#define DECL_ELEMENT_QNAME
Value:
public: \
        XMLTOOLING_DOXYGEN(Element QName) \
        static xmltooling::QName ELEMENT_QNAME

Declares a static variable holding the XMLObject's element QName.

#define DECL_INHERITED_DATETIME_ATTRIB (   proper,
  upcased 
)
Value:
DECL_INHERITED_XMLOBJECT_ATTRIB(proper,upcased,xercesc::XMLDateTime); \
    XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
    virtual void set##proper(time_t proper)=0; \
    XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
    virtual void set##proper(const XMLCh* proper)=0

Declares abstract set method for a DateTime XML attribute.

The get method is omitted.

Parameters:
properthe proper name of the attribute
upcasedthe upcased name of the attribute
#define DECL_INHERITED_INTEGER_ATTRIB (   proper,
  upcased 
)
Value:
public: \
        XMLTOOLING_DOXYGEN(proper attribute name) \
        static const XMLCh upcased##_ATTRIB_NAME[]; \
        XMLTOOLING_DOXYGEN(Sets the proper attribute using a string value.) \
        virtual void set##proper(const XMLCh* proper)=0; \
        XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
        virtual void set##proper(int proper)=0

Declares abstract set method for an integer XML attribute.

The get method is omitted.

Parameters:
properthe proper name of the attribute
upcasedthe upcased name of the attribute
#define DECL_INHERITED_STRING_ATTRIB (   proper,
  upcased 
)    DECL_INHERITED_XMLOBJECT_ATTRIB(proper,upcased,XMLCh)

Declares abstract set method for a string XML attribute.

The get method is omitted.

Parameters:
properthe proper name of the attribute
upcasedthe upcased name of the attribute
#define DECL_INHERITED_TYPED_CHILD (   proper)
Value:
public: \
        XMLTOOLING_DOXYGEN(Sets the proper child.) \
        virtual void set##proper(proper* child)=0

Declares abstract set method for a typed XML child object.

The get method is omitted.

Parameters:
properthe proper name of the child type
#define DECL_INHERITED_TYPED_FOREIGN_CHILD (   proper,
  ns 
)
Value:
public: \
        XMLTOOLING_DOXYGEN(Sets the proper child.) \
        virtual void set##proper(ns::proper* child)=0

Declares abstract set method for a typed XML child object in a foreign namespace.

The get method is omitted.

Parameters:
properthe proper name of the child type
nsthe C++ namespace for the type
#define DECL_INHERITED_XMLOBJECT_ATTRIB (   proper,
  upcased,
  type 
)
Value:
public: \
        XMLTOOLING_DOXYGEN(proper attribute name) \
        static const XMLCh upcased##_ATTRIB_NAME[]; \
        XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
        virtual void set##proper(const type* proper)=0

Declares abstract set method for a typed XML attribute.

The get method is omitted.

Parameters:
properthe proper name of the attribute
upcasedthe upcased name of the attribute
typethe attribute's data type
#define DECL_INTEGER_ATTRIB (   proper,
  upcased 
)
Value:
public: \
        XMLTOOLING_DOXYGEN(proper attribute name) \
        static const XMLCh upcased##_ATTRIB_NAME[]; \
        XMLTOOLING_DOXYGEN(Returns the proper attribute after a NULL indicator.) \
        virtual std::pair<bool,int> get##proper() const=0; \
        XMLTOOLING_DOXYGEN(Sets the proper attribute using a string value.) \
        virtual void set##proper(const XMLCh* proper)=0; \
        XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
        virtual void set##proper(int proper)=0

Declares abstract get/set methods for an integer XML attribute.

Parameters:
properthe proper name of the attribute
upcasedthe upcased name of the attribute
#define DECL_INTEGER_CONTENT (   proper)
Value:
XMLTOOLING_DOXYGEN(Returns proper in integer form after a NULL indicator.) \
    std::pair<bool,int> get##proper() const { \
        if (getTextContent()) { \
            try { \
                return std::make_pair(true, xercesc::XMLString::parseInt(getTextContent())); \
            } \
            catch (...) { \
                return std::make_pair(true, 0); \
            } \
        } else { \
            return std::make_pair(false, 0); \
        } \
    } \
    XMLTOOLING_DOXYGEN(Sets proper.) \
    void set##proper(int proper) { \
        try { \
            std::string buf(boost::lexical_cast<std::string>(proper)); \
            xmltooling::auto_ptr_XMLCh widen(buf.c_str()); \
            setTextContent(widen.get()); \
        } \
        catch (boost::bad_lexical_cast&) { \
        } \
    } \
    XMLTOOLING_DOXYGEN(Sets or clears proper.) \
    void set##proper(const XMLCh* proper) { \
        setTextContent(proper); \
    }

Declares aliased get/set methods for named integer XML element content.

Parameters:
properthe proper name to label the element's content
#define DECL_SIMPLE_CONTENT (   proper)
Value:
XMLTOOLING_DOXYGEN(Returns proper.) \
    const XMLCh* get##proper() const { \
        return getTextContent(); \
    } \
    XMLTOOLING_DOXYGEN(Sets or clears proper.) \
    void set##proper(const XMLCh* proper) { \
        setTextContent(proper); \
    }

Declares aliased get/set methods for named XML element simple content.

Parameters:
properthe proper name to label the element's content
#define DECL_STRING_ATTRIB (   proper,
  upcased 
)    DECL_XMLOBJECT_ATTRIB(proper,upcased,XMLCh)

Declares abstract get/set methods for a string XML attribute.

Parameters:
properthe proper name of the attribute
upcasedthe upcased name of the attribute
#define DECL_TYPE_QNAME
Value:
public: \
        XMLTOOLING_DOXYGEN(Type QName) \
        static xmltooling::QName TYPE_QNAME

Declares a static variable holding the XMLObject's schema type QName.

#define DECL_TYPED_CHILD (   proper)
Value:
public: \
        XMLTOOLING_DOXYGEN(Returns the proper child.) \
        virtual proper* get##proper() const=0; \
        XMLTOOLING_DOXYGEN(Sets the proper child.) \
        virtual void set##proper(proper* child)=0

Declares abstract get/set methods for a typed XML child object.

Parameters:
properthe proper name of the child type
#define DECL_TYPED_CHILDREN (   proper)
Value:
public: \
        XMLTOOLING_DOXYGEN(Returns modifiable proper collection.) \
        virtual VectorOf(proper) get##proper##s()=0; \
        XMLTOOLING_DOXYGEN(Returns reference to immutable proper collection.) \
        virtual const std::vector<proper*>& get##proper##s() const=0

Declares abstract get/set methods for a typed XML child collection.

Parameters:
properthe proper name of the child type
#define DECL_TYPED_FOREIGN_CHILD (   proper,
  ns 
)
Value:
public: \
        XMLTOOLING_DOXYGEN(Returns the proper child.) \
        virtual ns::proper* get##proper() const=0; \
        XMLTOOLING_DOXYGEN(Sets the proper child.) \
        virtual void set##proper(ns::proper* child)=0

Declares abstract get/set methods for a typed XML child object in a foreign namespace.

Parameters:
properthe proper name of the child type
nsthe C++ namespace for the type
#define DECL_TYPED_FOREIGN_CHILDREN (   proper,
  ns 
)
Value:
public: \
        XMLTOOLING_DOXYGEN(Returns modifiable proper collection.) \
        virtual VectorOf(ns::proper) get##proper##s()=0; \
        XMLTOOLING_DOXYGEN(Returns reference to immutable proper collection.) \
        virtual const std::vector<ns::proper*>& get##proper##s() const=0

Declares abstract get/set methods for a typed XML child collection in a foreign namespace.

Parameters:
properthe proper name of the child type
nsthe C++ namespace for the type
#define DECL_XMLOBJECT_ABSTRACT (   linkage,
  cname,
  base,
  desc 
)
Value:
XMLTOOLING_DOXYGEN(desc) \
    class linkage cname : public virtual base { \
    protected: \
        cname() {} \
    public: \
        virtual ~cname() {} \
        XMLTOOLING_DOXYGEN(Element local name) \
        static const XMLCh LOCAL_NAME[]; \
    }

Begins the declaration of an XMLObject specialization for an abstract element/type.

Basic boilerplate includes a protected constructor, empty virtual destructor, and Unicode constants for the default associated element's name and prefix.

Parameters:
linkagelinkage specifier for the class
cnamethe name of the class to declare
basethe base class to derive from using public virtual inheritance
descdocumentation comment for class
#define DECL_XMLOBJECT_ATTRIB (   proper,
  upcased,
  type 
)
Value:
public: \
        XMLTOOLING_DOXYGEN(proper attribute name) \
        static const XMLCh upcased##_ATTRIB_NAME[]; \
        XMLTOOLING_DOXYGEN(Returns the proper attribute.) \
        virtual const type* get##proper() const=0; \
        XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
        virtual void set##proper(const type* proper)=0

Declares abstract get/set methods for a typed XML attribute.

Parameters:
properthe proper name of the attribute
upcasedthe upcased name of the attribute
typethe attribute's data type
#define DECL_XMLOBJECT_CHILD (   proper)
Value:
public: \
        XMLTOOLING_DOXYGEN(Returns the proper child.) \
        virtual xmltooling::XMLObject* get##proper() const=0; \
        XMLTOOLING_DOXYGEN(Sets the proper child.) \
        virtual void set##proper(xmltooling::XMLObject* child)=0

Declares abstract get/set methods for a generic XML child object.

Parameters:
properthe proper name of the child
#define DECL_XMLOBJECT_CHILDREN (   proper)
Value:
public: \
        XMLTOOLING_DOXYGEN(Returns modifiable proper collection.) \
        virtual VectorOf(xmltooling::XMLObject) get##proper##s()=0; \
        XMLTOOLING_DOXYGEN(Returns reference to immutable proper collection.) \
        virtual const std::vector<xmltooling::XMLObject*>& get##proper##s() const=0

Declares abstract get/set methods for a generic XML child collection.

Parameters:
properthe proper name of the child
#define DECL_XMLOBJECT_SIMPLE (   linkage,
  cname,
  proper,
  desc 
)
Value:

Declares an XMLObject specialization with a simple content model and type, handling it as string data.

Parameters:
linkagelinkage specifier for the class
cnamethe name of the XMLObject specialization
properthe proper name to label the element's content
descdocumentation for class
#define DECL_XMLOBJECTBUILDER (   linkage,
  cname,
  namespaceURI,
  namespacePrefix 
)
Value:
BEGIN_XMLOBJECTBUILDER(linkage,cname,namespaceURI,namespacePrefix); \
    XMLTOOLING_DOXYGEN(Singleton builder.) \
    static cname* build##cname() { \
        const cname##Builder* b = dynamic_cast<const cname##Builder*>( \
            XMLObjectBuilder::getBuilder(xmltooling::QName(namespaceURI,cname::LOCAL_NAME)) \
            ); \
        if (b) \
            return b->buildObject(); \
        throw xmltooling::XMLObjectException("Unable to obtain typed builder for "#cname"."); \
    } \
    END_XMLOBJECTBUILDER

Declares a generic XMLObjectBuilder specialization.

Parameters:
linkagelinkage specifier for the class
cnamethe name of the XMLObject specialization
namespaceURIthe XML namespace of the default associated element
namespacePrefixthe XML namespace prefix of the default associated element
#define DECL_XMLOBJECTIMPL_SIMPLE (   linkage,
  cname 
)
Value:
class linkage cname##Impl \
        : public virtual cname, \
            public xmltooling::AbstractSimpleElement, \
            public xmltooling::AbstractDOMCachingXMLObject, \
            public xmltooling::AbstractXMLObjectMarshaller, \
            public xmltooling::AbstractXMLObjectUnmarshaller \
    { \
    public: \
        virtual ~cname##Impl() {} \
        cname##Impl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) \
            : xmltooling::AbstractXMLObject(nsURI, localName, prefix, schemaType) { \
        } \
        cname##Impl(const cname##Impl& src) \
            : xmltooling::AbstractXMLObject(src), \
                xmltooling::AbstractSimpleElement(src), \
                xmltooling::AbstractDOMCachingXMLObject(src) {} \
        IMPL_XMLOBJECT_CLONE(cname) \
    }

Declares and defines an implementation class for an XMLObject with a simple content model and type, handling it as string data.

Parameters:
linkagelinkage specifier for the class
cnamethe name of the XMLObject specialization
#define IMPL_BOOLEAN_ATTRIB (   proper)
Value:
protected: \
        xmlconstants::xmltooling_bool_t m_##proper; \
    public: \
        xmlconstants::xmltooling_bool_t get##proper() const { \
            return m_##proper; \
        } \
        void proper(xmlconstants::xmltooling_bool_t value) { \
            if (m_##proper != value) { \
                releaseThisandParentDOM(); \
                m_##proper = value; \
            } \
        }

Implements get/set methods and a private member for a boolean XML attribute.

Parameters:
properthe proper name of the attribute
#define IMPL_CLONE_ATTRIB (   proper)    set##proper(src.get##proper())

Implements cloning of a child attribute, for use in copy constructor or deferred clone methods.

proper the proper name of the attribute to clone

#define IMPL_CLONE_BOOLEAN_ATTRIB (   proper)    proper(src.m_##proper)

Implements cloning of a boolean child attribute, for use in copy constructor or deferred clone methods.

proper the proper name of the attribute to clone

#define IMPL_CLONE_FOREIGN_ATTRIB (   proper)
Value:
set##proper(src.get##proper()); \
    if (src.m_##proper##Prefix) \
        m_##proper##Prefix = xercesc::XMLString::replicate(src.m_##proper##Prefix)

Implements cloning of a child attribute in a foreign namespace, for use in copy constructor or deferred clone methods.

proper the proper name of the attribute to clone

#define IMPL_CLONE_INTEGER_ATTRIB (   proper)    set##proper(src.m_##proper)

Implements cloning of an integer child attribute, for use in copy constructor or deferred clone methods.

proper the proper name of the attribute to clone

#define IMPL_CLONE_TYPED_CHILD (   proper)
Value:
if (src.get##proper()) \
        set##proper(src.get##proper()->clone##proper())

Implements cloning of a typed child object, for use in copy constructor or deferred clone methods.

proper the proper name of the child type to clone

#define IMPL_CLONE_TYPED_CHILD_IN_BAG (   proper)
Value:
proper* _##proper##cast = dynamic_cast<proper*>(*_bagit); \
    if (_##proper##cast) { \
        get##proper##s().push_back(_##proper##cast->clone##proper()); \
        continue; \
    }

Implements cloning of a typed child in a bag iteration loop based on a cast check.

Parameters:
properthe proper name of the child type to clone
#define IMPL_CLONE_TYPED_CHILDREN (   proper)
Value:
static void (VectorOf(proper)::* proper##_push_back)(proper* const&) = &VectorOf(proper)::push_back; \
    VectorOf(proper) c##proper = get##proper##s(); \
    std::for_each( \
        src.m_##proper##s.begin(), src.m_##proper##s.end(), \
        boost::lambda::if_(boost::lambda::_1 != ((proper*)nullptr)) \
            [boost::lambda::bind(proper##_push_back, boost::ref(c##proper), boost::lambda::bind(&proper::clone##proper, boost::lambda::_1))] \
        )

Implements cloning of a child collection, for use in copy constructor or deferred clone methods.

proper the proper name of the child type to clone

#define IMPL_CLONE_TYPED_FOREIGN_CHILD_IN_BAG (   proper,
  ns 
)
Value:
ns::proper* _##proper##cast = dynamic_cast<ns::proper*>(*_bagit); \
    if (_##proper##cast) { \
        get##proper##s().push_back(_##proper##cast->clone##proper()); \
        continue; \
    }

Implements cloning of a typed child in a forign namespace in a bag iteration loop based on a cast check.

Parameters:
properthe proper name of the child type to clone
nsthe namespace of the child type
#define IMPL_CLONE_TYPED_FOREIGN_CHILDREN (   proper,
  ns 
)
Value:
static void (VectorOf(ns::proper)::* proper##_push_back)(ns::proper* const&) = &VectorOf(ns::proper)::push_back; \
    VectorOf(ns::proper) c##proper = get##proper##s(); \
    std::for_each( \
        src.m_##proper##s.begin(), src.m_##proper##s.end(), \
        boost::lambda::if_(boost::lambda::_1 != ((ns::proper*)nullptr)) \
            [boost::lambda::bind(proper##_push_back, boost::ref(c##proper), boost::lambda::bind(&ns::proper::clone##proper, boost::lambda::_1))] \
        )

Implements cloning of a child collection in a foreign namespace, for use in copy constructor or deferred clone methods.

proper the proper name of the child type to clone ns the namespace of the child type

#define IMPL_CLONE_XMLOBJECT_CHILD (   proper)
Value:
if (src.get##proper()) \
        set##proper(src.get##proper()->clone())

Implements cloning of a child object, for use in copy constructor or deferred clone methods.

proper the proper name of the child object to clone

#define IMPL_CLONE_XMLOBJECT_CHILD_IN_BAG (   proper)
Value:
if (*_bagit) { \
        get##proper##s().push_back((*_bagit)->clone()); \
    }

Implements cloning of an XMLObject child in a bag iteration loop.

Parameters:
properthe proper name of the child to clone
#define IMPL_CLONE_XMLOBJECT_CHILDREN (   proper)
Value:
static void (VectorOf(XMLObject)::* XMLObject_push_back)(XMLObject* const&) = &VectorOf(XMLObject)::push_back; \
    VectorOf(XMLObject) c##proper = get##proper##s(); \
    std::for_each( \
        src.m_##proper##s.begin(), src.m_##proper##s.end(), \
        boost::lambda::if_(boost::lambda::_1 != ((XMLObject*)nullptr)) \
            [boost::lambda::bind(XMLObject_push_back, boost::ref(c##proper), boost::lambda::bind(&XMLObject::clone, boost::lambda::_1))] \
        )

Implements cloning of an untyped child collection, for use in copy constructor or deferred clone methods.

proper the proper name of the child type to clone

#define IMPL_DATETIME_ATTRIB (   proper,
  fallback 
)    IMPL_DATETIME_ATTRIB_EX(proper,fallback,false)

Implements get/set methods and a private member for a DateTime XML attribute.

Parameters:
properthe proper name of the attribute
fallbackepoch to return when attribute is NULL
#define IMPL_DATETIME_ATTRIB_EX (   proper,
  fallback,
  duration 
)
Value:
protected: \
        XMLDateTime* m_##proper; \
        time_t m_##proper##Epoch; \
    public: \
        const XMLDateTime* get##proper() const { \
            return m_##proper; \
        } \
        time_t get##proper##Epoch() const { \
            return m_##proper ? m_##proper##Epoch : fallback; \
        } \
        void set##proper(const XMLDateTime* proper) { \
            m_##proper = prepareForAssignment(m_##proper,proper); \
            if (m_##proper) \
                m_##proper##Epoch=m_##proper->getEpoch(duration); \
        } \
        void set##proper(time_t proper) { \
            m_##proper = prepareForAssignment(m_##proper,proper,duration); \
            m_##proper##Epoch = proper; \
        } \
        void set##proper(const XMLCh* proper) { \
            m_##proper = prepareForAssignment(m_##proper,proper,duration); \
            if (m_##proper) \
                m_##proper##Epoch=m_##proper->getEpoch(duration); \
        }

Implements get/set methods and a private member for a DateTime XML attribute.

Parameters:
properthe proper name of the attribute
fallbackepoch to return when attribute is NULL
durationtrue iff the attribute should be handled as a duration
#define IMPL_DURATION_ATTRIB (   proper,
  fallback 
)    IMPL_DATETIME_ATTRIB_EX(proper,fallback,true)

Implements get/set methods and a private member for a duration-valued DateTime XML attribute.

Parameters:
properthe proper name of the attribute
fallbackepoch to return when attribute is NULL
#define IMPL_ELEMENT_QNAME (   cname,
  namespaceURI,
  namespacePrefix 
)    xmltooling::QName cname::ELEMENT_QNAME(namespaceURI,cname::LOCAL_NAME,namespacePrefix)

Implements a static variable holding an XMLObject's element QName.

Parameters:
cnamethe name of the XMLObject specialization
namespaceURIthe XML namespace of the default associated element
namespacePrefixthe XML namespace prefix of the default associated element
#define IMPL_ID_ATTRIB (   proper)
Value:
IMPL_XMLOBJECT_ATTRIB(proper,XMLCh) \
    const XMLCh* getXMLID() const { \
        return m_##proper; \
    }

Implements get/set methods and a private member for a string XML attribute, plus a getXMLID override.

Parameters:
properthe proper name of the attribute
#define IMPL_ID_ATTRIB_EX (   proper,
  ucase,
  namespaceURI 
)
Value:
IMPL_XMLOBJECT_ATTRIB(proper,XMLCh) \
    const XMLCh* getXMLID() const { \
        return m_##proper; \
    } \
    void releaseDOM() const { \
        if (getDOM()) \
            getDOM()->removeAttributeNS(namespaceURI, ucase##_ATTRIB_NAME); \
        AbstractDOMCachingXMLObject::releaseDOM(); \
    }

Implements get/set methods and a private member for a string XML attribute, plus a getXMLID override and attribute node clearance when DOM is dropped.

Parameters:
properthe proper name of the attribute
ucasethe upcased name of the attribute
namespaceURIthe XML namespace of the attribute
#define IMPL_INTEGER_ATTRIB (   proper)
Value:
protected: \
        XMLCh* m_##proper; \
    public: \
        pair<bool,int> get##proper() const { \
            if (m_##proper) { \
                try { \
                    return std::make_pair(true, xercesc::XMLString::parseInt(m_##proper)); \
                } \
                catch (...) { \
                    return std::make_pair(true, 0); \
                } \
            } else { \
                return std::make_pair(false, 0); \
            } \
        } \
        void set##proper(const XMLCh* proper) { \
            m_##proper = prepareForAssignment(m_##proper,proper); \
        } \
        void set##proper(int proper) { \
            try { \
                std::string buf(boost::lexical_cast<std::string>(proper)); \
                xmltooling::auto_ptr_XMLCh widen(buf.c_str()); \
                set##proper(widen.get()); \
            } \
            catch (boost::bad_lexical_cast&) { \
            } \
        }

Implements get/set methods and a private member for an integer XML attribute.

Parameters:
properthe proper name of the attribute
#define IMPL_STRING_ATTRIB (   proper)    IMPL_XMLOBJECT_ATTRIB(proper,XMLCh)

Implements get/set methods and a private member for a string XML attribute.

Parameters:
properthe proper name of the attribute
#define IMPL_TYPE_QNAME (   cname,
  namespaceURI,
  namespacePrefix 
)    xmltooling::QName cname::TYPE_QNAME(namespaceURI,cname::TYPE_NAME,namespacePrefix)

Implements a static variable holding an XMLObject's schema type QName.

Parameters:
cnamethe name of the XMLObject specialization
namespaceURIthe XML namespace of the default associated element
namespacePrefixthe XML namespace prefix of the default associated element
#define IMPL_TYPED_CHILD (   proper)
Value:
protected: \
        proper* m_##proper; \
        std::list<xmltooling::XMLObject*>::iterator m_pos_##proper; \
    public: \
        proper* get##proper() const { \
            return m_##proper; \
        } \
        void set##proper(proper* child) { \
            prepareForAssignment(m_##proper,child); \
            *m_pos_##proper = m_##proper = child; \
        }

Implements get/set methods and a private list iterator member for a typed XML child object.

Parameters:
properthe proper name of the child type
#define IMPL_TYPED_CHILDREN (   proper,
  fence 
)
Value:
protected: \
        std::vector<proper*> m_##proper##s; \
    public: \
        VectorOf(proper) get##proper##s() { \
            return VectorOf(proper)(this, m_##proper##s, &m_children, fence); \
        } \
        const std::vector<proper*>& get##proper##s() const { \
            return m_##proper##s; \
        }

Implements get method and a private vector member for a typed XML child collection.

Parameters:
properthe proper name of the child type
fenceinsertion fence for new objects of the child collection in backing list
#define IMPL_TYPED_FOREIGN_CHILD (   proper,
  ns 
)
Value:
protected: \
        ns::proper* m_##proper; \
        std::list<xmltooling::XMLObject*>::iterator m_pos_##proper; \
    public: \
        ns::proper* get##proper() const { \
            return m_##proper; \
        } \
        void set##proper(ns::proper* child) { \
            prepareForAssignment(m_##proper,child); \
            *m_pos_##proper = m_##proper = child; \
        }

Implements get/set methods and a private list iterator member for a typed XML child object in a foreign namespace.

Parameters:
properthe proper name of the child type
nsthe C++ namespace for the type
#define IMPL_TYPED_FOREIGN_CHILDREN (   proper,
  ns,
  fence 
)
Value:
protected: \
        std::vector<ns::proper*> m_##proper##s; \
    public: \
        VectorOf(ns::proper) get##proper##s() { \
            return VectorOf(ns::proper)(this, m_##proper##s, &m_children, fence); \
        } \
        const std::vector<ns::proper*>& get##proper##s() const { \
            return m_##proper##s; \
        }

Implements get method and a private vector member for a typed XML child collection in a foreign namespace.

Parameters:
properthe proper name of the child type
nsthe C++ namespace for the type
fenceinsertion fence for new objects of the child collection in backing list
#define IMPL_XMLOBJECT_ATTRIB (   proper,
  type 
)
Value:
protected: \
        type* m_##proper; \
    public: \
        const type* get##proper() const { \
            return m_##proper; \
        } \
        void set##proper(const type* proper) { \
            m_##proper = prepareForAssignment(m_##proper,proper); \
        }

Implements get/set methods and a private member for a typed XML attribute.

Parameters:
properthe proper name of the attribute
typethe attribute's data type
#define IMPL_XMLOBJECT_CHILD (   proper)
Value:
protected: \
        xmltooling::XMLObject* m_##proper; \
        std::list<xmltooling::XMLObject*>::iterator m_pos_##proper; \
    public: \
        xmltooling::XMLObject* get##proper() const { \
            return m_##proper; \
        } \
        void set##proper(xmltooling::XMLObject* child) { \
            prepareForAssignment(m_##proper,child); \
            *m_pos_##proper = m_##proper = child; \
        }

Implements get/set methods and a private list iterator member for a generic XML child object.

Parameters:
properthe proper name of the child
#define IMPL_XMLOBJECT_CHILDREN (   proper,
  fence 
)
Value:
protected: \
        std::vector<xmltooling::XMLObject*> m_##proper##s; \
    public: \
        VectorOf(xmltooling::XMLObject) get##proper##s() { \
            return VectorOf(xmltooling::XMLObject)(this, m_##proper##s, &m_children, fence); \
        } \
        const std::vector<xmltooling::XMLObject*>& get##proper##s() const { \
            return m_##proper##s; \
        }

Implements get method and a private vector member for a generic XML child collection.

Parameters:
properthe proper name of the child
fenceinsertion fence for new objects of the child collection in backing list
#define IMPL_XMLOBJECT_CLONE (   cname)
Value:
cname* clone##cname() const { \
        return dynamic_cast<cname*>(clone()); \
    } \
    xmltooling::XMLObject* clone() const { \
        std::auto_ptr<xmltooling::XMLObject> domClone(xmltooling::AbstractDOMCachingXMLObject::clone()); \
        cname##Impl* ret=dynamic_cast<cname##Impl*>(domClone.get()); \
        if (ret) \
            return domClone.release(); \
        return new cname##Impl(*this); \
    }

Implements cloning methods for an XMLObject specialization implementation class.

Parameters:
cnamethe name of the XMLObject specialization
#define IMPL_XMLOBJECT_CLONE2 (   cname,
  base 
)
Value:
cname* clone##cname() const { \
        return dynamic_cast<cname*>(clone()); \
    } \
    base* clone##base() const { \
        return dynamic_cast<base*>(clone()); \
    } \
    xmltooling::XMLObject* clone() const { \
        std::auto_ptr<xmltooling::XMLObject> domClone(xmltooling::AbstractDOMCachingXMLObject::clone()); \
        cname##Impl* ret=dynamic_cast<cname##Impl*>(domClone.get()); \
        if (ret) \
            return domClone.release(); \
        return new cname##Impl(*this); \
    }

Implements cloning methods for an XMLObject specialization implementation class that must override a base class clone method.

Parameters:
cnamethe name of the XMLObject specialization
basename of base type.
#define IMPL_XMLOBJECT_CLONE_EX (   cname)
Value:
cname* clone##cname() const { \
        return dynamic_cast<cname*>(clone()); \
    } \
    xmltooling::XMLObject* clone() const { \
        std::auto_ptr<xmltooling::XMLObject> domClone(xmltooling::AbstractDOMCachingXMLObject::clone()); \
        cname##Impl* ret=dynamic_cast<cname##Impl*>(domClone.get()); \
        if (ret) \
            return domClone.release(); \
        std::auto_ptr<cname##Impl> ret2(new cname##Impl(*this)); \
        ret2->_clone(*this); \
        return ret2.release(); \
    }

Implements cloning methods for an XMLObject specialization implementation class that needs two stage duplication to avoid invoking virtual methods during construction.

Parameters:
cnamethe name of the XMLObject specialization
#define IMPL_XMLOBJECT_CLONE_EX2 (   cname,
  base 
)
Value:
cname* clone##cname() const { \
        return dynamic_cast<cname*>(clone()); \
    } \
    base* clone##base() const { \
        return dynamic_cast<base*>(clone()); \
    } \
    xmltooling::XMLObject* clone() const { \
        std::auto_ptr<xmltooling::XMLObject> domClone(xmltooling::AbstractDOMCachingXMLObject::clone()); \
        cname##Impl* ret=dynamic_cast<cname##Impl*>(domClone.get()); \
        if (ret) \
            return domClone.release(); \
        std::auto_ptr<cname##Impl> ret2(new cname##Impl(*this)); \
        ret2->_clone(*this); \
        return ret2.release(); \
    }

Implements cloning methods for an XMLObject specialization implementation class that needs two stage duplication to avoid invoking virtual methods during construction, and must override a base class clone method.

Parameters:
cnamethe name of the XMLObject specialization
basename of base type
#define IMPL_XMLOBJECT_FOREIGN_ATTRIB (   proper,
  type 
)
Value:
protected: \
    XMLCh* m_##proper##Prefix; \
        type* m_##proper; \
    public: \
        const type* get##proper() const { \
            return m_##proper; \
        } \
        void set##proper(const type* proper) { \
            m_##proper = prepareForAssignment(m_##proper,proper); \
            xercesc::XMLString::release(&m_##proper##Prefix); \
            m_##proper##Prefix = nullptr; \
        }

Implements get/set methods and a private member for a typed, qualified XML attribute.

Parameters:
properthe proper name of the attribute
typethe attribute's data type
#define IMPL_XMLOBJECTBUILDER (   cname)
Value:
cname* cname##Builder::buildObject( \
        const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType \
        ) const \
    { \
        return new cname##Impl(nsURI,localName,prefix,schemaType); \
    }

Implements the standard XMLObjectBuilder specialization function.

Parameters:
cnamethe name of the XMLObject specialization
#define MAKE_NONCOPYABLE (   type)
Value:
private: \
        type(const type&); \
        type& operator=(const type&)

Blocks copy c'tor and assignment operator for a class.

#define MARSHALL_BOOLEAN_ATTRIB (   proper,
  ucase,
  namespaceURI 
)
Value:
switch (m_##proper) { \
        case xmlconstants::XML_BOOL_TRUE: \
            domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, xmlconstants::XML_TRUE); \
            break; \
        case xmlconstants::XML_BOOL_ONE: \
            domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, xmlconstants::XML_ONE); \
            break; \
        case xmlconstants::XML_BOOL_FALSE: \
            domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, xmlconstants::XML_FALSE); \
            break; \
        case xmlconstants::XML_BOOL_ZERO: \
            domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, xmlconstants::XML_ZERO); \
            break; \
        case xmlconstants::XML_BOOL_NULL: \
            break; \
    }

Implements marshalling for a boolean attribute.

Parameters:
properthe proper name of the attribute
ucasethe upcased name of the attribute
namespaceURIthe XML namespace of the attribute
#define MARSHALL_DATETIME_ATTRIB (   proper,
  ucase,
  namespaceURI 
)
Value:
if (m_##proper) { \
        domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, m_##proper->getRawData()); \
    }

Implements marshalling for a DateTime attribute.

Parameters:
properthe proper name of the attribute
ucasethe upcased name of the attribute
namespaceURIthe XML namespace of the attribute
#define MARSHALL_ID_ATTRIB (   proper,
  ucase,
  namespaceURI 
)
Value:
if (m_##proper && *m_##proper) { \
        domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, m_##proper); \
        domElement->setIdAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, true); \
    }

Implements marshalling for an ID attribute.

Parameters:
properthe proper name of the attribute
ucasethe upcased name of the attribute
namespaceURIthe XML namespace of the attribute
#define MARSHALL_INTEGER_ATTRIB (   proper,
  ucase,
  namespaceURI 
)
Value:
if (m_##proper && *m_##proper) { \
        domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, m_##proper); \
    }

Implements marshalling for an integer attribute.

Parameters:
properthe proper name of the attribute
ucasethe upcased name of the attribute
namespaceURIthe XML namespace of the attribute
#define MARSHALL_QNAME_ATTRIB (   proper,
  ucase,
  namespaceURI 
)
Value:
if (m_##proper) { \
        xmltooling::auto_ptr_XMLCh qstr(m_##proper->toString().c_str()); \
        domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, qstr.get()); \
    }

Implements marshalling for a QName attribute.

Parameters:
properthe proper name of the attribute
ucasethe upcased name of the attribute
namespaceURIthe XML namespace of the attribute
#define MARSHALL_STRING_ATTRIB (   proper,
  ucase,
  namespaceURI 
)
Value:
if (m_##proper && *m_##proper) { \
        domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, m_##proper); \
    }

Implements marshalling for a string attribute.

Parameters:
properthe proper name of the attribute
ucasethe upcased name of the attribute
namespaceURIthe XML namespace of the attribute
#define PROC_BOOLEAN_ATTRIB (   proper,
  ucase,
  namespaceURI 
)    PROC_STRING_ATTRIB(proper,ucase,namespaceURI)

Implements unmarshalling process branch for a boolean attribute.

Parameters:
properthe proper name of the attribute
ucasethe upcased name of the attribute
namespaceURIthe XML namespace of the attribute
#define PROC_DATETIME_ATTRIB (   proper,
  ucase,
  namespaceURI 
)    PROC_STRING_ATTRIB(proper,ucase,namespaceURI)

Implements unmarshalling process branch for a DateTime attribute.

Parameters:
properthe proper name of the attribute
ucasethe upcased name of the attribute
namespaceURIthe XML namespace of the attribute
#define PROC_ID_ATTRIB (   proper,
  ucase,
  namespaceURI 
)
Value:
if (xmltooling::XMLHelper::isNodeNamed(attribute, namespaceURI, ucase##_ATTRIB_NAME)) { \
        set##proper(attribute->getValue()); \
        attribute->getOwnerElement()->setIdAttributeNode(attribute, true); \
        return; \
    }

Implements unmarshalling process branch for an ID attribute.

Parameters:
properthe proper name of the attribute
ucasethe upcased name of the attribute
namespaceURIthe XML namespace of the attribute
#define PROC_INTEGER_ATTRIB (   proper,
  ucase,
  namespaceURI 
)    PROC_STRING_ATTRIB(proper,ucase,namespaceURI)

Implements unmarshalling process branch for an integer attribute.

Parameters:
properthe proper name of the attribute
ucasethe upcased name of the attribute
namespaceURIthe XML namespace of the attribute
#define PROC_QNAME_ATTRIB (   proper,
  ucase,
  namespaceURI 
)
Value:
if (xmltooling::XMLHelper::isNodeNamed(attribute, namespaceURI, ucase##_ATTRIB_NAME)) { \
        boost::scoped_ptr<xmltooling::QName> q(xmltooling::XMLHelper::getNodeValueAsQName(attribute)); \
        set##proper(q.get()); \
        return; \
    }

Implements unmarshalling process branch for a DateTime attribute.

Parameters:
properthe proper name of the attribute
ucasethe upcased name of the attribute
namespaceURIthe XML namespace of the attribute
#define PROC_STRING_ATTRIB (   proper,
  ucase,
  namespaceURI 
)
Value:
if (xmltooling::XMLHelper::isNodeNamed(attribute, namespaceURI, ucase##_ATTRIB_NAME)) { \
        set##proper(attribute->getValue()); \
        return; \
    }

Implements unmarshalling process branch for a string attribute.

Parameters:
properthe proper name of the attribute
ucasethe upcased name of the attribute
namespaceURIthe XML namespace of the attribute
#define PROC_TYPED_CHILD (   proper,
  namespaceURI,
  force 
)
Value:
if (force || xmltooling::XMLHelper::isNodeNamed(root,namespaceURI,proper::LOCAL_NAME)) { \
        proper* typesafe=dynamic_cast<proper*>(childXMLObject); \
        if (typesafe && !m_##proper) { \
            typesafe->setParent(this); \
            *m_pos_##proper = m_##proper = typesafe; \
            return; \
        } \
    }

Implements unmarshalling process branch for typed child singleton element.

Parameters:
properthe proper name of the child type
namespaceURIthe XML namespace of the child element
forcebypass use of hint and just cast down to check child
#define PROC_TYPED_CHILDREN (   proper,
  namespaceURI,
  force 
)
Value:
if (force || xmltooling::XMLHelper::isNodeNamed(root,namespaceURI,proper::LOCAL_NAME)) { \
        proper* typesafe=dynamic_cast<proper*>(childXMLObject); \
        if (typesafe) { \
            get##proper##s().push_back(typesafe); \
            return; \
        } \
    }

Implements unmarshalling process branch for typed child collection element.

Parameters:
properthe proper name of the child type
namespaceURIthe XML namespace of the child element
forcebypass use of hint and just cast down to check child
#define PROC_TYPED_FOREIGN_CHILD (   proper,
  ns,
  namespaceURI,
  force 
)
Value:
if (force || xmltooling::XMLHelper::isNodeNamed(root,namespaceURI,ns::proper::LOCAL_NAME)) { \
        ns::proper* typesafe=dynamic_cast<ns::proper*>(childXMLObject); \
        if (typesafe && !m_##proper) { \
            typesafe->setParent(this); \
            *m_pos_##proper = m_##proper = typesafe; \
            return; \
        } \
    }

Implements unmarshalling process branch for typed child singleton element in a foreign namespace.

Parameters:
properthe proper name of the child type
nsthe C++ namespace for the type
namespaceURIthe XML namespace of the child element
forcebypass use of hint and just cast down to check child
#define PROC_TYPED_FOREIGN_CHILDREN (   proper,
  ns,
  namespaceURI,
  force 
)
Value:
if (force || xmltooling::XMLHelper::isNodeNamed(root,namespaceURI,ns::proper::LOCAL_NAME)) { \
        ns::proper* typesafe=dynamic_cast<ns::proper*>(childXMLObject); \
        if (typesafe) { \
            get##proper##s().push_back(typesafe); \
            return; \
        } \
    }

Implements unmarshalling process branch for typed child collection element in a foreign namespace.

Parameters:
properthe proper name of the child type
nsthe C++ namespace for the type
namespaceURIthe XML namespace of the child element
forcebypass use of hint and just cast down to check child
#define PROC_XMLOBJECT_CHILD (   proper,
  namespaceURI 
)
Value:
if (xmltooling::XMLHelper::isNodeNamed(root,namespaceURI,proper::LOCAL_NAME)) { \
        if (!m_##proper) { \
            childXMLObject->setParent(this); \
            *m_pos_##proper = m_##proper = childXMLObject; \
            return; \
        } \
    }

Implements unmarshalling process branch for a generic child singleton element.

Parameters:
properthe proper name of the child type
namespaceURIthe XML namespace of the child element
#define XMLOBJECTVALIDATOR_CHECKTYPE (   cname)
Value:
const cname* ptr=dynamic_cast<const cname*>(xmlObject); \
    if (!ptr) \
        throw xmltooling::ValidationException(#cname"SchemaValidator: unsupported object type ($1).",xmltooling::params(1,typeid(xmlObject).name()))

Validator code that checks the object type.

Parameters:
cnamethe name of the XMLObject specialization
#define XMLOBJECTVALIDATOR_NONEMPTY (   cname,
  proper 
)
Value:
if (ptr->get##proper##s().empty()) \
        throw xmltooling::ValidationException(#cname" must have at least one "#proper".")

Validator code that checks for a non-empty collection.

Parameters:
cnamethe name of the XMLObject specialization
properthe proper name of the collection item
#define XMLOBJECTVALIDATOR_NONEORBOTH (   cname,
  proper1,
  proper2 
)
Value:
if ((ptr->get##proper1() && !ptr->get##proper2()) || (!ptr->get##proper1() && ptr->get##proper2())) \
        throw xmltooling::ValidationException(#cname" cannot have "#proper1" without "#proper2".")

Validator code that checks a co-constraint (if one present, the other must be) between a pair of attributes, content, or singletons.

Parameters:
cnamethe name of the XMLObject specialization
proper1the proper name of the first attribute, content, or singleton member
proper2the proper name of the second attribute, content, or singleton member
#define XMLOBJECTVALIDATOR_ONEOF (   cname,
  proper1,
  proper2 
)
Value:
if (!ptr->get##proper1() && !ptr->get##proper2()) \
        throw xmltooling::ValidationException(#cname" must have "#proper1" or "#proper2".")

Validator code that checks for one of a pair of required attributes, content, or singletons.

Parameters:
cnamethe name of the XMLObject specialization
proper1the proper name of the first attribute, content, or singleton member
proper2the proper name of the second attribute, content, or singleton member
#define XMLOBJECTVALIDATOR_ONEOF3 (   cname,
  proper1,
  proper2,
  proper3 
)
Value:
if (!ptr->get##proper1() && !ptr->get##proper2() && !ptr->get##proper3()) \
        throw xmltooling::ValidationException(#cname" must have "#proper1", "#proper2", or "#proper3".")

Validator code that checks for one of a set of three required attributes, content, or singletons.

Parameters:
cnamethe name of the XMLObject specialization
proper1the proper name of the first attribute, content, or singleton member
proper2the proper name of the second attribute, content, or singleton member
proper3the proper name of the third attribute, content, or singleton member
#define XMLOBJECTVALIDATOR_ONLYONEOF (   cname,
  proper1,
  proper2 
)
Value:
if ((!ptr->get##proper1() && !ptr->get##proper2()) || (ptr->get##proper1() && ptr->get##proper2())) \
        throw xmltooling::ValidationException(#cname" must have "#proper1" or "#proper2" but not both.")

Validator code that checks for one of a pair of required attributes, content, or singletons, but disallows both.

Parameters:
cnamethe name of the XMLObject specialization
proper1the proper name of the first attribute, content, or singleton member
proper2the proper name of the second attribute, content, or singleton member
#define XMLOBJECTVALIDATOR_ONLYONEOF3 (   cname,
  proper1,
  proper2,
  proper3 
)
Value:
int c##proper1##proper2##proper3=0; \
    if (ptr->get##proper1()!=nullptr) \
        c##proper1##proper2##proper3++; \
    if (ptr->get##proper2()!=nullptr) \
        c##proper1##proper2##proper3++; \
    if (ptr->get##proper3()!=nullptr) \
        c##proper1##proper2##proper3++; \
    if (c##proper1##proper2##proper3 != 1) \
        throw xmltooling::ValidationException(#cname" must have only one of "#proper1", "#proper2", or "#proper3".")

Validator code that checks for one of a set of three required attributes, content, or singletons but disallows more than one.

Parameters:
cnamethe name of the XMLObject specialization
proper1the proper name of the first attribute, content, or singleton member
proper2the proper name of the second attribute, content, or singleton member
proper3the proper name of the third attribute, content, or singleton member
#define XMLOBJECTVALIDATOR_REQUIRE (   cname,
  proper 
)
Value:
if (!ptr->get##proper()) \
        throw xmltooling::ValidationException(#cname" must have "#proper".")

Validator code that checks for a required attribute, content, or singleton.

Parameters:
cnamethe name of the XMLObject specialization
properthe proper name of the attribute, content, or singleton member
#define XMLOBJECTVALIDATOR_REQUIRE_INTEGER (   cname,
  proper 
)
Value:
if (!ptr->get##proper().first) \
        throw xmltooling::ValidationException(#cname" must have "#proper".")

Validator code that checks for a required integer attribute.

Parameters:
cnamethe name of the XMLObject specialization
properthe proper name of the attribute, content, or singleton member
#define XMLOBJECTVALIDATOR_SIMPLE (   linkage,
  cname 
)
Value:

Declares/defines a Validator specialization that checks object type and a non-empty simple content model.

Parameters:
linkagelinkage specifier for the class
cnamethe name of the XMLObject specialization