;;;; int-limits.scm -*- Scheme -*- ;;;; Kon Lovett, Mar '20 ;;;; Kon Lovett, Mar '09 ;;; Prelude #> #if defined(HAVE_LONG_LONG) && HAVE_LONG_LONG # define LONG_LONG_SIZE sizeof( long long ) # define UNSIGNED_LONG_LONG_SIZE sizeof( unsigned long long ) #else # define LONG_LONG_SIZE -1 # define UNSIGNED_LONG_LONG_SIZE -1 #endif #define MOST_POSITIVE_INT32 ((int32_t) 0x7fffffffL) //#ifdef C_SIXTY_FOUR #define MOST_POSITIVE_INT64 ((int64_t) 0x7fffffffffffffffLL) //#endif <# ;;; int-limits (module int-limits (;export ; machine-word-bits machine-word-precision maximum-unsigned-machine-word most-negative-machine-word most-positive-machine-word ; unsigned-integer32-size maximum-unsigned-integer32 most-negative-integer32 most-positive-integer32 ; unsigned-integer64-size maximum-unsigned-integer64 most-negative-integer64 most-positive-integer64 ;(for test) most-negative-long most-positive-long ; char-size unsigned-char-size short-size unsigned-short-size int-size unsigned-int-size long-size unsigned-long-size long-long-size unsigned-long-long-size ) (import scheme) (import (chicken base)) (import (chicken foreign)) ;; long (for test) (define most-negative-long (foreign-value "C_LONG_MIN" long)) (define most-positive-long (foreign-value "C_LONG_MAX" long)) ;; machine-word (define machine-word-bits (foreign-value "C_WORD_SIZE" int)) (define machine-word-precision (foreign-value "(C_WORD_SIZE - 1)" int)) (define maximum-unsigned-machine-word (foreign-value "C_UWORD_MAX" unsigned-long)) (cond-expand ((and 64bit macosx x86-64) ;C_WORD_MIN == (-C_WORD_MAX - 1) but (C_WORD_MAX + 1) is `long' overflow ;so cannot use `long'! (define most-negative-machine-word (foreign-value "C_WORD_MIN" integer64)) ) (else (define most-negative-machine-word (foreign-value "C_WORD_MIN" long)) ) ) (define most-positive-machine-word (foreign-value "C_WORD_MAX" long)) ;; integer32 (define unsigned-integer32-size (foreign-value "sizeof( uint32_t )" int)) (define maximum-unsigned-integer32 (foreign-value "((uint32_t)(~0UL))" unsigned-integer32)) (define most-negative-integer32 (foreign-value "((int32_t)(-MOST_POSITIVE_INT32 - 1))" integer32)) (define most-positive-integer32 (foreign-value "((int32_t)(MOST_POSITIVE_INT32))" integer32)) ;; integer64 (define unsigned-integer64-size (foreign-value "sizeof( uint64_t )" int)) #; (cond-expand (64bit (define maximum-unsigned-integer64 (foreign-value "((uint64_t)(~0ULL))" unsigned-integer64)) (define most-negative-integer64 (foreign-value "((uint64_t)(-MOST_POSITIVE_INT64 - 1))" integer64)) (define most-positive-integer64 (foreign-value "((uint64_t)(MOST_POSITIVE_INT64))" integer64)) ) (else (define maximum-unsigned-integer64 (- (expt 2 64) 1)) (define most-negative-integer64 (- (expt 2 63))) (define most-positive-integer64 (- (expt 2 63) 1)) ) ) (define maximum-unsigned-integer64 (foreign-value "((uint64_t)(~0ULL))" unsigned-integer64)) (define most-negative-integer64 (foreign-value "((uint64_t)(-MOST_POSITIVE_INT64 - 1))" integer64)) (define most-positive-integer64 (foreign-value "((uint64_t)(MOST_POSITIVE_INT64))" integer64)) ;; char (define unsigned-char-size (foreign-value "sizeof( unsigned char )" int)) (define char-size (foreign-value "sizeof( unsigned char )" int)) ;; short (define unsigned-short-size (foreign-value "sizeof( unsigned short )" int)) (define short-size (foreign-value "sizeof( unsigned short )" int)) ;; int (define unsigned-int-size (foreign-value "sizeof( unsigned int )" int)) (define int-size (foreign-value "sizeof( unsigned int )" int)) ;; long (define unsigned-long-size (foreign-value "sizeof( unsigned long )" int)) (define long-size (foreign-value "sizeof( unsigned long )" int)) ;; long-long (define unsigned-long-long-size (foreign-value "UNSIGNED_LONG_LONG_SIZE" int)) (define long-long-size (foreign-value "LONG_LONG_SIZE" int)) ) ;module int-limits