// bsls_types.h -*-C++-*- #ifndef INCLUDED_BSLS_TYPES #define INCLUDED_BSLS_TYPES #include <bsls_ident.h> BSLS_IDENT("$Id: $") //@PURPOSE: Provide a consistent interface for platform-dependent types. // //@CLASSES: // bsls::Types: namespace for platform-neutral type names // //@DESCRIPTION: This component provides a namespace for a set of 'typedef's // that provide a stable, portable interface to platform-dependent types. In // particular, this component supplies portable typenames for signed and // unsigned 64-bit integers ('bsls::Types::Int64' and 'bsls::Types::Uint64', // respectively), as well as the preferred integral type denoting the number of // elements in a container, and the number of bytes in a single block of memory // supplied by an allocator ('bsls::Types::size_type'). // ///Usage ///----- // The following illustrates how some of the types supplied by this component // might be used. // // 'bsls::Types::Int64' and 'bsls::Types::Uint64' identify the preferred // fundamental types denoting signed and unsigned 64-bit integers, // respectively: //.. // bsls::Types::Uint64 stimulus = 787000000000ULL; //.. // Clients can use these types in the same way as an 'int'. Clients can also // mix usage with other fundamental integral types: //.. // bsls::Types::Uint64 nationalDebt = 1000000000000ULL; // nationalDebt += stimulus; // // unsigned int deficitReduction = 1000000000; // nationalDebt -= deficitReduction; // // std::cout << "National Debt Level: " << nationalDebt << std::endl; //.. // 'bsls::Types::size_type' identifies the preferred integral type denoting the // number of elements in a container, and the number of bytes in a single block // of memory supplied by an allocator. For example, a typical use is as a // 'typedef' in an STL container: //.. // class vector { // // // ... // // public: // typedef bsls::Types::size_type size_type; // // // ... // }; //.. // Note that Standard Library facilities that work with numeric types can be // used with 'bsls::Types' as well. For example, the following code finds out // some facts about 'bsls::Types::Int64' in a platform-independent way: //.. // std::cout << "Min Int64 value: " // << std::numeric_limits<bsls::Types::Int64>::min() << std::endl // << "Max Int64 value: " // << std::numeric_limits<bsls::Types::Int64>::max() << std::endl; //.. #include <cstddef> namespace BloombergLP { namespace bsls { // ============ // struct Types // ============ struct Types{ // Provide a namespace for a suite of 'typedef's that encapsulate // platform-dependent types. // TYPES typedef std::size_t size_type; // The alias 'size_type' refers to the preferred type for denoting a // number of elements in either 'bslma' allocators or container types. typedef std::size_t UintPtr; typedef std::ptrdiff_t IntPtr; // The aliases 'UintPtr' and 'IntPtr' are guaranteed to have the same // size as pointers. typedef long long Int64; typedef unsigned long long Uint64; // The aliases 'Int64' and 'Uint64' stand for the appropriate types // that define signed and unsigned 64-bit integers, respectively, for // the appropriate supported platforms. }; } // close package namespace #ifndef BDE_OPENSOURCE_PUBLICATION // BACKWARD_COMPATIBILITY // ============================================================================ // BACKWARD COMPATIBILITY // ============================================================================ typedef bsls::Types bsls_Types; // This alias is defined for backward compatibility. #endif // BDE_OPENSOURCE_PUBLICATION -- BACKWARD_COMPATIBILITY } // close enterprise namespace #endif // ---------------------------------------------------------------------------- // Copyright 2013 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 ----------------------------------