// baljsn_encoder_testtypes.h        *DO NOT EDIT*         @generated -*-C++-*-
#ifndef INCLUDED_BALJSN_ENCODER_TESTTYPES
#define INCLUDED_BALJSN_ENCODER_TESTTYPES

#include <bsls_ident.h>
BSLS_IDENT_RCSID(baljsn_encoder_testtypes_h,"$Id$ $CSID$")
BSLS_IDENT_PRAGMA_ONCE

//@PURPOSE: Provide value-semantic attribute classes

#include <bslalg_typetraits.h>

#include <bdlat_attributeinfo.h>

#include <bdlat_enumeratorinfo.h>

#include <bdlat_selectioninfo.h>

#include <bdlat_typetraits.h>

#include <bdlat_valuetypefunctions.h>

#include <bslh_hash.h>
#include <bsls_objectbuffer.h>

#include <bslma_default.h>

#include <bsls_assert.h>

#include <bdlb_nullablevalue.h>

#include <bsl_string.h>

#include <bsl_vector.h>

#include <bsl_iosfwd.h>
#include <bsl_limits.h>

#include <bsl_ostream.h>
#include <bsl_string.h>

#include <bslma_allocator.h>

namespace BloombergLP {


namespace baljsn { class EncoderTestAddress; }
namespace baljsn { class EncoderTestChoiceWithAllCategoriesChoice; }
namespace baljsn { class EncoderTestChoiceWithAllCategoriesCustomizedType; }
namespace baljsn { class EncoderTestChoiceWithAllCategoriesSequence; }
namespace baljsn { class EncoderTestDegenerateChoice1Sequence; }
namespace baljsn { class EncoderTestSequenceWithAllCategoriesChoice; }
namespace baljsn { class EncoderTestSequenceWithAllCategoriesCustomizedType; }
namespace baljsn { class EncoderTestSequenceWithAllCategoriesSequence; }
namespace baljsn { class EncoderTestSequenceWithUntagged0; }
namespace baljsn { class EncoderTestSequenceWithUntagged10Sequence; }
namespace baljsn { class EncoderTestSequenceWithUntagged11Sequence; }
namespace baljsn { class EncoderTestSequenceWithUntagged11Sequence1; }
namespace baljsn { class EncoderTestSequenceWithUntagged12Sequence; }
namespace baljsn { class EncoderTestSequenceWithUntagged13Sequence; }
namespace baljsn { class EncoderTestSequenceWithUntagged14; }
namespace baljsn { class EncoderTestSequenceWithUntagged1Sequence; }
namespace baljsn { class EncoderTestSequenceWithUntagged2; }
namespace baljsn { class EncoderTestSequenceWithUntagged3Sequence; }
namespace baljsn { class EncoderTestSequenceWithUntagged3Sequence1; }
namespace baljsn { class EncoderTestSequenceWithUntagged4Sequence; }
namespace baljsn { class EncoderTestSequenceWithUntagged5Sequence; }
namespace baljsn { class EncoderTestSequenceWithUntagged6; }
namespace baljsn { class EncoderTestSequenceWithUntagged7Sequence; }
namespace baljsn { class EncoderTestSequenceWithUntagged7Sequence1; }
namespace baljsn { class EncoderTestSequenceWithUntagged7Sequence2; }
namespace baljsn { class EncoderTestSequenceWithUntagged8Sequence; }
namespace baljsn { class EncoderTestSequenceWithUntagged8Sequence1; }
namespace baljsn { class EncoderTestSequenceWithUntagged9Sequence; }
namespace baljsn { class EncoderTestSequenceWithUntagged9Sequence1; }
namespace baljsn { class EncoderTestChoiceWithAllCategories; }
namespace baljsn { class EncoderTestDegenerateChoice1; }
namespace baljsn { class EncoderTestEmployee; }
namespace baljsn { class EncoderTestSequenceWithAllCategories; }
namespace baljsn { class EncoderTestSequenceWithUntagged1; }
namespace baljsn { class EncoderTestSequenceWithUntagged10; }
namespace baljsn { class EncoderTestSequenceWithUntagged11; }
namespace baljsn { class EncoderTestSequenceWithUntagged12; }
namespace baljsn { class EncoderTestSequenceWithUntagged13; }
namespace baljsn { class EncoderTestSequenceWithUntagged3; }
namespace baljsn { class EncoderTestSequenceWithUntagged4; }
namespace baljsn { class EncoderTestSequenceWithUntagged5; }
namespace baljsn { class EncoderTestSequenceWithUntagged7; }
namespace baljsn { class EncoderTestSequenceWithUntagged8; }
namespace baljsn { class EncoderTestSequenceWithUntagged9; }
namespace baljsn {

                          // ========================
                          // class EncoderTestAddress
                          // ========================

class EncoderTestAddress {

    // INSTANCE DATA
    bsl::string  d_street;
    bsl::string  d_city;
    bsl::string  d_state;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_STREET = 0
      , ATTRIBUTE_ID_CITY   = 1
      , ATTRIBUTE_ID_STATE  = 2
    };

    enum {
        NUM_ATTRIBUTES = 3
    };

    enum {
        ATTRIBUTE_INDEX_STREET = 0
      , ATTRIBUTE_INDEX_CITY   = 1
      , ATTRIBUTE_INDEX_STATE  = 2
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    explicit EncoderTestAddress(bslma::Allocator *basicAllocator = 0);
        // Create an object of type 'EncoderTestAddress' having the default
        // value.  Use the optionally specified 'basicAllocator' to supply
        // memory.  If 'basicAllocator' is 0, the currently installed default
        // allocator is used.

    EncoderTestAddress(const EncoderTestAddress& original,
                       bslma::Allocator *basicAllocator = 0);
        // Create an object of type 'EncoderTestAddress' having the value of
        // the specified 'original' object.  Use the optionally specified
        // 'basicAllocator' to supply memory.  If 'basicAllocator' is 0, the
        // currently installed default allocator is used.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestAddress(EncoderTestAddress&& original) noexcept;
        // Create an object of type 'EncoderTestAddress' having the value of
        // the specified 'original' object.  After performing this action, the
        // 'original' object will be left in a valid, but unspecified state.

    EncoderTestAddress(EncoderTestAddress&& original,
                       bslma::Allocator *basicAllocator);
        // Create an object of type 'EncoderTestAddress' having the value of
        // the specified 'original' object.  After performing this action, the
        // 'original' object will be left in a valid, but unspecified state.
        // Use the optionally specified 'basicAllocator' to supply memory.  If
        // 'basicAllocator' is 0, the currently installed default allocator is
        // used.
#endif

    ~EncoderTestAddress();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestAddress& operator=(const EncoderTestAddress& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestAddress& operator=(EncoderTestAddress&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    bsl::string& street();
        // Return a reference to the modifiable "Street" attribute of this
        // object.

    bsl::string& city();
        // Return a reference to the modifiable "City" attribute of this
        // object.

    bsl::string& state();
        // Return a reference to the modifiable "State" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    const bsl::string& street() const;
        // Return a reference to the non-modifiable "Street" attribute of this
        // object.

    const bsl::string& city() const;
        // Return a reference to the non-modifiable "City" attribute of this
        // object.

    const bsl::string& state() const;
        // Return a reference to the non-modifiable "State" attribute of this
        // object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestAddress& lhs, const EncoderTestAddress& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestAddress& lhs, const EncoderTestAddress& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestAddress& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestAddress& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestAddress'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_ALLOCATOR_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestAddress)

namespace baljsn {

               // ==============================================
               // class EncoderTestChoiceWithAllCategoriesChoice
               // ==============================================

class EncoderTestChoiceWithAllCategoriesChoice {

    // INSTANCE DATA
    union {
        bsls::ObjectBuffer< int > d_selection0;
    };

    int                           d_selectionId;

  public:
    // TYPES

    enum {
        SELECTION_ID_UNDEFINED  = -1
      , SELECTION_ID_SELECTION0 = 0
    };

    enum {
        NUM_SELECTIONS = 1
    };

    enum {
        SELECTION_INDEX_SELECTION0 = 0
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_SelectionInfo SELECTION_INFO_ARRAY[];

    // CLASS METHODS
    static const bdlat_SelectionInfo *lookupSelectionInfo(int id);
        // Return selection information for the selection indicated by the
        // specified 'id' if the selection exists, and 0 otherwise.

    static const bdlat_SelectionInfo *lookupSelectionInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return selection information for the selection indicated by the
        // specified 'name' of the specified 'nameLength' if the selection
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestChoiceWithAllCategoriesChoice();
        // Create an object of type 'EncoderTestChoiceWithAllCategoriesChoice'
        // having the default value.

    EncoderTestChoiceWithAllCategoriesChoice(const EncoderTestChoiceWithAllCategoriesChoice& original);
        // Create an object of type 'EncoderTestChoiceWithAllCategoriesChoice'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestChoiceWithAllCategoriesChoice(EncoderTestChoiceWithAllCategoriesChoice&& original) noexcept;
        // Create an object of type 'EncoderTestChoiceWithAllCategoriesChoice'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestChoiceWithAllCategoriesChoice();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestChoiceWithAllCategoriesChoice& operator=(const EncoderTestChoiceWithAllCategoriesChoice& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestChoiceWithAllCategoriesChoice& operator=(EncoderTestChoiceWithAllCategoriesChoice&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon default
        // construction).

    int makeSelection(int selectionId);
        // Set the value of this object to be the default for the selection
        // indicated by the specified 'selectionId'.  Return 0 on success, and
        // non-zero value otherwise (i.e., the selection is not found).

    int makeSelection(const char *name, int nameLength);
        // Set the value of this object to be the default for the selection
        // indicated by the specified 'name' of the specified 'nameLength'.
        // Return 0 on success, and non-zero value otherwise (i.e., the
        // selection is not found).

    int& makeSelection0();
    int& makeSelection0(int value);
        // Set the value of this object to be a "Selection0" value.  Optionally
        // specify the 'value' of the "Selection0".  If 'value' is not
        // specified, the default "Selection0" value is used.

    template<class MANIPULATOR>
    int manipulateSelection(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' on the address of the modifiable
        // selection, supplying 'manipulator' with the corresponding selection
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if this object has a defined selection,
        // and -1 otherwise.

    int& selection0();
        // Return a reference to the modifiable "Selection0" selection of this
        // object if "Selection0" is the current selection.  The behavior is
        // undefined unless "Selection0" is the selection of this object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    int selectionId() const;
        // Return the id of the current selection if the selection is defined,
        // and -1 otherwise.

    template<class ACCESSOR>
    int accessSelection(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' on the non-modifiable selection,
        // supplying 'accessor' with the corresponding selection information
        // structure.  Return the value returned from the invocation of
        // 'accessor' if this object has a defined selection, and -1 otherwise.

    const int& selection0() const;
        // Return a reference to the non-modifiable "Selection0" selection of
        // this object if "Selection0" is the current selection.  The behavior
        // is undefined unless "Selection0" is the selection of this object.

    bool isSelection0Value() const;
        // Return 'true' if the value of this object is a "Selection0" value,
        // and return 'false' otherwise.

    bool isUndefinedValue() const;
        // Return 'true' if the value of this object is undefined, and 'false'
        // otherwise.

    const char *selectionName() const;
        // Return the symbolic name of the current selection of this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestChoiceWithAllCategoriesChoice& lhs, const EncoderTestChoiceWithAllCategoriesChoice& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' objects have the same
    // value, and 'false' otherwise.  Two 'EncoderTestChoiceWithAllCategoriesChoice' objects have the same
    // value if either the selections in both objects have the same ids and
    // the same values, or both selections are undefined.

inline
bool operator!=(const EncoderTestChoiceWithAllCategoriesChoice& lhs, const EncoderTestChoiceWithAllCategoriesChoice& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' objects do not have the
    // same values, as determined by 'operator==', and 'false' otherwise.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestChoiceWithAllCategoriesChoice& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestChoiceWithAllCategoriesChoice& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestChoiceWithAllCategoriesChoice'.

}  // close package namespace

// TRAITS

BDLAT_DECL_CHOICE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestChoiceWithAllCategoriesChoice)

namespace baljsn {

           // ======================================================
           // class EncoderTestChoiceWithAllCategoriesCustomizedType
           // ======================================================

class EncoderTestChoiceWithAllCategoriesCustomizedType {

    // INSTANCE DATA
    bsl::string d_value;

    // FRIENDS
    friend bool operator==(const EncoderTestChoiceWithAllCategoriesCustomizedType& lhs, const EncoderTestChoiceWithAllCategoriesCustomizedType& rhs);
    friend bool operator!=(const EncoderTestChoiceWithAllCategoriesCustomizedType& lhs, const EncoderTestChoiceWithAllCategoriesCustomizedType& rhs);

  public:
    // TYPES
    typedef bsl::string BaseType;

    // CONSTANTS
    static const char CLASS_NAME[];

    // CREATORS
    explicit EncoderTestChoiceWithAllCategoriesCustomizedType(bslma::Allocator *basicAllocator = 0);
        // Create an object of type
        // 'EncoderTestChoiceWithAllCategoriesCustomizedType' having the
        // default value.  Use the optionally specified 'basicAllocator' to
        // supply memory.  If 'basicAllocator' is 0, the currently installed
        // default allocator is used.

    EncoderTestChoiceWithAllCategoriesCustomizedType(const EncoderTestChoiceWithAllCategoriesCustomizedType& original,
                                                    bslma::Allocator *basicAllocator = 0);
        // Create an object of type 'EncoderTestChoiceWithAllCategoriesCustomizedType' having the value
        // of the specified 'original' object.  Use the optionally specified
        // 'basicAllocator' to supply memory.  If 'basicAllocator' is 0,
        // the currently installed default allocator is used.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestChoiceWithAllCategoriesCustomizedType(EncoderTestChoiceWithAllCategoriesCustomizedType&& original) = default;
        // Create an object of type
        // 'EncoderTestChoiceWithAllCategoriesCustomizedType' having the value
        // of the specified 'original' object.  After performing this action,
        // the 'original' object will be left in a valid, but unspecified
        // state.

    EncoderTestChoiceWithAllCategoriesCustomizedType(EncoderTestChoiceWithAllCategoriesCustomizedType&& original,
                                                    bslma::Allocator *basicAllocator);
        // Create an object of type
        // 'EncoderTestChoiceWithAllCategoriesCustomizedType' having the value
        // of the specified 'original' object.  After performing this action,
        // the 'original' object will be left in a valid, but unspecified
        // state.  Use the optionally specified 'basicAllocator' to supply
        // memory.  If 'basicAllocator' is 0, the currently installed default
        // allocator is used.
#endif

    explicit EncoderTestChoiceWithAllCategoriesCustomizedType(const bsl::string& value,
                                                             bslma::Allocator *basicAllocator = 0);
        // Create an object of type
        // 'EncoderTestChoiceWithAllCategoriesCustomizedType' having the
        // specified 'value'.  Use the optionally specified 'basicAllocator' to
        // supply memory.  If 'basicAllocator' is 0, the currently installed
        // default allocator is used.

    ~EncoderTestChoiceWithAllCategoriesCustomizedType();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestChoiceWithAllCategoriesCustomizedType& operator=(const EncoderTestChoiceWithAllCategoriesCustomizedType& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestChoiceWithAllCategoriesCustomizedType& operator=(EncoderTestChoiceWithAllCategoriesCustomizedType&& rhs) = default;
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    int fromString(const bsl::string& value);
        // Convert from the specified 'value' to this type.  Return 0 if
        // successful and non-zero otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    const bsl::string& toString() const;
        // Convert this value to 'bsl::string'.

    // PUBLIC CLASS METHODS
    static int checkRestrictions(const bsl::string& value);
        // Check if the specified 'value' satisfies the restrictions of this
        // class (i.e., "EncoderTestChoiceWithAllCategoriesCustomizedType").
        // Return 0 if successful (i.e., the restrictions are satisfied) and
        // non-zero otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestChoiceWithAllCategoriesCustomizedType& lhs, const EncoderTestChoiceWithAllCategoriesCustomizedType& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestChoiceWithAllCategoriesCustomizedType& lhs, const EncoderTestChoiceWithAllCategoriesCustomizedType& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestChoiceWithAllCategoriesCustomizedType& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestChoiceWithAllCategoriesCustomizedType& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestChoiceWithAllCategoriesCustomizedType'.

}  // close package namespace

// TRAITS

BDLAT_DECL_CUSTOMIZEDTYPE_WITH_ALLOCATOR_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestChoiceWithAllCategoriesCustomizedType)

namespace baljsn {

            // ===================================================
            // class EncoderTestChoiceWithAllCategoriesEnumeration
            // ===================================================

struct EncoderTestChoiceWithAllCategoriesEnumeration {

  public:
    // TYPES
    enum Value {
        A = 0
      , B = 1
    };

    enum {
        NUM_ENUMERATORS = 2
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_EnumeratorInfo ENUMERATOR_INFO_ARRAY[];

    // CLASS METHODS
    static const char *toString(Value value);
        // Return the string representation exactly matching the enumerator
        // name corresponding to the specified enumeration 'value'.

    static int fromString(Value        *result,
                          const char   *string,
                          int           stringLength);
        // Load into the specified 'result' the enumerator matching the
        // specified 'string' of the specified 'stringLength'.  Return 0 on
        // success, and a non-zero value with no effect on 'result' otherwise
        // (i.e., 'string' does not match any enumerator).

    static int fromString(Value              *result,
                          const bsl::string&  string);
        // Load into the specified 'result' the enumerator matching the
        // specified 'string'.  Return 0 on success, and a non-zero value with
        // no effect on 'result' otherwise (i.e., 'string' does not match any
        // enumerator).

    static int fromInt(Value *result, int number);
        // Load into the specified 'result' the enumerator matching the
        // specified 'number'.  Return 0 on success, and a non-zero value with
        // no effect on 'result' otherwise (i.e., 'number' does not match any
        // enumerator).

    static bsl::ostream& print(bsl::ostream& stream, Value value);
        // Write to the specified 'stream' the string representation of
        // the specified enumeration 'value'.  Return a reference to
        // the modifiable 'stream'.
};

// FREE OPERATORS
inline
bsl::ostream& operator<<(bsl::ostream& stream, EncoderTestChoiceWithAllCategoriesEnumeration::Value rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

}  // close package namespace

// TRAITS

BDLAT_DECL_ENUMERATION_TRAITS(baljsn::EncoderTestChoiceWithAllCategoriesEnumeration)


namespace baljsn {

              // ================================================
              // class EncoderTestChoiceWithAllCategoriesSequence
              // ================================================

class EncoderTestChoiceWithAllCategoriesSequence {

    // INSTANCE DATA
    int  d_attribute;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_ATTRIBUTE = 0
    };

    enum {
        NUM_ATTRIBUTES = 1
    };

    enum {
        ATTRIBUTE_INDEX_ATTRIBUTE = 0
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestChoiceWithAllCategoriesSequence();
        // Create an object of type
        // 'EncoderTestChoiceWithAllCategoriesSequence' having the default
        // value.

    EncoderTestChoiceWithAllCategoriesSequence(const EncoderTestChoiceWithAllCategoriesSequence& original);
        // Create an object of type
        // 'EncoderTestChoiceWithAllCategoriesSequence' having the value of the
        // specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestChoiceWithAllCategoriesSequence(EncoderTestChoiceWithAllCategoriesSequence&& original) = default;
        // Create an object of type
        // 'EncoderTestChoiceWithAllCategoriesSequence' having the value of the
        // specified 'original' object.  After performing this action, the
        // 'original' object will be left in a valid, but unspecified state.
#endif

    ~EncoderTestChoiceWithAllCategoriesSequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestChoiceWithAllCategoriesSequence& operator=(const EncoderTestChoiceWithAllCategoriesSequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestChoiceWithAllCategoriesSequence& operator=(EncoderTestChoiceWithAllCategoriesSequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    int& attribute();
        // Return a reference to the modifiable "Attribute" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    int attribute() const;
        // Return a reference to the non-modifiable "Attribute" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestChoiceWithAllCategoriesSequence& lhs, const EncoderTestChoiceWithAllCategoriesSequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestChoiceWithAllCategoriesSequence& lhs, const EncoderTestChoiceWithAllCategoriesSequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestChoiceWithAllCategoriesSequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestChoiceWithAllCategoriesSequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestChoiceWithAllCategoriesSequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestChoiceWithAllCategoriesSequence)

namespace baljsn {

                 // ==========================================
                 // class EncoderTestDegenerateChoice1Sequence
                 // ==========================================

class EncoderTestDegenerateChoice1Sequence {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestDegenerateChoice1Sequence();
        // Create an object of type 'EncoderTestDegenerateChoice1Sequence'
        // having the default value.

    EncoderTestDegenerateChoice1Sequence(const EncoderTestDegenerateChoice1Sequence& original);
        // Create an object of type 'EncoderTestDegenerateChoice1Sequence'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestDegenerateChoice1Sequence(EncoderTestDegenerateChoice1Sequence&& original) = default;
        // Create an object of type 'EncoderTestDegenerateChoice1Sequence'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestDegenerateChoice1Sequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestDegenerateChoice1Sequence& operator=(const EncoderTestDegenerateChoice1Sequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestDegenerateChoice1Sequence& operator=(EncoderTestDegenerateChoice1Sequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestDegenerateChoice1Sequence& lhs, const EncoderTestDegenerateChoice1Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestDegenerateChoice1Sequence& lhs, const EncoderTestDegenerateChoice1Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestDegenerateChoice1Sequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestDegenerateChoice1Sequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestDegenerateChoice1Sequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestDegenerateChoice1Sequence)

namespace baljsn {

              // ================================================
              // class EncoderTestSequenceWithAllCategoriesChoice
              // ================================================

class EncoderTestSequenceWithAllCategoriesChoice {

    // INSTANCE DATA
    union {
        bsls::ObjectBuffer< int > d_selection0;
    };

    int                           d_selectionId;

  public:
    // TYPES

    enum {
        SELECTION_ID_UNDEFINED  = -1
      , SELECTION_ID_SELECTION0 = 0
    };

    enum {
        NUM_SELECTIONS = 1
    };

    enum {
        SELECTION_INDEX_SELECTION0 = 0
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_SelectionInfo SELECTION_INFO_ARRAY[];

    // CLASS METHODS
    static const bdlat_SelectionInfo *lookupSelectionInfo(int id);
        // Return selection information for the selection indicated by the
        // specified 'id' if the selection exists, and 0 otherwise.

    static const bdlat_SelectionInfo *lookupSelectionInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return selection information for the selection indicated by the
        // specified 'name' of the specified 'nameLength' if the selection
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithAllCategoriesChoice();
        // Create an object of type
        // 'EncoderTestSequenceWithAllCategoriesChoice' having the default
        // value.

    EncoderTestSequenceWithAllCategoriesChoice(const EncoderTestSequenceWithAllCategoriesChoice& original);
        // Create an object of type
        // 'EncoderTestSequenceWithAllCategoriesChoice' having the value of the
        // specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithAllCategoriesChoice(EncoderTestSequenceWithAllCategoriesChoice&& original) noexcept;
        // Create an object of type
        // 'EncoderTestSequenceWithAllCategoriesChoice' having the value of the
        // specified 'original' object.  After performing this action, the
        // 'original' object will be left in a valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithAllCategoriesChoice();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithAllCategoriesChoice& operator=(const EncoderTestSequenceWithAllCategoriesChoice& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithAllCategoriesChoice& operator=(EncoderTestSequenceWithAllCategoriesChoice&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon default
        // construction).

    int makeSelection(int selectionId);
        // Set the value of this object to be the default for the selection
        // indicated by the specified 'selectionId'.  Return 0 on success, and
        // non-zero value otherwise (i.e., the selection is not found).

    int makeSelection(const char *name, int nameLength);
        // Set the value of this object to be the default for the selection
        // indicated by the specified 'name' of the specified 'nameLength'.
        // Return 0 on success, and non-zero value otherwise (i.e., the
        // selection is not found).

    int& makeSelection0();
    int& makeSelection0(int value);
        // Set the value of this object to be a "Selection0" value.  Optionally
        // specify the 'value' of the "Selection0".  If 'value' is not
        // specified, the default "Selection0" value is used.

    template<class MANIPULATOR>
    int manipulateSelection(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' on the address of the modifiable
        // selection, supplying 'manipulator' with the corresponding selection
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if this object has a defined selection,
        // and -1 otherwise.

    int& selection0();
        // Return a reference to the modifiable "Selection0" selection of this
        // object if "Selection0" is the current selection.  The behavior is
        // undefined unless "Selection0" is the selection of this object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    int selectionId() const;
        // Return the id of the current selection if the selection is defined,
        // and -1 otherwise.

    template<class ACCESSOR>
    int accessSelection(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' on the non-modifiable selection,
        // supplying 'accessor' with the corresponding selection information
        // structure.  Return the value returned from the invocation of
        // 'accessor' if this object has a defined selection, and -1 otherwise.

    const int& selection0() const;
        // Return a reference to the non-modifiable "Selection0" selection of
        // this object if "Selection0" is the current selection.  The behavior
        // is undefined unless "Selection0" is the selection of this object.

    bool isSelection0Value() const;
        // Return 'true' if the value of this object is a "Selection0" value,
        // and return 'false' otherwise.

    bool isUndefinedValue() const;
        // Return 'true' if the value of this object is undefined, and 'false'
        // otherwise.

    const char *selectionName() const;
        // Return the symbolic name of the current selection of this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithAllCategoriesChoice& lhs, const EncoderTestSequenceWithAllCategoriesChoice& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' objects have the same
    // value, and 'false' otherwise.  Two 'EncoderTestSequenceWithAllCategoriesChoice' objects have the same
    // value if either the selections in both objects have the same ids and
    // the same values, or both selections are undefined.

inline
bool operator!=(const EncoderTestSequenceWithAllCategoriesChoice& lhs, const EncoderTestSequenceWithAllCategoriesChoice& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' objects do not have the
    // same values, as determined by 'operator==', and 'false' otherwise.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithAllCategoriesChoice& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithAllCategoriesChoice& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithAllCategoriesChoice'.

}  // close package namespace

// TRAITS

BDLAT_DECL_CHOICE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithAllCategoriesChoice)

namespace baljsn {

          // ========================================================
          // class EncoderTestSequenceWithAllCategoriesCustomizedType
          // ========================================================

class EncoderTestSequenceWithAllCategoriesCustomizedType {

    // INSTANCE DATA
    bsl::string d_value;

    // FRIENDS
    friend bool operator==(const EncoderTestSequenceWithAllCategoriesCustomizedType& lhs, const EncoderTestSequenceWithAllCategoriesCustomizedType& rhs);
    friend bool operator!=(const EncoderTestSequenceWithAllCategoriesCustomizedType& lhs, const EncoderTestSequenceWithAllCategoriesCustomizedType& rhs);

  public:
    // TYPES
    typedef bsl::string BaseType;

    // CONSTANTS
    static const char CLASS_NAME[];

    // CREATORS
    explicit EncoderTestSequenceWithAllCategoriesCustomizedType(bslma::Allocator *basicAllocator = 0);
        // Create an object of type
        // 'EncoderTestSequenceWithAllCategoriesCustomizedType' having the
        // default value.  Use the optionally specified 'basicAllocator' to
        // supply memory.  If 'basicAllocator' is 0, the currently installed
        // default allocator is used.

    EncoderTestSequenceWithAllCategoriesCustomizedType(const EncoderTestSequenceWithAllCategoriesCustomizedType& original,
                                                      bslma::Allocator *basicAllocator = 0);
        // Create an object of type 'EncoderTestSequenceWithAllCategoriesCustomizedType' having the value
        // of the specified 'original' object.  Use the optionally specified
        // 'basicAllocator' to supply memory.  If 'basicAllocator' is 0,
        // the currently installed default allocator is used.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithAllCategoriesCustomizedType(EncoderTestSequenceWithAllCategoriesCustomizedType&& original) = default;
        // Create an object of type
        // 'EncoderTestSequenceWithAllCategoriesCustomizedType' having the
        // value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.

    EncoderTestSequenceWithAllCategoriesCustomizedType(EncoderTestSequenceWithAllCategoriesCustomizedType&& original,
                                                      bslma::Allocator *basicAllocator);
        // Create an object of type
        // 'EncoderTestSequenceWithAllCategoriesCustomizedType' having the
        // value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.  Use the optionally specified 'basicAllocator' to
        // supply memory.  If 'basicAllocator' is 0, the currently installed
        // default allocator is used.
#endif

    explicit EncoderTestSequenceWithAllCategoriesCustomizedType(const bsl::string& value,
                                                               bslma::Allocator *basicAllocator = 0);
        // Create an object of type
        // 'EncoderTestSequenceWithAllCategoriesCustomizedType' having the
        // specified 'value'.  Use the optionally specified 'basicAllocator' to
        // supply memory.  If 'basicAllocator' is 0, the currently installed
        // default allocator is used.

    ~EncoderTestSequenceWithAllCategoriesCustomizedType();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithAllCategoriesCustomizedType& operator=(const EncoderTestSequenceWithAllCategoriesCustomizedType& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithAllCategoriesCustomizedType& operator=(EncoderTestSequenceWithAllCategoriesCustomizedType&& rhs) = default;
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    int fromString(const bsl::string& value);
        // Convert from the specified 'value' to this type.  Return 0 if
        // successful and non-zero otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    const bsl::string& toString() const;
        // Convert this value to 'bsl::string'.

    // PUBLIC CLASS METHODS
    static int checkRestrictions(const bsl::string& value);
        // Check if the specified 'value' satisfies the restrictions of this
        // class (i.e., "EncoderTestSequenceWithAllCategoriesCustomizedType").
        // Return 0 if successful (i.e., the restrictions are satisfied) and
        // non-zero otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithAllCategoriesCustomizedType& lhs, const EncoderTestSequenceWithAllCategoriesCustomizedType& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithAllCategoriesCustomizedType& lhs, const EncoderTestSequenceWithAllCategoriesCustomizedType& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithAllCategoriesCustomizedType& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithAllCategoriesCustomizedType& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithAllCategoriesCustomizedType'.

}  // close package namespace

// TRAITS

BDLAT_DECL_CUSTOMIZEDTYPE_WITH_ALLOCATOR_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithAllCategoriesCustomizedType)

namespace baljsn {

           // =====================================================
           // class EncoderTestSequenceWithAllCategoriesEnumeration
           // =====================================================

struct EncoderTestSequenceWithAllCategoriesEnumeration {

  public:
    // TYPES
    enum Value {
        A = 0
      , B = 1
    };

    enum {
        NUM_ENUMERATORS = 2
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_EnumeratorInfo ENUMERATOR_INFO_ARRAY[];

    // CLASS METHODS
    static const char *toString(Value value);
        // Return the string representation exactly matching the enumerator
        // name corresponding to the specified enumeration 'value'.

    static int fromString(Value        *result,
                          const char   *string,
                          int           stringLength);
        // Load into the specified 'result' the enumerator matching the
        // specified 'string' of the specified 'stringLength'.  Return 0 on
        // success, and a non-zero value with no effect on 'result' otherwise
        // (i.e., 'string' does not match any enumerator).

    static int fromString(Value              *result,
                          const bsl::string&  string);
        // Load into the specified 'result' the enumerator matching the
        // specified 'string'.  Return 0 on success, and a non-zero value with
        // no effect on 'result' otherwise (i.e., 'string' does not match any
        // enumerator).

    static int fromInt(Value *result, int number);
        // Load into the specified 'result' the enumerator matching the
        // specified 'number'.  Return 0 on success, and a non-zero value with
        // no effect on 'result' otherwise (i.e., 'number' does not match any
        // enumerator).

    static bsl::ostream& print(bsl::ostream& stream, Value value);
        // Write to the specified 'stream' the string representation of
        // the specified enumeration 'value'.  Return a reference to
        // the modifiable 'stream'.
};

// FREE OPERATORS
inline
bsl::ostream& operator<<(bsl::ostream& stream, EncoderTestSequenceWithAllCategoriesEnumeration::Value rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

}  // close package namespace

// TRAITS

BDLAT_DECL_ENUMERATION_TRAITS(baljsn::EncoderTestSequenceWithAllCategoriesEnumeration)


namespace baljsn {

             // ==================================================
             // class EncoderTestSequenceWithAllCategoriesSequence
             // ==================================================

class EncoderTestSequenceWithAllCategoriesSequence {

    // INSTANCE DATA
    int  d_attribute;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_ATTRIBUTE = 0
    };

    enum {
        NUM_ATTRIBUTES = 1
    };

    enum {
        ATTRIBUTE_INDEX_ATTRIBUTE = 0
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithAllCategoriesSequence();
        // Create an object of type
        // 'EncoderTestSequenceWithAllCategoriesSequence' having the default
        // value.

    EncoderTestSequenceWithAllCategoriesSequence(const EncoderTestSequenceWithAllCategoriesSequence& original);
        // Create an object of type
        // 'EncoderTestSequenceWithAllCategoriesSequence' having the value of
        // the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithAllCategoriesSequence(EncoderTestSequenceWithAllCategoriesSequence&& original) = default;
        // Create an object of type
        // 'EncoderTestSequenceWithAllCategoriesSequence' having the value of
        // the specified 'original' object.  After performing this action, the
        // 'original' object will be left in a valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithAllCategoriesSequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithAllCategoriesSequence& operator=(const EncoderTestSequenceWithAllCategoriesSequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithAllCategoriesSequence& operator=(EncoderTestSequenceWithAllCategoriesSequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    int& attribute();
        // Return a reference to the modifiable "Attribute" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    int attribute() const;
        // Return a reference to the non-modifiable "Attribute" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithAllCategoriesSequence& lhs, const EncoderTestSequenceWithAllCategoriesSequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithAllCategoriesSequence& lhs, const EncoderTestSequenceWithAllCategoriesSequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithAllCategoriesSequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithAllCategoriesSequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithAllCategoriesSequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithAllCategoriesSequence)

namespace baljsn {

                   // ======================================
                   // class EncoderTestSequenceWithUntagged0
                   // ======================================

class EncoderTestSequenceWithUntagged0 {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged0();
        // Create an object of type 'EncoderTestSequenceWithUntagged0' having
        // the default value.

    EncoderTestSequenceWithUntagged0(const EncoderTestSequenceWithUntagged0& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged0' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged0(EncoderTestSequenceWithUntagged0&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged0' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged0();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged0& operator=(const EncoderTestSequenceWithUntagged0& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged0& operator=(EncoderTestSequenceWithUntagged0&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged0& lhs, const EncoderTestSequenceWithUntagged0& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged0& lhs, const EncoderTestSequenceWithUntagged0& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged0& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged0& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged0'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged0)

namespace baljsn {

              // ===============================================
              // class EncoderTestSequenceWithUntagged10Sequence
              // ===============================================

class EncoderTestSequenceWithUntagged10Sequence {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged10Sequence();
        // Create an object of type 'EncoderTestSequenceWithUntagged10Sequence'
        // having the default value.

    EncoderTestSequenceWithUntagged10Sequence(const EncoderTestSequenceWithUntagged10Sequence& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged10Sequence'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged10Sequence(EncoderTestSequenceWithUntagged10Sequence&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged10Sequence'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged10Sequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged10Sequence& operator=(const EncoderTestSequenceWithUntagged10Sequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged10Sequence& operator=(EncoderTestSequenceWithUntagged10Sequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged10Sequence& lhs, const EncoderTestSequenceWithUntagged10Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged10Sequence& lhs, const EncoderTestSequenceWithUntagged10Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged10Sequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged10Sequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged10Sequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged10Sequence)

namespace baljsn {

              // ===============================================
              // class EncoderTestSequenceWithUntagged11Sequence
              // ===============================================

class EncoderTestSequenceWithUntagged11Sequence {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged11Sequence();
        // Create an object of type 'EncoderTestSequenceWithUntagged11Sequence'
        // having the default value.

    EncoderTestSequenceWithUntagged11Sequence(const EncoderTestSequenceWithUntagged11Sequence& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged11Sequence'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged11Sequence(EncoderTestSequenceWithUntagged11Sequence&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged11Sequence'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged11Sequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged11Sequence& operator=(const EncoderTestSequenceWithUntagged11Sequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged11Sequence& operator=(EncoderTestSequenceWithUntagged11Sequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged11Sequence& lhs, const EncoderTestSequenceWithUntagged11Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged11Sequence& lhs, const EncoderTestSequenceWithUntagged11Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged11Sequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged11Sequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged11Sequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged11Sequence)

namespace baljsn {

              // ================================================
              // class EncoderTestSequenceWithUntagged11Sequence1
              // ================================================

class EncoderTestSequenceWithUntagged11Sequence1 {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged11Sequence1();
        // Create an object of type
        // 'EncoderTestSequenceWithUntagged11Sequence1' having the default
        // value.

    EncoderTestSequenceWithUntagged11Sequence1(const EncoderTestSequenceWithUntagged11Sequence1& original);
        // Create an object of type
        // 'EncoderTestSequenceWithUntagged11Sequence1' having the value of the
        // specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged11Sequence1(EncoderTestSequenceWithUntagged11Sequence1&& original) = default;
        // Create an object of type
        // 'EncoderTestSequenceWithUntagged11Sequence1' having the value of the
        // specified 'original' object.  After performing this action, the
        // 'original' object will be left in a valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged11Sequence1();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged11Sequence1& operator=(const EncoderTestSequenceWithUntagged11Sequence1& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged11Sequence1& operator=(EncoderTestSequenceWithUntagged11Sequence1&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged11Sequence1& lhs, const EncoderTestSequenceWithUntagged11Sequence1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged11Sequence1& lhs, const EncoderTestSequenceWithUntagged11Sequence1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged11Sequence1& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged11Sequence1& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged11Sequence1'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged11Sequence1)

namespace baljsn {

              // ===============================================
              // class EncoderTestSequenceWithUntagged12Sequence
              // ===============================================

class EncoderTestSequenceWithUntagged12Sequence {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged12Sequence();
        // Create an object of type 'EncoderTestSequenceWithUntagged12Sequence'
        // having the default value.

    EncoderTestSequenceWithUntagged12Sequence(const EncoderTestSequenceWithUntagged12Sequence& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged12Sequence'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged12Sequence(EncoderTestSequenceWithUntagged12Sequence&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged12Sequence'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged12Sequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged12Sequence& operator=(const EncoderTestSequenceWithUntagged12Sequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged12Sequence& operator=(EncoderTestSequenceWithUntagged12Sequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged12Sequence& lhs, const EncoderTestSequenceWithUntagged12Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged12Sequence& lhs, const EncoderTestSequenceWithUntagged12Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged12Sequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged12Sequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged12Sequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged12Sequence)

namespace baljsn {

              // ===============================================
              // class EncoderTestSequenceWithUntagged13Sequence
              // ===============================================

class EncoderTestSequenceWithUntagged13Sequence {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged13Sequence();
        // Create an object of type 'EncoderTestSequenceWithUntagged13Sequence'
        // having the default value.

    EncoderTestSequenceWithUntagged13Sequence(const EncoderTestSequenceWithUntagged13Sequence& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged13Sequence'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged13Sequence(EncoderTestSequenceWithUntagged13Sequence&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged13Sequence'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged13Sequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged13Sequence& operator=(const EncoderTestSequenceWithUntagged13Sequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged13Sequence& operator=(EncoderTestSequenceWithUntagged13Sequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged13Sequence& lhs, const EncoderTestSequenceWithUntagged13Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged13Sequence& lhs, const EncoderTestSequenceWithUntagged13Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged13Sequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged13Sequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged13Sequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged13Sequence)

namespace baljsn {

                  // =======================================
                  // class EncoderTestSequenceWithUntagged14
                  // =======================================

class EncoderTestSequenceWithUntagged14 {

    // INSTANCE DATA
    int  d_attribute0;
    int  d_attribute1;
    int  d_attribute2;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_ATTRIBUTE0 = 0
      , ATTRIBUTE_ID_ATTRIBUTE1 = 1
      , ATTRIBUTE_ID_ATTRIBUTE2 = 2
    };

    enum {
        NUM_ATTRIBUTES = 3
    };

    enum {
        ATTRIBUTE_INDEX_ATTRIBUTE0 = 0
      , ATTRIBUTE_INDEX_ATTRIBUTE1 = 1
      , ATTRIBUTE_INDEX_ATTRIBUTE2 = 2
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged14();
        // Create an object of type 'EncoderTestSequenceWithUntagged14' having
        // the default value.

    EncoderTestSequenceWithUntagged14(const EncoderTestSequenceWithUntagged14& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged14' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged14(EncoderTestSequenceWithUntagged14&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged14' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged14();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged14& operator=(const EncoderTestSequenceWithUntagged14& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged14& operator=(EncoderTestSequenceWithUntagged14&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    int& attribute0();
        // Return a reference to the modifiable "Attribute0" attribute of this
        // object.

    int& attribute1();
        // Return a reference to the modifiable "Attribute1" attribute of this
        // object.

    int& attribute2();
        // Return a reference to the modifiable "Attribute2" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    int attribute0() const;
        // Return a reference to the non-modifiable "Attribute0" attribute of
        // this object.

    int attribute1() const;
        // Return a reference to the non-modifiable "Attribute1" attribute of
        // this object.

    int attribute2() const;
        // Return a reference to the non-modifiable "Attribute2" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged14& lhs, const EncoderTestSequenceWithUntagged14& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged14& lhs, const EncoderTestSequenceWithUntagged14& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged14& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged14& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged14'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged14)

namespace baljsn {

               // ==============================================
               // class EncoderTestSequenceWithUntagged1Sequence
               // ==============================================

class EncoderTestSequenceWithUntagged1Sequence {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged1Sequence();
        // Create an object of type 'EncoderTestSequenceWithUntagged1Sequence'
        // having the default value.

    EncoderTestSequenceWithUntagged1Sequence(const EncoderTestSequenceWithUntagged1Sequence& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged1Sequence'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged1Sequence(EncoderTestSequenceWithUntagged1Sequence&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged1Sequence'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged1Sequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged1Sequence& operator=(const EncoderTestSequenceWithUntagged1Sequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged1Sequence& operator=(EncoderTestSequenceWithUntagged1Sequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged1Sequence& lhs, const EncoderTestSequenceWithUntagged1Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged1Sequence& lhs, const EncoderTestSequenceWithUntagged1Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged1Sequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged1Sequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged1Sequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged1Sequence)

namespace baljsn {

                   // ======================================
                   // class EncoderTestSequenceWithUntagged2
                   // ======================================

class EncoderTestSequenceWithUntagged2 {

    // INSTANCE DATA
    int  d_attribute0;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_ATTRIBUTE0 = 0
    };

    enum {
        NUM_ATTRIBUTES = 1
    };

    enum {
        ATTRIBUTE_INDEX_ATTRIBUTE0 = 0
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged2();
        // Create an object of type 'EncoderTestSequenceWithUntagged2' having
        // the default value.

    EncoderTestSequenceWithUntagged2(const EncoderTestSequenceWithUntagged2& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged2' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged2(EncoderTestSequenceWithUntagged2&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged2' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged2();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged2& operator=(const EncoderTestSequenceWithUntagged2& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged2& operator=(EncoderTestSequenceWithUntagged2&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    int& attribute0();
        // Return a reference to the modifiable "Attribute0" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    int attribute0() const;
        // Return a reference to the non-modifiable "Attribute0" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged2& lhs, const EncoderTestSequenceWithUntagged2& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged2& lhs, const EncoderTestSequenceWithUntagged2& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged2& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged2& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged2'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged2)

namespace baljsn {

               // ==============================================
               // class EncoderTestSequenceWithUntagged3Sequence
               // ==============================================

class EncoderTestSequenceWithUntagged3Sequence {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged3Sequence();
        // Create an object of type 'EncoderTestSequenceWithUntagged3Sequence'
        // having the default value.

    EncoderTestSequenceWithUntagged3Sequence(const EncoderTestSequenceWithUntagged3Sequence& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged3Sequence'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged3Sequence(EncoderTestSequenceWithUntagged3Sequence&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged3Sequence'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged3Sequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged3Sequence& operator=(const EncoderTestSequenceWithUntagged3Sequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged3Sequence& operator=(EncoderTestSequenceWithUntagged3Sequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged3Sequence& lhs, const EncoderTestSequenceWithUntagged3Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged3Sequence& lhs, const EncoderTestSequenceWithUntagged3Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged3Sequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged3Sequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged3Sequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged3Sequence)

namespace baljsn {

              // ===============================================
              // class EncoderTestSequenceWithUntagged3Sequence1
              // ===============================================

class EncoderTestSequenceWithUntagged3Sequence1 {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged3Sequence1();
        // Create an object of type 'EncoderTestSequenceWithUntagged3Sequence1'
        // having the default value.

    EncoderTestSequenceWithUntagged3Sequence1(const EncoderTestSequenceWithUntagged3Sequence1& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged3Sequence1'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged3Sequence1(EncoderTestSequenceWithUntagged3Sequence1&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged3Sequence1'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged3Sequence1();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged3Sequence1& operator=(const EncoderTestSequenceWithUntagged3Sequence1& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged3Sequence1& operator=(EncoderTestSequenceWithUntagged3Sequence1&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged3Sequence1& lhs, const EncoderTestSequenceWithUntagged3Sequence1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged3Sequence1& lhs, const EncoderTestSequenceWithUntagged3Sequence1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged3Sequence1& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged3Sequence1& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged3Sequence1'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged3Sequence1)

namespace baljsn {

               // ==============================================
               // class EncoderTestSequenceWithUntagged4Sequence
               // ==============================================

class EncoderTestSequenceWithUntagged4Sequence {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged4Sequence();
        // Create an object of type 'EncoderTestSequenceWithUntagged4Sequence'
        // having the default value.

    EncoderTestSequenceWithUntagged4Sequence(const EncoderTestSequenceWithUntagged4Sequence& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged4Sequence'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged4Sequence(EncoderTestSequenceWithUntagged4Sequence&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged4Sequence'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged4Sequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged4Sequence& operator=(const EncoderTestSequenceWithUntagged4Sequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged4Sequence& operator=(EncoderTestSequenceWithUntagged4Sequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged4Sequence& lhs, const EncoderTestSequenceWithUntagged4Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged4Sequence& lhs, const EncoderTestSequenceWithUntagged4Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged4Sequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged4Sequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged4Sequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged4Sequence)

namespace baljsn {

               // ==============================================
               // class EncoderTestSequenceWithUntagged5Sequence
               // ==============================================

class EncoderTestSequenceWithUntagged5Sequence {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged5Sequence();
        // Create an object of type 'EncoderTestSequenceWithUntagged5Sequence'
        // having the default value.

    EncoderTestSequenceWithUntagged5Sequence(const EncoderTestSequenceWithUntagged5Sequence& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged5Sequence'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged5Sequence(EncoderTestSequenceWithUntagged5Sequence&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged5Sequence'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged5Sequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged5Sequence& operator=(const EncoderTestSequenceWithUntagged5Sequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged5Sequence& operator=(EncoderTestSequenceWithUntagged5Sequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged5Sequence& lhs, const EncoderTestSequenceWithUntagged5Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged5Sequence& lhs, const EncoderTestSequenceWithUntagged5Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged5Sequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged5Sequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged5Sequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged5Sequence)

namespace baljsn {

                   // ======================================
                   // class EncoderTestSequenceWithUntagged6
                   // ======================================

class EncoderTestSequenceWithUntagged6 {

    // INSTANCE DATA
    int  d_attribute0;
    int  d_attribute1;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_ATTRIBUTE0 = 0
      , ATTRIBUTE_ID_ATTRIBUTE1 = 1
    };

    enum {
        NUM_ATTRIBUTES = 2
    };

    enum {
        ATTRIBUTE_INDEX_ATTRIBUTE0 = 0
      , ATTRIBUTE_INDEX_ATTRIBUTE1 = 1
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged6();
        // Create an object of type 'EncoderTestSequenceWithUntagged6' having
        // the default value.

    EncoderTestSequenceWithUntagged6(const EncoderTestSequenceWithUntagged6& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged6' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged6(EncoderTestSequenceWithUntagged6&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged6' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged6();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged6& operator=(const EncoderTestSequenceWithUntagged6& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged6& operator=(EncoderTestSequenceWithUntagged6&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    int& attribute0();
        // Return a reference to the modifiable "Attribute0" attribute of this
        // object.

    int& attribute1();
        // Return a reference to the modifiable "Attribute1" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    int attribute0() const;
        // Return a reference to the non-modifiable "Attribute0" attribute of
        // this object.

    int attribute1() const;
        // Return a reference to the non-modifiable "Attribute1" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged6& lhs, const EncoderTestSequenceWithUntagged6& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged6& lhs, const EncoderTestSequenceWithUntagged6& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged6& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged6& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged6'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged6)

namespace baljsn {

               // ==============================================
               // class EncoderTestSequenceWithUntagged7Sequence
               // ==============================================

class EncoderTestSequenceWithUntagged7Sequence {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged7Sequence();
        // Create an object of type 'EncoderTestSequenceWithUntagged7Sequence'
        // having the default value.

    EncoderTestSequenceWithUntagged7Sequence(const EncoderTestSequenceWithUntagged7Sequence& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged7Sequence'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged7Sequence(EncoderTestSequenceWithUntagged7Sequence&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged7Sequence'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged7Sequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged7Sequence& operator=(const EncoderTestSequenceWithUntagged7Sequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged7Sequence& operator=(EncoderTestSequenceWithUntagged7Sequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged7Sequence& lhs, const EncoderTestSequenceWithUntagged7Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged7Sequence& lhs, const EncoderTestSequenceWithUntagged7Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged7Sequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged7Sequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged7Sequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged7Sequence)

namespace baljsn {

              // ===============================================
              // class EncoderTestSequenceWithUntagged7Sequence1
              // ===============================================

class EncoderTestSequenceWithUntagged7Sequence1 {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged7Sequence1();
        // Create an object of type 'EncoderTestSequenceWithUntagged7Sequence1'
        // having the default value.

    EncoderTestSequenceWithUntagged7Sequence1(const EncoderTestSequenceWithUntagged7Sequence1& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged7Sequence1'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged7Sequence1(EncoderTestSequenceWithUntagged7Sequence1&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged7Sequence1'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged7Sequence1();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged7Sequence1& operator=(const EncoderTestSequenceWithUntagged7Sequence1& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged7Sequence1& operator=(EncoderTestSequenceWithUntagged7Sequence1&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged7Sequence1& lhs, const EncoderTestSequenceWithUntagged7Sequence1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged7Sequence1& lhs, const EncoderTestSequenceWithUntagged7Sequence1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged7Sequence1& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged7Sequence1& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged7Sequence1'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged7Sequence1)

namespace baljsn {

              // ===============================================
              // class EncoderTestSequenceWithUntagged7Sequence2
              // ===============================================

class EncoderTestSequenceWithUntagged7Sequence2 {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged7Sequence2();
        // Create an object of type 'EncoderTestSequenceWithUntagged7Sequence2'
        // having the default value.

    EncoderTestSequenceWithUntagged7Sequence2(const EncoderTestSequenceWithUntagged7Sequence2& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged7Sequence2'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged7Sequence2(EncoderTestSequenceWithUntagged7Sequence2&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged7Sequence2'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged7Sequence2();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged7Sequence2& operator=(const EncoderTestSequenceWithUntagged7Sequence2& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged7Sequence2& operator=(EncoderTestSequenceWithUntagged7Sequence2&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged7Sequence2& lhs, const EncoderTestSequenceWithUntagged7Sequence2& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged7Sequence2& lhs, const EncoderTestSequenceWithUntagged7Sequence2& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged7Sequence2& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged7Sequence2& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged7Sequence2'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged7Sequence2)

namespace baljsn {

               // ==============================================
               // class EncoderTestSequenceWithUntagged8Sequence
               // ==============================================

class EncoderTestSequenceWithUntagged8Sequence {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged8Sequence();
        // Create an object of type 'EncoderTestSequenceWithUntagged8Sequence'
        // having the default value.

    EncoderTestSequenceWithUntagged8Sequence(const EncoderTestSequenceWithUntagged8Sequence& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged8Sequence'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged8Sequence(EncoderTestSequenceWithUntagged8Sequence&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged8Sequence'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged8Sequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged8Sequence& operator=(const EncoderTestSequenceWithUntagged8Sequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged8Sequence& operator=(EncoderTestSequenceWithUntagged8Sequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged8Sequence& lhs, const EncoderTestSequenceWithUntagged8Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged8Sequence& lhs, const EncoderTestSequenceWithUntagged8Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged8Sequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged8Sequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged8Sequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged8Sequence)

namespace baljsn {

              // ===============================================
              // class EncoderTestSequenceWithUntagged8Sequence1
              // ===============================================

class EncoderTestSequenceWithUntagged8Sequence1 {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged8Sequence1();
        // Create an object of type 'EncoderTestSequenceWithUntagged8Sequence1'
        // having the default value.

    EncoderTestSequenceWithUntagged8Sequence1(const EncoderTestSequenceWithUntagged8Sequence1& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged8Sequence1'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged8Sequence1(EncoderTestSequenceWithUntagged8Sequence1&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged8Sequence1'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged8Sequence1();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged8Sequence1& operator=(const EncoderTestSequenceWithUntagged8Sequence1& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged8Sequence1& operator=(EncoderTestSequenceWithUntagged8Sequence1&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged8Sequence1& lhs, const EncoderTestSequenceWithUntagged8Sequence1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged8Sequence1& lhs, const EncoderTestSequenceWithUntagged8Sequence1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged8Sequence1& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged8Sequence1& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged8Sequence1'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged8Sequence1)

namespace baljsn {

               // ==============================================
               // class EncoderTestSequenceWithUntagged9Sequence
               // ==============================================

class EncoderTestSequenceWithUntagged9Sequence {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged9Sequence();
        // Create an object of type 'EncoderTestSequenceWithUntagged9Sequence'
        // having the default value.

    EncoderTestSequenceWithUntagged9Sequence(const EncoderTestSequenceWithUntagged9Sequence& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged9Sequence'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged9Sequence(EncoderTestSequenceWithUntagged9Sequence&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged9Sequence'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged9Sequence();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged9Sequence& operator=(const EncoderTestSequenceWithUntagged9Sequence& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged9Sequence& operator=(EncoderTestSequenceWithUntagged9Sequence&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged9Sequence& lhs, const EncoderTestSequenceWithUntagged9Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged9Sequence& lhs, const EncoderTestSequenceWithUntagged9Sequence& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged9Sequence& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged9Sequence& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged9Sequence'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged9Sequence)

namespace baljsn {

              // ===============================================
              // class EncoderTestSequenceWithUntagged9Sequence1
              // ===============================================

class EncoderTestSequenceWithUntagged9Sequence1 {

    // INSTANCE DATA

  public:
    // TYPES
    enum {
        NUM_ATTRIBUTES = 0
    };


    // CONSTANTS
    static const char CLASS_NAME[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged9Sequence1();
        // Create an object of type 'EncoderTestSequenceWithUntagged9Sequence1'
        // having the default value.

    EncoderTestSequenceWithUntagged9Sequence1(const EncoderTestSequenceWithUntagged9Sequence1& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged9Sequence1'
        // having the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged9Sequence1(EncoderTestSequenceWithUntagged9Sequence1&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged9Sequence1'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged9Sequence1();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged9Sequence1& operator=(const EncoderTestSequenceWithUntagged9Sequence1& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged9Sequence1& operator=(EncoderTestSequenceWithUntagged9Sequence1&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged9Sequence1& lhs, const EncoderTestSequenceWithUntagged9Sequence1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged9Sequence1& lhs, const EncoderTestSequenceWithUntagged9Sequence1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged9Sequence1& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged9Sequence1& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged9Sequence1'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged9Sequence1)

namespace baljsn {

                  // ========================================
                  // class EncoderTestChoiceWithAllCategories
                  // ========================================

class EncoderTestChoiceWithAllCategories {

    // INSTANCE DATA
    union {
        bsls::ObjectBuffer< bsl::vector<char> >                                    d_charArray;
        bsls::ObjectBuffer< EncoderTestChoiceWithAllCategoriesChoice >             d_choice;
        bsls::ObjectBuffer< EncoderTestChoiceWithAllCategoriesCustomizedType >     d_customizedType;
        bsls::ObjectBuffer< EncoderTestChoiceWithAllCategoriesEnumeration::Value > d_enumeration;
        bsls::ObjectBuffer< EncoderTestChoiceWithAllCategoriesSequence >           d_sequence;
        bsls::ObjectBuffer< int >                                                  d_simple;
    };

    int                                                                            d_selectionId;
    bslma::Allocator                                                              *d_allocator_p;

  public:
    // TYPES

    enum {
        SELECTION_ID_UNDEFINED       = -1
      , SELECTION_ID_CHAR_ARRAY      = 0
      , SELECTION_ID_CHOICE          = 1
      , SELECTION_ID_CUSTOMIZED_TYPE = 2
      , SELECTION_ID_ENUMERATION     = 3
      , SELECTION_ID_SEQUENCE        = 4
      , SELECTION_ID_SIMPLE          = 5
    };

    enum {
        NUM_SELECTIONS = 6
    };

    enum {
        SELECTION_INDEX_CHAR_ARRAY      = 0
      , SELECTION_INDEX_CHOICE          = 1
      , SELECTION_INDEX_CUSTOMIZED_TYPE = 2
      , SELECTION_INDEX_ENUMERATION     = 3
      , SELECTION_INDEX_SEQUENCE        = 4
      , SELECTION_INDEX_SIMPLE          = 5
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_SelectionInfo SELECTION_INFO_ARRAY[];

    // CLASS METHODS
    static const bdlat_SelectionInfo *lookupSelectionInfo(int id);
        // Return selection information for the selection indicated by the
        // specified 'id' if the selection exists, and 0 otherwise.

    static const bdlat_SelectionInfo *lookupSelectionInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return selection information for the selection indicated by the
        // specified 'name' of the specified 'nameLength' if the selection
        // exists, and 0 otherwise.

    // CREATORS
    explicit EncoderTestChoiceWithAllCategories(bslma::Allocator *basicAllocator = 0);
        // Create an object of type 'EncoderTestChoiceWithAllCategories' having
        // the default value.  Use the optionally specified 'basicAllocator' to
        // supply memory.  If 'basicAllocator' is 0, the currently installed
        // default allocator is used.

    EncoderTestChoiceWithAllCategories(const EncoderTestChoiceWithAllCategories& original,
                                      bslma::Allocator *basicAllocator = 0);
        // Create an object of type 'EncoderTestChoiceWithAllCategories' having
        // the value of the specified 'original' object.  Use the optionally
        // specified 'basicAllocator' to supply memory.  If 'basicAllocator' is
        // 0, the currently installed default allocator is used.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestChoiceWithAllCategories(EncoderTestChoiceWithAllCategories&& original) noexcept;
        // Create an object of type 'EncoderTestChoiceWithAllCategories' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.

    EncoderTestChoiceWithAllCategories(EncoderTestChoiceWithAllCategories&& original,
                                      bslma::Allocator *basicAllocator);
        // Create an object of type 'EncoderTestChoiceWithAllCategories' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.  Use the optionally specified 'basicAllocator' to
        // supply memory.  If 'basicAllocator' is 0, the currently installed
        // default allocator is used.
#endif

    ~EncoderTestChoiceWithAllCategories();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestChoiceWithAllCategories& operator=(const EncoderTestChoiceWithAllCategories& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestChoiceWithAllCategories& operator=(EncoderTestChoiceWithAllCategories&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon default
        // construction).

    int makeSelection(int selectionId);
        // Set the value of this object to be the default for the selection
        // indicated by the specified 'selectionId'.  Return 0 on success, and
        // non-zero value otherwise (i.e., the selection is not found).

    int makeSelection(const char *name, int nameLength);
        // Set the value of this object to be the default for the selection
        // indicated by the specified 'name' of the specified 'nameLength'.
        // Return 0 on success, and non-zero value otherwise (i.e., the
        // selection is not found).

    bsl::vector<char>& makeCharArray();
    bsl::vector<char>& makeCharArray(const bsl::vector<char>& value);
#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    bsl::vector<char>& makeCharArray(bsl::vector<char>&& value);
#endif
        // Set the value of this object to be a "CharArray" value.  Optionally
        // specify the 'value' of the "CharArray".  If 'value' is not
        // specified, the default "CharArray" value is used.

    EncoderTestChoiceWithAllCategoriesChoice& makeChoice();
    EncoderTestChoiceWithAllCategoriesChoice& makeChoice(const EncoderTestChoiceWithAllCategoriesChoice& value);
#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestChoiceWithAllCategoriesChoice& makeChoice(EncoderTestChoiceWithAllCategoriesChoice&& value);
#endif
        // Set the value of this object to be a "Choice" value.  Optionally
        // specify the 'value' of the "Choice".  If 'value' is not specified,
        // the default "Choice" value is used.

    EncoderTestChoiceWithAllCategoriesCustomizedType& makeCustomizedType();
    EncoderTestChoiceWithAllCategoriesCustomizedType& makeCustomizedType(const EncoderTestChoiceWithAllCategoriesCustomizedType& value);
#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestChoiceWithAllCategoriesCustomizedType& makeCustomizedType(EncoderTestChoiceWithAllCategoriesCustomizedType&& value);
#endif
        // Set the value of this object to be a "CustomizedType" value.
        // Optionally specify the 'value' of the "CustomizedType".  If 'value'
        // is not specified, the default "CustomizedType" value is used.

    EncoderTestChoiceWithAllCategoriesEnumeration::Value& makeEnumeration();
    EncoderTestChoiceWithAllCategoriesEnumeration::Value& makeEnumeration(EncoderTestChoiceWithAllCategoriesEnumeration::Value value);
        // Set the value of this object to be a "Enumeration" value.
        // Optionally specify the 'value' of the "Enumeration".  If 'value' is
        // not specified, the default "Enumeration" value is used.

    EncoderTestChoiceWithAllCategoriesSequence& makeSequence();
    EncoderTestChoiceWithAllCategoriesSequence& makeSequence(const EncoderTestChoiceWithAllCategoriesSequence& value);
#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestChoiceWithAllCategoriesSequence& makeSequence(EncoderTestChoiceWithAllCategoriesSequence&& value);
#endif
        // Set the value of this object to be a "Sequence" value.  Optionally
        // specify the 'value' of the "Sequence".  If 'value' is not specified,
        // the default "Sequence" value is used.

    int& makeSimple();
    int& makeSimple(int value);
        // Set the value of this object to be a "Simple" value.  Optionally
        // specify the 'value' of the "Simple".  If 'value' is not specified,
        // the default "Simple" value is used.

    template<class MANIPULATOR>
    int manipulateSelection(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' on the address of the modifiable
        // selection, supplying 'manipulator' with the corresponding selection
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if this object has a defined selection,
        // and -1 otherwise.

    bsl::vector<char>& charArray();
        // Return a reference to the modifiable "CharArray" selection of this
        // object if "CharArray" is the current selection.  The behavior is
        // undefined unless "CharArray" is the selection of this object.

    EncoderTestChoiceWithAllCategoriesChoice& choice();
        // Return a reference to the modifiable "Choice" selection of this
        // object if "Choice" is the current selection.  The behavior is
        // undefined unless "Choice" is the selection of this object.

    EncoderTestChoiceWithAllCategoriesCustomizedType& customizedType();
        // Return a reference to the modifiable "CustomizedType" selection of
        // this object if "CustomizedType" is the current selection.  The
        // behavior is undefined unless "CustomizedType" is the selection of
        // this object.

    EncoderTestChoiceWithAllCategoriesEnumeration::Value& enumeration();
        // Return a reference to the modifiable "Enumeration" selection of this
        // object if "Enumeration" is the current selection.  The behavior is
        // undefined unless "Enumeration" is the selection of this object.

    EncoderTestChoiceWithAllCategoriesSequence& sequence();
        // Return a reference to the modifiable "Sequence" selection of this
        // object if "Sequence" is the current selection.  The behavior is
        // undefined unless "Sequence" is the selection of this object.

    int& simple();
        // Return a reference to the modifiable "Simple" selection of this
        // object if "Simple" is the current selection.  The behavior is
        // undefined unless "Simple" is the selection of this object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    int selectionId() const;
        // Return the id of the current selection if the selection is defined,
        // and -1 otherwise.

    template<class ACCESSOR>
    int accessSelection(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' on the non-modifiable selection,
        // supplying 'accessor' with the corresponding selection information
        // structure.  Return the value returned from the invocation of
        // 'accessor' if this object has a defined selection, and -1 otherwise.

    const bsl::vector<char>& charArray() const;
        // Return a reference to the non-modifiable "CharArray" selection of
        // this object if "CharArray" is the current selection.  The behavior
        // is undefined unless "CharArray" is the selection of this object.

    const EncoderTestChoiceWithAllCategoriesChoice& choice() const;
        // Return a reference to the non-modifiable "Choice" selection of this
        // object if "Choice" is the current selection.  The behavior is
        // undefined unless "Choice" is the selection of this object.

    const EncoderTestChoiceWithAllCategoriesCustomizedType& customizedType() const;
        // Return a reference to the non-modifiable "CustomizedType" selection
        // of this object if "CustomizedType" is the current selection.  The
        // behavior is undefined unless "CustomizedType" is the selection of
        // this object.

    const EncoderTestChoiceWithAllCategoriesEnumeration::Value& enumeration() const;
        // Return a reference to the non-modifiable "Enumeration" selection of
        // this object if "Enumeration" is the current selection.  The behavior
        // is undefined unless "Enumeration" is the selection of this object.

    const EncoderTestChoiceWithAllCategoriesSequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" selection of
        // this object if "Sequence" is the current selection.  The behavior is
        // undefined unless "Sequence" is the selection of this object.

    const int& simple() const;
        // Return a reference to the non-modifiable "Simple" selection of this
        // object if "Simple" is the current selection.  The behavior is
        // undefined unless "Simple" is the selection of this object.

    bool isCharArrayValue() const;
        // Return 'true' if the value of this object is a "CharArray" value,
        // and return 'false' otherwise.

    bool isChoiceValue() const;
        // Return 'true' if the value of this object is a "Choice" value, and
        // return 'false' otherwise.

    bool isCustomizedTypeValue() const;
        // Return 'true' if the value of this object is a "CustomizedType"
        // value, and return 'false' otherwise.

    bool isEnumerationValue() const;
        // Return 'true' if the value of this object is a "Enumeration" value,
        // and return 'false' otherwise.

    bool isSequenceValue() const;
        // Return 'true' if the value of this object is a "Sequence" value, and
        // return 'false' otherwise.

    bool isSimpleValue() const;
        // Return 'true' if the value of this object is a "Simple" value, and
        // return 'false' otherwise.

    bool isUndefinedValue() const;
        // Return 'true' if the value of this object is undefined, and 'false'
        // otherwise.

    const char *selectionName() const;
        // Return the symbolic name of the current selection of this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestChoiceWithAllCategories& lhs, const EncoderTestChoiceWithAllCategories& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' objects have the same
    // value, and 'false' otherwise.  Two 'EncoderTestChoiceWithAllCategories' objects have the same
    // value if either the selections in both objects have the same ids and
    // the same values, or both selections are undefined.

inline
bool operator!=(const EncoderTestChoiceWithAllCategories& lhs, const EncoderTestChoiceWithAllCategories& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' objects do not have the
    // same values, as determined by 'operator==', and 'false' otherwise.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestChoiceWithAllCategories& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestChoiceWithAllCategories& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestChoiceWithAllCategories'.

}  // close package namespace

// TRAITS

BDLAT_DECL_CHOICE_WITH_ALLOCATOR_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestChoiceWithAllCategories)

namespace baljsn {

                     // ==================================
                     // class EncoderTestDegenerateChoice1
                     // ==================================

class EncoderTestDegenerateChoice1 {

    // INSTANCE DATA
    union {
        bsls::ObjectBuffer< EncoderTestDegenerateChoice1Sequence > d_sequence;
    };

    int                                                            d_selectionId;

  public:
    // TYPES

    enum {
        SELECTION_ID_UNDEFINED = -1
      , SELECTION_ID_SEQUENCE = 0
    };

    enum {
        NUM_SELECTIONS = 1
    };

    enum {
        SELECTION_INDEX_SEQUENCE = 0
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_SelectionInfo SELECTION_INFO_ARRAY[];

    // CLASS METHODS
    static const bdlat_SelectionInfo *lookupSelectionInfo(int id);
        // Return selection information for the selection indicated by the
        // specified 'id' if the selection exists, and 0 otherwise.

    static const bdlat_SelectionInfo *lookupSelectionInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return selection information for the selection indicated by the
        // specified 'name' of the specified 'nameLength' if the selection
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestDegenerateChoice1();
        // Create an object of type 'EncoderTestDegenerateChoice1' having the
        // default value.

    EncoderTestDegenerateChoice1(const EncoderTestDegenerateChoice1& original);
        // Create an object of type 'EncoderTestDegenerateChoice1' having the
        // value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestDegenerateChoice1(EncoderTestDegenerateChoice1&& original) noexcept;
        // Create an object of type 'EncoderTestDegenerateChoice1' having the
        // value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestDegenerateChoice1();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestDegenerateChoice1& operator=(const EncoderTestDegenerateChoice1& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestDegenerateChoice1& operator=(EncoderTestDegenerateChoice1&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon default
        // construction).

    int makeSelection(int selectionId);
        // Set the value of this object to be the default for the selection
        // indicated by the specified 'selectionId'.  Return 0 on success, and
        // non-zero value otherwise (i.e., the selection is not found).

    int makeSelection(const char *name, int nameLength);
        // Set the value of this object to be the default for the selection
        // indicated by the specified 'name' of the specified 'nameLength'.
        // Return 0 on success, and non-zero value otherwise (i.e., the
        // selection is not found).

    EncoderTestDegenerateChoice1Sequence& makeSequence();
    EncoderTestDegenerateChoice1Sequence& makeSequence(const EncoderTestDegenerateChoice1Sequence& value);
#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestDegenerateChoice1Sequence& makeSequence(EncoderTestDegenerateChoice1Sequence&& value);
#endif
        // Set the value of this object to be a "Sequence" value.  Optionally
        // specify the 'value' of the "Sequence".  If 'value' is not specified,
        // the default "Sequence" value is used.

    template<class MANIPULATOR>
    int manipulateSelection(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' on the address of the modifiable
        // selection, supplying 'manipulator' with the corresponding selection
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if this object has a defined selection,
        // and -1 otherwise.

    EncoderTestDegenerateChoice1Sequence& sequence();
        // Return a reference to the modifiable "Sequence" selection of this
        // object if "Sequence" is the current selection.  The behavior is
        // undefined unless "Sequence" is the selection of this object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    int selectionId() const;
        // Return the id of the current selection if the selection is defined,
        // and -1 otherwise.

    template<class ACCESSOR>
    int accessSelection(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' on the non-modifiable selection,
        // supplying 'accessor' with the corresponding selection information
        // structure.  Return the value returned from the invocation of
        // 'accessor' if this object has a defined selection, and -1 otherwise.

    const EncoderTestDegenerateChoice1Sequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" selection of
        // this object if "Sequence" is the current selection.  The behavior is
        // undefined unless "Sequence" is the selection of this object.

    bool isSequenceValue() const;
        // Return 'true' if the value of this object is a "Sequence" value, and
        // return 'false' otherwise.

    bool isUndefinedValue() const;
        // Return 'true' if the value of this object is undefined, and 'false'
        // otherwise.

    const char *selectionName() const;
        // Return the symbolic name of the current selection of this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestDegenerateChoice1& lhs, const EncoderTestDegenerateChoice1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' objects have the same
    // value, and 'false' otherwise.  Two 'EncoderTestDegenerateChoice1' objects have the same
    // value if either the selections in both objects have the same ids and
    // the same values, or both selections are undefined.

inline
bool operator!=(const EncoderTestDegenerateChoice1& lhs, const EncoderTestDegenerateChoice1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' objects do not have the
    // same values, as determined by 'operator==', and 'false' otherwise.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestDegenerateChoice1& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestDegenerateChoice1& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestDegenerateChoice1'.

}  // close package namespace

// TRAITS

BDLAT_DECL_CHOICE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestDegenerateChoice1)

namespace baljsn {

                         // =========================
                         // class EncoderTestEmployee
                         // =========================

class EncoderTestEmployee {

    // INSTANCE DATA
    bsl::string         d_name;
    EncoderTestAddress  d_homeAddress;
    int                 d_age;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_NAME         = 0
      , ATTRIBUTE_ID_HOME_ADDRESS = 1
      , ATTRIBUTE_ID_AGE          = 2
    };

    enum {
        NUM_ATTRIBUTES = 3
    };

    enum {
        ATTRIBUTE_INDEX_NAME         = 0
      , ATTRIBUTE_INDEX_HOME_ADDRESS = 1
      , ATTRIBUTE_INDEX_AGE          = 2
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    explicit EncoderTestEmployee(bslma::Allocator *basicAllocator = 0);
        // Create an object of type 'EncoderTestEmployee' having the default
        // value.  Use the optionally specified 'basicAllocator' to supply
        // memory.  If 'basicAllocator' is 0, the currently installed default
        // allocator is used.

    EncoderTestEmployee(const EncoderTestEmployee& original,
                        bslma::Allocator *basicAllocator = 0);
        // Create an object of type 'EncoderTestEmployee' having the value of
        // the specified 'original' object.  Use the optionally specified
        // 'basicAllocator' to supply memory.  If 'basicAllocator' is 0, the
        // currently installed default allocator is used.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestEmployee(EncoderTestEmployee&& original) noexcept;
        // Create an object of type 'EncoderTestEmployee' having the value of
        // the specified 'original' object.  After performing this action, the
        // 'original' object will be left in a valid, but unspecified state.

    EncoderTestEmployee(EncoderTestEmployee&& original,
                        bslma::Allocator *basicAllocator);
        // Create an object of type 'EncoderTestEmployee' having the value of
        // the specified 'original' object.  After performing this action, the
        // 'original' object will be left in a valid, but unspecified state.
        // Use the optionally specified 'basicAllocator' to supply memory.  If
        // 'basicAllocator' is 0, the currently installed default allocator is
        // used.
#endif

    ~EncoderTestEmployee();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestEmployee& operator=(const EncoderTestEmployee& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestEmployee& operator=(EncoderTestEmployee&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    bsl::string& name();
        // Return a reference to the modifiable "Name" attribute of this
        // object.

    EncoderTestAddress& homeAddress();
        // Return a reference to the modifiable "HomeAddress" attribute of this
        // object.

    int& age();
        // Return a reference to the modifiable "Age" attribute of this object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    const bsl::string& name() const;
        // Return a reference to the non-modifiable "Name" attribute of this
        // object.

    const EncoderTestAddress& homeAddress() const;
        // Return a reference to the non-modifiable "HomeAddress" attribute of
        // this object.

    int age() const;
        // Return a reference to the non-modifiable "Age" attribute of this
        // object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestEmployee& lhs, const EncoderTestEmployee& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestEmployee& lhs, const EncoderTestEmployee& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestEmployee& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestEmployee& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestEmployee'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_ALLOCATOR_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestEmployee)

namespace baljsn {

                 // ==========================================
                 // class EncoderTestSequenceWithAllCategories
                 // ==========================================

class EncoderTestSequenceWithAllCategories {

    // INSTANCE DATA
    bsl::vector<int>                                        d_array;
    bsl::vector<char>                                       d_charArray;
    EncoderTestSequenceWithAllCategoriesSequence            d_sequence;
    EncoderTestSequenceWithAllCategoriesCustomizedType      d_customizedType;
    EncoderTestSequenceWithAllCategoriesChoice              d_choice;
    int                                                     d_simple;
    bdlb::NullableValue<int>                                d_nullableValue;
    EncoderTestSequenceWithAllCategoriesEnumeration::Value  d_enumeration;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_CHAR_ARRAY      = 0
      , ATTRIBUTE_ID_ARRAY           = 1
      , ATTRIBUTE_ID_CHOICE          = 2
      , ATTRIBUTE_ID_CUSTOMIZED_TYPE = 3
      , ATTRIBUTE_ID_ENUMERATION     = 4
      , ATTRIBUTE_ID_NULLABLE_VALUE  = 5
      , ATTRIBUTE_ID_SEQUENCE        = 6
      , ATTRIBUTE_ID_SIMPLE          = 7
    };

    enum {
        NUM_ATTRIBUTES = 8
    };

    enum {
        ATTRIBUTE_INDEX_CHAR_ARRAY      = 0
      , ATTRIBUTE_INDEX_ARRAY           = 1
      , ATTRIBUTE_INDEX_CHOICE          = 2
      , ATTRIBUTE_INDEX_CUSTOMIZED_TYPE = 3
      , ATTRIBUTE_INDEX_ENUMERATION     = 4
      , ATTRIBUTE_INDEX_NULLABLE_VALUE  = 5
      , ATTRIBUTE_INDEX_SEQUENCE        = 6
      , ATTRIBUTE_INDEX_SIMPLE          = 7
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    explicit EncoderTestSequenceWithAllCategories(bslma::Allocator *basicAllocator = 0);
        // Create an object of type 'EncoderTestSequenceWithAllCategories'
        // having the default value.  Use the optionally specified
        // 'basicAllocator' to supply memory.  If 'basicAllocator' is 0, the
        // currently installed default allocator is used.

    EncoderTestSequenceWithAllCategories(const EncoderTestSequenceWithAllCategories& original,
                                         bslma::Allocator *basicAllocator = 0);
        // Create an object of type 'EncoderTestSequenceWithAllCategories'
        // having the value of the specified 'original' object.  Use the
        // optionally specified 'basicAllocator' to supply memory.  If
        // 'basicAllocator' is 0, the currently installed default allocator is
        // used.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithAllCategories(EncoderTestSequenceWithAllCategories&& original) noexcept;
        // Create an object of type 'EncoderTestSequenceWithAllCategories'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.

    EncoderTestSequenceWithAllCategories(EncoderTestSequenceWithAllCategories&& original,
                                         bslma::Allocator *basicAllocator);
        // Create an object of type 'EncoderTestSequenceWithAllCategories'
        // having the value of the specified 'original' object.  After
        // performing this action, the 'original' object will be left in a
        // valid, but unspecified state.  Use the optionally specified
        // 'basicAllocator' to supply memory.  If 'basicAllocator' is 0, the
        // currently installed default allocator is used.
#endif

    ~EncoderTestSequenceWithAllCategories();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithAllCategories& operator=(const EncoderTestSequenceWithAllCategories& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithAllCategories& operator=(EncoderTestSequenceWithAllCategories&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    bsl::vector<char>& charArray();
        // Return a reference to the modifiable "CharArray" attribute of this
        // object.

    bsl::vector<int>& array();
        // Return a reference to the modifiable "Array" attribute of this
        // object.

    EncoderTestSequenceWithAllCategoriesChoice& choice();
        // Return a reference to the modifiable "Choice" attribute of this
        // object.

    EncoderTestSequenceWithAllCategoriesCustomizedType& customizedType();
        // Return a reference to the modifiable "CustomizedType" attribute of
        // this object.

    EncoderTestSequenceWithAllCategoriesEnumeration::Value& enumeration();
        // Return a reference to the modifiable "Enumeration" attribute of this
        // object.

    bdlb::NullableValue<int>& nullableValue();
        // Return a reference to the modifiable "NullableValue" attribute of
        // this object.

    EncoderTestSequenceWithAllCategoriesSequence& sequence();
        // Return a reference to the modifiable "Sequence" attribute of this
        // object.

    int& simple();
        // Return a reference to the modifiable "Simple" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    const bsl::vector<char>& charArray() const;
        // Return a reference to the non-modifiable "CharArray" attribute of
        // this object.

    const bsl::vector<int>& array() const;
        // Return a reference to the non-modifiable "Array" attribute of this
        // object.

    const EncoderTestSequenceWithAllCategoriesChoice& choice() const;
        // Return a reference to the non-modifiable "Choice" attribute of this
        // object.

    const EncoderTestSequenceWithAllCategoriesCustomizedType& customizedType() const;
        // Return a reference to the non-modifiable "CustomizedType" attribute
        // of this object.

    EncoderTestSequenceWithAllCategoriesEnumeration::Value enumeration() const;
        // Return a reference to the non-modifiable "Enumeration" attribute of
        // this object.

    const bdlb::NullableValue<int>& nullableValue() const;
        // Return a reference to the non-modifiable "NullableValue" attribute
        // of this object.

    const EncoderTestSequenceWithAllCategoriesSequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" attribute of
        // this object.

    int simple() const;
        // Return a reference to the non-modifiable "Simple" attribute of this
        // object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithAllCategories& lhs, const EncoderTestSequenceWithAllCategories& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithAllCategories& lhs, const EncoderTestSequenceWithAllCategories& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithAllCategories& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithAllCategories& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithAllCategories'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_ALLOCATOR_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithAllCategories)

namespace baljsn {

                   // ======================================
                   // class EncoderTestSequenceWithUntagged1
                   // ======================================

class EncoderTestSequenceWithUntagged1 {

    // INSTANCE DATA
    EncoderTestSequenceWithUntagged1Sequence  d_sequence;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_SEQUENCE = 0
    };

    enum {
        NUM_ATTRIBUTES = 1
    };

    enum {
        ATTRIBUTE_INDEX_SEQUENCE = 0
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged1();
        // Create an object of type 'EncoderTestSequenceWithUntagged1' having
        // the default value.

    EncoderTestSequenceWithUntagged1(const EncoderTestSequenceWithUntagged1& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged1' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged1(EncoderTestSequenceWithUntagged1&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged1' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged1();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged1& operator=(const EncoderTestSequenceWithUntagged1& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged1& operator=(EncoderTestSequenceWithUntagged1&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    EncoderTestSequenceWithUntagged1Sequence& sequence();
        // Return a reference to the modifiable "Sequence" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    const EncoderTestSequenceWithUntagged1Sequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged1& lhs, const EncoderTestSequenceWithUntagged1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged1& lhs, const EncoderTestSequenceWithUntagged1& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged1& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged1& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged1'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged1)

namespace baljsn {

                  // =======================================
                  // class EncoderTestSequenceWithUntagged10
                  // =======================================

class EncoderTestSequenceWithUntagged10 {

    // INSTANCE DATA
    EncoderTestSequenceWithUntagged10Sequence  d_sequence;
    int                                        d_attribute0;
    int                                        d_attribute1;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_SEQUENCE   = 0
      , ATTRIBUTE_ID_ATTRIBUTE0 = 1
      , ATTRIBUTE_ID_ATTRIBUTE1 = 2
    };

    enum {
        NUM_ATTRIBUTES = 3
    };

    enum {
        ATTRIBUTE_INDEX_SEQUENCE   = 0
      , ATTRIBUTE_INDEX_ATTRIBUTE0 = 1
      , ATTRIBUTE_INDEX_ATTRIBUTE1 = 2
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged10();
        // Create an object of type 'EncoderTestSequenceWithUntagged10' having
        // the default value.

    EncoderTestSequenceWithUntagged10(const EncoderTestSequenceWithUntagged10& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged10' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged10(EncoderTestSequenceWithUntagged10&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged10' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged10();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged10& operator=(const EncoderTestSequenceWithUntagged10& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged10& operator=(EncoderTestSequenceWithUntagged10&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    EncoderTestSequenceWithUntagged10Sequence& sequence();
        // Return a reference to the modifiable "Sequence" attribute of this
        // object.

    int& attribute0();
        // Return a reference to the modifiable "Attribute0" attribute of this
        // object.

    int& attribute1();
        // Return a reference to the modifiable "Attribute1" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    const EncoderTestSequenceWithUntagged10Sequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" attribute of
        // this object.

    int attribute0() const;
        // Return a reference to the non-modifiable "Attribute0" attribute of
        // this object.

    int attribute1() const;
        // Return a reference to the non-modifiable "Attribute1" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged10& lhs, const EncoderTestSequenceWithUntagged10& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged10& lhs, const EncoderTestSequenceWithUntagged10& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged10& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged10& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged10'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged10)

namespace baljsn {

                  // =======================================
                  // class EncoderTestSequenceWithUntagged11
                  // =======================================

class EncoderTestSequenceWithUntagged11 {

    // INSTANCE DATA
    EncoderTestSequenceWithUntagged11Sequence1  d_sequence1;
    EncoderTestSequenceWithUntagged11Sequence   d_sequence;
    int                                         d_attribute0;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_ATTRIBUTE0 = 0
      , ATTRIBUTE_ID_SEQUENCE   = 1
      , ATTRIBUTE_ID_SEQUENCE1  = 2
    };

    enum {
        NUM_ATTRIBUTES = 3
    };

    enum {
        ATTRIBUTE_INDEX_ATTRIBUTE0 = 0
      , ATTRIBUTE_INDEX_SEQUENCE   = 1
      , ATTRIBUTE_INDEX_SEQUENCE1  = 2
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged11();
        // Create an object of type 'EncoderTestSequenceWithUntagged11' having
        // the default value.

    EncoderTestSequenceWithUntagged11(const EncoderTestSequenceWithUntagged11& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged11' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged11(EncoderTestSequenceWithUntagged11&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged11' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged11();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged11& operator=(const EncoderTestSequenceWithUntagged11& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged11& operator=(EncoderTestSequenceWithUntagged11&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    int& attribute0();
        // Return a reference to the modifiable "Attribute0" attribute of this
        // object.

    EncoderTestSequenceWithUntagged11Sequence& sequence();
        // Return a reference to the modifiable "Sequence" attribute of this
        // object.

    EncoderTestSequenceWithUntagged11Sequence1& sequence1();
        // Return a reference to the modifiable "Sequence1" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    int attribute0() const;
        // Return a reference to the non-modifiable "Attribute0" attribute of
        // this object.

    const EncoderTestSequenceWithUntagged11Sequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" attribute of
        // this object.

    const EncoderTestSequenceWithUntagged11Sequence1& sequence1() const;
        // Return a reference to the non-modifiable "Sequence1" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged11& lhs, const EncoderTestSequenceWithUntagged11& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged11& lhs, const EncoderTestSequenceWithUntagged11& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged11& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged11& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged11'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged11)

namespace baljsn {

                  // =======================================
                  // class EncoderTestSequenceWithUntagged12
                  // =======================================

class EncoderTestSequenceWithUntagged12 {

    // INSTANCE DATA
    EncoderTestSequenceWithUntagged12Sequence  d_sequence;
    int                                        d_attribute0;
    int                                        d_attribute1;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_ATTRIBUTE0 = 0
      , ATTRIBUTE_ID_SEQUENCE   = 1
      , ATTRIBUTE_ID_ATTRIBUTE1 = 2
    };

    enum {
        NUM_ATTRIBUTES = 3
    };

    enum {
        ATTRIBUTE_INDEX_ATTRIBUTE0 = 0
      , ATTRIBUTE_INDEX_SEQUENCE   = 1
      , ATTRIBUTE_INDEX_ATTRIBUTE1 = 2
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged12();
        // Create an object of type 'EncoderTestSequenceWithUntagged12' having
        // the default value.

    EncoderTestSequenceWithUntagged12(const EncoderTestSequenceWithUntagged12& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged12' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged12(EncoderTestSequenceWithUntagged12&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged12' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged12();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged12& operator=(const EncoderTestSequenceWithUntagged12& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged12& operator=(EncoderTestSequenceWithUntagged12&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    int& attribute0();
        // Return a reference to the modifiable "Attribute0" attribute of this
        // object.

    EncoderTestSequenceWithUntagged12Sequence& sequence();
        // Return a reference to the modifiable "Sequence" attribute of this
        // object.

    int& attribute1();
        // Return a reference to the modifiable "Attribute1" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    int attribute0() const;
        // Return a reference to the non-modifiable "Attribute0" attribute of
        // this object.

    const EncoderTestSequenceWithUntagged12Sequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" attribute of
        // this object.

    int attribute1() const;
        // Return a reference to the non-modifiable "Attribute1" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged12& lhs, const EncoderTestSequenceWithUntagged12& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged12& lhs, const EncoderTestSequenceWithUntagged12& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged12& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged12& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged12'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged12)

namespace baljsn {

                  // =======================================
                  // class EncoderTestSequenceWithUntagged13
                  // =======================================

class EncoderTestSequenceWithUntagged13 {

    // INSTANCE DATA
    EncoderTestSequenceWithUntagged13Sequence  d_sequence;
    int                                        d_attribute0;
    int                                        d_attribute1;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_ATTRIBUTE0 = 0
      , ATTRIBUTE_ID_ATTRIBUTE1 = 1
      , ATTRIBUTE_ID_SEQUENCE   = 2
    };

    enum {
        NUM_ATTRIBUTES = 3
    };

    enum {
        ATTRIBUTE_INDEX_ATTRIBUTE0 = 0
      , ATTRIBUTE_INDEX_ATTRIBUTE1 = 1
      , ATTRIBUTE_INDEX_SEQUENCE   = 2
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged13();
        // Create an object of type 'EncoderTestSequenceWithUntagged13' having
        // the default value.

    EncoderTestSequenceWithUntagged13(const EncoderTestSequenceWithUntagged13& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged13' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged13(EncoderTestSequenceWithUntagged13&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged13' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged13();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged13& operator=(const EncoderTestSequenceWithUntagged13& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged13& operator=(EncoderTestSequenceWithUntagged13&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    int& attribute0();
        // Return a reference to the modifiable "Attribute0" attribute of this
        // object.

    int& attribute1();
        // Return a reference to the modifiable "Attribute1" attribute of this
        // object.

    EncoderTestSequenceWithUntagged13Sequence& sequence();
        // Return a reference to the modifiable "Sequence" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    int attribute0() const;
        // Return a reference to the non-modifiable "Attribute0" attribute of
        // this object.

    int attribute1() const;
        // Return a reference to the non-modifiable "Attribute1" attribute of
        // this object.

    const EncoderTestSequenceWithUntagged13Sequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged13& lhs, const EncoderTestSequenceWithUntagged13& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged13& lhs, const EncoderTestSequenceWithUntagged13& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged13& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged13& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged13'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged13)

namespace baljsn {

                   // ======================================
                   // class EncoderTestSequenceWithUntagged3
                   // ======================================

class EncoderTestSequenceWithUntagged3 {

    // INSTANCE DATA
    EncoderTestSequenceWithUntagged3Sequence1  d_sequence1;
    EncoderTestSequenceWithUntagged3Sequence   d_sequence;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_SEQUENCE  = 0
      , ATTRIBUTE_ID_SEQUENCE1 = 1
    };

    enum {
        NUM_ATTRIBUTES = 2
    };

    enum {
        ATTRIBUTE_INDEX_SEQUENCE  = 0
      , ATTRIBUTE_INDEX_SEQUENCE1 = 1
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged3();
        // Create an object of type 'EncoderTestSequenceWithUntagged3' having
        // the default value.

    EncoderTestSequenceWithUntagged3(const EncoderTestSequenceWithUntagged3& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged3' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged3(EncoderTestSequenceWithUntagged3&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged3' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged3();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged3& operator=(const EncoderTestSequenceWithUntagged3& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged3& operator=(EncoderTestSequenceWithUntagged3&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    EncoderTestSequenceWithUntagged3Sequence& sequence();
        // Return a reference to the modifiable "Sequence" attribute of this
        // object.

    EncoderTestSequenceWithUntagged3Sequence1& sequence1();
        // Return a reference to the modifiable "Sequence1" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    const EncoderTestSequenceWithUntagged3Sequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" attribute of
        // this object.

    const EncoderTestSequenceWithUntagged3Sequence1& sequence1() const;
        // Return a reference to the non-modifiable "Sequence1" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged3& lhs, const EncoderTestSequenceWithUntagged3& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged3& lhs, const EncoderTestSequenceWithUntagged3& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged3& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged3& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged3'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged3)

namespace baljsn {

                   // ======================================
                   // class EncoderTestSequenceWithUntagged4
                   // ======================================

class EncoderTestSequenceWithUntagged4 {

    // INSTANCE DATA
    EncoderTestSequenceWithUntagged4Sequence  d_sequence;
    int                                       d_attribute0;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_SEQUENCE   = 0
      , ATTRIBUTE_ID_ATTRIBUTE0 = 1
    };

    enum {
        NUM_ATTRIBUTES = 2
    };

    enum {
        ATTRIBUTE_INDEX_SEQUENCE   = 0
      , ATTRIBUTE_INDEX_ATTRIBUTE0 = 1
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged4();
        // Create an object of type 'EncoderTestSequenceWithUntagged4' having
        // the default value.

    EncoderTestSequenceWithUntagged4(const EncoderTestSequenceWithUntagged4& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged4' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged4(EncoderTestSequenceWithUntagged4&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged4' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged4();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged4& operator=(const EncoderTestSequenceWithUntagged4& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged4& operator=(EncoderTestSequenceWithUntagged4&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    EncoderTestSequenceWithUntagged4Sequence& sequence();
        // Return a reference to the modifiable "Sequence" attribute of this
        // object.

    int& attribute0();
        // Return a reference to the modifiable "Attribute0" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    const EncoderTestSequenceWithUntagged4Sequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" attribute of
        // this object.

    int attribute0() const;
        // Return a reference to the non-modifiable "Attribute0" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged4& lhs, const EncoderTestSequenceWithUntagged4& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged4& lhs, const EncoderTestSequenceWithUntagged4& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged4& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged4& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged4'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged4)

namespace baljsn {

                   // ======================================
                   // class EncoderTestSequenceWithUntagged5
                   // ======================================

class EncoderTestSequenceWithUntagged5 {

    // INSTANCE DATA
    EncoderTestSequenceWithUntagged5Sequence  d_sequence;
    int                                       d_attribute0;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_ATTRIBUTE0 = 0
      , ATTRIBUTE_ID_SEQUENCE   = 1
    };

    enum {
        NUM_ATTRIBUTES = 2
    };

    enum {
        ATTRIBUTE_INDEX_ATTRIBUTE0 = 0
      , ATTRIBUTE_INDEX_SEQUENCE   = 1
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged5();
        // Create an object of type 'EncoderTestSequenceWithUntagged5' having
        // the default value.

    EncoderTestSequenceWithUntagged5(const EncoderTestSequenceWithUntagged5& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged5' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged5(EncoderTestSequenceWithUntagged5&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged5' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged5();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged5& operator=(const EncoderTestSequenceWithUntagged5& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged5& operator=(EncoderTestSequenceWithUntagged5&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    int& attribute0();
        // Return a reference to the modifiable "Attribute0" attribute of this
        // object.

    EncoderTestSequenceWithUntagged5Sequence& sequence();
        // Return a reference to the modifiable "Sequence" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    int attribute0() const;
        // Return a reference to the non-modifiable "Attribute0" attribute of
        // this object.

    const EncoderTestSequenceWithUntagged5Sequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged5& lhs, const EncoderTestSequenceWithUntagged5& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged5& lhs, const EncoderTestSequenceWithUntagged5& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged5& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged5& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged5'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged5)

namespace baljsn {

                   // ======================================
                   // class EncoderTestSequenceWithUntagged7
                   // ======================================

class EncoderTestSequenceWithUntagged7 {

    // INSTANCE DATA
    EncoderTestSequenceWithUntagged7Sequence2  d_sequence2;
    EncoderTestSequenceWithUntagged7Sequence1  d_sequence1;
    EncoderTestSequenceWithUntagged7Sequence   d_sequence;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_SEQUENCE  = 0
      , ATTRIBUTE_ID_SEQUENCE1 = 1
      , ATTRIBUTE_ID_SEQUENCE2 = 2
    };

    enum {
        NUM_ATTRIBUTES = 3
    };

    enum {
        ATTRIBUTE_INDEX_SEQUENCE  = 0
      , ATTRIBUTE_INDEX_SEQUENCE1 = 1
      , ATTRIBUTE_INDEX_SEQUENCE2 = 2
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged7();
        // Create an object of type 'EncoderTestSequenceWithUntagged7' having
        // the default value.

    EncoderTestSequenceWithUntagged7(const EncoderTestSequenceWithUntagged7& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged7' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged7(EncoderTestSequenceWithUntagged7&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged7' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged7();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged7& operator=(const EncoderTestSequenceWithUntagged7& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged7& operator=(EncoderTestSequenceWithUntagged7&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    EncoderTestSequenceWithUntagged7Sequence& sequence();
        // Return a reference to the modifiable "Sequence" attribute of this
        // object.

    EncoderTestSequenceWithUntagged7Sequence1& sequence1();
        // Return a reference to the modifiable "Sequence1" attribute of this
        // object.

    EncoderTestSequenceWithUntagged7Sequence2& sequence2();
        // Return a reference to the modifiable "Sequence2" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    const EncoderTestSequenceWithUntagged7Sequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" attribute of
        // this object.

    const EncoderTestSequenceWithUntagged7Sequence1& sequence1() const;
        // Return a reference to the non-modifiable "Sequence1" attribute of
        // this object.

    const EncoderTestSequenceWithUntagged7Sequence2& sequence2() const;
        // Return a reference to the non-modifiable "Sequence2" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged7& lhs, const EncoderTestSequenceWithUntagged7& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged7& lhs, const EncoderTestSequenceWithUntagged7& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged7& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged7& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged7'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged7)

namespace baljsn {

                   // ======================================
                   // class EncoderTestSequenceWithUntagged8
                   // ======================================

class EncoderTestSequenceWithUntagged8 {

    // INSTANCE DATA
    EncoderTestSequenceWithUntagged8Sequence1  d_sequence1;
    EncoderTestSequenceWithUntagged8Sequence   d_sequence;
    int                                        d_attribute0;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_SEQUENCE   = 0
      , ATTRIBUTE_ID_SEQUENCE1  = 1
      , ATTRIBUTE_ID_ATTRIBUTE0 = 2
    };

    enum {
        NUM_ATTRIBUTES = 3
    };

    enum {
        ATTRIBUTE_INDEX_SEQUENCE   = 0
      , ATTRIBUTE_INDEX_SEQUENCE1  = 1
      , ATTRIBUTE_INDEX_ATTRIBUTE0 = 2
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged8();
        // Create an object of type 'EncoderTestSequenceWithUntagged8' having
        // the default value.

    EncoderTestSequenceWithUntagged8(const EncoderTestSequenceWithUntagged8& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged8' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged8(EncoderTestSequenceWithUntagged8&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged8' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged8();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged8& operator=(const EncoderTestSequenceWithUntagged8& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged8& operator=(EncoderTestSequenceWithUntagged8&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    EncoderTestSequenceWithUntagged8Sequence& sequence();
        // Return a reference to the modifiable "Sequence" attribute of this
        // object.

    EncoderTestSequenceWithUntagged8Sequence1& sequence1();
        // Return a reference to the modifiable "Sequence1" attribute of this
        // object.

    int& attribute0();
        // Return a reference to the modifiable "Attribute0" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    const EncoderTestSequenceWithUntagged8Sequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" attribute of
        // this object.

    const EncoderTestSequenceWithUntagged8Sequence1& sequence1() const;
        // Return a reference to the non-modifiable "Sequence1" attribute of
        // this object.

    int attribute0() const;
        // Return a reference to the non-modifiable "Attribute0" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged8& lhs, const EncoderTestSequenceWithUntagged8& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged8& lhs, const EncoderTestSequenceWithUntagged8& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged8& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged8& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged8'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged8)

namespace baljsn {

                   // ======================================
                   // class EncoderTestSequenceWithUntagged9
                   // ======================================

class EncoderTestSequenceWithUntagged9 {

    // INSTANCE DATA
    EncoderTestSequenceWithUntagged9Sequence1  d_sequence1;
    EncoderTestSequenceWithUntagged9Sequence   d_sequence;
    int                                        d_attribute0;

  public:
    // TYPES
    enum {
        ATTRIBUTE_ID_SEQUENCE   = 0
      , ATTRIBUTE_ID_ATTRIBUTE0 = 1
      , ATTRIBUTE_ID_SEQUENCE1  = 2
    };

    enum {
        NUM_ATTRIBUTES = 3
    };

    enum {
        ATTRIBUTE_INDEX_SEQUENCE   = 0
      , ATTRIBUTE_INDEX_ATTRIBUTE0 = 1
      , ATTRIBUTE_INDEX_SEQUENCE1  = 2
    };

    // CONSTANTS
    static const char CLASS_NAME[];

    static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[];

  public:
    // CLASS METHODS
    static const bdlat_AttributeInfo *lookupAttributeInfo(int id);
        // Return attribute information for the attribute indicated by the
        // specified 'id' if the attribute exists, and 0 otherwise.

    static const bdlat_AttributeInfo *lookupAttributeInfo(
                                                       const char *name,
                                                       int         nameLength);
        // Return attribute information for the attribute indicated by the
        // specified 'name' of the specified 'nameLength' if the attribute
        // exists, and 0 otherwise.

    // CREATORS
    EncoderTestSequenceWithUntagged9();
        // Create an object of type 'EncoderTestSequenceWithUntagged9' having
        // the default value.

    EncoderTestSequenceWithUntagged9(const EncoderTestSequenceWithUntagged9& original);
        // Create an object of type 'EncoderTestSequenceWithUntagged9' having
        // the value of the specified 'original' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged9(EncoderTestSequenceWithUntagged9&& original) = default;
        // Create an object of type 'EncoderTestSequenceWithUntagged9' having
        // the value of the specified 'original' object.  After performing this
        // action, the 'original' object will be left in a valid, but
        // unspecified state.
#endif

    ~EncoderTestSequenceWithUntagged9();
        // Destroy this object.

    // MANIPULATORS
    EncoderTestSequenceWithUntagged9& operator=(const EncoderTestSequenceWithUntagged9& rhs);
        // Assign to this object the value of the specified 'rhs' object.

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
    EncoderTestSequenceWithUntagged9& operator=(EncoderTestSequenceWithUntagged9&& rhs);
        // Assign to this object the value of the specified 'rhs' object.
        // After performing this action, the 'rhs' object will be left in a
        // valid, but unspecified state.
#endif

    void reset();
        // Reset this object to the default value (i.e., its value upon
        // default construction).

    template<class MANIPULATOR>
    int manipulateAttributes(MANIPULATOR& manipulator);
        // Invoke the specified 'manipulator' sequentially on the address of
        // each (modifiable) attribute of this object, supplying 'manipulator'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'manipulator' (i.e., the invocation that
        // terminated the sequence).

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR& manipulator, int id);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'id',
        // supplying 'manipulator' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'manipulator' if 'id' identifies an attribute of this
        // class, and -1 otherwise.

    template<class MANIPULATOR>
    int manipulateAttribute(MANIPULATOR&  manipulator,
                            const char   *name,
                            int           nameLength);
        // Invoke the specified 'manipulator' on the address of
        // the (modifiable) attribute indicated by the specified 'name' of the
        // specified 'nameLength', supplying 'manipulator' with the
        // corresponding attribute information structure.  Return the value
        // returned from the invocation of 'manipulator' if 'name' identifies
        // an attribute of this class, and -1 otherwise.

    EncoderTestSequenceWithUntagged9Sequence& sequence();
        // Return a reference to the modifiable "Sequence" attribute of this
        // object.

    int& attribute0();
        // Return a reference to the modifiable "Attribute0" attribute of this
        // object.

    EncoderTestSequenceWithUntagged9Sequence1& sequence1();
        // Return a reference to the modifiable "Sequence1" attribute of this
        // object.

    // ACCESSORS
    bsl::ostream& print(bsl::ostream& stream,
                        int           level = 0,
                        int           spacesPerLevel = 4) const;
        // Format this object to the specified output 'stream' at the
        // optionally specified indentation 'level' and return a reference to
        // the modifiable 'stream'.  If 'level' is specified, optionally
        // specify 'spacesPerLevel', the number of spaces per indentation level
        // for this and all of its nested objects.  Each line is indented by
        // the absolute value of 'level * spacesPerLevel'.  If 'level' is
        // negative, suppress indentation of the first line.  If
        // 'spacesPerLevel' is negative, suppress line breaks and format the
        // entire output on one line.  If 'stream' is initially invalid, this
        // operation has no effect.  Note that a trailing newline is provided
        // in multiline mode only.

    template<class ACCESSOR>
    int accessAttributes(ACCESSOR& accessor) const;
        // Invoke the specified 'accessor' sequentially on each
        // (non-modifiable) attribute of this object, supplying 'accessor'
        // with the corresponding attribute information structure until such
        // invocation returns a non-zero value.  Return the value from the
        // last invocation of 'accessor' (i.e., the invocation that terminated
        // the sequence).

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR& accessor, int id) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'id', supplying 'accessor'
        // with the corresponding attribute information structure.  Return the
        // value returned from the invocation of 'accessor' if 'id' identifies
        // an attribute of this class, and -1 otherwise.

    template<class ACCESSOR>
    int accessAttribute(ACCESSOR&   accessor,
                        const char *name,
                        int         nameLength) const;
        // Invoke the specified 'accessor' on the (non-modifiable) attribute
        // of this object indicated by the specified 'name' of the specified
        // 'nameLength', supplying 'accessor' with the corresponding attribute
        // information structure.  Return the value returned from the
        // invocation of 'accessor' if 'name' identifies an attribute of this
        // class, and -1 otherwise.

    const EncoderTestSequenceWithUntagged9Sequence& sequence() const;
        // Return a reference to the non-modifiable "Sequence" attribute of
        // this object.

    int attribute0() const;
        // Return a reference to the non-modifiable "Attribute0" attribute of
        // this object.

    const EncoderTestSequenceWithUntagged9Sequence1& sequence1() const;
        // Return a reference to the non-modifiable "Sequence1" attribute of
        // this object.
};

// FREE OPERATORS
inline
bool operator==(const EncoderTestSequenceWithUntagged9& lhs, const EncoderTestSequenceWithUntagged9& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects have
    // the same value, and 'false' otherwise.  Two attribute objects have the
    // same value if each respective attribute has the same value.

inline
bool operator!=(const EncoderTestSequenceWithUntagged9& lhs, const EncoderTestSequenceWithUntagged9& rhs);
    // Return 'true' if the specified 'lhs' and 'rhs' attribute objects do not
    // have the same value, and 'false' otherwise.  Two attribute objects do
    // not have the same value if one or more respective attributes differ in
    // values.

inline
bsl::ostream& operator<<(bsl::ostream& stream, const EncoderTestSequenceWithUntagged9& rhs);
    // Format the specified 'rhs' to the specified output 'stream' and
    // return a reference to the modifiable 'stream'.

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged9& object);
    // Pass the specified 'object' to the specified 'hashAlg'.  This function
    // integrates with the 'bslh' modular hashing system and effectively
    // provides a 'bsl::hash' specialization for 'EncoderTestSequenceWithUntagged9'.

}  // close package namespace

// TRAITS

BDLAT_DECL_SEQUENCE_WITH_BITWISEMOVEABLE_TRAITS(baljsn::EncoderTestSequenceWithUntagged9)

// ============================================================================
//                         INLINE FUNCTION DEFINITIONS
// ============================================================================

namespace baljsn {

                          // ------------------------
                          // class EncoderTestAddress
                          // ------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestAddress::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_street, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_STREET]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_city, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CITY]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_state, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_STATE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestAddress::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_STREET: {
        return manipulator(&d_street, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_STREET]);
      }
      case ATTRIBUTE_ID_CITY: {
        return manipulator(&d_city, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CITY]);
      }
      case ATTRIBUTE_ID_STATE: {
        return manipulator(&d_state, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_STATE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestAddress::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
bsl::string& EncoderTestAddress::street()
{
    return d_street;
}

inline
bsl::string& EncoderTestAddress::city()
{
    return d_city;
}

inline
bsl::string& EncoderTestAddress::state()
{
    return d_state;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestAddress::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_street, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_STREET]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_city, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CITY]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_state, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_STATE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestAddress::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_STREET: {
        return accessor(d_street, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_STREET]);
      }
      case ATTRIBUTE_ID_CITY: {
        return accessor(d_city, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CITY]);
      }
      case ATTRIBUTE_ID_STATE: {
        return accessor(d_state, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_STATE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestAddress::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
const bsl::string& EncoderTestAddress::street() const
{
    return d_street;
}

inline
const bsl::string& EncoderTestAddress::city() const
{
    return d_city;
}

inline
const bsl::string& EncoderTestAddress::state() const
{
    return d_state;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestAddress& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.street());
    hashAppend(hashAlg, object.city());
    hashAppend(hashAlg, object.state());
}



               // ----------------------------------------------
               // class EncoderTestChoiceWithAllCategoriesChoice
               // ----------------------------------------------

// CLASS METHODS
// CREATORS
inline
EncoderTestChoiceWithAllCategoriesChoice::EncoderTestChoiceWithAllCategoriesChoice()
: d_selectionId(SELECTION_ID_UNDEFINED)
{
}

inline
EncoderTestChoiceWithAllCategoriesChoice::~EncoderTestChoiceWithAllCategoriesChoice()
{
    reset();
}

// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestChoiceWithAllCategoriesChoice::manipulateSelection(MANIPULATOR& manipulator)
{
    switch (d_selectionId) {
      case EncoderTestChoiceWithAllCategoriesChoice::SELECTION_ID_SELECTION0:
        return manipulator(&d_selection0.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_SELECTION0]);
      default:
        BSLS_ASSERT(EncoderTestChoiceWithAllCategoriesChoice::SELECTION_ID_UNDEFINED == d_selectionId);
        return -1;
    }
}

inline
int& EncoderTestChoiceWithAllCategoriesChoice::selection0()
{
    BSLS_ASSERT(SELECTION_ID_SELECTION0 == d_selectionId);
    return d_selection0.object();
}

// ACCESSORS
inline
int EncoderTestChoiceWithAllCategoriesChoice::selectionId() const
{
    return d_selectionId;
}

template <class ACCESSOR>
int EncoderTestChoiceWithAllCategoriesChoice::accessSelection(ACCESSOR& accessor) const
{
    switch (d_selectionId) {
      case SELECTION_ID_SELECTION0:
        return accessor(d_selection0.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_SELECTION0]);
      default:
        BSLS_ASSERT(SELECTION_ID_UNDEFINED == d_selectionId);
        return -1;
    }
}

inline
const int& EncoderTestChoiceWithAllCategoriesChoice::selection0() const
{
    BSLS_ASSERT(SELECTION_ID_SELECTION0 == d_selectionId);
    return d_selection0.object();
}

inline
bool EncoderTestChoiceWithAllCategoriesChoice::isSelection0Value() const
{
    return SELECTION_ID_SELECTION0 == d_selectionId;
}

inline
bool EncoderTestChoiceWithAllCategoriesChoice::isUndefinedValue() const
{
    return SELECTION_ID_UNDEFINED == d_selectionId;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestChoiceWithAllCategoriesChoice& object)
{
    typedef baljsn::EncoderTestChoiceWithAllCategoriesChoice Class;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.selectionId());
    switch (object.selectionId()) {
      case Class::SELECTION_ID_SELECTION0:
        hashAppend(hashAlg, object.selection0());
        break;
      default:
        BSLS_ASSERT(Class::SELECTION_ID_UNDEFINED == object.selectionId());
    }
}


           // ------------------------------------------------------
           // class EncoderTestChoiceWithAllCategoriesCustomizedType
           // ------------------------------------------------------

// CREATORS
inline
EncoderTestChoiceWithAllCategoriesCustomizedType::EncoderTestChoiceWithAllCategoriesCustomizedType(bslma::Allocator *basicAllocator)
: d_value(basicAllocator)
{
}

inline
EncoderTestChoiceWithAllCategoriesCustomizedType::EncoderTestChoiceWithAllCategoriesCustomizedType(const EncoderTestChoiceWithAllCategoriesCustomizedType& original, bslma::Allocator *basicAllocator)
: d_value(original.d_value, basicAllocator)
{
}

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
inline
EncoderTestChoiceWithAllCategoriesCustomizedType::EncoderTestChoiceWithAllCategoriesCustomizedType(EncoderTestChoiceWithAllCategoriesCustomizedType&& original, bslma::Allocator *basicAllocator)
: d_value(bsl::move(original.d_value), basicAllocator)
{
}
#endif

inline
EncoderTestChoiceWithAllCategoriesCustomizedType::EncoderTestChoiceWithAllCategoriesCustomizedType(const bsl::string& value, bslma::Allocator *basicAllocator)
: d_value(value, basicAllocator)
{
    BSLS_ASSERT(checkRestrictions(value) == 0);
}

inline
EncoderTestChoiceWithAllCategoriesCustomizedType::~EncoderTestChoiceWithAllCategoriesCustomizedType()
{
}

// MANIPULATORS
inline
EncoderTestChoiceWithAllCategoriesCustomizedType& EncoderTestChoiceWithAllCategoriesCustomizedType::operator=(const EncoderTestChoiceWithAllCategoriesCustomizedType& rhs)
{
    d_value = rhs.d_value;
    return *this;
}

inline
void EncoderTestChoiceWithAllCategoriesCustomizedType::reset()
{
    bdlat_ValueTypeFunctions::reset(&d_value);
}

inline
int EncoderTestChoiceWithAllCategoriesCustomizedType::fromString(const bsl::string& value)
{
    int ret = checkRestrictions(value);
    if (0 == ret) {
        d_value = value;
    }

    return ret;
}

// ACCESSORS
inline
bsl::ostream& EncoderTestChoiceWithAllCategoriesCustomizedType::print(bsl::ostream& stream,
                                 int           level,
                                 int           spacesPerLevel) const
{
    return bdlb::PrintMethods::print(stream, d_value, level, spacesPerLevel);
}

inline
const bsl::string& EncoderTestChoiceWithAllCategoriesCustomizedType::toString() const
{
    return d_value;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestChoiceWithAllCategoriesCustomizedType& object)
{
    using bslh::hashAppend;
    hashAppend(hashAlg, object.toString());
}



            // ---------------------------------------------------
            // class EncoderTestChoiceWithAllCategoriesEnumeration
            // ---------------------------------------------------

// CLASS METHODS
inline
int EncoderTestChoiceWithAllCategoriesEnumeration::fromString(Value *result, const bsl::string& string)
{
    return fromString(result, string.c_str(), static_cast<int>(string.length()));
}

inline
bsl::ostream& EncoderTestChoiceWithAllCategoriesEnumeration::print(bsl::ostream&      stream,
                                 EncoderTestChoiceWithAllCategoriesEnumeration::Value value)
{
    return stream << toString(value);
}



              // ------------------------------------------------
              // class EncoderTestChoiceWithAllCategoriesSequence
              // ------------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestChoiceWithAllCategoriesSequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_attribute, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestChoiceWithAllCategoriesSequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE: {
        return manipulator(&d_attribute, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestChoiceWithAllCategoriesSequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
int& EncoderTestChoiceWithAllCategoriesSequence::attribute()
{
    return d_attribute;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestChoiceWithAllCategoriesSequence::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_attribute, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestChoiceWithAllCategoriesSequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE: {
        return accessor(d_attribute, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestChoiceWithAllCategoriesSequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
int EncoderTestChoiceWithAllCategoriesSequence::attribute() const
{
    return d_attribute;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestChoiceWithAllCategoriesSequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.attribute());
}



                 // ------------------------------------------
                 // class EncoderTestDegenerateChoice1Sequence
                 // ------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestDegenerateChoice1Sequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestDegenerateChoice1Sequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestDegenerateChoice1Sequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestDegenerateChoice1Sequence::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestDegenerateChoice1Sequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestDegenerateChoice1Sequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestDegenerateChoice1Sequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



              // ------------------------------------------------
              // class EncoderTestSequenceWithAllCategoriesChoice
              // ------------------------------------------------

// CLASS METHODS
// CREATORS
inline
EncoderTestSequenceWithAllCategoriesChoice::EncoderTestSequenceWithAllCategoriesChoice()
: d_selectionId(SELECTION_ID_UNDEFINED)
{
}

inline
EncoderTestSequenceWithAllCategoriesChoice::~EncoderTestSequenceWithAllCategoriesChoice()
{
    reset();
}

// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithAllCategoriesChoice::manipulateSelection(MANIPULATOR& manipulator)
{
    switch (d_selectionId) {
      case EncoderTestSequenceWithAllCategoriesChoice::SELECTION_ID_SELECTION0:
        return manipulator(&d_selection0.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_SELECTION0]);
      default:
        BSLS_ASSERT(EncoderTestSequenceWithAllCategoriesChoice::SELECTION_ID_UNDEFINED == d_selectionId);
        return -1;
    }
}

inline
int& EncoderTestSequenceWithAllCategoriesChoice::selection0()
{
    BSLS_ASSERT(SELECTION_ID_SELECTION0 == d_selectionId);
    return d_selection0.object();
}

// ACCESSORS
inline
int EncoderTestSequenceWithAllCategoriesChoice::selectionId() const
{
    return d_selectionId;
}

template <class ACCESSOR>
int EncoderTestSequenceWithAllCategoriesChoice::accessSelection(ACCESSOR& accessor) const
{
    switch (d_selectionId) {
      case SELECTION_ID_SELECTION0:
        return accessor(d_selection0.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_SELECTION0]);
      default:
        BSLS_ASSERT(SELECTION_ID_UNDEFINED == d_selectionId);
        return -1;
    }
}

inline
const int& EncoderTestSequenceWithAllCategoriesChoice::selection0() const
{
    BSLS_ASSERT(SELECTION_ID_SELECTION0 == d_selectionId);
    return d_selection0.object();
}

inline
bool EncoderTestSequenceWithAllCategoriesChoice::isSelection0Value() const
{
    return SELECTION_ID_SELECTION0 == d_selectionId;
}

inline
bool EncoderTestSequenceWithAllCategoriesChoice::isUndefinedValue() const
{
    return SELECTION_ID_UNDEFINED == d_selectionId;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithAllCategoriesChoice& object)
{
    typedef baljsn::EncoderTestSequenceWithAllCategoriesChoice Class;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.selectionId());
    switch (object.selectionId()) {
      case Class::SELECTION_ID_SELECTION0:
        hashAppend(hashAlg, object.selection0());
        break;
      default:
        BSLS_ASSERT(Class::SELECTION_ID_UNDEFINED == object.selectionId());
    }
}


          // --------------------------------------------------------
          // class EncoderTestSequenceWithAllCategoriesCustomizedType
          // --------------------------------------------------------

// CREATORS
inline
EncoderTestSequenceWithAllCategoriesCustomizedType::EncoderTestSequenceWithAllCategoriesCustomizedType(bslma::Allocator *basicAllocator)
: d_value(basicAllocator)
{
}

inline
EncoderTestSequenceWithAllCategoriesCustomizedType::EncoderTestSequenceWithAllCategoriesCustomizedType(const EncoderTestSequenceWithAllCategoriesCustomizedType& original, bslma::Allocator *basicAllocator)
: d_value(original.d_value, basicAllocator)
{
}

#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
inline
EncoderTestSequenceWithAllCategoriesCustomizedType::EncoderTestSequenceWithAllCategoriesCustomizedType(EncoderTestSequenceWithAllCategoriesCustomizedType&& original, bslma::Allocator *basicAllocator)
: d_value(bsl::move(original.d_value), basicAllocator)
{
}
#endif

inline
EncoderTestSequenceWithAllCategoriesCustomizedType::EncoderTestSequenceWithAllCategoriesCustomizedType(const bsl::string& value, bslma::Allocator *basicAllocator)
: d_value(value, basicAllocator)
{
    BSLS_ASSERT(checkRestrictions(value) == 0);
}

inline
EncoderTestSequenceWithAllCategoriesCustomizedType::~EncoderTestSequenceWithAllCategoriesCustomizedType()
{
}

// MANIPULATORS
inline
EncoderTestSequenceWithAllCategoriesCustomizedType& EncoderTestSequenceWithAllCategoriesCustomizedType::operator=(const EncoderTestSequenceWithAllCategoriesCustomizedType& rhs)
{
    d_value = rhs.d_value;
    return *this;
}

inline
void EncoderTestSequenceWithAllCategoriesCustomizedType::reset()
{
    bdlat_ValueTypeFunctions::reset(&d_value);
}

inline
int EncoderTestSequenceWithAllCategoriesCustomizedType::fromString(const bsl::string& value)
{
    int ret = checkRestrictions(value);
    if (0 == ret) {
        d_value = value;
    }

    return ret;
}

// ACCESSORS
inline
bsl::ostream& EncoderTestSequenceWithAllCategoriesCustomizedType::print(bsl::ostream& stream,
                                 int           level,
                                 int           spacesPerLevel) const
{
    return bdlb::PrintMethods::print(stream, d_value, level, spacesPerLevel);
}

inline
const bsl::string& EncoderTestSequenceWithAllCategoriesCustomizedType::toString() const
{
    return d_value;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithAllCategoriesCustomizedType& object)
{
    using bslh::hashAppend;
    hashAppend(hashAlg, object.toString());
}



           // -----------------------------------------------------
           // class EncoderTestSequenceWithAllCategoriesEnumeration
           // -----------------------------------------------------

// CLASS METHODS
inline
int EncoderTestSequenceWithAllCategoriesEnumeration::fromString(Value *result, const bsl::string& string)
{
    return fromString(result, string.c_str(), static_cast<int>(string.length()));
}

inline
bsl::ostream& EncoderTestSequenceWithAllCategoriesEnumeration::print(bsl::ostream&      stream,
                                 EncoderTestSequenceWithAllCategoriesEnumeration::Value value)
{
    return stream << toString(value);
}



             // --------------------------------------------------
             // class EncoderTestSequenceWithAllCategoriesSequence
             // --------------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithAllCategoriesSequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_attribute, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithAllCategoriesSequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE: {
        return manipulator(&d_attribute, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithAllCategoriesSequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
int& EncoderTestSequenceWithAllCategoriesSequence::attribute()
{
    return d_attribute;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithAllCategoriesSequence::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_attribute, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithAllCategoriesSequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE: {
        return accessor(d_attribute, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithAllCategoriesSequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
int EncoderTestSequenceWithAllCategoriesSequence::attribute() const
{
    return d_attribute;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithAllCategoriesSequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.attribute());
}



                   // --------------------------------------
                   // class EncoderTestSequenceWithUntagged0
                   // --------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged0::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged0::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged0::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged0::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged0::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged0::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged0& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



              // -----------------------------------------------
              // class EncoderTestSequenceWithUntagged10Sequence
              // -----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged10Sequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged10Sequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged10Sequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged10Sequence::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged10Sequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged10Sequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged10Sequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



              // -----------------------------------------------
              // class EncoderTestSequenceWithUntagged11Sequence
              // -----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged11Sequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged11Sequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged11Sequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged11Sequence::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged11Sequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged11Sequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged11Sequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



              // ------------------------------------------------
              // class EncoderTestSequenceWithUntagged11Sequence1
              // ------------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged11Sequence1::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged11Sequence1::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged11Sequence1::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged11Sequence1::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged11Sequence1::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged11Sequence1::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged11Sequence1& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



              // -----------------------------------------------
              // class EncoderTestSequenceWithUntagged12Sequence
              // -----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged12Sequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged12Sequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged12Sequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged12Sequence::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged12Sequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged12Sequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged12Sequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



              // -----------------------------------------------
              // class EncoderTestSequenceWithUntagged13Sequence
              // -----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged13Sequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged13Sequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged13Sequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged13Sequence::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged13Sequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged13Sequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged13Sequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



                  // ---------------------------------------
                  // class EncoderTestSequenceWithUntagged14
                  // ---------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged14::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_attribute2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE2]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged14::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE1: {
        return manipulator(&d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE2: {
        return manipulator(&d_attribute2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE2]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged14::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
int& EncoderTestSequenceWithUntagged14::attribute0()
{
    return d_attribute0;
}

inline
int& EncoderTestSequenceWithUntagged14::attribute1()
{
    return d_attribute1;
}

inline
int& EncoderTestSequenceWithUntagged14::attribute2()
{
    return d_attribute2;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged14::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_attribute2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE2]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged14::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE1: {
        return accessor(d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE2: {
        return accessor(d_attribute2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE2]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged14::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
int EncoderTestSequenceWithUntagged14::attribute0() const
{
    return d_attribute0;
}

inline
int EncoderTestSequenceWithUntagged14::attribute1() const
{
    return d_attribute1;
}

inline
int EncoderTestSequenceWithUntagged14::attribute2() const
{
    return d_attribute2;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged14& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.attribute0());
    hashAppend(hashAlg, object.attribute1());
    hashAppend(hashAlg, object.attribute2());
}



               // ----------------------------------------------
               // class EncoderTestSequenceWithUntagged1Sequence
               // ----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged1Sequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged1Sequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged1Sequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged1Sequence::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged1Sequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged1Sequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged1Sequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



                   // --------------------------------------
                   // class EncoderTestSequenceWithUntagged2
                   // --------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged2::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged2::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged2::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
int& EncoderTestSequenceWithUntagged2::attribute0()
{
    return d_attribute0;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged2::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged2::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged2::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
int EncoderTestSequenceWithUntagged2::attribute0() const
{
    return d_attribute0;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged2& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.attribute0());
}



               // ----------------------------------------------
               // class EncoderTestSequenceWithUntagged3Sequence
               // ----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged3Sequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged3Sequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged3Sequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged3Sequence::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged3Sequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged3Sequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged3Sequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



              // -----------------------------------------------
              // class EncoderTestSequenceWithUntagged3Sequence1
              // -----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged3Sequence1::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged3Sequence1::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged3Sequence1::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged3Sequence1::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged3Sequence1::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged3Sequence1::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged3Sequence1& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



               // ----------------------------------------------
               // class EncoderTestSequenceWithUntagged4Sequence
               // ----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged4Sequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged4Sequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged4Sequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged4Sequence::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged4Sequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged4Sequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged4Sequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



               // ----------------------------------------------
               // class EncoderTestSequenceWithUntagged5Sequence
               // ----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged5Sequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged5Sequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged5Sequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged5Sequence::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged5Sequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged5Sequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged5Sequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



                   // --------------------------------------
                   // class EncoderTestSequenceWithUntagged6
                   // --------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged6::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged6::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE1: {
        return manipulator(&d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged6::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
int& EncoderTestSequenceWithUntagged6::attribute0()
{
    return d_attribute0;
}

inline
int& EncoderTestSequenceWithUntagged6::attribute1()
{
    return d_attribute1;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged6::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged6::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE1: {
        return accessor(d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged6::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
int EncoderTestSequenceWithUntagged6::attribute0() const
{
    return d_attribute0;
}

inline
int EncoderTestSequenceWithUntagged6::attribute1() const
{
    return d_attribute1;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged6& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.attribute0());
    hashAppend(hashAlg, object.attribute1());
}



               // ----------------------------------------------
               // class EncoderTestSequenceWithUntagged7Sequence
               // ----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged7Sequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged7Sequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged7Sequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged7Sequence::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged7Sequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged7Sequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged7Sequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



              // -----------------------------------------------
              // class EncoderTestSequenceWithUntagged7Sequence1
              // -----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged7Sequence1::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged7Sequence1::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged7Sequence1::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged7Sequence1::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged7Sequence1::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged7Sequence1::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged7Sequence1& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



              // -----------------------------------------------
              // class EncoderTestSequenceWithUntagged7Sequence2
              // -----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged7Sequence2::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged7Sequence2::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged7Sequence2::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged7Sequence2::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged7Sequence2::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged7Sequence2::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged7Sequence2& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



               // ----------------------------------------------
               // class EncoderTestSequenceWithUntagged8Sequence
               // ----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged8Sequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged8Sequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged8Sequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged8Sequence::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged8Sequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged8Sequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged8Sequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



              // -----------------------------------------------
              // class EncoderTestSequenceWithUntagged8Sequence1
              // -----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged8Sequence1::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged8Sequence1::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged8Sequence1::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged8Sequence1::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged8Sequence1::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged8Sequence1::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged8Sequence1& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



               // ----------------------------------------------
               // class EncoderTestSequenceWithUntagged9Sequence
               // ----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged9Sequence::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged9Sequence::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged9Sequence::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged9Sequence::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged9Sequence::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged9Sequence::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged9Sequence& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



              // -----------------------------------------------
              // class EncoderTestSequenceWithUntagged9Sequence1
              // -----------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged9Sequence1::manipulateAttributes(MANIPULATOR& manipulator)
{
    (void)manipulator;
    int ret = 0;

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged9Sequence1::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    (void)manipulator;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged9Sequence1::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged9Sequence1::accessAttributes(ACCESSOR& accessor) const
{
    (void)accessor;
    int ret = 0;

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged9Sequence1::accessAttribute(ACCESSOR& accessor, int id) const
{
    (void)accessor;
    enum { NOT_FOUND = -1 };

    switch (id) {
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged9Sequence1::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged9Sequence1& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
}



                  // ----------------------------------------
                  // class EncoderTestChoiceWithAllCategories
                  // ----------------------------------------

// CLASS METHODS
// CREATORS
inline
EncoderTestChoiceWithAllCategories::EncoderTestChoiceWithAllCategories(bslma::Allocator *basicAllocator)
: d_selectionId(SELECTION_ID_UNDEFINED)
, d_allocator_p(bslma::Default::allocator(basicAllocator))
{
}

inline
EncoderTestChoiceWithAllCategories::~EncoderTestChoiceWithAllCategories()
{
    reset();
}

// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestChoiceWithAllCategories::manipulateSelection(MANIPULATOR& manipulator)
{
    switch (d_selectionId) {
      case EncoderTestChoiceWithAllCategories::SELECTION_ID_CHAR_ARRAY:
        return manipulator(&d_charArray.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_CHAR_ARRAY]);
      case EncoderTestChoiceWithAllCategories::SELECTION_ID_CHOICE:
        return manipulator(&d_choice.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_CHOICE]);
      case EncoderTestChoiceWithAllCategories::SELECTION_ID_CUSTOMIZED_TYPE:
        return manipulator(&d_customizedType.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_CUSTOMIZED_TYPE]);
      case EncoderTestChoiceWithAllCategories::SELECTION_ID_ENUMERATION:
        return manipulator(&d_enumeration.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_ENUMERATION]);
      case EncoderTestChoiceWithAllCategories::SELECTION_ID_SEQUENCE:
        return manipulator(&d_sequence.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_SEQUENCE]);
      case EncoderTestChoiceWithAllCategories::SELECTION_ID_SIMPLE:
        return manipulator(&d_simple.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_SIMPLE]);
      default:
        BSLS_ASSERT(EncoderTestChoiceWithAllCategories::SELECTION_ID_UNDEFINED == d_selectionId);
        return -1;
    }
}

inline
bsl::vector<char>& EncoderTestChoiceWithAllCategories::charArray()
{
    BSLS_ASSERT(SELECTION_ID_CHAR_ARRAY == d_selectionId);
    return d_charArray.object();
}

inline
EncoderTestChoiceWithAllCategoriesChoice& EncoderTestChoiceWithAllCategories::choice()
{
    BSLS_ASSERT(SELECTION_ID_CHOICE == d_selectionId);
    return d_choice.object();
}

inline
EncoderTestChoiceWithAllCategoriesCustomizedType& EncoderTestChoiceWithAllCategories::customizedType()
{
    BSLS_ASSERT(SELECTION_ID_CUSTOMIZED_TYPE == d_selectionId);
    return d_customizedType.object();
}

inline
EncoderTestChoiceWithAllCategoriesEnumeration::Value& EncoderTestChoiceWithAllCategories::enumeration()
{
    BSLS_ASSERT(SELECTION_ID_ENUMERATION == d_selectionId);
    return d_enumeration.object();
}

inline
EncoderTestChoiceWithAllCategoriesSequence& EncoderTestChoiceWithAllCategories::sequence()
{
    BSLS_ASSERT(SELECTION_ID_SEQUENCE == d_selectionId);
    return d_sequence.object();
}

inline
int& EncoderTestChoiceWithAllCategories::simple()
{
    BSLS_ASSERT(SELECTION_ID_SIMPLE == d_selectionId);
    return d_simple.object();
}

// ACCESSORS
inline
int EncoderTestChoiceWithAllCategories::selectionId() const
{
    return d_selectionId;
}

template <class ACCESSOR>
int EncoderTestChoiceWithAllCategories::accessSelection(ACCESSOR& accessor) const
{
    switch (d_selectionId) {
      case SELECTION_ID_CHAR_ARRAY:
        return accessor(d_charArray.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_CHAR_ARRAY]);
      case SELECTION_ID_CHOICE:
        return accessor(d_choice.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_CHOICE]);
      case SELECTION_ID_CUSTOMIZED_TYPE:
        return accessor(d_customizedType.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_CUSTOMIZED_TYPE]);
      case SELECTION_ID_ENUMERATION:
        return accessor(d_enumeration.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_ENUMERATION]);
      case SELECTION_ID_SEQUENCE:
        return accessor(d_sequence.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_SEQUENCE]);
      case SELECTION_ID_SIMPLE:
        return accessor(d_simple.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_SIMPLE]);
      default:
        BSLS_ASSERT(SELECTION_ID_UNDEFINED == d_selectionId);
        return -1;
    }
}

inline
const bsl::vector<char>& EncoderTestChoiceWithAllCategories::charArray() const
{
    BSLS_ASSERT(SELECTION_ID_CHAR_ARRAY == d_selectionId);
    return d_charArray.object();
}

inline
const EncoderTestChoiceWithAllCategoriesChoice& EncoderTestChoiceWithAllCategories::choice() const
{
    BSLS_ASSERT(SELECTION_ID_CHOICE == d_selectionId);
    return d_choice.object();
}

inline
const EncoderTestChoiceWithAllCategoriesCustomizedType& EncoderTestChoiceWithAllCategories::customizedType() const
{
    BSLS_ASSERT(SELECTION_ID_CUSTOMIZED_TYPE == d_selectionId);
    return d_customizedType.object();
}

inline
const EncoderTestChoiceWithAllCategoriesEnumeration::Value& EncoderTestChoiceWithAllCategories::enumeration() const
{
    BSLS_ASSERT(SELECTION_ID_ENUMERATION == d_selectionId);
    return d_enumeration.object();
}

inline
const EncoderTestChoiceWithAllCategoriesSequence& EncoderTestChoiceWithAllCategories::sequence() const
{
    BSLS_ASSERT(SELECTION_ID_SEQUENCE == d_selectionId);
    return d_sequence.object();
}

inline
const int& EncoderTestChoiceWithAllCategories::simple() const
{
    BSLS_ASSERT(SELECTION_ID_SIMPLE == d_selectionId);
    return d_simple.object();
}

inline
bool EncoderTestChoiceWithAllCategories::isCharArrayValue() const
{
    return SELECTION_ID_CHAR_ARRAY == d_selectionId;
}

inline
bool EncoderTestChoiceWithAllCategories::isChoiceValue() const
{
    return SELECTION_ID_CHOICE == d_selectionId;
}

inline
bool EncoderTestChoiceWithAllCategories::isCustomizedTypeValue() const
{
    return SELECTION_ID_CUSTOMIZED_TYPE == d_selectionId;
}

inline
bool EncoderTestChoiceWithAllCategories::isEnumerationValue() const
{
    return SELECTION_ID_ENUMERATION == d_selectionId;
}

inline
bool EncoderTestChoiceWithAllCategories::isSequenceValue() const
{
    return SELECTION_ID_SEQUENCE == d_selectionId;
}

inline
bool EncoderTestChoiceWithAllCategories::isSimpleValue() const
{
    return SELECTION_ID_SIMPLE == d_selectionId;
}

inline
bool EncoderTestChoiceWithAllCategories::isUndefinedValue() const
{
    return SELECTION_ID_UNDEFINED == d_selectionId;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestChoiceWithAllCategories& object)
{
    typedef baljsn::EncoderTestChoiceWithAllCategories Class;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.selectionId());
    switch (object.selectionId()) {
      case Class::SELECTION_ID_CHAR_ARRAY:
        hashAppend(hashAlg, object.charArray());
        break;
      case Class::SELECTION_ID_CHOICE:
        hashAppend(hashAlg, object.choice());
        break;
      case Class::SELECTION_ID_CUSTOMIZED_TYPE:
        hashAppend(hashAlg, object.customizedType());
        break;
      case Class::SELECTION_ID_ENUMERATION:
        hashAppend(hashAlg, object.enumeration());
        break;
      case Class::SELECTION_ID_SEQUENCE:
        hashAppend(hashAlg, object.sequence());
        break;
      case Class::SELECTION_ID_SIMPLE:
        hashAppend(hashAlg, object.simple());
        break;
      default:
        BSLS_ASSERT(Class::SELECTION_ID_UNDEFINED == object.selectionId());
    }
}


                     // ----------------------------------
                     // class EncoderTestDegenerateChoice1
                     // ----------------------------------

// CLASS METHODS
// CREATORS
inline
EncoderTestDegenerateChoice1::EncoderTestDegenerateChoice1()
: d_selectionId(SELECTION_ID_UNDEFINED)
{
}

inline
EncoderTestDegenerateChoice1::~EncoderTestDegenerateChoice1()
{
    reset();
}

// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestDegenerateChoice1::manipulateSelection(MANIPULATOR& manipulator)
{
    switch (d_selectionId) {
      case EncoderTestDegenerateChoice1::SELECTION_ID_SEQUENCE:
        return manipulator(&d_sequence.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_SEQUENCE]);
      default:
        BSLS_ASSERT(EncoderTestDegenerateChoice1::SELECTION_ID_UNDEFINED == d_selectionId);
        return -1;
    }
}

inline
EncoderTestDegenerateChoice1Sequence& EncoderTestDegenerateChoice1::sequence()
{
    BSLS_ASSERT(SELECTION_ID_SEQUENCE == d_selectionId);
    return d_sequence.object();
}

// ACCESSORS
inline
int EncoderTestDegenerateChoice1::selectionId() const
{
    return d_selectionId;
}

template <class ACCESSOR>
int EncoderTestDegenerateChoice1::accessSelection(ACCESSOR& accessor) const
{
    switch (d_selectionId) {
      case SELECTION_ID_SEQUENCE:
        return accessor(d_sequence.object(),
                SELECTION_INFO_ARRAY[SELECTION_INDEX_SEQUENCE]);
      default:
        BSLS_ASSERT(SELECTION_ID_UNDEFINED == d_selectionId);
        return -1;
    }
}

inline
const EncoderTestDegenerateChoice1Sequence& EncoderTestDegenerateChoice1::sequence() const
{
    BSLS_ASSERT(SELECTION_ID_SEQUENCE == d_selectionId);
    return d_sequence.object();
}

inline
bool EncoderTestDegenerateChoice1::isSequenceValue() const
{
    return SELECTION_ID_SEQUENCE == d_selectionId;
}

inline
bool EncoderTestDegenerateChoice1::isUndefinedValue() const
{
    return SELECTION_ID_UNDEFINED == d_selectionId;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestDegenerateChoice1& object)
{
    typedef baljsn::EncoderTestDegenerateChoice1 Class;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.selectionId());
    switch (object.selectionId()) {
      case Class::SELECTION_ID_SEQUENCE:
        hashAppend(hashAlg, object.sequence());
        break;
      default:
        BSLS_ASSERT(Class::SELECTION_ID_UNDEFINED == object.selectionId());
    }
}


                         // -------------------------
                         // class EncoderTestEmployee
                         // -------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestEmployee::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_name, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_NAME]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_homeAddress, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_HOME_ADDRESS]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_age, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_AGE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestEmployee::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_NAME: {
        return manipulator(&d_name, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_NAME]);
      }
      case ATTRIBUTE_ID_HOME_ADDRESS: {
        return manipulator(&d_homeAddress, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_HOME_ADDRESS]);
      }
      case ATTRIBUTE_ID_AGE: {
        return manipulator(&d_age, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_AGE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestEmployee::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
bsl::string& EncoderTestEmployee::name()
{
    return d_name;
}

inline
EncoderTestAddress& EncoderTestEmployee::homeAddress()
{
    return d_homeAddress;
}

inline
int& EncoderTestEmployee::age()
{
    return d_age;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestEmployee::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_name, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_NAME]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_homeAddress, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_HOME_ADDRESS]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_age, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_AGE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestEmployee::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_NAME: {
        return accessor(d_name, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_NAME]);
      }
      case ATTRIBUTE_ID_HOME_ADDRESS: {
        return accessor(d_homeAddress, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_HOME_ADDRESS]);
      }
      case ATTRIBUTE_ID_AGE: {
        return accessor(d_age, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_AGE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestEmployee::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
const bsl::string& EncoderTestEmployee::name() const
{
    return d_name;
}

inline
const EncoderTestAddress& EncoderTestEmployee::homeAddress() const
{
    return d_homeAddress;
}

inline
int EncoderTestEmployee::age() const
{
    return d_age;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestEmployee& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.name());
    hashAppend(hashAlg, object.homeAddress());
    hashAppend(hashAlg, object.age());
}



                 // ------------------------------------------
                 // class EncoderTestSequenceWithAllCategories
                 // ------------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithAllCategories::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_charArray, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CHAR_ARRAY]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_array, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ARRAY]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_choice, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CHOICE]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_customizedType, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CUSTOMIZED_TYPE]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_enumeration, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ENUMERATION]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_nullableValue, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_NULLABLE_VALUE]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_simple, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SIMPLE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithAllCategories::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_CHAR_ARRAY: {
        return manipulator(&d_charArray, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CHAR_ARRAY]);
      }
      case ATTRIBUTE_ID_ARRAY: {
        return manipulator(&d_array, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ARRAY]);
      }
      case ATTRIBUTE_ID_CHOICE: {
        return manipulator(&d_choice, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CHOICE]);
      }
      case ATTRIBUTE_ID_CUSTOMIZED_TYPE: {
        return manipulator(&d_customizedType, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CUSTOMIZED_TYPE]);
      }
      case ATTRIBUTE_ID_ENUMERATION: {
        return manipulator(&d_enumeration, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ENUMERATION]);
      }
      case ATTRIBUTE_ID_NULLABLE_VALUE: {
        return manipulator(&d_nullableValue, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_NULLABLE_VALUE]);
      }
      case ATTRIBUTE_ID_SEQUENCE: {
        return manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_SIMPLE: {
        return manipulator(&d_simple, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SIMPLE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithAllCategories::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
bsl::vector<char>& EncoderTestSequenceWithAllCategories::charArray()
{
    return d_charArray;
}

inline
bsl::vector<int>& EncoderTestSequenceWithAllCategories::array()
{
    return d_array;
}

inline
EncoderTestSequenceWithAllCategoriesChoice& EncoderTestSequenceWithAllCategories::choice()
{
    return d_choice;
}

inline
EncoderTestSequenceWithAllCategoriesCustomizedType& EncoderTestSequenceWithAllCategories::customizedType()
{
    return d_customizedType;
}

inline
EncoderTestSequenceWithAllCategoriesEnumeration::Value& EncoderTestSequenceWithAllCategories::enumeration()
{
    return d_enumeration;
}

inline
bdlb::NullableValue<int>& EncoderTestSequenceWithAllCategories::nullableValue()
{
    return d_nullableValue;
}

inline
EncoderTestSequenceWithAllCategoriesSequence& EncoderTestSequenceWithAllCategories::sequence()
{
    return d_sequence;
}

inline
int& EncoderTestSequenceWithAllCategories::simple()
{
    return d_simple;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithAllCategories::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_charArray, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CHAR_ARRAY]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_array, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ARRAY]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_choice, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CHOICE]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_customizedType, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CUSTOMIZED_TYPE]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_enumeration, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ENUMERATION]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_nullableValue, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_NULLABLE_VALUE]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_simple, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SIMPLE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithAllCategories::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_CHAR_ARRAY: {
        return accessor(d_charArray, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CHAR_ARRAY]);
      }
      case ATTRIBUTE_ID_ARRAY: {
        return accessor(d_array, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ARRAY]);
      }
      case ATTRIBUTE_ID_CHOICE: {
        return accessor(d_choice, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CHOICE]);
      }
      case ATTRIBUTE_ID_CUSTOMIZED_TYPE: {
        return accessor(d_customizedType, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_CUSTOMIZED_TYPE]);
      }
      case ATTRIBUTE_ID_ENUMERATION: {
        return accessor(d_enumeration, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ENUMERATION]);
      }
      case ATTRIBUTE_ID_NULLABLE_VALUE: {
        return accessor(d_nullableValue, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_NULLABLE_VALUE]);
      }
      case ATTRIBUTE_ID_SEQUENCE: {
        return accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_SIMPLE: {
        return accessor(d_simple, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SIMPLE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithAllCategories::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
const bsl::vector<char>& EncoderTestSequenceWithAllCategories::charArray() const
{
    return d_charArray;
}

inline
const bsl::vector<int>& EncoderTestSequenceWithAllCategories::array() const
{
    return d_array;
}

inline
const EncoderTestSequenceWithAllCategoriesChoice& EncoderTestSequenceWithAllCategories::choice() const
{
    return d_choice;
}

inline
const EncoderTestSequenceWithAllCategoriesCustomizedType& EncoderTestSequenceWithAllCategories::customizedType() const
{
    return d_customizedType;
}

inline
EncoderTestSequenceWithAllCategoriesEnumeration::Value EncoderTestSequenceWithAllCategories::enumeration() const
{
    return d_enumeration;
}

inline
const bdlb::NullableValue<int>& EncoderTestSequenceWithAllCategories::nullableValue() const
{
    return d_nullableValue;
}

inline
const EncoderTestSequenceWithAllCategoriesSequence& EncoderTestSequenceWithAllCategories::sequence() const
{
    return d_sequence;
}

inline
int EncoderTestSequenceWithAllCategories::simple() const
{
    return d_simple;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithAllCategories& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.charArray());
    hashAppend(hashAlg, object.array());
    hashAppend(hashAlg, object.choice());
    hashAppend(hashAlg, object.customizedType());
    hashAppend(hashAlg, object.enumeration());
    hashAppend(hashAlg, object.nullableValue());
    hashAppend(hashAlg, object.sequence());
    hashAppend(hashAlg, object.simple());
}



                   // --------------------------------------
                   // class EncoderTestSequenceWithUntagged1
                   // --------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged1::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged1::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged1::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
EncoderTestSequenceWithUntagged1Sequence& EncoderTestSequenceWithUntagged1::sequence()
{
    return d_sequence;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged1::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged1::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged1::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
const EncoderTestSequenceWithUntagged1Sequence& EncoderTestSequenceWithUntagged1::sequence() const
{
    return d_sequence;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged1& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.sequence());
}



                  // ---------------------------------------
                  // class EncoderTestSequenceWithUntagged10
                  // ---------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged10::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged10::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE1: {
        return manipulator(&d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged10::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
EncoderTestSequenceWithUntagged10Sequence& EncoderTestSequenceWithUntagged10::sequence()
{
    return d_sequence;
}

inline
int& EncoderTestSequenceWithUntagged10::attribute0()
{
    return d_attribute0;
}

inline
int& EncoderTestSequenceWithUntagged10::attribute1()
{
    return d_attribute1;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged10::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged10::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE1: {
        return accessor(d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged10::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
const EncoderTestSequenceWithUntagged10Sequence& EncoderTestSequenceWithUntagged10::sequence() const
{
    return d_sequence;
}

inline
int EncoderTestSequenceWithUntagged10::attribute0() const
{
    return d_attribute0;
}

inline
int EncoderTestSequenceWithUntagged10::attribute1() const
{
    return d_attribute1;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged10& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.sequence());
    hashAppend(hashAlg, object.attribute0());
    hashAppend(hashAlg, object.attribute1());
}



                  // ---------------------------------------
                  // class EncoderTestSequenceWithUntagged11
                  // ---------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged11::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged11::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_SEQUENCE: {
        return manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_SEQUENCE1: {
        return manipulator(&d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged11::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
int& EncoderTestSequenceWithUntagged11::attribute0()
{
    return d_attribute0;
}

inline
EncoderTestSequenceWithUntagged11Sequence& EncoderTestSequenceWithUntagged11::sequence()
{
    return d_sequence;
}

inline
EncoderTestSequenceWithUntagged11Sequence1& EncoderTestSequenceWithUntagged11::sequence1()
{
    return d_sequence1;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged11::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged11::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_SEQUENCE: {
        return accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_SEQUENCE1: {
        return accessor(d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged11::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
int EncoderTestSequenceWithUntagged11::attribute0() const
{
    return d_attribute0;
}

inline
const EncoderTestSequenceWithUntagged11Sequence& EncoderTestSequenceWithUntagged11::sequence() const
{
    return d_sequence;
}

inline
const EncoderTestSequenceWithUntagged11Sequence1& EncoderTestSequenceWithUntagged11::sequence1() const
{
    return d_sequence1;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged11& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.attribute0());
    hashAppend(hashAlg, object.sequence());
    hashAppend(hashAlg, object.sequence1());
}



                  // ---------------------------------------
                  // class EncoderTestSequenceWithUntagged12
                  // ---------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged12::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged12::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_SEQUENCE: {
        return manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE1: {
        return manipulator(&d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged12::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
int& EncoderTestSequenceWithUntagged12::attribute0()
{
    return d_attribute0;
}

inline
EncoderTestSequenceWithUntagged12Sequence& EncoderTestSequenceWithUntagged12::sequence()
{
    return d_sequence;
}

inline
int& EncoderTestSequenceWithUntagged12::attribute1()
{
    return d_attribute1;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged12::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged12::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_SEQUENCE: {
        return accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE1: {
        return accessor(d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged12::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
int EncoderTestSequenceWithUntagged12::attribute0() const
{
    return d_attribute0;
}

inline
const EncoderTestSequenceWithUntagged12Sequence& EncoderTestSequenceWithUntagged12::sequence() const
{
    return d_sequence;
}

inline
int EncoderTestSequenceWithUntagged12::attribute1() const
{
    return d_attribute1;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged12& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.attribute0());
    hashAppend(hashAlg, object.sequence());
    hashAppend(hashAlg, object.attribute1());
}



                  // ---------------------------------------
                  // class EncoderTestSequenceWithUntagged13
                  // ---------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged13::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged13::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE1: {
        return manipulator(&d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
      }
      case ATTRIBUTE_ID_SEQUENCE: {
        return manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged13::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
int& EncoderTestSequenceWithUntagged13::attribute0()
{
    return d_attribute0;
}

inline
int& EncoderTestSequenceWithUntagged13::attribute1()
{
    return d_attribute1;
}

inline
EncoderTestSequenceWithUntagged13Sequence& EncoderTestSequenceWithUntagged13::sequence()
{
    return d_sequence;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged13::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged13::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE1: {
        return accessor(d_attribute1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE1]);
      }
      case ATTRIBUTE_ID_SEQUENCE: {
        return accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged13::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
int EncoderTestSequenceWithUntagged13::attribute0() const
{
    return d_attribute0;
}

inline
int EncoderTestSequenceWithUntagged13::attribute1() const
{
    return d_attribute1;
}

inline
const EncoderTestSequenceWithUntagged13Sequence& EncoderTestSequenceWithUntagged13::sequence() const
{
    return d_sequence;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged13& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.attribute0());
    hashAppend(hashAlg, object.attribute1());
    hashAppend(hashAlg, object.sequence());
}



                   // --------------------------------------
                   // class EncoderTestSequenceWithUntagged3
                   // --------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged3::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged3::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_SEQUENCE1: {
        return manipulator(&d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged3::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
EncoderTestSequenceWithUntagged3Sequence& EncoderTestSequenceWithUntagged3::sequence()
{
    return d_sequence;
}

inline
EncoderTestSequenceWithUntagged3Sequence1& EncoderTestSequenceWithUntagged3::sequence1()
{
    return d_sequence1;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged3::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged3::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_SEQUENCE1: {
        return accessor(d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged3::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
const EncoderTestSequenceWithUntagged3Sequence& EncoderTestSequenceWithUntagged3::sequence() const
{
    return d_sequence;
}

inline
const EncoderTestSequenceWithUntagged3Sequence1& EncoderTestSequenceWithUntagged3::sequence1() const
{
    return d_sequence1;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged3& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.sequence());
    hashAppend(hashAlg, object.sequence1());
}



                   // --------------------------------------
                   // class EncoderTestSequenceWithUntagged4
                   // --------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged4::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged4::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged4::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
EncoderTestSequenceWithUntagged4Sequence& EncoderTestSequenceWithUntagged4::sequence()
{
    return d_sequence;
}

inline
int& EncoderTestSequenceWithUntagged4::attribute0()
{
    return d_attribute0;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged4::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged4::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged4::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
const EncoderTestSequenceWithUntagged4Sequence& EncoderTestSequenceWithUntagged4::sequence() const
{
    return d_sequence;
}

inline
int EncoderTestSequenceWithUntagged4::attribute0() const
{
    return d_attribute0;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged4& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.sequence());
    hashAppend(hashAlg, object.attribute0());
}



                   // --------------------------------------
                   // class EncoderTestSequenceWithUntagged5
                   // --------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged5::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged5::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_SEQUENCE: {
        return manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged5::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
int& EncoderTestSequenceWithUntagged5::attribute0()
{
    return d_attribute0;
}

inline
EncoderTestSequenceWithUntagged5Sequence& EncoderTestSequenceWithUntagged5::sequence()
{
    return d_sequence;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged5::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged5::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_SEQUENCE: {
        return accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged5::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
int EncoderTestSequenceWithUntagged5::attribute0() const
{
    return d_attribute0;
}

inline
const EncoderTestSequenceWithUntagged5Sequence& EncoderTestSequenceWithUntagged5::sequence() const
{
    return d_sequence;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged5& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.attribute0());
    hashAppend(hashAlg, object.sequence());
}



                   // --------------------------------------
                   // class EncoderTestSequenceWithUntagged7
                   // --------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged7::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_sequence2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE2]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged7::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_SEQUENCE1: {
        return manipulator(&d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
      }
      case ATTRIBUTE_ID_SEQUENCE2: {
        return manipulator(&d_sequence2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE2]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged7::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
EncoderTestSequenceWithUntagged7Sequence& EncoderTestSequenceWithUntagged7::sequence()
{
    return d_sequence;
}

inline
EncoderTestSequenceWithUntagged7Sequence1& EncoderTestSequenceWithUntagged7::sequence1()
{
    return d_sequence1;
}

inline
EncoderTestSequenceWithUntagged7Sequence2& EncoderTestSequenceWithUntagged7::sequence2()
{
    return d_sequence2;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged7::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_sequence2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE2]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged7::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_SEQUENCE1: {
        return accessor(d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
      }
      case ATTRIBUTE_ID_SEQUENCE2: {
        return accessor(d_sequence2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE2]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged7::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
const EncoderTestSequenceWithUntagged7Sequence& EncoderTestSequenceWithUntagged7::sequence() const
{
    return d_sequence;
}

inline
const EncoderTestSequenceWithUntagged7Sequence1& EncoderTestSequenceWithUntagged7::sequence1() const
{
    return d_sequence1;
}

inline
const EncoderTestSequenceWithUntagged7Sequence2& EncoderTestSequenceWithUntagged7::sequence2() const
{
    return d_sequence2;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged7& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.sequence());
    hashAppend(hashAlg, object.sequence1());
    hashAppend(hashAlg, object.sequence2());
}



                   // --------------------------------------
                   // class EncoderTestSequenceWithUntagged8
                   // --------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged8::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged8::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_SEQUENCE1: {
        return manipulator(&d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged8::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
EncoderTestSequenceWithUntagged8Sequence& EncoderTestSequenceWithUntagged8::sequence()
{
    return d_sequence;
}

inline
EncoderTestSequenceWithUntagged8Sequence1& EncoderTestSequenceWithUntagged8::sequence1()
{
    return d_sequence1;
}

inline
int& EncoderTestSequenceWithUntagged8::attribute0()
{
    return d_attribute0;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged8::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged8::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_SEQUENCE1: {
        return accessor(d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged8::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
const EncoderTestSequenceWithUntagged8Sequence& EncoderTestSequenceWithUntagged8::sequence() const
{
    return d_sequence;
}

inline
const EncoderTestSequenceWithUntagged8Sequence1& EncoderTestSequenceWithUntagged8::sequence1() const
{
    return d_sequence1;
}

inline
int EncoderTestSequenceWithUntagged8::attribute0() const
{
    return d_attribute0;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged8& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.sequence());
    hashAppend(hashAlg, object.sequence1());
    hashAppend(hashAlg, object.attribute0());
}



                   // --------------------------------------
                   // class EncoderTestSequenceWithUntagged9
                   // --------------------------------------

// CLASS METHODS
// MANIPULATORS
template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged9::manipulateAttributes(MANIPULATOR& manipulator)
{
    int ret;

    ret = manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = manipulator(&d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged9::manipulateAttribute(MANIPULATOR& manipulator, int id)
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return manipulator(&d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return manipulator(&d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_SEQUENCE1: {
        return manipulator(&d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class MANIPULATOR>
int EncoderTestSequenceWithUntagged9::manipulateAttribute(
        MANIPULATOR&  manipulator,
        const char   *name,
        int           nameLength)
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
                                         lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
        return NOT_FOUND;
    }

    return manipulateAttribute(manipulator, attributeInfo->d_id);
}

inline
EncoderTestSequenceWithUntagged9Sequence& EncoderTestSequenceWithUntagged9::sequence()
{
    return d_sequence;
}

inline
int& EncoderTestSequenceWithUntagged9::attribute0()
{
    return d_attribute0;
}

inline
EncoderTestSequenceWithUntagged9Sequence1& EncoderTestSequenceWithUntagged9::sequence1()
{
    return d_sequence1;
}

// ACCESSORS
template <class ACCESSOR>
int EncoderTestSequenceWithUntagged9::accessAttributes(ACCESSOR& accessor) const
{
    int ret;

    ret = accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
    if (ret) {
        return ret;
    }

    ret = accessor(d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
    if (ret) {
        return ret;
    }

    return ret;
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged9::accessAttribute(ACCESSOR& accessor, int id) const
{
    enum { NOT_FOUND = -1 };

    switch (id) {
      case ATTRIBUTE_ID_SEQUENCE: {
        return accessor(d_sequence, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE]);
      }
      case ATTRIBUTE_ID_ATTRIBUTE0: {
        return accessor(d_attribute0, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ATTRIBUTE0]);
      }
      case ATTRIBUTE_ID_SEQUENCE1: {
        return accessor(d_sequence1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_SEQUENCE1]);
      }
      default:
        return NOT_FOUND;
    }
}

template <class ACCESSOR>
int EncoderTestSequenceWithUntagged9::accessAttribute(
        ACCESSOR&   accessor,
        const char *name,
        int         nameLength) const
{
    enum { NOT_FOUND = -1 };

    const bdlat_AttributeInfo *attributeInfo =
          lookupAttributeInfo(name, nameLength);
    if (0 == attributeInfo) {
       return NOT_FOUND;
    }

    return accessAttribute(accessor, attributeInfo->d_id);
}

inline
const EncoderTestSequenceWithUntagged9Sequence& EncoderTestSequenceWithUntagged9::sequence() const
{
    return d_sequence;
}

inline
int EncoderTestSequenceWithUntagged9::attribute0() const
{
    return d_attribute0;
}

inline
const EncoderTestSequenceWithUntagged9Sequence1& EncoderTestSequenceWithUntagged9::sequence1() const
{
    return d_sequence1;
}

template <typename HASH_ALGORITHM>
void hashAppend(HASH_ALGORITHM& hashAlg, const baljsn::EncoderTestSequenceWithUntagged9& object)
{
    (void)hashAlg;
    (void)object;
    using bslh::hashAppend;
    hashAppend(hashAlg, object.sequence());
    hashAppend(hashAlg, object.attribute0());
    hashAppend(hashAlg, object.sequence1());
}

}  // close package namespace

// FREE FUNCTIONS

inline
bool baljsn::operator==(
        const baljsn::EncoderTestAddress& lhs,
        const baljsn::EncoderTestAddress& rhs)
{
    return  lhs.street() == rhs.street()
         && lhs.city() == rhs.city()
         && lhs.state() == rhs.state();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestAddress& lhs,
        const baljsn::EncoderTestAddress& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestAddress& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestChoiceWithAllCategoriesChoice& lhs,
        const baljsn::EncoderTestChoiceWithAllCategoriesChoice& rhs)
{
    typedef baljsn::EncoderTestChoiceWithAllCategoriesChoice Class;
    if (lhs.selectionId() == rhs.selectionId()) {
        switch (rhs.selectionId()) {
          case Class::SELECTION_ID_SELECTION0:
            return lhs.selection0() == rhs.selection0();
          default:
            BSLS_ASSERT(Class::SELECTION_ID_UNDEFINED == rhs.selectionId());
            return true;
        }
    }
    else {
        return false;
   }
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestChoiceWithAllCategoriesChoice& lhs,
        const baljsn::EncoderTestChoiceWithAllCategoriesChoice& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestChoiceWithAllCategoriesChoice& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestChoiceWithAllCategoriesCustomizedType& lhs,
        const baljsn::EncoderTestChoiceWithAllCategoriesCustomizedType& rhs)
{
    return lhs.d_value == rhs.d_value;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestChoiceWithAllCategoriesCustomizedType& lhs,
        const baljsn::EncoderTestChoiceWithAllCategoriesCustomizedType& rhs)
{
    return lhs.d_value != rhs.d_value;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestChoiceWithAllCategoriesCustomizedType& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        baljsn::EncoderTestChoiceWithAllCategoriesEnumeration::Value rhs)
{
    return baljsn::EncoderTestChoiceWithAllCategoriesEnumeration::print(stream, rhs);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestChoiceWithAllCategoriesSequence& lhs,
        const baljsn::EncoderTestChoiceWithAllCategoriesSequence& rhs)
{
    return  lhs.attribute() == rhs.attribute();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestChoiceWithAllCategoriesSequence& lhs,
        const baljsn::EncoderTestChoiceWithAllCategoriesSequence& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestChoiceWithAllCategoriesSequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestDegenerateChoice1Sequence&,
        const baljsn::EncoderTestDegenerateChoice1Sequence&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestDegenerateChoice1Sequence&,
        const baljsn::EncoderTestDegenerateChoice1Sequence&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestDegenerateChoice1Sequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithAllCategoriesChoice& lhs,
        const baljsn::EncoderTestSequenceWithAllCategoriesChoice& rhs)
{
    typedef baljsn::EncoderTestSequenceWithAllCategoriesChoice Class;
    if (lhs.selectionId() == rhs.selectionId()) {
        switch (rhs.selectionId()) {
          case Class::SELECTION_ID_SELECTION0:
            return lhs.selection0() == rhs.selection0();
          default:
            BSLS_ASSERT(Class::SELECTION_ID_UNDEFINED == rhs.selectionId());
            return true;
        }
    }
    else {
        return false;
   }
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithAllCategoriesChoice& lhs,
        const baljsn::EncoderTestSequenceWithAllCategoriesChoice& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithAllCategoriesChoice& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithAllCategoriesCustomizedType& lhs,
        const baljsn::EncoderTestSequenceWithAllCategoriesCustomizedType& rhs)
{
    return lhs.d_value == rhs.d_value;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithAllCategoriesCustomizedType& lhs,
        const baljsn::EncoderTestSequenceWithAllCategoriesCustomizedType& rhs)
{
    return lhs.d_value != rhs.d_value;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithAllCategoriesCustomizedType& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        baljsn::EncoderTestSequenceWithAllCategoriesEnumeration::Value rhs)
{
    return baljsn::EncoderTestSequenceWithAllCategoriesEnumeration::print(stream, rhs);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithAllCategoriesSequence& lhs,
        const baljsn::EncoderTestSequenceWithAllCategoriesSequence& rhs)
{
    return  lhs.attribute() == rhs.attribute();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithAllCategoriesSequence& lhs,
        const baljsn::EncoderTestSequenceWithAllCategoriesSequence& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithAllCategoriesSequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged0&,
        const baljsn::EncoderTestSequenceWithUntagged0&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged0&,
        const baljsn::EncoderTestSequenceWithUntagged0&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged0& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged10Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged10Sequence&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged10Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged10Sequence&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged10Sequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged11Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged11Sequence&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged11Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged11Sequence&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged11Sequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged11Sequence1&,
        const baljsn::EncoderTestSequenceWithUntagged11Sequence1&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged11Sequence1&,
        const baljsn::EncoderTestSequenceWithUntagged11Sequence1&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged11Sequence1& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged12Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged12Sequence&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged12Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged12Sequence&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged12Sequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged13Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged13Sequence&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged13Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged13Sequence&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged13Sequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged14& lhs,
        const baljsn::EncoderTestSequenceWithUntagged14& rhs)
{
    return  lhs.attribute0() == rhs.attribute0()
         && lhs.attribute1() == rhs.attribute1()
         && lhs.attribute2() == rhs.attribute2();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged14& lhs,
        const baljsn::EncoderTestSequenceWithUntagged14& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged14& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged1Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged1Sequence&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged1Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged1Sequence&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged1Sequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged2& lhs,
        const baljsn::EncoderTestSequenceWithUntagged2& rhs)
{
    return  lhs.attribute0() == rhs.attribute0();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged2& lhs,
        const baljsn::EncoderTestSequenceWithUntagged2& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged2& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged3Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged3Sequence&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged3Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged3Sequence&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged3Sequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged3Sequence1&,
        const baljsn::EncoderTestSequenceWithUntagged3Sequence1&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged3Sequence1&,
        const baljsn::EncoderTestSequenceWithUntagged3Sequence1&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged3Sequence1& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged4Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged4Sequence&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged4Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged4Sequence&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged4Sequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged5Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged5Sequence&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged5Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged5Sequence&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged5Sequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged6& lhs,
        const baljsn::EncoderTestSequenceWithUntagged6& rhs)
{
    return  lhs.attribute0() == rhs.attribute0()
         && lhs.attribute1() == rhs.attribute1();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged6& lhs,
        const baljsn::EncoderTestSequenceWithUntagged6& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged6& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged7Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged7Sequence&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged7Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged7Sequence&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged7Sequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged7Sequence1&,
        const baljsn::EncoderTestSequenceWithUntagged7Sequence1&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged7Sequence1&,
        const baljsn::EncoderTestSequenceWithUntagged7Sequence1&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged7Sequence1& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged7Sequence2&,
        const baljsn::EncoderTestSequenceWithUntagged7Sequence2&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged7Sequence2&,
        const baljsn::EncoderTestSequenceWithUntagged7Sequence2&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged7Sequence2& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged8Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged8Sequence&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged8Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged8Sequence&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged8Sequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged8Sequence1&,
        const baljsn::EncoderTestSequenceWithUntagged8Sequence1&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged8Sequence1&,
        const baljsn::EncoderTestSequenceWithUntagged8Sequence1&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged8Sequence1& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged9Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged9Sequence&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged9Sequence&,
        const baljsn::EncoderTestSequenceWithUntagged9Sequence&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged9Sequence& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged9Sequence1&,
        const baljsn::EncoderTestSequenceWithUntagged9Sequence1&)
{
    return true;
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged9Sequence1&,
        const baljsn::EncoderTestSequenceWithUntagged9Sequence1&)
{
    return false;
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged9Sequence1& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestChoiceWithAllCategories& lhs,
        const baljsn::EncoderTestChoiceWithAllCategories& rhs)
{
    typedef baljsn::EncoderTestChoiceWithAllCategories Class;
    if (lhs.selectionId() == rhs.selectionId()) {
        switch (rhs.selectionId()) {
          case Class::SELECTION_ID_CHAR_ARRAY:
            return lhs.charArray() == rhs.charArray();
          case Class::SELECTION_ID_CHOICE:
            return lhs.choice() == rhs.choice();
          case Class::SELECTION_ID_CUSTOMIZED_TYPE:
            return lhs.customizedType() == rhs.customizedType();
          case Class::SELECTION_ID_ENUMERATION:
            return lhs.enumeration() == rhs.enumeration();
          case Class::SELECTION_ID_SEQUENCE:
            return lhs.sequence() == rhs.sequence();
          case Class::SELECTION_ID_SIMPLE:
            return lhs.simple() == rhs.simple();
          default:
            BSLS_ASSERT(Class::SELECTION_ID_UNDEFINED == rhs.selectionId());
            return true;
        }
    }
    else {
        return false;
   }
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestChoiceWithAllCategories& lhs,
        const baljsn::EncoderTestChoiceWithAllCategories& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestChoiceWithAllCategories& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestDegenerateChoice1& lhs,
        const baljsn::EncoderTestDegenerateChoice1& rhs)
{
    typedef baljsn::EncoderTestDegenerateChoice1 Class;
    if (lhs.selectionId() == rhs.selectionId()) {
        switch (rhs.selectionId()) {
          case Class::SELECTION_ID_SEQUENCE:
            return lhs.sequence() == rhs.sequence();
          default:
            BSLS_ASSERT(Class::SELECTION_ID_UNDEFINED == rhs.selectionId());
            return true;
        }
    }
    else {
        return false;
   }
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestDegenerateChoice1& lhs,
        const baljsn::EncoderTestDegenerateChoice1& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestDegenerateChoice1& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestEmployee& lhs,
        const baljsn::EncoderTestEmployee& rhs)
{
    return  lhs.name() == rhs.name()
         && lhs.homeAddress() == rhs.homeAddress()
         && lhs.age() == rhs.age();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestEmployee& lhs,
        const baljsn::EncoderTestEmployee& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestEmployee& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithAllCategories& lhs,
        const baljsn::EncoderTestSequenceWithAllCategories& rhs)
{
    return  lhs.charArray() == rhs.charArray()
         && lhs.array() == rhs.array()
         && lhs.choice() == rhs.choice()
         && lhs.customizedType() == rhs.customizedType()
         && lhs.enumeration() == rhs.enumeration()
         && lhs.nullableValue() == rhs.nullableValue()
         && lhs.sequence() == rhs.sequence()
         && lhs.simple() == rhs.simple();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithAllCategories& lhs,
        const baljsn::EncoderTestSequenceWithAllCategories& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithAllCategories& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged1& lhs,
        const baljsn::EncoderTestSequenceWithUntagged1& rhs)
{
    return  lhs.sequence() == rhs.sequence();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged1& lhs,
        const baljsn::EncoderTestSequenceWithUntagged1& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged1& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged10& lhs,
        const baljsn::EncoderTestSequenceWithUntagged10& rhs)
{
    return  lhs.sequence() == rhs.sequence()
         && lhs.attribute0() == rhs.attribute0()
         && lhs.attribute1() == rhs.attribute1();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged10& lhs,
        const baljsn::EncoderTestSequenceWithUntagged10& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged10& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged11& lhs,
        const baljsn::EncoderTestSequenceWithUntagged11& rhs)
{
    return  lhs.attribute0() == rhs.attribute0()
         && lhs.sequence() == rhs.sequence()
         && lhs.sequence1() == rhs.sequence1();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged11& lhs,
        const baljsn::EncoderTestSequenceWithUntagged11& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged11& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged12& lhs,
        const baljsn::EncoderTestSequenceWithUntagged12& rhs)
{
    return  lhs.attribute0() == rhs.attribute0()
         && lhs.sequence() == rhs.sequence()
         && lhs.attribute1() == rhs.attribute1();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged12& lhs,
        const baljsn::EncoderTestSequenceWithUntagged12& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged12& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged13& lhs,
        const baljsn::EncoderTestSequenceWithUntagged13& rhs)
{
    return  lhs.attribute0() == rhs.attribute0()
         && lhs.attribute1() == rhs.attribute1()
         && lhs.sequence() == rhs.sequence();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged13& lhs,
        const baljsn::EncoderTestSequenceWithUntagged13& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged13& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged3& lhs,
        const baljsn::EncoderTestSequenceWithUntagged3& rhs)
{
    return  lhs.sequence() == rhs.sequence()
         && lhs.sequence1() == rhs.sequence1();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged3& lhs,
        const baljsn::EncoderTestSequenceWithUntagged3& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged3& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged4& lhs,
        const baljsn::EncoderTestSequenceWithUntagged4& rhs)
{
    return  lhs.sequence() == rhs.sequence()
         && lhs.attribute0() == rhs.attribute0();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged4& lhs,
        const baljsn::EncoderTestSequenceWithUntagged4& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged4& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged5& lhs,
        const baljsn::EncoderTestSequenceWithUntagged5& rhs)
{
    return  lhs.attribute0() == rhs.attribute0()
         && lhs.sequence() == rhs.sequence();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged5& lhs,
        const baljsn::EncoderTestSequenceWithUntagged5& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged5& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged7& lhs,
        const baljsn::EncoderTestSequenceWithUntagged7& rhs)
{
    return  lhs.sequence() == rhs.sequence()
         && lhs.sequence1() == rhs.sequence1()
         && lhs.sequence2() == rhs.sequence2();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged7& lhs,
        const baljsn::EncoderTestSequenceWithUntagged7& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged7& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged8& lhs,
        const baljsn::EncoderTestSequenceWithUntagged8& rhs)
{
    return  lhs.sequence() == rhs.sequence()
         && lhs.sequence1() == rhs.sequence1()
         && lhs.attribute0() == rhs.attribute0();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged8& lhs,
        const baljsn::EncoderTestSequenceWithUntagged8& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged8& rhs)
{
    return rhs.print(stream, 0, -1);
}


inline
bool baljsn::operator==(
        const baljsn::EncoderTestSequenceWithUntagged9& lhs,
        const baljsn::EncoderTestSequenceWithUntagged9& rhs)
{
    return  lhs.sequence() == rhs.sequence()
         && lhs.attribute0() == rhs.attribute0()
         && lhs.sequence1() == rhs.sequence1();
}

inline
bool baljsn::operator!=(
        const baljsn::EncoderTestSequenceWithUntagged9& lhs,
        const baljsn::EncoderTestSequenceWithUntagged9& rhs)
{
    return !(lhs == rhs);
}

inline
bsl::ostream& baljsn::operator<<(
        bsl::ostream& stream,
        const baljsn::EncoderTestSequenceWithUntagged9& rhs)
{
    return rhs.print(stream, 0, -1);
}

}  // close enterprise namespace
#endif

// GENERATED BY BLP_BAS_CODEGEN_VERSION
// USING bas_codegen.pl --mode msg --noAggregateConversion --noExternalization --msgComponent=encoder_testtypes --package=baljsn baljsn_encoder_testtypes.xsd
// ----------------------------------------------------------------------------
// NOTICE:
//      Copyright 2020 Bloomberg Finance L.P. All rights reserved.
//      Property of Bloomberg Finance L.P. (BFLP)
//      This software is made available solely pursuant to the
//      terms of a BFLP license agreement which governs its use.
// ------------------------------- END-OF-FILE --------------------------------