8#ifndef INCLUDED_S_BALTST_BASICSCHEMAUTIL
9#define INCLUDED_S_BALTST_BASICSCHEMAUTIL
66#include <bdlat_choicefunctions.h>
87template <
class ELEMENT_TYPE>
88struct BasicSchemaUtil_IsElement;
91template <
class ELEMENT_TYPE>
92struct BasicSchemaUtil_IsElementOrSchema;
107 template <
class ELEMENT_TYPE>
115 template <
class ELEMENT_TYPE>
116 struct IsElementOrSchema
128 template <
class PARENT_TYPE,
class CHILD_TYPE>
132 append(PARENT_TYPE *parent,
const CHILD_TYPE& element);
155template <
class ELEMENT_TYPE>
207template <
class ELEMENT_TYPE>
246 template <
class ELEMENT_TYPE>
247 static void doRemoveAnnotations(ELEMENT_TYPE *element);
256 template <
class ELEMENT_CHOICE_FORWARD_ITERATOR>
257 static ELEMENT_CHOICE_FORWARD_ITERATOR doRemoveAnnotations(
258 ELEMENT_CHOICE_FORWARD_ITERATOR beginElementChoices,
259 ELEMENT_CHOICE_FORWARD_ITERATOR endElementChoices);
270 template <
class PARENT_TYPE>
272 template <
class PARENT_TYPE>
274 template <
class PARENT_TYPE>
276 template <
class PARENT_TYPE>
277 static void append(PARENT_TYPE *parent,
const Element& element);
278 template <
class PARENT_TYPE>
280 template <
class PARENT_TYPE>
282 template <
class PARENT_TYPE>
284 template <
class PARENT_TYPE>
293 template <
class ELEMENT_CHOICE_TYPE>
294 static bool isAnnotation(
const ELEMENT_CHOICE_TYPE& choice);
297 template <
class ELEMENT_TYPE>
324 template <
class ELEMENT_CHOICE_TYPE>
325 void operator()(ELEMENT_CHOICE_TYPE& element)
const;
353 template <
class SELECTION_TYPE>
381 template <
class ELEMENT_CHOICE_TYPE>
382 bool operator()(
const ELEMENT_CHOICE_TYPE& element)
const;
398 template <
class SEQUENCE_CONTAINER>
399 static void eraseToEnd(SEQUENCE_CONTAINER *container,
400 typename SEQUENCE_CONTAINER::iterator position);
405 template <
class INPUT_ITERATOR,
class TRANSFORM>
406 static INPUT_ITERATOR
forEach(INPUT_ITERATOR first,
408 TRANSFORM transform);
420template <
class PARENT_TYPE,
class CHILD_TYPE>
434 enumeration.
value() = value;
447 return aCopy == bCopy;
455void BasicSchemaUtil_ImplUtil::doRemoveAnnotations(AnnotationElement *)
458 "This overload of 'BasicSchemaUtil_ImplUtil::removeAnnotations' must "
462template <
class ELEMENT_TYPE>
463void BasicSchemaUtil_ImplUtil::doRemoveAnnotations(ELEMENT_TYPE *element)
467 BasicSchemaUtil_ImplUtil::doRemoveAnnotations(
468 element->choice().begin(), element->choice().end()));
471template <
class ELEMENT_CHOICE_FORWARD_ITERATOR>
472ELEMENT_CHOICE_FORWARD_ITERATOR BasicSchemaUtil_ImplUtil::doRemoveAnnotations(
473 ELEMENT_CHOICE_FORWARD_ITERATOR beginElementChoices,
474 ELEMENT_CHOICE_FORWARD_ITERATOR endElementChoices)
476 const BasicSchemaUtil_IsAnnotationPredicate
isAnnotation;
477 const ELEMENT_CHOICE_FORWARD_ITERATOR newEnd =
478 std::remove_if(beginElementChoices, endElementChoices,
isAnnotation);
486template <
class PARENT_TYPE>
490 parent->choice().emplace_back();
491 parent->choice().back().makeAnnotation(element);
494template <
class PARENT_TYPE>
498 parent->choice().emplace_back();
499 parent->choice().back().makeChoice(element);
502template <
class PARENT_TYPE>
506 parent->choice().emplace_back();
507 parent->choice().back().makeComplexType(element);
510template <
class PARENT_TYPE>
514 parent->choice().emplace_back();
515 parent->choice().back().makeElement(element);
518template <
class PARENT_TYPE>
522 parent->choice().emplace_back();
523 parent->choice().back().makeEnumeration(element);
526template <
class PARENT_TYPE>
530 parent->choice().emplace_back();
531 parent->choice().back().makeRestriction(element);
534template <
class PARENT_TYPE>
538 parent->choice().emplace_back();
539 parent->choice().back().makeSequence(element);
542template <
class PARENT_TYPE>
546 parent->choice().emplace_back();
547 parent->choice().back().makeSimpleType(element);
550template <
class ELEMENT_CHOICE_TYPE>
553 return choice.isAnnotationValue();
556template <
class ELEMENT_TYPE>
559 BasicSchemaUtil_ImplUtil::doRemoveAnnotations(element);
573template <
class ELEMENT_CHOICE_TYPE>
575 ELEMENT_CHOICE_TYPE& element)
const
584 &element, removeAnnotations);
600template <
class SELECTION_TYPE>
602 SELECTION_TYPE *selection,
619template <
class ELEMENT_CHOICE_TYPE>
621 const ELEMENT_CHOICE_TYPE& element)
const
631template <
class SEQUENCE_CONTAINER>
633 SEQUENCE_CONTAINER *container,
634 typename SEQUENCE_CONTAINER::iterator position)
636 container->erase(position, container->end());
639template <
class INPUT_ITERATOR,
class TRANSFORM>
644 for (; first != last; ++first) {
Definition bslstl_stringview.h:471
Definition s_baltst_basicschema.h:95
Definition s_baltst_basicschema.h:1699
Definition s_baltst_basicschema.h:2157
Definition s_baltst_basicschema.h:2656
Definition s_baltst_basicschema.h:525
bdlb::NullableValue< bsl::string > & value()
Definition s_baltst_basicschema.h:4499
Definition s_baltst_basicschema.h:995
Definition s_baltst_basicschema.h:3241
Definition s_baltst_basicschema.h:1464
Definition s_baltst_basicschemautil.h:309
BasicSchemaUtil_ChoiceAnnotationRemover()
Create a BasicSchemaUtil_ChoiceAnnotationRemover object.
Definition s_baltst_basicschemautil.h:568
void operator()(ELEMENT_CHOICE_TYPE &element) const
Definition s_baltst_basicschemautil.h:574
Definition s_baltst_basicschemautil.h:366
bool operator()(const ELEMENT_CHOICE_TYPE &element) const
Definition s_baltst_basicschemautil.h:620
BasicSchemaUtil_IsAnnotationPredicate()
Create a BasicSchemaUtil_IsAnnotationPredicate object.
Definition s_baltst_basicschemautil.h:614
Definition s_baltst_basicschemautil.h:337
int operator()(SELECTION_TYPE *selection, const bdlat_SelectionInfo &) const
Definition s_baltst_basicschemautil.h:601
BasicSchemaUtil_SelectionAnnotationRemover()
Create a BasicSchemaUtil_SelectionAnnotationRemover object.
Definition s_baltst_basicschemautil.h:595
Definition s_baltst_basicschema.h:3972
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
static const t_TYPE value
Definition bslmf_integralconstant.h:267
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_ASSERT_INVOKE_NORETURN(X)
Definition bsls_assert.h:2101
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
int manipulateSelection(TYPE *object, MANIPULATOR &manipulator)
Definition s_baltst_address.h:66
Definition bdlat_selectioninfo.h:138
Definition bdlat_typecategory.h:1088
@ e_CHOICE_CATEGORY
Definition bdlat_typecategory.h:1049
Definition bslmf_enableif.h:530
Definition bslmf_integralconstant.h:261
Definition bslmf_isconst.h:145
Definition s_baltst_basicschemautil.h:389
static INPUT_ITERATOR forEach(INPUT_ITERATOR first, INPUT_ITERATOR last, TRANSFORM transform)
Definition s_baltst_basicschemautil.h:640
static void eraseToEnd(SEQUENCE_CONTAINER *container, typename SEQUENCE_CONTAINER::iterator position)
Definition s_baltst_basicschemautil.h:632
Definition s_baltst_basicschemautil.h:224
BasicSchemaRestrictionElement RestrictionElement
Definition s_baltst_basicschemautil.h:232
static bool isAnnotation(const ELEMENT_CHOICE_TYPE &choice)
Definition s_baltst_basicschemautil.h:551
BasicSchemaEnumerationElement EnumerationElement
Definition s_baltst_basicschemautil.h:231
BasicSchemaElement Element
Definition s_baltst_basicschemautil.h:230
static void removeAnnotations(ELEMENT_TYPE *element)
Remove all annotation sub-elements from the specified element.
Definition s_baltst_basicschemautil.h:557
BasicSchemaChoiceElement ChoiceElement
Definition s_baltst_basicschemautil.h:228
static void append(PARENT_TYPE *parent, const AnnotationElement &element)
Definition s_baltst_basicschemautil.h:487
BasicSchemaSequenceElement SequenceElement
Definition s_baltst_basicschemautil.h:233
BasicSchemaSimpleTypeElement SimpleTypeElement
Definition s_baltst_basicschemautil.h:234
BasicSchemaComplexTypeElement ComplexTypeElement
Definition s_baltst_basicschemautil.h:229
BasicSchemaAnnotationElement AnnotationElement
Definition s_baltst_basicschemautil.h:227
forward declaration
Definition s_baltst_basicschemautil.h:209
forward declaration
Definition s_baltst_basicschemautil.h:156
Definition s_baltst_basicschemautil.h:98
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:425
static void appendEnumeration(BasicSchemaRestrictionElement *parent, const bsl::string_view &value)
Definition s_baltst_basicschemautil.h:430
static bool areEqualUpToAnnotation(const BasicSchema &a, const BasicSchema &b)
Definition s_baltst_basicschemautil.h:438