2 * Licensed to the University Corporation for Advanced Internet
3 * Development, Inc. (UCAID) under one or more contributor license
4 * agreements. See the NOTICE file distributed with this work for
5 * additional information regarding copyright ownership.
7 * UCAID licenses this file to you under the Apache License,
8 * Version 2.0 (the "License"); you may not use this file except
9 * in compliance with the License. You may obtain a copy of the
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
17 * either express or implied. See the License for the specific
18 * language governing permissions and limitations under the License.
22 * @file xmltooling/base.h
24 * Base header file definitions.
25 * Must be included prior to including any other header.
28 #ifndef __xmltooling_base_h__
29 #define __xmltooling_base_h__
33 /* Required for sprintf, used by integer XML attribute macros. */
36 #if defined (_MSC_VER) || defined(__BORLANDC__)
37 #include <xmltooling/config_pub_win32.h>
39 #include <xmltooling/config_pub.h>
42 #ifdef XMLTOOLING_LITE
43 # define XMLTOOLING_NO_XMLSEC 1
50 #if defined(XMLTOOLING_NO_XMLSEC) || !defined(HAVE_XSECSIZE_T)
51 # ifdef XMLTOOLING_XERCESC_64BITSAFE
52 # include <xercesc/util/XercesDefs.hpp>
53 typedef XMLSize_t xsecsize_t;
55 typedef unsigned int xsecsize_t;
59 // Windows and GCC4 Symbol Visibility Macros
61 #define XMLTOOL_IMPORT __declspec(dllimport)
62 #define XMLTOOL_EXPORT __declspec(dllexport)
63 #define XMLTOOL_DLLLOCAL
64 #define XMLTOOL_DLLPUBLIC
66 #define XMLTOOL_IMPORT
67 #ifdef GCC_HASCLASSVISIBILITY
68 #define XMLTOOL_EXPORT __attribute__ ((visibility("default")))
69 #define XMLTOOL_DLLLOCAL __attribute__ ((visibility("hidden")))
70 #define XMLTOOL_DLLPUBLIC __attribute__ ((visibility("default")))
72 #define XMLTOOL_EXPORT
73 #define XMLTOOL_DLLLOCAL
74 #define XMLTOOL_DLLPUBLIC
78 // Define XMLTOOL_API for DLL builds
79 #ifdef XMLTOOLING_EXPORTS
80 #define XMLTOOL_API XMLTOOL_EXPORT
82 #define XMLTOOL_API XMLTOOL_IMPORT
85 // Throwable classes must always be visible on GCC in all binaries
87 #define XMLTOOL_EXCEPTIONAPI(api) api
88 #elif defined(GCC_HASCLASSVISIBILITY)
89 #define XMLTOOL_EXCEPTIONAPI(api) XMLTOOL_EXPORT
91 #define XMLTOOL_EXCEPTIONAPI(api)
95 #define XMLTOOLING_DOXYGEN(desc) /##** desc */
97 #define XMLTOOLING_DOXYGEN(desc)
101 * Blocks copy c'tor and assignment operator for a class.
103 #define MAKE_NONCOPYABLE(type) \
106 type& operator=(const type&)
112 #define UNICODE_LITERAL_1(a) {xercesc::chLatin_##a, xercesc::chNull}
113 #define UNICODE_LITERAL_2(a,b) {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chNull}
114 #define UNICODE_LITERAL_3(a,b,c) {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chNull}
115 #define UNICODE_LITERAL_4(a,b,c,d) {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chNull}
116 #define UNICODE_LITERAL_5(a,b,c,d,e) \
117 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chNull}
118 #define UNICODE_LITERAL_6(a,b,c,d,e,f) \
119 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chNull}
120 #define UNICODE_LITERAL_7(a,b,c,d,e,f,g) \
121 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chNull}
122 #define UNICODE_LITERAL_8(a,b,c,d,e,f,g,h) \
123 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chNull}
124 #define UNICODE_LITERAL_9(a,b,c,d,e,f,g,h,i) \
125 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, xercesc::chNull}
126 #define UNICODE_LITERAL_10(a,b,c,d,e,f,g,h,i,j) \
127 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
128 xercesc::chLatin_##j, xercesc::chNull}
129 #define UNICODE_LITERAL_11(a,b,c,d,e,f,g,h,i,j,k) \
130 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
131 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chNull}
132 #define UNICODE_LITERAL_12(a,b,c,d,e,f,g,h,i,j,k,l) \
133 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
134 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chNull}
135 #define UNICODE_LITERAL_13(a,b,c,d,e,f,g,h,i,j,k,l,m) \
136 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
137 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chNull}
138 #define UNICODE_LITERAL_14(a,b,c,d,e,f,g,h,i,j,k,l,m,n) \
139 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
140 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chNull}
141 #define UNICODE_LITERAL_15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) \
142 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
143 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chNull}
144 #define UNICODE_LITERAL_16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) \
145 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
146 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chNull}
147 #define UNICODE_LITERAL_17(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) \
148 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
149 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chNull}
150 #define UNICODE_LITERAL_18(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) \
151 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
152 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, xercesc::chNull}
153 #define UNICODE_LITERAL_19(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s) \
154 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
155 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
156 xercesc::chLatin_##s, xercesc::chNull}
157 #define UNICODE_LITERAL_20(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t) \
158 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
159 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
160 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chNull}
161 #define UNICODE_LITERAL_21(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u) \
162 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
163 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
164 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chNull}
165 #define UNICODE_LITERAL_22(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v) \
166 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
167 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
168 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chNull}
169 #define UNICODE_LITERAL_23(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w) \
170 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
171 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
172 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chNull}
173 #define UNICODE_LITERAL_24(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x) \
174 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
175 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
176 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chNull}
177 #define UNICODE_LITERAL_25(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y) \
178 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
179 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
180 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chNull}
181 #define UNICODE_LITERAL_26(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) \
182 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
183 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
184 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, xercesc::chNull}
185 #define UNICODE_LITERAL_27(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa) \
186 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
187 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
188 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
189 xercesc::chLatin_##aa, xercesc::chNull}
190 #define UNICODE_LITERAL_28(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb) \
191 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
192 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
193 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
194 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chNull}
195 #define UNICODE_LITERAL_29(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc) \
196 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
197 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
198 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
199 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chNull}
200 #define UNICODE_LITERAL_30(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd) \
201 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
202 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
203 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
204 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chNull}
205 #define UNICODE_LITERAL_31(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee) \
206 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
207 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
208 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
209 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chNull}
210 #define UNICODE_LITERAL_32(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff) \
211 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
212 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
213 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
214 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chNull}
215 #define UNICODE_LITERAL_33(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg) \
216 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
217 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
218 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
219 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chNull}
220 #define UNICODE_LITERAL_34(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh) \
221 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
222 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
223 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
224 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, xercesc::chNull}
225 #define UNICODE_LITERAL_35(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii) \
226 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
227 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
228 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
229 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
230 xercesc::chLatin_##ii, xercesc::chNull}
231 #define UNICODE_LITERAL_36(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj) \
232 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
233 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
234 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
235 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
236 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chNull}
237 #define UNICODE_LITERAL_37(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk) \
238 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
239 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
240 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
241 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
242 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chNull}
243 #define UNICODE_LITERAL_38(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll) \
244 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
245 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
246 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
247 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
248 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chNull}
249 #define UNICODE_LITERAL_39(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm) \
250 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
251 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
252 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
253 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
254 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chNull}
255 #define UNICODE_LITERAL_40(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn) \
256 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
257 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
258 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
259 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
260 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chLatin_##nn, xercesc::chNull}
261 #define UNICODE_LITERAL_41(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo) \
262 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
263 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
264 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
265 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
266 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chLatin_##nn, xercesc::chLatin_##oo, xercesc::chNull}
267 #define UNICODE_LITERAL_42(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp) \
268 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
269 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
270 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
271 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
272 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chLatin_##nn, xercesc::chLatin_##oo, xercesc::chLatin_##pp, xercesc::chNull}
273 #define UNICODE_LITERAL_43(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq) \
274 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
275 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
276 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
277 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
278 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chLatin_##nn, xercesc::chLatin_##oo, xercesc::chLatin_##pp, \
279 xercesc::chLatin_##qq, xercesc::chNull}
280 #define UNICODE_LITERAL_44(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr) \
281 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
282 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
283 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
284 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
285 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chLatin_##nn, xercesc::chLatin_##oo, xercesc::chLatin_##pp, \
286 xercesc::chLatin_##qq, xercesc::chLatin_##rr, xercesc::chNull}
287 #define UNICODE_LITERAL_45(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss) \
288 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
289 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
290 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
291 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
292 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chLatin_##nn, xercesc::chLatin_##oo, xercesc::chLatin_##pp, \
293 xercesc::chLatin_##qq, xercesc::chLatin_##rr, xercesc::chLatin_##ss, xercesc::chNull}
294 #define UNICODE_LITERAL_46(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt) \
295 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
296 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
297 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
298 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
299 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chLatin_##nn, xercesc::chLatin_##oo, xercesc::chLatin_##pp, \
300 xercesc::chLatin_##qq, xercesc::chLatin_##rr, xercesc::chLatin_##ss, xercesc::chLatin_##tt, xercesc::chNull}
301 #define UNICODE_LITERAL_47(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu) \
302 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
303 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
304 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
305 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
306 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chLatin_##nn, xercesc::chLatin_##oo, xercesc::chLatin_##pp, \
307 xercesc::chLatin_##qq, xercesc::chLatin_##rr, xercesc::chLatin_##ss, xercesc::chLatin_##tt, xercesc::chLatin_##uu, xercesc::chNull}
308 #define UNICODE_LITERAL_48(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv) \
309 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
310 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
311 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
312 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
313 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chLatin_##nn, xercesc::chLatin_##oo, xercesc::chLatin_##pp, \
314 xercesc::chLatin_##qq, xercesc::chLatin_##rr, xercesc::chLatin_##ss, xercesc::chLatin_##tt, xercesc::chLatin_##uu, xercesc::chLatin_##vv, xercesc::chNull}
315 #define UNICODE_LITERAL_49(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww) \
316 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
317 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
318 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
319 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
320 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chLatin_##nn, xercesc::chLatin_##oo, xercesc::chLatin_##pp, \
321 xercesc::chLatin_##qq, xercesc::chLatin_##rr, xercesc::chLatin_##ss, xercesc::chLatin_##tt, xercesc::chLatin_##uu, xercesc::chLatin_##vv, xercesc::chLatin_##ww, xercesc::chNull}
322 #define UNICODE_LITERAL_50(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww,xx) \
323 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
324 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
325 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
326 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
327 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chLatin_##nn, xercesc::chLatin_##oo, xercesc::chLatin_##pp, \
328 xercesc::chLatin_##qq, xercesc::chLatin_##rr, xercesc::chLatin_##ss, xercesc::chLatin_##tt, xercesc::chLatin_##uu, xercesc::chLatin_##vv, xercesc::chLatin_##ww, xercesc::chLatin_##xx, xercesc::chNull}
329 #define UNICODE_LITERAL_51(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww,xx,yy) \
330 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
331 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
332 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
333 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
334 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chLatin_##nn, xercesc::chLatin_##oo, xercesc::chLatin_##pp, \
335 xercesc::chLatin_##qq, xercesc::chLatin_##rr, xercesc::chLatin_##ss, xercesc::chLatin_##tt, xercesc::chLatin_##uu, xercesc::chLatin_##vv, xercesc::chLatin_##ww, xercesc::chLatin_##xx, \
336 xercesc::chLatin_##yy, xercesc::chNull}
337 #define UNICODE_LITERAL_52(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww,xx,yy,zz) \
338 {xercesc::chLatin_##a, xercesc::chLatin_##b, xercesc::chLatin_##c, xercesc::chLatin_##d, xercesc::chLatin_##e, xercesc::chLatin_##f, xercesc::chLatin_##g, xercesc::chLatin_##h, xercesc::chLatin_##i, \
339 xercesc::chLatin_##j, xercesc::chLatin_##k, xercesc::chLatin_##l, xercesc::chLatin_##m, xercesc::chLatin_##n, xercesc::chLatin_##o, xercesc::chLatin_##p, xercesc::chLatin_##q, xercesc::chLatin_##r, \
340 xercesc::chLatin_##s, xercesc::chLatin_##t, xercesc::chLatin_##u, xercesc::chLatin_##v, xercesc::chLatin_##w, xercesc::chLatin_##x, xercesc::chLatin_##y, xercesc::chLatin_##z, \
341 xercesc::chLatin_##aa, xercesc::chLatin_##bb, xercesc::chLatin_##cc, xercesc::chLatin_##dd, xercesc::chLatin_##ee, xercesc::chLatin_##ff, xercesc::chLatin_##gg, xercesc::chLatin_##hh, \
342 xercesc::chLatin_##ii, xercesc::chLatin_##jj, xercesc::chLatin_##kk, xercesc::chLatin_##ll, xercesc::chLatin_##mm, xercesc::chLatin_##nn, xercesc::chLatin_##oo, xercesc::chLatin_##pp, \
343 xercesc::chLatin_##qq, xercesc::chLatin_##rr, xercesc::chLatin_##ss, xercesc::chLatin_##tt, xercesc::chLatin_##uu, xercesc::chLatin_##vv, xercesc::chLatin_##ww, xercesc::chLatin_##xx, \
344 xercesc::chLatin_##yy, xercesc::chLatin_##zz, xercesc::chNull}
345 #endif /* DOXYGEN_SKIP */
348 * Begins the declaration of an XMLObject specialization for an abstract element/type.
349 * Basic boilerplate includes a protected constructor, empty virtual destructor,
350 * and Unicode constants for the default associated element's name and prefix.
352 * @param linkage linkage specifier for the class
353 * @param cname the name of the class to declare
354 * @param base the base class to derive from using public virtual inheritance
355 * @param desc documentation comment for class
357 #define DECL_XMLOBJECT_ABSTRACT(linkage,cname,base,desc) \
358 XMLTOOLING_DOXYGEN(desc) \
359 class linkage cname : public virtual base { \
363 virtual ~cname() {} \
364 XMLTOOLING_DOXYGEN(Element local name) \
365 static const XMLCh LOCAL_NAME[]; \
369 * Begins the declaration of an XMLObject specialization.
370 * Basic boilerplate includes a protected constructor, empty virtual destructor,
371 * and Unicode constants for the default associated element's name and prefix.
373 * @param linkage linkage specifier for the class
374 * @param cname the name of the class to declare
375 * @param base the base class to derive from using public virtual inheritance
376 * @param desc documentation comment for class
378 #define BEGIN_XMLOBJECT(linkage,cname,base,desc) \
379 XMLTOOLING_DOXYGEN(desc) \
380 class linkage cname : public virtual base { \
384 virtual ~cname() {} \
385 XMLTOOLING_DOXYGEN(Type-specific clone method.) \
386 virtual cname* clone##cname() const=0; \
387 XMLTOOLING_DOXYGEN(Element local name) \
388 static const XMLCh LOCAL_NAME[]
391 * Begins the declaration of an XMLObject specialization with two base classes.
392 * Basic boilerplate includes a protected constructor, empty virtual destructor,
393 * and Unicode constants for the default associated element's name and prefix.
395 * @param linkage linkage specifier for the class
396 * @param cname the name of the class to declare
397 * @param base the first base class to derive from using public virtual inheritance
398 * @param base2 the second base class to derive from using public virtual inheritance
399 * @param desc documentation comment for class
401 #define BEGIN_XMLOBJECT2(linkage,cname,base,base2,desc) \
402 XMLTOOLING_DOXYGEN(desc) \
403 class linkage cname : public virtual base, public virtual base2 { \
407 virtual ~cname() {} \
408 XMLTOOLING_DOXYGEN(Type-specific clone method.) \
409 virtual cname* clone##cname() const=0; \
410 XMLTOOLING_DOXYGEN(Element local name) \
411 static const XMLCh LOCAL_NAME[]
414 * Begins the declaration of an XMLObject specialization with three base classes.
415 * Basic boilerplate includes a protected constructor, empty virtual destructor,
416 * and Unicode constants for the default associated element's name and prefix.
418 * @param linkage linkage specifier for the class
419 * @param cname the name of the class to declare
420 * @param base the first base class to derive from using public virtual inheritance
421 * @param base2 the second base class to derive from using public virtual inheritance
422 * @param base3 the third base class to derive from using public virtual inheritance
423 * @param desc documentation comment for class
425 #define BEGIN_XMLOBJECT3(linkage,cname,base,base2,base3,desc) \
426 XMLTOOLING_DOXYGEN(desc) \
427 class linkage cname : public virtual base, public virtual base2, public virtual base3 { \
431 virtual ~cname() {} \
432 XMLTOOLING_DOXYGEN(Type-specific clone method.) \
433 virtual cname* clone##cname() const=0; \
434 XMLTOOLING_DOXYGEN(Element local name) \
435 static const XMLCh LOCAL_NAME[]
438 * Begins the declaration of an XMLObject specialization with four base classes.
439 * Basic boilerplate includes a protected constructor, empty virtual destructor,
440 * and Unicode constants for the default associated element's name and prefix.
442 * @param linkage linkage specifier for the class
443 * @param cname the name of the class to declare
444 * @param base the first base class to derive from using public virtual inheritance
445 * @param base2 the second base class to derive from using public virtual inheritance
446 * @param base3 the third base class to derive from using public virtual inheritance
447 * @param base4 the fourth base class to derive from using public virtual inheritance
448 * @param desc documentation comment for class
450 #define BEGIN_XMLOBJECT4(linkage,cname,base,base2,base3,base4,desc) \
451 XMLTOOLING_DOXYGEN(desc) \
452 class linkage cname : public virtual base, public virtual base2, public virtual base3, public virtual base4 { \
456 virtual ~cname() {} \
457 XMLTOOLING_DOXYGEN(Type-specific clone method.) \
458 virtual cname* clone##cname() const=0; \
459 XMLTOOLING_DOXYGEN(Element local name) \
460 static const XMLCh LOCAL_NAME[]
463 * Begins the declaration of an XMLObject specialization with five base classes.
464 * Basic boilerplate includes a protected constructor, empty virtual destructor,
465 * and Unicode constants for the default associated element's name and prefix.
467 * @param linkage linkage specifier for the class
468 * @param cname the name of the class to declare
469 * @param base the first base class to derive from using public virtual inheritance
470 * @param base2 the second base class to derive from using public virtual inheritance
471 * @param base3 the third base class to derive from using public virtual inheritance
472 * @param base4 the fourth base class to derive from using public virtual inheritance
473 * @param base5 the fifth base class to derive from using public virtual inheritance
474 * @param desc documentation comment for class
476 #define BEGIN_XMLOBJECT5(linkage,cname,base,base2,base3,base4,base5,desc) \
477 XMLTOOLING_DOXYGEN(desc) \
478 class linkage cname : public virtual base, public virtual base2, public virtual base3, public virtual base4, public virtual base5 { \
482 virtual ~cname() {} \
483 XMLTOOLING_DOXYGEN(Type-specific clone method.) \
484 virtual cname* clone##cname() const=0; \
485 XMLTOOLING_DOXYGEN(Element local name) \
486 static const XMLCh LOCAL_NAME[]
489 * Ends the declaration of an XMLObject specialization.
491 #define END_XMLOBJECT }
494 * Declares a static variable holding the XMLObject's element QName.
496 #define DECL_ELEMENT_QNAME \
498 XMLTOOLING_DOXYGEN(Element QName) \
499 static xmltooling::QName ELEMENT_QNAME
502 * Declares a static variable holding the XMLObject's schema type QName.
504 #define DECL_TYPE_QNAME \
506 XMLTOOLING_DOXYGEN(Type QName) \
507 static xmltooling::QName TYPE_QNAME
510 * Implements a static variable holding an XMLObject's element QName.
512 * @param cname the name of the XMLObject specialization
513 * @param namespaceURI the XML namespace of the default associated element
514 * @param namespacePrefix the XML namespace prefix of the default associated element
516 #define IMPL_ELEMENT_QNAME(cname,namespaceURI,namespacePrefix) \
517 xmltooling::QName cname::ELEMENT_QNAME(namespaceURI,cname::LOCAL_NAME,namespacePrefix)
520 * Implements a static variable holding an XMLObject's schema type QName.
522 * @param cname the name of the XMLObject specialization
523 * @param namespaceURI the XML namespace of the default associated element
524 * @param namespacePrefix the XML namespace prefix of the default associated element
526 #define IMPL_TYPE_QNAME(cname,namespaceURI,namespacePrefix) \
527 xmltooling::QName cname::TYPE_QNAME(namespaceURI,cname::TYPE_NAME,namespacePrefix)
530 * Declares abstract set method for a typed XML attribute.
531 * The get method is omitted.
533 * @param proper the proper name of the attribute
534 * @param upcased the upcased name of the attribute
535 * @param type the attribute's data type
537 #define DECL_INHERITED_XMLOBJECT_ATTRIB(proper,upcased,type) \
539 XMLTOOLING_DOXYGEN(proper attribute name) \
540 static const XMLCh upcased##_ATTRIB_NAME[]; \
541 XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
542 virtual void set##proper(const type* proper)=0
545 * Declares abstract get/set methods for a typed XML attribute.
547 * @param proper the proper name of the attribute
548 * @param upcased the upcased name of the attribute
549 * @param type the attribute's data type
551 #define DECL_XMLOBJECT_ATTRIB(proper,upcased,type) \
553 XMLTOOLING_DOXYGEN(proper attribute name) \
554 static const XMLCh upcased##_ATTRIB_NAME[]; \
555 XMLTOOLING_DOXYGEN(Returns the proper attribute.) \
556 virtual const type* get##proper() const=0; \
557 XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
558 virtual void set##proper(const type* proper)=0
561 * Declares abstract set method for a string XML attribute.
562 * The get method is omitted.
564 * @param proper the proper name of the attribute
565 * @param upcased the upcased name of the attribute
567 #define DECL_INHERITED_STRING_ATTRIB(proper,upcased) \
568 DECL_INHERITED_XMLOBJECT_ATTRIB(proper,upcased,XMLCh)
571 * Declares abstract get/set methods for a string XML attribute.
573 * @param proper the proper name of the attribute
574 * @param upcased the upcased name of the attribute
576 #define DECL_STRING_ATTRIB(proper,upcased) \
577 DECL_XMLOBJECT_ATTRIB(proper,upcased,XMLCh)
580 * Declares abstract set method for a DateTime XML attribute.
581 * The get method is omitted.
583 * @param proper the proper name of the attribute
584 * @param upcased the upcased name of the attribute
586 #define DECL_INHERITED_DATETIME_ATTRIB(proper,upcased) \
587 DECL_INHERITED_XMLOBJECT_ATTRIB(proper,upcased,xmltooling::DateTime); \
588 XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
589 virtual void set##proper(time_t proper)=0; \
590 XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
591 virtual void set##proper(const XMLCh* proper)=0
594 * Declares abstract get/set methods for a DateTime XML attribute.
596 * @param proper the proper name of the attribute
597 * @param upcased the upcased name of the attribute
599 #define DECL_DATETIME_ATTRIB(proper,upcased) \
600 DECL_XMLOBJECT_ATTRIB(proper,upcased,xmltooling::DateTime); \
601 XMLTOOLING_DOXYGEN(Returns the proper attribute in epoch form.) \
602 virtual time_t get##proper##Epoch() const=0; \
603 XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
604 virtual void set##proper(time_t proper)=0; \
605 XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
606 virtual void set##proper(const XMLCh* proper)=0
609 * Declares abstract set method for an integer XML attribute.
610 * The get method is omitted.
612 * @param proper the proper name of the attribute
613 * @param upcased the upcased name of the attribute
615 #define DECL_INHERITED_INTEGER_ATTRIB(proper,upcased) \
617 XMLTOOLING_DOXYGEN(proper attribute name) \
618 static const XMLCh upcased##_ATTRIB_NAME[]; \
619 XMLTOOLING_DOXYGEN(Sets the proper attribute using a string value.) \
620 virtual void set##proper(const XMLCh* proper)=0; \
621 XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
622 virtual void set##proper(int proper)=0
625 * Declares abstract get/set methods for an integer XML attribute.
627 * @param proper the proper name of the attribute
628 * @param upcased the upcased name of the attribute
630 #define DECL_INTEGER_ATTRIB(proper,upcased) \
632 XMLTOOLING_DOXYGEN(proper attribute name) \
633 static const XMLCh upcased##_ATTRIB_NAME[]; \
634 XMLTOOLING_DOXYGEN(Returns the proper attribute after a NULL indicator.) \
635 virtual std::pair<bool,int> get##proper() const=0; \
636 XMLTOOLING_DOXYGEN(Sets the proper attribute using a string value.) \
637 virtual void set##proper(const XMLCh* proper)=0; \
638 XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
639 virtual void set##proper(int proper)=0
642 * Declares abstract get/set methods for a boolean XML attribute.
644 * @param proper the proper name of the attribute
645 * @param upcased the upcased name of the attribute
646 * @param def the default/presumed value, if no explicit value has been set
648 #define DECL_BOOLEAN_ATTRIB(proper,upcased,def) \
650 XMLTOOLING_DOXYGEN(proper attribute name) \
651 static const XMLCh upcased##_ATTRIB_NAME[]; \
652 XMLTOOLING_DOXYGEN(Returns the proper attribute or def if not set.) \
653 bool proper() const { \
654 switch (get##proper()) { \
655 case xmlconstants::XML_BOOL_TRUE: \
656 case xmlconstants::XML_BOOL_ONE: \
658 case xmlconstants::XML_BOOL_FALSE: \
659 case xmlconstants::XML_BOOL_ZERO: \
665 XMLTOOLING_DOXYGEN(Returns the proper attribute as an explicit enumerated value.) \
666 virtual xmlconstants::xmltooling_bool_t get##proper() const=0; \
667 XMLTOOLING_DOXYGEN(Sets the proper attribute using an enumerated value.) \
668 virtual void proper(xmlconstants::xmltooling_bool_t value)=0; \
669 XMLTOOLING_DOXYGEN(Sets the proper attribute.) \
670 void proper(bool value) { \
671 proper(value ? xmlconstants::XML_BOOL_ONE : xmlconstants::XML_BOOL_ZERO); \
673 XMLTOOLING_DOXYGEN(Sets the proper attribute using a string constant.) \
674 void set##proper(const XMLCh* value) { \
677 case xercesc::chLatin_t: \
678 proper(xmlconstants::XML_BOOL_TRUE); \
680 case xercesc::chLatin_f: \
681 proper(xmlconstants::XML_BOOL_FALSE); \
683 case xercesc::chDigit_1: \
684 proper(xmlconstants::XML_BOOL_ONE); \
686 case xercesc::chDigit_0: \
687 proper(xmlconstants::XML_BOOL_ZERO); \
690 proper(xmlconstants::XML_BOOL_NULL); \
694 proper(xmlconstants::XML_BOOL_NULL); \
698 * Implements get/set methods and a private member for a typed XML attribute.
700 * @param proper the proper name of the attribute
701 * @param type the attribute's data type
703 #define IMPL_XMLOBJECT_ATTRIB(proper,type) \
707 const type* get##proper() const { \
710 void set##proper(const type* proper) { \
711 m_##proper = prepareForAssignment(m_##proper,proper); \
715 * Implements get/set methods and a private member for a string XML attribute.
717 * @param proper the proper name of the attribute
719 #define IMPL_STRING_ATTRIB(proper) \
720 IMPL_XMLOBJECT_ATTRIB(proper,XMLCh)
723 * Implements get/set methods and a private member for a string XML attribute,
724 * plus a getXMLID override.
726 * @param proper the proper name of the attribute
728 #define IMPL_ID_ATTRIB(proper) \
729 IMPL_XMLOBJECT_ATTRIB(proper,XMLCh) \
730 const XMLCh* getXMLID() const { \
735 * Implements get/set methods and a private member for a string XML attribute,
736 * plus a getXMLID override and attribute node clearance when DOM is dropped.
738 * @param proper the proper name of the attribute
739 * @param ucase the upcased name of the attribute
740 * @param namespaceURI the XML namespace of the attribute
742 #define IMPL_ID_ATTRIB_EX(proper, ucase, namespaceURI) \
743 IMPL_XMLOBJECT_ATTRIB(proper,XMLCh) \
744 const XMLCh* getXMLID() const { \
747 void releaseDOM() const { \
749 getDOM()->removeAttributeNS(namespaceURI, ucase##_ATTRIB_NAME); \
750 AbstractDOMCachingXMLObject::releaseDOM(); \
754 * Implements get/set methods and a private member for a DateTime XML attribute.
756 * @param proper the proper name of the attribute
757 * @param fallback epoch to return when attribute is NULL
759 #define IMPL_DATETIME_ATTRIB(proper,fallback) \
760 IMPL_DATETIME_ATTRIB_EX(proper,fallback,false)
763 * Implements get/set methods and a private member for a duration-valued DateTime XML attribute.
765 * @param proper the proper name of the attribute
766 * @param fallback epoch to return when attribute is NULL
768 #define IMPL_DURATION_ATTRIB(proper,fallback) \
769 IMPL_DATETIME_ATTRIB_EX(proper,fallback,true)
772 * Implements get/set methods and a private member for a DateTime XML attribute.
774 * @param proper the proper name of the attribute
775 * @param fallback epoch to return when attribute is NULL
776 * @param duration true iff the attribute should be handled as a duration
778 #define IMPL_DATETIME_ATTRIB_EX(proper,fallback,duration) \
780 DateTime* m_##proper; \
781 time_t m_##proper##Epoch; \
783 const DateTime* get##proper() const { \
786 time_t get##proper##Epoch() const { \
787 return m_##proper ? m_##proper##Epoch : fallback; \
789 void set##proper(const DateTime* proper) { \
790 m_##proper = prepareForAssignment(m_##proper,proper); \
792 m_##proper##Epoch=m_##proper->getEpoch(duration); \
794 void set##proper(time_t proper) { \
795 m_##proper = prepareForAssignment(m_##proper,proper,duration); \
796 m_##proper##Epoch = proper; \
798 void set##proper(const XMLCh* proper) { \
799 m_##proper = prepareForAssignment(m_##proper,proper,duration); \
801 m_##proper##Epoch=m_##proper->getEpoch(duration); \
805 * Implements get/set methods and a private member for an integer XML attribute.
807 * @param proper the proper name of the attribute
809 #define IMPL_INTEGER_ATTRIB(proper) \
813 pair<bool,int> get##proper() const { \
814 return make_pair((m_##proper!=nullptr),(m_##proper!=nullptr ? xercesc::XMLString::parseInt(m_##proper): 0)); \
816 void set##proper(const XMLCh* proper) { \
817 m_##proper = prepareForAssignment(m_##proper,proper); \
819 void set##proper(int proper) { \
821 std::string buf(boost::lexical_cast<std::string>(proper)); \
822 xmltooling::auto_ptr_XMLCh widen(buf.c_str()); \
823 set##proper(widen.get()); \
825 catch (boost::bad_lexical_cast&) { \
830 * Implements get/set methods and a private member for a boolean XML attribute.
832 * @param proper the proper name of the attribute
834 #define IMPL_BOOLEAN_ATTRIB(proper) \
836 xmlconstants::xmltooling_bool_t m_##proper; \
838 xmlconstants::xmltooling_bool_t get##proper() const { \
841 void proper(xmlconstants::xmltooling_bool_t value) { \
842 if (m_##proper != value) { \
843 releaseThisandParentDOM(); \
844 m_##proper = value; \
849 * Implements get/set methods and a private member for a typed, qualified XML attribute.
851 * @param proper the proper name of the attribute
852 * @param type the attribute's data type
854 #define IMPL_XMLOBJECT_FOREIGN_ATTRIB(proper,type) \
856 XMLCh* m_##proper##Prefix; \
859 const type* get##proper() const { \
862 void set##proper(const type* proper) { \
863 m_##proper = prepareForAssignment(m_##proper,proper); \
864 xercesc::XMLString::release(&m_##proper##Prefix); \
865 m_##proper##Prefix = nullptr; \
869 * Declares abstract set method for a typed XML child object in a foreign namespace.
870 * The get method is omitted.
872 * @param proper the proper name of the child type
873 * @param ns the C++ namespace for the type
875 #define DECL_INHERITED_TYPED_FOREIGN_CHILD(proper,ns) \
877 XMLTOOLING_DOXYGEN(Sets the proper child.) \
878 virtual void set##proper(ns::proper* child)=0
881 * Declares abstract get/set methods for a typed XML child object in a foreign namespace.
883 * @param proper the proper name of the child type
884 * @param ns the C++ namespace for the type
886 #define DECL_TYPED_FOREIGN_CHILD(proper,ns) \
888 XMLTOOLING_DOXYGEN(Returns the proper child.) \
889 virtual ns::proper* get##proper() const=0; \
890 XMLTOOLING_DOXYGEN(Sets the proper child.) \
891 virtual void set##proper(ns::proper* child)=0
894 * Declares abstract set method for a typed XML child object.
895 * The get method is omitted.
897 * @param proper the proper name of the child type
899 #define DECL_INHERITED_TYPED_CHILD(proper) \
901 XMLTOOLING_DOXYGEN(Sets the proper child.) \
902 virtual void set##proper(proper* child)=0
905 * Declares abstract get/set methods for a typed XML child object.
907 * @param proper the proper name of the child type
909 #define DECL_TYPED_CHILD(proper) \
911 XMLTOOLING_DOXYGEN(Returns the proper child.) \
912 virtual proper* get##proper() const=0; \
913 XMLTOOLING_DOXYGEN(Sets the proper child.) \
914 virtual void set##proper(proper* child)=0
917 * Declares abstract get/set methods for a generic XML child object.
919 * @param proper the proper name of the child
921 #define DECL_XMLOBJECT_CHILD(proper) \
923 XMLTOOLING_DOXYGEN(Returns the proper child.) \
924 virtual xmltooling::XMLObject* get##proper() const=0; \
925 XMLTOOLING_DOXYGEN(Sets the proper child.) \
926 virtual void set##proper(xmltooling::XMLObject* child)=0
930 * Implements get/set methods and a private list iterator member for a typed XML child object.
932 * @param proper the proper name of the child type
934 #define IMPL_TYPED_CHILD(proper) \
936 proper* m_##proper; \
937 std::list<xmltooling::XMLObject*>::iterator m_pos_##proper; \
939 proper* get##proper() const { \
942 void set##proper(proper* child) { \
943 prepareForAssignment(m_##proper,child); \
944 *m_pos_##proper = m_##proper = child; \
948 * Implements get/set methods and a private list iterator member for
949 * a typed XML child object in a foreign namespace
951 * @param proper the proper name of the child type
952 * @param ns the C++ namespace for the type
954 #define IMPL_TYPED_FOREIGN_CHILD(proper,ns) \
956 ns::proper* m_##proper; \
957 std::list<xmltooling::XMLObject*>::iterator m_pos_##proper; \
959 ns::proper* get##proper() const { \
962 void set##proper(ns::proper* child) { \
963 prepareForAssignment(m_##proper,child); \
964 *m_pos_##proper = m_##proper = child; \
968 * Implements get/set methods and a private list iterator member for a generic XML child object.
970 * @param proper the proper name of the child
972 #define IMPL_XMLOBJECT_CHILD(proper) \
974 xmltooling::XMLObject* m_##proper; \
975 std::list<xmltooling::XMLObject*>::iterator m_pos_##proper; \
977 xmltooling::XMLObject* get##proper() const { \
980 void set##proper(xmltooling::XMLObject* child) { \
981 prepareForAssignment(m_##proper,child); \
982 *m_pos_##proper = m_##proper = child; \
986 * Declares abstract get/set methods for a typed XML child collection.
988 * @param proper the proper name of the child type
990 #define DECL_TYPED_CHILDREN(proper) \
992 XMLTOOLING_DOXYGEN(Returns modifiable proper collection.) \
993 virtual VectorOf(proper) get##proper##s()=0; \
994 XMLTOOLING_DOXYGEN(Returns reference to immutable proper collection.) \
995 virtual const std::vector<proper*>& get##proper##s() const=0
998 * Declares abstract get/set methods for a typed XML child collection in a foreign namespace.
1000 * @param proper the proper name of the child type
1001 * @param ns the C++ namespace for the type
1003 #define DECL_TYPED_FOREIGN_CHILDREN(proper,ns) \
1005 XMLTOOLING_DOXYGEN(Returns modifiable proper collection.) \
1006 virtual VectorOf(ns::proper) get##proper##s()=0; \
1007 XMLTOOLING_DOXYGEN(Returns reference to immutable proper collection.) \
1008 virtual const std::vector<ns::proper*>& get##proper##s() const=0
1011 * Declares abstract get/set methods for a generic XML child collection.
1013 * @param proper the proper name of the child
1015 #define DECL_XMLOBJECT_CHILDREN(proper) \
1017 XMLTOOLING_DOXYGEN(Returns modifiable proper collection.) \
1018 virtual VectorOf(xmltooling::XMLObject) get##proper##s()=0; \
1019 XMLTOOLING_DOXYGEN(Returns reference to immutable proper collection.) \
1020 virtual const std::vector<xmltooling::XMLObject*>& get##proper##s() const=0
1023 * Implements get method and a private vector member for a typed XML child collection.
1025 * @param proper the proper name of the child type
1026 * @param fence insertion fence for new objects of the child collection in backing list
1028 #define IMPL_TYPED_CHILDREN(proper,fence) \
1030 std::vector<proper*> m_##proper##s; \
1032 VectorOf(proper) get##proper##s() { \
1033 return VectorOf(proper)(this, m_##proper##s, &m_children, fence); \
1035 const std::vector<proper*>& get##proper##s() const { \
1036 return m_##proper##s; \
1040 * Implements get method and a private vector member for a typed XML child collection
1041 * in a foreign namespace.
1043 * @param proper the proper name of the child type
1044 * @param ns the C++ namespace for the type
1045 * @param fence insertion fence for new objects of the child collection in backing list
1047 #define IMPL_TYPED_FOREIGN_CHILDREN(proper,ns,fence) \
1049 std::vector<ns::proper*> m_##proper##s; \
1051 VectorOf(ns::proper) get##proper##s() { \
1052 return VectorOf(ns::proper)(this, m_##proper##s, &m_children, fence); \
1054 const std::vector<ns::proper*>& get##proper##s() const { \
1055 return m_##proper##s; \
1059 * Implements get method and a private vector member for a generic XML child collection.
1061 * @param proper the proper name of the child
1062 * @param fence insertion fence for new objects of the child collection in backing list
1064 #define IMPL_XMLOBJECT_CHILDREN(proper,fence) \
1066 std::vector<xmltooling::XMLObject*> m_##proper##s; \
1068 VectorOf(xmltooling::XMLObject) get##proper##s() { \
1069 return VectorOf(xmltooling::XMLObject)(this, m_##proper##s, &m_children, fence); \
1071 const std::vector<xmltooling::XMLObject*>& get##proper##s() const { \
1072 return m_##proper##s; \
1076 * Implements marshalling for a string attribute
1078 * @param proper the proper name of the attribute
1079 * @param ucase the upcased name of the attribute
1080 * @param namespaceURI the XML namespace of the attribute
1082 #define MARSHALL_STRING_ATTRIB(proper,ucase,namespaceURI) \
1083 if (m_##proper && *m_##proper) { \
1084 domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, m_##proper); \
1088 * Implements marshalling for a DateTime attribute
1090 * @param proper the proper name of the attribute
1091 * @param ucase the upcased name of the attribute
1092 * @param namespaceURI the XML namespace of the attribute
1094 #define MARSHALL_DATETIME_ATTRIB(proper,ucase,namespaceURI) \
1096 domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, m_##proper->getRawData()); \
1100 * Implements marshalling for an integer attribute
1102 * @param proper the proper name of the attribute
1103 * @param ucase the upcased name of the attribute
1104 * @param namespaceURI the XML namespace of the attribute
1106 #define MARSHALL_INTEGER_ATTRIB(proper,ucase,namespaceURI) \
1107 if (m_##proper && *m_##proper) { \
1108 domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, m_##proper); \
1112 * Implements marshalling for a boolean attribute
1114 * @param proper the proper name of the attribute
1115 * @param ucase the upcased name of the attribute
1116 * @param namespaceURI the XML namespace of the attribute
1118 #define MARSHALL_BOOLEAN_ATTRIB(proper,ucase,namespaceURI) \
1119 switch (m_##proper) { \
1120 case xmlconstants::XML_BOOL_TRUE: \
1121 domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, xmlconstants::XML_TRUE); \
1123 case xmlconstants::XML_BOOL_ONE: \
1124 domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, xmlconstants::XML_ONE); \
1126 case xmlconstants::XML_BOOL_FALSE: \
1127 domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, xmlconstants::XML_FALSE); \
1129 case xmlconstants::XML_BOOL_ZERO: \
1130 domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, xmlconstants::XML_ZERO); \
1132 case xmlconstants::XML_BOOL_NULL: \
1137 * Implements marshalling for a QName attribute
1139 * @param proper the proper name of the attribute
1140 * @param ucase the upcased name of the attribute
1141 * @param namespaceURI the XML namespace of the attribute
1143 #define MARSHALL_QNAME_ATTRIB(proper,ucase,namespaceURI) \
1145 xmltooling::auto_ptr_XMLCh qstr(m_##proper->toString().c_str()); \
1146 domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, qstr.get()); \
1149 #ifdef XMLTOOLING_XERCESC_BOOLSETIDATTRIBUTE
1151 * Implements marshalling for an ID attribute
1153 * @param proper the proper name of the attribute
1154 * @param ucase the upcased name of the attribute
1155 * @param namespaceURI the XML namespace of the attribute
1157 # define MARSHALL_ID_ATTRIB(proper,ucase,namespaceURI) \
1158 if (m_##proper && *m_##proper) { \
1159 domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, m_##proper); \
1160 domElement->setIdAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, true); \
1164 * Implements marshalling for an ID attribute
1166 * @param proper the proper name of the attribute
1167 * @param ucase the upcased name of the attribute
1168 * @param namespaceURI the XML namespace of the attribute
1170 # define MARSHALL_ID_ATTRIB(proper,ucase,namespaceURI) \
1171 if (m_##proper && *m_##proper) { \
1172 domElement->setAttributeNS(namespaceURI, ucase##_ATTRIB_NAME, m_##proper); \
1173 domElement->setIdAttributeNS(namespaceURI, ucase##_ATTRIB_NAME); \
1178 * Implements unmarshalling process branch for a string attribute
1180 * @param proper the proper name of the attribute
1181 * @param ucase the upcased name of the attribute
1182 * @param namespaceURI the XML namespace of the attribute
1184 #define PROC_STRING_ATTRIB(proper,ucase,namespaceURI) \
1185 if (xmltooling::XMLHelper::isNodeNamed(attribute, namespaceURI, ucase##_ATTRIB_NAME)) { \
1186 set##proper(attribute->getValue()); \
1190 #ifdef XMLTOOLING_XERCESC_BOOLSETIDATTRIBUTE
1192 * Implements unmarshalling process branch for an ID attribute
1194 * @param proper the proper name of the attribute
1195 * @param ucase the upcased name of the attribute
1196 * @param namespaceURI the XML namespace of the attribute
1198 # define PROC_ID_ATTRIB(proper,ucase,namespaceURI) \
1199 if (xmltooling::XMLHelper::isNodeNamed(attribute, namespaceURI, ucase##_ATTRIB_NAME)) { \
1200 set##proper(attribute->getValue()); \
1201 attribute->getOwnerElement()->setIdAttributeNode(attribute, true); \
1206 * Implements unmarshalling process branch for an ID attribute
1208 * @param proper the proper name of the attribute
1209 * @param ucase the upcased name of the attribute
1210 * @param namespaceURI the XML namespace of the attribute
1212 # define PROC_ID_ATTRIB(proper,ucase,namespaceURI) \
1213 if (xmltooling::XMLHelper::isNodeNamed(attribute, namespaceURI, ucase##_ATTRIB_NAME)) { \
1214 set##proper(attribute->getValue()); \
1215 attribute->getOwnerElement()->setIdAttributeNode(attribute); \
1221 * Implements unmarshalling process branch for a DateTime attribute
1223 * @param proper the proper name of the attribute
1224 * @param ucase the upcased name of the attribute
1225 * @param namespaceURI the XML namespace of the attribute
1227 #define PROC_DATETIME_ATTRIB(proper,ucase,namespaceURI) \
1228 PROC_STRING_ATTRIB(proper,ucase,namespaceURI)
1231 * Implements unmarshalling process branch for a DateTime attribute
1233 * @param proper the proper name of the attribute
1234 * @param ucase the upcased name of the attribute
1235 * @param namespaceURI the XML namespace of the attribute
1237 #define PROC_QNAME_ATTRIB(proper,ucase,namespaceURI) \
1238 if (xmltooling::XMLHelper::isNodeNamed(attribute, namespaceURI, ucase##_ATTRIB_NAME)) { \
1239 std::auto_ptr<xmltooling::QName> q(xmltooling::XMLHelper::getAttributeValueAsQName(attribute)); \
1240 set##proper(q.get()); \
1245 * Implements unmarshalling process branch for an integer attribute
1247 * @param proper the proper name of the attribute
1248 * @param ucase the upcased name of the attribute
1249 * @param namespaceURI the XML namespace of the attribute
1251 #define PROC_INTEGER_ATTRIB(proper,ucase,namespaceURI) \
1252 PROC_STRING_ATTRIB(proper,ucase,namespaceURI)
1255 * Implements unmarshalling process branch for a boolean attribute
1257 * @param proper the proper name of the attribute
1258 * @param ucase the upcased name of the attribute
1259 * @param namespaceURI the XML namespace of the attribute
1261 #define PROC_BOOLEAN_ATTRIB(proper,ucase,namespaceURI) \
1262 PROC_STRING_ATTRIB(proper,ucase,namespaceURI)
1265 * Implements unmarshalling process branch for typed child collection element
1267 * @param proper the proper name of the child type
1268 * @param namespaceURI the XML namespace of the child element
1269 * @param force bypass use of hint and just cast down to check child
1271 #define PROC_TYPED_CHILDREN(proper,namespaceURI,force) \
1272 if (force || xmltooling::XMLHelper::isNodeNamed(root,namespaceURI,proper::LOCAL_NAME)) { \
1273 proper* typesafe=dynamic_cast<proper*>(childXMLObject); \
1275 get##proper##s().push_back(typesafe); \
1281 * Implements unmarshalling process branch for typed child collection element
1282 * in a foreign namespace.
1284 * @param proper the proper name of the child type
1285 * @param ns the C++ namespace for the type
1286 * @param namespaceURI the XML namespace of the child element
1287 * @param force bypass use of hint and just cast down to check child
1289 #define PROC_TYPED_FOREIGN_CHILDREN(proper,ns,namespaceURI,force) \
1290 if (force || xmltooling::XMLHelper::isNodeNamed(root,namespaceURI,ns::proper::LOCAL_NAME)) { \
1291 ns::proper* typesafe=dynamic_cast<ns::proper*>(childXMLObject); \
1293 get##proper##s().push_back(typesafe); \
1299 * Implements unmarshalling process branch for typed child singleton element
1301 * @param proper the proper name of the child type
1302 * @param namespaceURI the XML namespace of the child element
1303 * @param force bypass use of hint and just cast down to check child
1305 #define PROC_TYPED_CHILD(proper,namespaceURI,force) \
1306 if (force || xmltooling::XMLHelper::isNodeNamed(root,namespaceURI,proper::LOCAL_NAME)) { \
1307 proper* typesafe=dynamic_cast<proper*>(childXMLObject); \
1308 if (typesafe && !m_##proper) { \
1309 typesafe->setParent(this); \
1310 *m_pos_##proper = m_##proper = typesafe; \
1316 * Implements unmarshalling process branch for typed child singleton element
1317 * in a foreign namespace.
1319 * @param proper the proper name of the child type
1320 * @param ns the C++ namespace for the type
1321 * @param namespaceURI the XML namespace of the child element
1322 * @param force bypass use of hint and just cast down to check child
1324 #define PROC_TYPED_FOREIGN_CHILD(proper,ns,namespaceURI,force) \
1325 if (force || xmltooling::XMLHelper::isNodeNamed(root,namespaceURI,ns::proper::LOCAL_NAME)) { \
1326 ns::proper* typesafe=dynamic_cast<ns::proper*>(childXMLObject); \
1327 if (typesafe && !m_##proper) { \
1328 typesafe->setParent(this); \
1329 *m_pos_##proper = m_##proper = typesafe; \
1335 * Implements unmarshalling process branch for a generic child singleton element
1337 * @param proper the proper name of the child type
1338 * @param namespaceURI the XML namespace of the child element
1340 #define PROC_XMLOBJECT_CHILD(proper,namespaceURI) \
1341 if (xmltooling::XMLHelper::isNodeNamed(root,namespaceURI,proper::LOCAL_NAME)) { \
1342 if (!m_##proper) { \
1343 childXMLObject->setParent(this); \
1344 *m_pos_##proper = m_##proper = childXMLObject; \
1350 * Declares aliased get/set methods for named XML element simple content.
1352 * @param proper the proper name to label the element's content
1354 #define DECL_SIMPLE_CONTENT(proper) \
1355 XMLTOOLING_DOXYGEN(Returns proper.) \
1356 const XMLCh* get##proper() const { \
1357 return getTextContent(); \
1359 XMLTOOLING_DOXYGEN(Sets or clears proper.) \
1360 void set##proper(const XMLCh* proper) { \
1361 setTextContent(proper); \
1365 * Declares aliased get/set methods for named integer XML element content.
1367 * @param proper the proper name to label the element's content
1369 #define DECL_INTEGER_CONTENT(proper) \
1370 XMLTOOLING_DOXYGEN(Returns proper in integer form after a NULL indicator.) \
1371 std::pair<bool,int> get##proper() const { \
1372 return std::make_pair((getTextContent()!=nullptr), (getTextContent()!=nullptr ? xercesc::XMLString::parseInt(getTextContent()) : 0)); \
1374 XMLTOOLING_DOXYGEN(Sets proper.) \
1375 void set##proper(int proper) { \
1377 std::string buf(boost::lexical_cast<std::string>(proper)); \
1378 xmltooling::auto_ptr_XMLCh widen(buf.c_str()); \
1379 setTextContent(widen.get()); \
1381 catch (boost::bad_lexical_cast&) { \
1384 XMLTOOLING_DOXYGEN(Sets or clears proper.) \
1385 void set##proper(const XMLCh* proper) { \
1386 setTextContent(proper); \
1390 * Implements cloning methods for an XMLObject specialization implementation class.
1392 * @param cname the name of the XMLObject specialization
1394 #define IMPL_XMLOBJECT_CLONE(cname) \
1395 cname* clone##cname() const { \
1396 return dynamic_cast<cname*>(clone()); \
1398 xmltooling::XMLObject* clone() const { \
1399 std::auto_ptr<xmltooling::XMLObject> domClone(xmltooling::AbstractDOMCachingXMLObject::clone()); \
1400 cname##Impl* ret=dynamic_cast<cname##Impl*>(domClone.get()); \
1402 domClone.release(); \
1405 return new cname##Impl(*this); \
1409 * Implements cloning methods for an XMLObject specialization implementation class
1410 * that must override a base class clone method.
1412 * @param cname the name of the XMLObject specialization
1413 * @param base name of base type.
1415 #define IMPL_XMLOBJECT_CLONE2(cname,base) \
1416 cname* clone##cname() const { \
1417 return dynamic_cast<cname*>(clone()); \
1419 base* clone##base() const { \
1420 return dynamic_cast<base*>(clone()); \
1422 xmltooling::XMLObject* clone() const { \
1423 std::auto_ptr<xmltooling::XMLObject> domClone(xmltooling::AbstractDOMCachingXMLObject::clone()); \
1424 cname##Impl* ret=dynamic_cast<cname##Impl*>(domClone.get()); \
1426 domClone.release(); \
1429 return new cname##Impl(*this); \
1433 * Implements cloning methods for an XMLObject specialization implementation class that
1434 * needs two stage duplication to avoid invoking virtual methods during construction.
1436 * @param cname the name of the XMLObject specialization
1438 #define IMPL_XMLOBJECT_CLONE_EX(cname) \
1439 cname* clone##cname() const { \
1440 return dynamic_cast<cname*>(clone()); \
1442 xmltooling::XMLObject* clone() const { \
1443 std::auto_ptr<xmltooling::XMLObject> domClone(xmltooling::AbstractDOMCachingXMLObject::clone()); \
1444 cname##Impl* ret=dynamic_cast<cname##Impl*>(domClone.get()); \
1446 domClone.release(); \
1449 std::auto_ptr<cname##Impl> ret2(new cname##Impl(*this)); \
1450 ret2->_clone(*this); \
1451 return ret2.release(); \
1455 * Implements cloning methods for an XMLObject specialization implementation class that
1456 * needs two stage duplication to avoid invoking virtual methods during construction,
1457 * and must override a base class clone method.
1459 * @param cname the name of the XMLObject specialization
1460 * @param base name of base type
1462 #define IMPL_XMLOBJECT_CLONE_EX2(cname,base) \
1463 cname* clone##cname() const { \
1464 return dynamic_cast<cname*>(clone()); \
1466 base* clone##base() const { \
1467 return dynamic_cast<base*>(clone()); \
1469 xmltooling::XMLObject* clone() const { \
1470 std::auto_ptr<xmltooling::XMLObject> domClone(xmltooling::AbstractDOMCachingXMLObject::clone()); \
1471 cname##Impl* ret=dynamic_cast<cname##Impl*>(domClone.get()); \
1473 domClone.release(); \
1476 std::auto_ptr<cname##Impl> ret2(new cname##Impl(*this)); \
1477 ret2->_clone(*this); \
1478 return ret2.release(); \
1482 * Implements cloning of a child attribute, for use in copy constructor or
1483 * deferred clone methods.
1485 * proper the proper name of the attribute to clone
1487 #define IMPL_CLONE_ATTRIB(proper) \
1488 set##proper(src.get##proper())
1491 * Implements cloning of a child attribute in a foreign namespace, for use in copy constructor or
1492 * deferred clone methods.
1494 * proper the proper name of the attribute to clone
1496 #define IMPL_CLONE_FOREIGN_ATTRIB(proper) \
1497 set##proper(src.get##proper()); \
1498 if (src.m_##proper##Prefix) \
1499 m_##proper##Prefix = xercesc::XMLString::replicate(src.m_##proper##Prefix)
1502 * Implements cloning of an integer child attribute, for use in copy constructor or
1503 * deferred clone methods.
1505 * proper the proper name of the attribute to clone
1507 #define IMPL_CLONE_INTEGER_ATTRIB(proper) \
1508 set##proper(src.m_##proper)
1511 * Implements cloning of a boolean child attribute, for use in copy constructor or
1512 * deferred clone methods.
1514 * proper the proper name of the attribute to clone
1516 #define IMPL_CLONE_BOOLEAN_ATTRIB(proper) \
1517 proper(src.m_##proper)
1520 * Implements cloning of a child object, for use in copy constructor or
1521 * deferred clone methods.
1523 * proper the proper name of the child object to clone
1525 #define IMPL_CLONE_XMLOBJECT_CHILD(proper) \
1526 if (src.get##proper()) \
1527 set##proper(src.get##proper()->clone())
1530 * Implements cloning of a typed child object, for use in copy constructor or
1531 * deferred clone methods.
1533 * proper the proper name of the child type to clone
1535 #define IMPL_CLONE_TYPED_CHILD(proper) \
1536 if (src.get##proper()) \
1537 set##proper(src.get##proper()->clone##proper())
1540 * Implements cloning of an untyped child collection, for use in copy constructor or
1541 * deferred clone methods.
1543 * proper the proper name of the child type to clone
1545 #define IMPL_CLONE_XMLOBJECT_CHILDREN(proper) \
1546 static void (VectorOf(XMLObject)::* XMLObject_push_back)(XMLObject* const&) = &VectorOf(XMLObject)::push_back; \
1547 VectorOf(XMLObject) c##proper = get##proper##s(); \
1549 src.m_##proper##s.begin(), src.m_##proper##s.end(), \
1550 boost::lambda::if_(boost::lambda::_1 != ((XMLObject*)nullptr)) \
1551 [boost::lambda::bind(XMLObject_push_back, boost::ref(c##proper), boost::lambda::bind(&XMLObject::clone, boost::lambda::_1))] \
1555 * Implements cloning of a child collection, for use in copy constructor or
1556 * deferred clone methods.
1558 * proper the proper name of the child type to clone
1560 #define IMPL_CLONE_TYPED_CHILDREN(proper) \
1561 static void (VectorOf(proper)::* proper##_push_back)(proper* const&) = &VectorOf(proper)::push_back; \
1562 VectorOf(proper) c##proper = get##proper##s(); \
1564 src.m_##proper##s.begin(), src.m_##proper##s.end(), \
1565 boost::lambda::if_(boost::lambda::_1 != ((proper*)nullptr)) \
1566 [boost::lambda::bind(proper##_push_back, boost::ref(c##proper), boost::lambda::bind(&proper::clone##proper, boost::lambda::_1))] \
1570 * Implements cloning of a child collection in a foreign namespace, for use in copy constructor or
1571 * deferred clone methods.
1573 * proper the proper name of the child type to clone
1574 * ns the namespace of the child type
1576 #define IMPL_CLONE_TYPED_FOREIGN_CHILDREN(proper,ns) \
1577 static void (VectorOf(ns::proper)::* proper##_push_back)(ns::proper* const&) = &VectorOf(ns::proper)::push_back; \
1578 VectorOf(ns::proper) c##proper = get##proper##s(); \
1580 src.m_##proper##s.begin(), src.m_##proper##s.end(), \
1581 boost::lambda::if_(boost::lambda::_1 != ((ns::proper*)nullptr)) \
1582 [boost::lambda::bind(proper##_push_back, boost::ref(c##proper), boost::lambda::bind(&ns::proper::clone##proper, boost::lambda::_1))] \
1586 * Opens an iteration loop over all of the children of an object.
1588 #define IMPL_CLONE_CHILDBAG_BEGIN \
1589 for (list<xmltooling::XMLObject*>::const_iterator _bagit = src.m_children.begin(); _bagit != src.m_children.end(); ++_bagit) {
1592 * Closes an iteration loop over all of the children of an object.
1594 #define IMPL_CLONE_CHILDBAG_END }
1597 * Implements cloning of a typed child in a bag iteration loop based on a cast check.
1599 * @param proper the proper name of the child type to clone
1601 #define IMPL_CLONE_TYPED_CHILD_IN_BAG(proper) \
1602 proper* _##proper##cast = dynamic_cast<proper*>(*_bagit); \
1603 if (_##proper##cast) { \
1604 get##proper##s().push_back(_##proper##cast->clone##proper()); \
1609 * Implements cloning of a typed child in a forign namespace in a bag iteration loop based on a cast check.
1611 * @param proper the proper name of the child type to clone
1612 * @param ns the namespace of the child type
1614 #define IMPL_CLONE_TYPED_FOREIGN_CHILD_IN_BAG(proper,ns) \
1615 ns::proper* _##proper##cast = dynamic_cast<ns::proper*>(*_bagit); \
1616 if (_##proper##cast) { \
1617 get##proper##s().push_back(_##proper##cast->clone##proper()); \
1622 * Implements cloning of an XMLObject child in a bag iteration loop.
1624 * @param proper the proper name of the child to clone
1626 #define IMPL_CLONE_XMLOBJECT_CHILD_IN_BAG(proper) \
1628 get##proper##s().push_back((*_bagit)->clone()); \
1632 * Declares an XMLObject specialization with a simple content model and type,
1633 * handling it as string data.
1635 * @param linkage linkage specifier for the class
1636 * @param cname the name of the XMLObject specialization
1637 * @param proper the proper name to label the element's content
1638 * @param desc documentation for class
1640 #define DECL_XMLOBJECT_SIMPLE(linkage,cname,proper,desc) \
1641 BEGIN_XMLOBJECT(linkage,cname,xmltooling::XMLObject,desc); \
1642 DECL_SIMPLE_CONTENT(proper); \
1646 * Declares and defines an implementation class for an XMLObject with
1647 * a simple content model and type, handling it as string data.
1649 * @param linkage linkage specifier for the class
1650 * @param cname the name of the XMLObject specialization
1652 #define DECL_XMLOBJECTIMPL_SIMPLE(linkage,cname) \
1653 class linkage cname##Impl \
1654 : public virtual cname, \
1655 public xmltooling::AbstractSimpleElement, \
1656 public xmltooling::AbstractDOMCachingXMLObject, \
1657 public xmltooling::AbstractXMLObjectMarshaller, \
1658 public xmltooling::AbstractXMLObjectUnmarshaller \
1661 virtual ~cname##Impl() {} \
1662 cname##Impl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) \
1663 : xmltooling::AbstractXMLObject(nsURI, localName, prefix, schemaType) { \
1665 cname##Impl(const cname##Impl& src) \
1666 : xmltooling::AbstractXMLObject(src), \
1667 xmltooling::AbstractSimpleElement(src), \
1668 xmltooling::AbstractDOMCachingXMLObject(src) {} \
1669 IMPL_XMLOBJECT_CLONE(cname) \
1672 #ifdef HAVE_COVARIANT_RETURNS
1675 * Begins the declaration of an XMLObjectBuilder specialization.
1676 * Basic boilerplate includes an empty virtual destructor, and
1677 * a default builder that defaults the element name.
1679 * @param linkage linkage specifier for the class
1680 * @param cname the name of the XMLObject specialization
1681 * @param namespaceURI the XML namespace of the default associated element
1682 * @param namespacePrefix the XML namespace prefix of the default associated element
1684 #define BEGIN_XMLOBJECTBUILDER(linkage,cname,namespaceURI,namespacePrefix) \
1685 XMLTOOLING_DOXYGEN(Builder for cname objects.) \
1686 class linkage cname##Builder : public xmltooling::ConcreteXMLObjectBuilder { \
1688 virtual ~cname##Builder() {} \
1689 XMLTOOLING_DOXYGEN(Default builder.) \
1690 virtual cname* buildObject() const { \
1691 return buildObject(namespaceURI,cname::LOCAL_NAME,namespacePrefix); \
1693 XMLTOOLING_DOXYGEN(Builder that allows element/type override.) \
1694 virtual cname* buildObject( \
1695 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr \
1699 * Ends the declaration of an XMLObjectBuilder specialization.
1701 #define END_XMLOBJECTBUILDER }
1704 * Declares a generic XMLObjectBuilder specialization.
1706 * @param linkage linkage specifier for the class
1707 * @param cname the name of the XMLObject specialization
1708 * @param namespaceURI the XML namespace of the default associated element
1709 * @param namespacePrefix the XML namespace prefix of the default associated element
1711 #define DECL_XMLOBJECTBUILDER(linkage,cname,namespaceURI,namespacePrefix) \
1712 BEGIN_XMLOBJECTBUILDER(linkage,cname,namespaceURI,namespacePrefix); \
1713 XMLTOOLING_DOXYGEN(Singleton builder.) \
1714 static cname* build##cname() { \
1715 const cname##Builder* b = dynamic_cast<const cname##Builder*>( \
1716 XMLObjectBuilder::getBuilder(xmltooling::QName(namespaceURI,cname::LOCAL_NAME)) \
1719 return b->buildObject(); \
1720 throw xmltooling::XMLObjectException("Unable to obtain typed builder for "#cname"."); \
1722 END_XMLOBJECTBUILDER
1725 * Implements the standard XMLObjectBuilder specialization function.
1727 * @param cname the name of the XMLObject specialization
1729 #define IMPL_XMLOBJECTBUILDER(cname) \
1730 cname* cname##Builder::buildObject( \
1731 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType \
1734 return new cname##Impl(nsURI,localName,prefix,schemaType); \
1737 #else /* !HAVE_COVARIANT_RETURNS */
1740 * Begins the declaration of an XMLObjectBuilder specialization.
1741 * Basic boilerplate includes an empty virtual destructor, and
1742 * a default builder that defaults the element name.
1744 * @param linkage linkage specifier for the class
1745 * @param cname the name of the XMLObject specialization
1746 * @param namespaceURI the XML namespace of the default associated element
1747 * @param namespacePrefix the XML namespace prefix of the default associated element
1749 #define BEGIN_XMLOBJECTBUILDER(linkage,cname,namespaceURI,namespacePrefix) \
1750 XMLTOOLING_DOXYGEN(Builder for cname objects.) \
1751 class linkage cname##Builder : public xmltooling::ConcreteXMLObjectBuilder { \
1753 virtual ~cname##Builder() {} \
1754 XMLTOOLING_DOXYGEN(Default builder.) \
1755 virtual xmltooling::XMLObject* buildObject() const { \
1756 return buildObject(namespaceURI,cname::LOCAL_NAME,namespacePrefix); \
1758 XMLTOOLING_DOXYGEN(Builder that allows element/type override.) \
1759 virtual xmltooling::XMLObject* buildObject( \
1760 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr \
1764 * Ends the declaration of an XMLObjectBuilder specialization.
1766 #define END_XMLOBJECTBUILDER }
1769 * Declares a generic XMLObjectBuilder specialization.
1771 * @param linkage linkage specifier for the class
1772 * @param cname the name of the XMLObject specialization
1773 * @param namespaceURI the XML namespace of the default associated element
1774 * @param namespacePrefix the XML namespace prefix of the default associated element
1776 #define DECL_XMLOBJECTBUILDER(linkage,cname,namespaceURI,namespacePrefix) \
1777 BEGIN_XMLOBJECTBUILDER(linkage,cname,namespaceURI,namespacePrefix); \
1778 XMLTOOLING_DOXYGEN(Singleton builder.) \
1779 static cname* build##cname() { \
1780 const cname##Builder* b = dynamic_cast<const cname##Builder*>( \
1781 XMLObjectBuilder::getBuilder(xmltooling::QName(namespaceURI,cname::LOCAL_NAME)) \
1784 return dynamic_cast<cname*>(b->buildObject()); \
1785 throw xmltooling::XMLObjectException("Unable to obtain typed builder for "#cname"."); \
1787 END_XMLOBJECTBUILDER
1790 * Implements the standard XMLObjectBuilder specialization function.
1792 * @param cname the name of the XMLObject specialization
1794 #define IMPL_XMLOBJECTBUILDER(cname) \
1795 xmltooling::XMLObject* cname##Builder::buildObject( \
1796 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType \
1799 return new cname##Impl(nsURI,localName,prefix,schemaType); \
1802 #endif /* HAVE_COVARIANT_RETURNS */
1805 * Begins the declaration of a Schema Validator specialization.
1807 * @param linkage linkage specifier for the class
1808 * @param cname the base name of the Validator specialization
1810 #define BEGIN_XMLOBJECTVALIDATOR(linkage,cname) \
1811 class linkage cname##SchemaValidator : public xmltooling::Validator \
1814 virtual ~cname##SchemaValidator() {} \
1815 virtual void validate(const xmltooling::XMLObject* xmlObject) const { \
1816 const cname* ptr=dynamic_cast<const cname*>(xmlObject); \
1818 throw xmltooling::ValidationException(#cname"SchemaValidator: unsupported object type ($1).",xmltooling::params(1,typeid(xmlObject).name())); \
1819 if (ptr->nil() && (ptr->hasChildren() || ptr->getTextContent())) \
1820 throw xmltooling::ValidationException("Object has nil property but with children or content.")
1823 * Begins the declaration of a Schema Validator specialization subclass.
1825 * @param linkage linkage specifier for the class
1826 * @param cname the base name of the Validator specialization
1827 * @param base base class for the validator
1829 #define BEGIN_XMLOBJECTVALIDATOR_SUB(linkage,cname,base) \
1830 class linkage cname##SchemaValidator : public base##SchemaValidator \
1833 virtual ~cname##SchemaValidator() {} \
1834 virtual void validate(const xmltooling::XMLObject* xmlObject) const { \
1835 const cname* ptr=dynamic_cast<const cname*>(xmlObject); \
1837 throw xmltooling::ValidationException(#cname"SchemaValidator: unsupported object type ($1).",xmltooling::params(1,typeid(xmlObject).name()));
1840 * Ends the declaration of a Validator specialization.
1842 #define END_XMLOBJECTVALIDATOR } }
1845 * Validator code that checks the object type.
1847 * @param cname the name of the XMLObject specialization
1849 #define XMLOBJECTVALIDATOR_CHECKTYPE(cname) \
1850 const cname* ptr=dynamic_cast<const cname*>(xmlObject); \
1852 throw xmltooling::ValidationException(#cname"SchemaValidator: unsupported object type ($1).",xmltooling::params(1,typeid(xmlObject).name()))
1855 * Validator code that checks for a required attribute, content, or singleton.
1857 * @param cname the name of the XMLObject specialization
1858 * @param proper the proper name of the attribute, content, or singleton member
1860 #define XMLOBJECTVALIDATOR_REQUIRE(cname,proper) \
1861 if (!ptr->get##proper()) \
1862 throw xmltooling::ValidationException(#cname" must have "#proper".")
1865 * Validator code that checks for a required integer attribute
1867 * @param cname the name of the XMLObject specialization
1868 * @param proper the proper name of the attribute, content, or singleton member
1870 #define XMLOBJECTVALIDATOR_REQUIRE_INTEGER(cname,proper) \
1871 if (!ptr->get##proper().first) \
1872 throw xmltooling::ValidationException(#cname" must have "#proper".")
1875 * Validator code that checks for one of a pair of
1876 * required attributes, content, or singletons.
1878 * @param cname the name of the XMLObject specialization
1879 * @param proper1 the proper name of the first attribute, content, or singleton member
1880 * @param proper2 the proper name of the second attribute, content, or singleton member
1882 #define XMLOBJECTVALIDATOR_ONEOF(cname,proper1,proper2) \
1883 if (!ptr->get##proper1() && !ptr->get##proper2()) \
1884 throw xmltooling::ValidationException(#cname" must have "#proper1" or "#proper2".")
1887 * Validator code that checks for one of a pair of
1888 * required attributes, content, or singletons, but disallows both.
1890 * @param cname the name of the XMLObject specialization
1891 * @param proper1 the proper name of the first attribute, content, or singleton member
1892 * @param proper2 the proper name of the second attribute, content, or singleton member
1894 #define XMLOBJECTVALIDATOR_ONLYONEOF(cname,proper1,proper2) \
1895 if ((!ptr->get##proper1() && !ptr->get##proper2()) || (ptr->get##proper1() && ptr->get##proper2())) \
1896 throw xmltooling::ValidationException(#cname" must have "#proper1" or "#proper2" but not both.")
1899 * Validator code that checks for one of a set of three
1900 * required attributes, content, or singletons.
1902 * @param cname the name of the XMLObject specialization
1903 * @param proper1 the proper name of the first attribute, content, or singleton member
1904 * @param proper2 the proper name of the second attribute, content, or singleton member
1905 * @param proper3 the proper name of the third attribute, content, or singleton member
1907 #define XMLOBJECTVALIDATOR_ONEOF3(cname,proper1,proper2,proper3) \
1908 if (!ptr->get##proper1() && !ptr->get##proper2() && !ptr->get##proper3()) \
1909 throw xmltooling::ValidationException(#cname" must have "#proper1", "#proper2", or "#proper3".")
1912 * Validator code that checks for one of a set of three
1913 * required attributes, content, or singletons but disallows more than one.
1915 * @param cname the name of the XMLObject specialization
1916 * @param proper1 the proper name of the first attribute, content, or singleton member
1917 * @param proper2 the proper name of the second attribute, content, or singleton member
1918 * @param proper3 the proper name of the third attribute, content, or singleton member
1920 #define XMLOBJECTVALIDATOR_ONLYONEOF3(cname,proper1,proper2,proper3) \
1921 int c##proper1##proper2##proper3=0; \
1922 if (ptr->get##proper1()!=nullptr) \
1923 c##proper1##proper2##proper3++; \
1924 if (ptr->get##proper2()!=nullptr) \
1925 c##proper1##proper2##proper3++; \
1926 if (ptr->get##proper3()!=nullptr) \
1927 c##proper1##proper2##proper3++; \
1928 if (c##proper1##proper2##proper3 != 1) \
1929 throw xmltooling::ValidationException(#cname" must have only one of "#proper1", "#proper2", or "#proper3".")
1932 * Validator code that checks a co-constraint (if one present, the other must be)
1933 * between a pair of attributes, content, or singletons.
1935 * @param cname the name of the XMLObject specialization
1936 * @param proper1 the proper name of the first attribute, content, or singleton member
1937 * @param proper2 the proper name of the second attribute, content, or singleton member
1939 #define XMLOBJECTVALIDATOR_NONEORBOTH(cname,proper1,proper2) \
1940 if ((ptr->get##proper1() && !ptr->get##proper2()) || (!ptr->get##proper1() && ptr->get##proper2())) \
1941 throw xmltooling::ValidationException(#cname" cannot have "#proper1" without "#proper2".")
1944 * Validator code that checks for a non-empty collection.
1946 * @param cname the name of the XMLObject specialization
1947 * @param proper the proper name of the collection item
1949 #define XMLOBJECTVALIDATOR_NONEMPTY(cname,proper) \
1950 if (ptr->get##proper##s().empty()) \
1951 throw xmltooling::ValidationException(#cname" must have at least one "#proper".")
1954 * Declares/defines a Validator specialization that checks object type and
1955 * a non-empty simple content model.
1957 * @param linkage linkage specifier for the class
1958 * @param cname the name of the XMLObject specialization
1960 #define XMLOBJECTVALIDATOR_SIMPLE(linkage,cname) \
1961 BEGIN_XMLOBJECTVALIDATOR(linkage,cname); \
1962 XMLOBJECTVALIDATOR_REQUIRE(cname,TextContent); \
1963 END_XMLOBJECTVALIDATOR
1968 * @namespace xmltooling
1969 * Public namespace of XML Tooling library
1971 namespace xmltooling {
1974 * Template function for cloning a sequence of XMLObjects.
1975 * Invokes the clone() member on each element of the input sequence and adds the copy to
1976 * the output sequence. Order is preserved.
1978 * @param in input sequence to clone
1979 * @param out output sequence to copy cloned pointers into
1981 template<class InputSequence,class OutputSequence> void clone(const InputSequence& in, OutputSequence& out) {
1982 for (typename InputSequence::const_iterator i=in.begin(); i!=in.end(); i++) {
1984 out.push_back((*i)->clone());
1991 * Functor for cleaning up heap objects in containers.
1993 template<class T> struct cleanup
1996 * Function operator to delete an object.
1998 * @param ptr object to delete
2000 void operator()(T* ptr) {delete ptr;}
2003 * Function operator to delete an object stored as const.
2005 * @param ptr object to delete after casting away const
2007 void operator()(const T* ptr) {delete const_cast<T*>(ptr);}
2011 * Functor for cleaning up heap objects in key/value containers.
2013 template<class A,class B> struct cleanup_pair
2016 * Function operator to delete an object.
2018 * @param p a pair in which the second component is the object to delete
2020 void operator()(const std::pair<const A,B*>& p) {delete p.second;}
2024 * Functor for cleaning up const heap objects in key/value containers.
2026 template<class A,class B> struct cleanup_const_pair
2029 * Function operator to delete an object stored as const
2031 * @param p a pair in which the second component is the const object to delete
2033 void operator()(const std::pair<const A,const B*>& p) {delete const_cast<B*>(p.second);}
2037 #endif /* __xmltooling_base_h__ */