1 /* 2 * Copyright (C) 2004-2021 Edward F. Valeev 3 * 4 * This file is part of Libint. 5 * 6 * Libint is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU Lesser General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * Libint is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public License 17 * along with Libint. If not, see <http://www.gnu.org/licenses/>. 18 * 19 */ 20 21 #ifndef _libint2_include_libint2intrinsictypes_h_ 22 #define _libint2_include_libint2intrinsictypes_h_ 23 24 #include <libint2/config.h> 25 26 #include <limits.h> 27 28 /* determine default LIBINT2 64-bit integer */ 29 #ifdef HAVE_STDINT_H 30 31 #include <stdint.h> 32 /* because mpz_class does not mesh with long long types, only use those when absolutely necessary */ 33 #if UINT_LEAST64_MAX != ULONG_MAX 34 typedef uint_least64_t LIBINT2_UINT_LEAST64; 35 #else 36 typedef unsigned long int LIBINT2_UINT_LEAST64; 37 #endif 38 #if INT_LEAST64_MAX != LONG_MAX 39 typedef int_least64_t LIBINT2_INT_LEAST64; 40 #else 41 typedef long int LIBINT2_INT_LEAST64; 42 #endif 43 44 #else 45 46 #if defined(ULONGLONG_MAX) && !defined(ULLONG_MAX) 47 # define ULLONG_MAX ULONGLONG_MAX 48 #endif 49 50 # ifdef ULLONG_MAX 51 # if ULONGLONG_MAX == (0xffffffffffffffffuLL) /* uLL reqd for xlC */ 52 typedef long long LIBINT2_INT_LEAST64; 53 typedef unsigned long long LIBINT2_UINT_LEAST64; 54 # else 55 # error defaults not correct; you must hand modify libint2_intrinsic_types.h 56 # endif 57 # elif ULONG_MAX != 0xffffffff 58 59 # if ULONG_MAX == 18446744073709551615 /* 2**64 - 1 */ 60 typedef long LIBINT2_INT_LEAST64; 61 typedef unsigned long LIBINT2_UINT_LEAST64; 62 # else 63 # error defaults not correct; you must hand modify scint.h 64 # endif 65 # else /* assume no 64-bit integers */ 66 # error 64 bit integer types are required 67 # endif 68 69 #endif /* HAVE_STDINT_H */ 70 71 #endif 72