BDE 4.14.0 Production release
Loading...
Searching...
No Matches
s_baltst_basicschemautil.h
Go to the documentation of this file.
1/// @file s_baltst_basicschemautil.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// s_baltst_basicschemautil.h -*-C++-*-
8#ifndef INCLUDED_S_BALTST_BASICSCHEMAUTIL
9#define INCLUDED_S_BALTST_BASICSCHEMAUTIL
10
11#include <bsls_ident.h>
12BSLS_IDENT("$Id: $")
13
14/// @defgroup s_baltst_basicschemautil s_baltst_basicschemautil
15/// @brief Provide utilities for `s_baltst::BasicSchema` objects.
16/// @addtogroup Standalones
17/// @{
18/// @addtogroup s_baltst
19/// @{
20/// @addtogroup s_baltst_basicschemautil
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#s_baltst_basicschemautil-purpose"> Purpose</a>
25/// * <a href="#s_baltst_basicschemautil-classes"> Classes </a>
26/// * <a href="#s_baltst_basicschemautil-description"> Description </a>
27/// * <a href="#s_baltst_basicschemautil-checking-structural-equivalence-up-to-annotation"> Checking Structural Equivalence Up To Annotation </a>
28///
29/// # Purpose {#s_baltst_basicschemautil-purpose}
30/// Provide utilities for `s_baltst::BasicSchema` objects.
31///
32/// # Classes {#s_baltst_basicschemautil-classes}
33///
34/// - s_baltst::BasicSchemaUtil: Namespace for utilities for basic schema objects
35///
36/// @see balxml_configschema, bdem_configschema
37///
38/// # Description {#s_baltst_basicschemautil-description}
39/// This component defines a `struct`,
40/// `s_baltst::BasicSchemaUtil`, that acts as a namespace for a suite of
41/// utility functions providing non-primitive operations on
42/// `s_baltst::BasicSchema` objects.
43///
44/// ## Checking Structural Equivalence Up To Annotation {#s_baltst_basicschemautil-checking-structural-equivalence-up-to-annotation}
45///
46///
47/// The most important operation provided by `s_baltst::BasicSchemaUtil` is
48/// `areEqualUpToAnnotation`, which compares 2 basic schema objects and returns
49/// `true` if they are structurally equal except for the presence or absence of
50/// annotations. This can be used, for example, to test that a basic schema
51/// object parsed from an XML schema definition has an expected structure,
52/// without worrying about having to check the structure of its documentation.
53/// @}
54/** @} */
55/** @} */
56
57/** @addtogroup Standalones
58 * @{
59 */
60/** @addtogroup s_baltst
61 * @{
62 */
63/** @addtogroup s_baltst_basicschemautil
64 * @{
65 */
66
67#include <bdlat_choicefunctions.h>
68#include <bdlat_selectioninfo.h>
69#include <bdlat_typecategory.h>
70
71#include <bslmf_assert.h>
72#include <bslmf_enableif.h>
74#include <bslmf_isconst.h>
75
76#include <bsls_assert.h>
77
79
80
81namespace s_baltst {
82
83 // ======================
84 // struct BasicSchemaUtil
85 // ======================
86
87/// forward declaration
88template <class ELEMENT_TYPE>
89struct BasicSchemaUtil_IsElement;
90
91/// forward declaration
92template <class ELEMENT_TYPE>
93struct BasicSchemaUtil_IsElementOrSchema;
94
95/// This utility `struct` provides a namespace for a suite of functions for
96/// non-primitive operations on `s_baltst::BasicSchema` objects.
98
99 private:
100 // PRIVATE TYPES
101
102 /// This boolean-valued metafunction provides a member constant `value`
103 /// that is equal to `true` if the specified `ELEMENT_TYPE` represents
104 /// an element, excluding the top-level schema element, in an XML Schema
105 /// Definition. Otherwise, `value` is equal to `false`.
106 template <class ELEMENT_TYPE>
107 struct IsElement : BasicSchemaUtil_IsElement<ELEMENT_TYPE> {
108 };
109
110 /// This boolean-valued metafunction provides a member constant `value`
111 /// that is equal to `true` if the specified `ELEMENT_TYPE` represents
112 /// an element, including the top-level schema element, in an XML Schema
113 /// Definition. Otherwise, `value` is equal to `false`.
114 template <class ELEMENT_TYPE>
115 struct IsElementOrSchema
116 : BasicSchemaUtil_IsElementOrSchema<ELEMENT_TYPE> {
117 };
118
119 public:
120 // CLASS METHODS
121
122 /// Insert the specified `element` after the last element in the
123 /// `choice` vector of the specified `parent`. This function
124 /// participates in overload resolution if `PARENT_TYPE` is a
125 /// non-`const` type for which `IsElementOrSchema<PARENT_TYPE>::value`
126 /// is `true` and `IsElement<CHILD_TYPE>::value` is `true`.
127 template <class PARENT_TYPE, class CHILD_TYPE>
131 append(PARENT_TYPE *parent, const CHILD_TYPE& element);
132
133 /// Insert a `s_baltst::EnumerationElement` with the specified `value`
134 /// after the last element in the `choice` vector of the specified
135 /// `parent`.
137 const bsl::string_view& value);
138
139 /// Return `true` if the specified `a` and `b` are structurally
140 /// equivalent except for the presence, absence, or order of
141 /// annotations, and return false otherwise.
142 static bool areEqualUpToAnnotation(const BasicSchema& a,
143 const BasicSchema& b);
144};
145
146 // ================================
147 // struct BasicSchemaUtil_IsElement
148 // ================================
149
150/// This boolean-valued metafunction provides a member constant `value` that
151/// is equal to `true` if the specified `ELEMENT_TYPE` represents an
152/// element, excluding the top-level schema element, in an XML Schema
153/// Definition. Otherwise, `value` is equal to `false`.
154template <class ELEMENT_TYPE>
157
158template <>
162
163template <>
167
168template <>
172
173template <>
177
178template <>
182
183template <>
187
188template <>
192
193template <>
197
198 // ========================================
199 // struct BasicSchemaUtil_IsElementOrSchema
200 // ========================================
201
202/// This boolean-valued metafunction provides a member constant `value` that
203/// is equal to `true` if the specified `ELEMENT_TYPE` represents an
204/// element, including the top-level schema element, in an XML Schema
205/// Definition. Otherwise, `value` is equal to `false`.
206template <class ELEMENT_TYPE>
210
211template <>
214
215 // ===============================
216 // struct BasicSchemaUtil_ImplUtil
217 // ===============================
218
219/// This component-private utility `struct` provides implementation details
220/// for `BasicSchemaUtil`.
222
223 // TYPES
232
233 private:
234 // PRIVATE CLASS METHODS
235
236 /// The behavior of this function is undefined. It is provided for the
237 /// purpose of overload set formation. Note that the specified
238 /// `element` is not used.
239 static void doRemoveAnnotations(AnnotationElement *element);
240
241 /// Remove all annotation sub-elements from the specified `element`.
242 template <class ELEMENT_TYPE>
243 static void doRemoveAnnotations(ELEMENT_TYPE *element);
244
245 /// Recursively remove all annotation sub-elements from the set of
246 /// element choices specified by the range '[beginElementChoices,
247 /// endElementChoices)', and return the past-the-end iterator for the
248 /// new range of element choices. Note that the element re-ordering and
249 /// removal behavior of this function is similar to that of the
250 /// `bsl::remove` algorithm.
251 template <class ELEMENT_CHOICE_FORWARD_ITERATOR>
252 static ELEMENT_CHOICE_FORWARD_ITERATOR doRemoveAnnotations(
253 ELEMENT_CHOICE_FORWARD_ITERATOR beginElementChoices,
254 ELEMENT_CHOICE_FORWARD_ITERATOR endElementChoices);
255
256 public:
257 // CLASS METHODS
258
259 /// Insert the specified `element` after the last element in the
260 /// `choice` vector of the specified `parent`. The behavior is
261 /// undefined unless the specified `PARENT_TYPE` parameter is one of the
262 /// non-"Choice"-suffixed types provided by the @ref s_baltst_basicschema
263 /// component.
264 template <class PARENT_TYPE>
265 static void append(PARENT_TYPE *parent, const AnnotationElement& element);
266 template <class PARENT_TYPE>
267 static void append(PARENT_TYPE *parent, const ChoiceElement& element);
268 template <class PARENT_TYPE>
269 static void append(PARENT_TYPE *parent, const ComplexTypeElement& element);
270 template <class PARENT_TYPE>
271 static void append(PARENT_TYPE *parent, const Element& element);
272 template <class PARENT_TYPE>
273 static void append(PARENT_TYPE *parent, const EnumerationElement& element);
274 template <class PARENT_TYPE>
275 static void append(PARENT_TYPE *parent, const RestrictionElement& element);
276 template <class PARENT_TYPE>
277 static void append(PARENT_TYPE *parent, const SequenceElement& element);
278 template <class PARENT_TYPE>
279 static void append(PARENT_TYPE *parent, const SimpleTypeElement& element);
280
281 /// Return `true` if the specified `choice` element choice is an
282 /// annotation element, and return `false` otherwise. The behavior is
283 /// undefined unless the specified `ELEMENT_CHOICE_TYPE` parameter is
284 /// one of the "Choice"-suffixed types provided by
285 /// `s_baltst::BasicSchema`.
286 template <class ELEMENT_CHOICE_TYPE>
287 static bool isAnnotation(const ELEMENT_CHOICE_TYPE& choice);
288
289 /// Remove all annotation sub-elements from the specified `element`.
290 template <class ELEMENT_TYPE>
291 static void removeAnnotations(ELEMENT_TYPE *element);
292};
293
294 // =============================================
295 // class BasicSchemaUtil_ChoiceAnnotationRemover
296 // =============================================
297
298/// This function-object class provides a function-call operator that
299/// removes all annotations from an element choice.
300///
301/// See @ref s_baltst_basicschemautil
303
304 public:
305 // CREATORS
306
307 /// Create a `BasicSchemaUtil_ChoiceAnnotationRemover` object.
309
310 // ACCESSORS
311
312 /// Recursively remove all annotation sub-elements from the specified
313 /// `element`. The behavior is undefined unless the specified
314 /// `ELEMENT_CHOICE_TYPE` parameter is one of the "Choice"-suffixed
315 /// types provided by `s_baltst::BasicSchema`.
316 template <class ELEMENT_CHOICE_TYPE>
317 void operator()(ELEMENT_CHOICE_TYPE& element) const;
318};
319
320 // ================================================
321 // class BasicSchemaUtil_SelectionAnnotationRemover
322 // ================================================
323
324/// This function-object class provides a function-call operator that
325/// removes all annotations from an element that is the `selection` of a
326/// `bdlat` `Choice`-compatible object.
327///
328/// See @ref s_baltst_basicschemautil
330
331 public:
332 // CREATORS
333
334 /// Create a `BasicSchemaUtil_SelectionAnnotationRemover` object.
336
337 // ACCESSORS
338
339 /// Recursively remove all annotation sub-elements from the specified
340 /// `selection` element. The behavior is undefined unless the specified
341 /// `SELECTION_TYPE` is the `selection` of a `bdlat` `Choice`-compatible
342 /// object, and is one of the non-"Choice"-suffixed types provided by
343 /// `s_baltst::BasicSchema`.
344 template <class SELECTION_TYPE>
345 int operator()(SELECTION_TYPE *selection,
346 const bdlat_SelectionInfo&) const;
347};
348
349 // ===========================================
350 // class BasicSchemaUtil_IsAnnotationPredicate
351 // ===========================================
352
353/// This function-object class provides a function-call operator that
354/// determines whether or not an object is an annotation element.
355///
356/// See @ref s_baltst_basicschemautil
358
359 public:
360 // CREATORS
361
362 /// Create a `BasicSchemaUtil_IsAnnotationPredicate` object.
364
365 // ACCESSORS
366
367 /// Return `true` if the specified `element` choice is an annotation
368 /// element, and return `false` otherwise. The behavior is undefined
369 /// unless the specified `ELEMENT_CHOICE_TYPE` parameter is one of the
370 /// "Choice"-suffixed types provided by `s_baltst::BasicSchema`.
371 template <class ELEMENT_CHOICE_TYPE>
372 bool operator()(const ELEMENT_CHOICE_TYPE& element) const;
373};
374
375 // ====================================
376 // struct BasicSchemaUtil_AlgorithmUtil
377 // ====================================
378
380 // CLASS METHODS
381
382 /// Erase all of the elements in the specified `container` from the
383 /// specified `position` iterator to the end of the container, as if by
384 /// `container->erase(position, container.end())`. The behavior is
385 /// undefined unless `container->erase(position, container.end())` is
386 /// well-formed.
387 template <class SEQUENCE_CONTAINER>
388 static void eraseToEnd(SEQUENCE_CONTAINER *container,
389 typename SEQUENCE_CONTAINER::iterator position);
390
391 /// Invoke the specified `transform` on each object in the range
392 /// specified by `[first, last)` and return an input iterator equal to
393 /// `last`.
394 template <class INPUT_ITERATOR, class TRANSFORM>
395 static INPUT_ITERATOR forEach(INPUT_ITERATOR first,
396 INPUT_ITERATOR last,
397 TRANSFORM transform);
398};
399
400// ============================================================================
401// INLINE DEFINITIONS
402// ----------------------------------------------------------------------------
403
404 // -----------------
405 // struct SchemaUtil
406 // -----------------
407
408// CLASS METHODS
409template <class PARENT_TYPE, class CHILD_TYPE>
410typename bsl::enable_if<
414BasicSchemaUtil::append(PARENT_TYPE *parent, const CHILD_TYPE& child)
415{
417}
418
420 const bsl::string_view& value)
421{
423 enumeration.value() = value;
424 BasicSchemaUtil::append(parent, enumeration);
425}
426
428 const BasicSchema& b)
429{
430 BasicSchema aCopy(a);
432
433 BasicSchema bCopy(b);
435
436 return aCopy == bCopy;
437}
438
439 // -------------------------------
440 // struct BasicSchemaUtil_ImplUtil
441 // -------------------------------
442
443// PRIVATE CLASS METHODS
444void BasicSchemaUtil_ImplUtil::doRemoveAnnotations(AnnotationElement *)
445{
447 "This overload of 'BasicSchemaUtil_ImplUtil::removeAnnotations' must "
448 "not be invoked.");
449}
450
451template <class ELEMENT_TYPE>
452void BasicSchemaUtil_ImplUtil::doRemoveAnnotations(ELEMENT_TYPE *element)
453{
455 &element->choice(),
456 BasicSchemaUtil_ImplUtil::doRemoveAnnotations(
457 element->choice().begin(), element->choice().end()));
458}
459
460template <class ELEMENT_CHOICE_FORWARD_ITERATOR>
461ELEMENT_CHOICE_FORWARD_ITERATOR BasicSchemaUtil_ImplUtil::doRemoveAnnotations(
462 ELEMENT_CHOICE_FORWARD_ITERATOR beginElementChoices,
463 ELEMENT_CHOICE_FORWARD_ITERATOR endElementChoices)
464{
465 const BasicSchemaUtil_IsAnnotationPredicate isAnnotation;
466 const ELEMENT_CHOICE_FORWARD_ITERATOR newEnd =
467 std::remove_if(beginElementChoices, endElementChoices, isAnnotation);
468
469 const BasicSchemaUtil_ChoiceAnnotationRemover removeAnnotations;
471 beginElementChoices, newEnd, removeAnnotations);
472}
473
474// CLASS METHODS
475template <class PARENT_TYPE>
476void BasicSchemaUtil_ImplUtil::append(PARENT_TYPE *parent,
477 const AnnotationElement& element)
478{
479 parent->choice().emplace_back();
480 parent->choice().back().makeAnnotation(element);
481}
482
483template <class PARENT_TYPE>
484void BasicSchemaUtil_ImplUtil::append(PARENT_TYPE *parent,
485 const ChoiceElement& element)
486{
487 parent->choice().emplace_back();
488 parent->choice().back().makeChoice(element);
489}
490
491template <class PARENT_TYPE>
492void BasicSchemaUtil_ImplUtil::append(PARENT_TYPE *parent,
493 const ComplexTypeElement& element)
494{
495 parent->choice().emplace_back();
496 parent->choice().back().makeComplexType(element);
497}
498
499template <class PARENT_TYPE>
500void BasicSchemaUtil_ImplUtil::append(PARENT_TYPE *parent,
501 const Element& element)
502{
503 parent->choice().emplace_back();
504 parent->choice().back().makeElement(element);
505}
506
507template <class PARENT_TYPE>
508void BasicSchemaUtil_ImplUtil::append(PARENT_TYPE *parent,
509 const EnumerationElement& element)
510{
511 parent->choice().emplace_back();
512 parent->choice().back().makeEnumeration(element);
513}
514
515template <class PARENT_TYPE>
516void BasicSchemaUtil_ImplUtil::append(PARENT_TYPE *parent,
517 const RestrictionElement& element)
518{
519 parent->choice().emplace_back();
520 parent->choice().back().makeRestriction(element);
521}
522
523template <class PARENT_TYPE>
524void BasicSchemaUtil_ImplUtil::append(PARENT_TYPE *parent,
525 const SequenceElement& element)
526{
527 parent->choice().emplace_back();
528 parent->choice().back().makeSequence(element);
529}
530
531template <class PARENT_TYPE>
532void BasicSchemaUtil_ImplUtil::append(PARENT_TYPE *parent,
533 const SimpleTypeElement& element)
534{
535 parent->choice().emplace_back();
536 parent->choice().back().makeSimpleType(element);
537}
538
539template <class ELEMENT_CHOICE_TYPE>
540bool BasicSchemaUtil_ImplUtil::isAnnotation(const ELEMENT_CHOICE_TYPE& choice)
541{
542 return choice.isAnnotationValue();
543}
544
545template <class ELEMENT_TYPE>
547{
548 BasicSchemaUtil_ImplUtil::doRemoveAnnotations(element);
549}
550
551 // ----------------------------------------------
552 // struct BasicSchemaUtil_ChoiceAnnotationRemover
553 // ----------------------------------------------
554
555// CREATORS
560
561// ACCESSORS
562template <class ELEMENT_CHOICE_TYPE>
564 ELEMENT_CHOICE_TYPE& element) const
565{
568 static_cast<unsigned>(bdlat_TypeCategory::e_CHOICE_CATEGORY));
569
570 const BasicSchemaUtil_SelectionAnnotationRemover removeAnnotations;
571
573 &element, removeAnnotations);
574
575 BSLS_ASSERT(0 == rc); (void) rc;
576}
577
578 // ------------------------------------------------
579 // class BasicSchemaUtil_SelectionAnnotationRemover
580 // ------------------------------------------------
581
582// CREATORS
587
588// ACCESSORS
589template <class SELECTION_TYPE>
591 SELECTION_TYPE *selection,
592 const bdlat_SelectionInfo&) const
593{
595 return 0;
596}
597
598 // --------------------------------------------
599 // struct BasicSchemaUtil_IsAnnotationPredicate
600 // --------------------------------------------
601
602// CREATORS
606
607// ACCESSORS
608template <class ELEMENT_CHOICE_TYPE>
610 const ELEMENT_CHOICE_TYPE& element) const
611{
613}
614
615 // ------------------------------------
616 // struct BasicSchemaUtil_AlgorithmUtil
617 // ------------------------------------
618
619// CLASS METHODS
620template <class SEQUENCE_CONTAINER>
622 SEQUENCE_CONTAINER *container,
623 typename SEQUENCE_CONTAINER::iterator position)
624{
625 container->erase(position, container->end());
626}
627
628template <class INPUT_ITERATOR, class TRANSFORM>
629INPUT_ITERATOR BasicSchemaUtil_AlgorithmUtil::forEach(INPUT_ITERATOR first,
630 INPUT_ITERATOR last,
631 TRANSFORM transform)
632{
633 for (; first != last; ++first) {
634 transform(*first);
635 }
636
637 return first;
638}
639
640} // close package namespace
641
642
643#endif
644
645// ----------------------------------------------------------------------------
646// Copyright 2021 Bloomberg Finance L.P.
647//
648// Licensed under the Apache License, Version 2.0 (the "License");
649// you may not use this file except in compliance with the License.
650// You may obtain a copy of the License at
651//
652// http://www.apache.org/licenses/LICENSE-2.0
653//
654// Unless required by applicable law or agreed to in writing, software
655// distributed under the License is distributed on an "AS IS" BASIS,
656// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
657// See the License for the specific language governing permissions and
658// limitations under the License.
659// ----------------------------- END-OF-FILE ----------------------------------
660
661/** @} */
662/** @} */
663/** @} */
Definition bslstl_stringview.h:441
Definition s_baltst_basicschema.h:95
Definition s_baltst_basicschema.h:1682
Definition s_baltst_basicschema.h:2134
Definition s_baltst_basicschema.h:2625
Definition s_baltst_basicschema.h:521
bdlb::NullableValue< bsl::string > & value()
Definition s_baltst_basicschema.h:4446
Definition s_baltst_basicschema.h:985
Definition s_baltst_basicschema.h:3202
Definition s_baltst_basicschema.h:1448
Definition s_baltst_basicschemautil.h:302
BasicSchemaUtil_ChoiceAnnotationRemover()
Create a BasicSchemaUtil_ChoiceAnnotationRemover object.
Definition s_baltst_basicschemautil.h:557
void operator()(ELEMENT_CHOICE_TYPE &element) const
Definition s_baltst_basicschemautil.h:563
Definition s_baltst_basicschemautil.h:357
bool operator()(const ELEMENT_CHOICE_TYPE &element) const
Definition s_baltst_basicschemautil.h:609
BasicSchemaUtil_IsAnnotationPredicate()
Create a BasicSchemaUtil_IsAnnotationPredicate object.
Definition s_baltst_basicschemautil.h:603
Definition s_baltst_basicschemautil.h:329
int operator()(SELECTION_TYPE *selection, const bdlat_SelectionInfo &) const
Definition s_baltst_basicschemautil.h:590
BasicSchemaUtil_SelectionAnnotationRemover()
Create a BasicSchemaUtil_SelectionAnnotationRemover object.
Definition s_baltst_basicschemautil.h:584
Definition s_baltst_basicschema.h:3920
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:229
static const t_TYPE value
Definition bslmf_integralconstant.h:258
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1804
#define BSLS_ASSERT_INVOKE_NORETURN(X)
Definition bsls_assert.h:1895
#define BSLS_IDENT(str)
Definition bsls_ident.h:195
int manipulateSelection(TYPE *object, MANIPULATOR &manipulator)
Definition s_baltst_address.h:66
Definition bdlat_selectioninfo.h:136
Definition bdlat_typecategory.h:1083
@ e_CHOICE_CATEGORY
Definition bdlat_typecategory.h:1047
Definition bslmf_enableif.h:525
Definition bslmf_integralconstant.h:244
Definition bslmf_isconst.h:144
Definition s_baltst_basicschemautil.h:379
static INPUT_ITERATOR forEach(INPUT_ITERATOR first, INPUT_ITERATOR last, TRANSFORM transform)
Definition s_baltst_basicschemautil.h:629
static void eraseToEnd(SEQUENCE_CONTAINER *container, typename SEQUENCE_CONTAINER::iterator position)
Definition s_baltst_basicschemautil.h:621
Definition s_baltst_basicschemautil.h:221
BasicSchemaRestrictionElement RestrictionElement
Definition s_baltst_basicschemautil.h:229
static bool isAnnotation(const ELEMENT_CHOICE_TYPE &choice)
Definition s_baltst_basicschemautil.h:540
BasicSchemaEnumerationElement EnumerationElement
Definition s_baltst_basicschemautil.h:228
BasicSchemaElement Element
Definition s_baltst_basicschemautil.h:227
static void removeAnnotations(ELEMENT_TYPE *element)
Remove all annotation sub-elements from the specified element.
Definition s_baltst_basicschemautil.h:546
BasicSchemaChoiceElement ChoiceElement
Definition s_baltst_basicschemautil.h:225
static void append(PARENT_TYPE *parent, const AnnotationElement &element)
Definition s_baltst_basicschemautil.h:476
BasicSchemaSequenceElement SequenceElement
Definition s_baltst_basicschemautil.h:230
BasicSchemaSimpleTypeElement SimpleTypeElement
Definition s_baltst_basicschemautil.h:231
BasicSchemaComplexTypeElement ComplexTypeElement
Definition s_baltst_basicschemautil.h:226
BasicSchemaAnnotationElement AnnotationElement
Definition s_baltst_basicschemautil.h:224
forward declaration
Definition s_baltst_basicschemautil.h:208
forward declaration
Definition s_baltst_basicschemautil.h:155
Definition s_baltst_basicschemautil.h:97
static bsl::enable_if<!bsl::is_const< PARENT_TYPE >::value &&IsElementOrSchema< PARENT_TYPE >::value &&IsElement< CHILD_TYPE >::value >::type append(PARENT_TYPE *parent, const CHILD_TYPE &element)
Definition s_baltst_basicschemautil.h:414
static void appendEnumeration(BasicSchemaRestrictionElement *parent, const bsl::string_view &value)
Definition s_baltst_basicschemautil.h:419
static bool areEqualUpToAnnotation(const BasicSchema &a, const BasicSchema &b)
Definition s_baltst_basicschemautil.h:427