// balber_berconstants.h                                              -*-C++-*-

// ----------------------------------------------------------------------------
//                                   NOTICE
//
// This component is not up to date with current BDE coding standards, and
// should not be used as an example for new development.
// ----------------------------------------------------------------------------

#ifndef INCLUDED_BALBER_BERCONSTANTS
#define INCLUDED_BALBER_BERCONSTANTS

#include <bsls_ident.h>
BSLS_IDENT("$Id: $")

//@PURPOSE: Provide namespace for BER-related constants.
//
//@CLASSES:
//  balber::BerConstants: namespace for BER-related constants
//
//@SEE_ALSO: BER Specification (ITU-T X.690)
//
//@DESCRIPTION: The 'balber::BerConstants' 'struct' defined in this component
// defines two enumerations, 'balber::TagClass' and 'balber::TagType', that
// contain symbolic constants for the corresponding tag classes and tag types,
// as defined in the BER specification (X.690).
//
///Usage
///-----
// TBD

#include <balscm_version.h>

#include <bsl_iosfwd.h>

#ifndef BDE_OMIT_INTERNAL_DEPRECATED
#undef UNIVERSAL
#undef APPLICATION
#undef CONTEXT_SPECIFIC
#undef PRIVATE
#undef PRIMITIVE
#undef CONSTRUCTED
#endif // BDE_OMIT_INTERNAL_DEPRECATED

namespace BloombergLP {
namespace balber {

                            // ===================
                            // struct BerConstants
                            // ===================

struct BerConstants {
    // This 'struct' contains enumerations of the constants used by the BER
    // encoder and decoder.

    enum TagClass {
        // Enumeration of the four possible BER tag classes.

        e_UNIVERSAL         = 0x00  // the universal tag class
      , e_APPLICATION       = 0x40  // the application tag class
      , e_CONTEXT_SPECIFIC  = 0x80  // the context-specific tag class
      , e_PRIVATE           = 0xC0  // the private tag class

#ifndef BDE_OMIT_INTERNAL_DEPRECATED
      , BDEM_UNIVERSAL         = e_UNIVERSAL
      , BDEM_APPLICATION       = e_APPLICATION
      , BDEM_CONTEXT_SPECIFIC  = e_CONTEXT_SPECIFIC
      , BDEM_PRIVATE           = e_PRIVATE

      , UNIVERSAL        = e_UNIVERSAL
      , APPLICATION      = e_APPLICATION
      , CONTEXT_SPECIFIC = e_CONTEXT_SPECIFIC
      , PRIVATE          = e_PRIVATE
#endif // BDE_OMIT_INTERNAL_DEPRECATED
    };

    enum TagType {
        // Enumeration of the two possible BER tag types.

        e_PRIMITIVE   = 0x00  // the primitive tag type
      , e_CONSTRUCTED = 0x20  // the constructed tag type

#ifndef BDE_OMIT_INTERNAL_DEPRECATED
      , BDEM_PRIMITIVE   = e_PRIMITIVE
      , BDEM_CONSTRUCTED = e_CONSTRUCTED

      , PRIMITIVE   = e_PRIMITIVE
      , CONSTRUCTED = e_CONSTRUCTED
#endif // BDE_OMIT_INTERNAL_DEPRECATED
    };
};

// FREE OPERATORS
bsl::ostream& operator<<(bsl::ostream&          stream,
                         BerConstants::TagClass tagClass);
    // Format the specified 'tagClass' to the specified output 'stream' and
    // return a reference providing modifiable access to 'stream'.

bsl::ostream& operator<<(bsl::ostream&         stream,
                         BerConstants::TagType tagType);
    // Format the specified 'tagType' to the specified output 'stream' and
    // return a reference providing modifiable access to 'stream'.

}  // close package namespace
}  // close enterprise namespace
#endif

// ----------------------------------------------------------------------------
// Copyright 2015 Bloomberg Finance L.P.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ----------------------------- END-OF-FILE ----------------------------------