| // Copyright 2020 Google LLC |
| // |
| // 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 |
| // |
| // https://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. |
| // |
| |
| // Basic integer type definitions. |
| |
| #ifndef LIBTEXTCLASSIFIER_UTILS_BASE_INTEGRAL_TYPES_H_ |
| #define LIBTEXTCLASSIFIER_UTILS_BASE_INTEGRAL_TYPES_H_ |
| |
| #include "utils/base/config.h" |
| |
| namespace libtextclassifier3 { |
| |
| typedef unsigned int uint; |
| typedef unsigned int uint32; |
| typedef unsigned long long uint64; |
| |
| #ifndef SWIG |
| typedef int int32; |
| typedef unsigned char uint8; // NOLINT |
| typedef signed char int8; // NOLINT |
| typedef unsigned short uint16; // NOLINT |
| typedef signed short int16; // NOLINT |
| |
| // A type to represent a Unicode code-point value. As of Unicode 4.0, |
| // such values require up to 21 bits. |
| // (For type-checking on pointers, make this explicitly signed, |
| // and it should always be the signed version of whatever int32 is.) |
| typedef signed int char32; |
| #endif // SWIG |
| |
| #ifdef COMPILER_MSVC |
| typedef __int64 int64; |
| #else |
| typedef long long int64; // NOLINT |
| #endif // COMPILER_MSVC |
| |
| // Some compile-time assertions that our new types have the intended size. |
| // static_assert exists only since C++11, so we need an ifdef. |
| #ifdef LANG_CXX11 |
| static_assert(sizeof(int) == 4, "Our typedefs depend on int being 32 bits"); |
| static_assert(sizeof(uint32) == 4, "wrong size"); |
| static_assert(sizeof(int32) == 4, "wrong size"); |
| static_assert(sizeof(uint8) == 1, "wrong size"); |
| static_assert(sizeof(int8) == 1, "wrong size"); |
| static_assert(sizeof(uint16) == 2, "wrong size"); |
| static_assert(sizeof(int16) == 2, "wrong size"); |
| static_assert(sizeof(char32) == 4, "wrong size"); |
| static_assert(sizeof(int64) == 8, "wrong size"); |
| #endif // LANG_CXX11 |
| |
| // There are still some requirements that we build these headers in |
| // C-compatibility mode. Unfortunately, -Wall doesn't like c-style |
| // casts, and C doesn't know how to read braced-initialization for |
| // integers. |
| #if defined(__cplusplus) |
| const uint16 kuint16max{0xFFFF}; |
| const int16 kint16max{0x7FFF}; |
| const int16 kint16min{~0x7FFF}; |
| const uint32 kuint32max{0xFFFFFFFF}; |
| const int32 kint32max{0x7FFFFFFF}; |
| #else // not __cplusplus, this branch exists only for C-compat |
| static const uint16 kuint16max = ((uint16)0xFFFF); |
| static const int16 kint16min = ((int16)~0x7FFF); |
| static const int16 kint16max = ((int16)0x7FFF); |
| static const uint32 kuint32max = ((uint32)0xFFFFFFFF); |
| static const int32 kint32max = ((int32)0x7FFFFFFF); |
| #endif // __cplusplus |
| |
| } // namespace libtextclassifier3 |
| |
| #endif // LIBTEXTCLASSIFIER_UTILS_BASE_INTEGRAL_TYPES_H_ |