/*
** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2003.
** See ../LICENSE for license information.
**
*/
/*
** cprim.h
*/
# ifndef CPRIM_H
# define CPRIM_H
/*
** These numbers are not enums, since we need to extend it with all other
** types. They index entries in cttable.
*/
immut_typedef int cprim;
/*@constant int CTX_UNKNOWN;@*/
# define CTX_UNKNOWN 0
/*@constant int CTX_VOID;@*/
# define CTX_VOID 1
/*@constant int CTX_BOOL;@*/
# define CTX_BOOL 2
/*@constant int CTX_UCHAR;@*/
# define CTX_UCHAR 3 /* unsigned char */
/*@constant int CTX_CHAR;@*/
# define CTX_CHAR 4
extern bool cprim_isUnsignedChar (/*@sef@*/ cprim p_c);
# define cprim_isUnsignedChar(c) ((c) == CTX_UCHAR)
extern bool cprim_isSignedChar (/*@sef@*/ cprim p_c);
# define cprim_isSignedChar(c) ((c) == CTX_CHAR)
extern bool cprim_isAnyChar (/*@sef@*/ cprim p_c);
# define cprim_isAnyChar(c) ((c) >= CTX_UCHAR && (c) <= CTX_CHAR)
/*
** only a few combiniations of type qualifiers and base types are
** recognized in the ANSI standard. Splint treats these as distinct
** types.
*/
/*@constant int CTX_INT;@*/
# define CTX_INT 5
/*@constant int CTX_UINT;@*/ /* unsigned int */
# define CTX_UINT 6
/*@constant int CTX_SINT;@*/ /* short int */
# define CTX_SINT 7
/*@constant int CTX_USINT;@*/ /* unsigned short int */
# define CTX_USINT 8
/*@constant int CTX_LINT;@*/ /* long int */
# define CTX_LINT 9
/*@constant int CTX_ULINT;@*/ /* unsigned long int */
# define CTX_ULINT 10
/*@constant int CTX_LLINT;@*/ /* long long int (WG14/N843) */
# define CTX_LLINT 11
/*@constant int CTX_ULLINT;@*/ /* unsigned long long int (WG14/N843) */
# define CTX_ULLINT 12
/*@constant int CTX_ANYINTEGRAL;@*/
# define CTX_ANYINTEGRAL 13
/*@constant int CTX_UNSIGNEDINTEGRAL;@*/
# define CTX_UNSIGNEDINTEGRAL 14
/*@constant int CTX_SIGNEDINTEGRAL;@*/
# define CTX_SIGNEDINTEGRAL 15
/*@constant int CTX_FLOAT;@*/
# define CTX_FLOAT 16
/*@constant int CTX_DOUBLE;@*/
# define CTX_DOUBLE 17
/*@constant int CTX_LDOUBLE;@*/ /* long double */
# define CTX_LDOUBLE 18
extern bool cprim_isAnyInt (/*@sef@*/ cprim p_c);
extern bool cprim_isAnyReal (/*@sef@*/ cprim p_c);
# define cprim_isAnyInt(c) ((c) >= CTX_INT && (c) <= CTX_SIGNEDINTEGRAL)
extern bool cprim_isAnyUnsignedInt (/*@sef@*/ cprim p_c);
# define cprim_isAnyUnsignedInt(c) ((c) == CTX_UINT || (c) == CTX_USINT \
|| (c) == CTX_ULINT || (c) == CTX_ULLINT \
|| (c) == CTX_UNSIGNEDINTEGRAL)
# define cprim_isAnyReal(c) ((c) >= CTX_FLOAT && (c) <= CTX_LDOUBLE)
/*@constant int CTX_LAST;@*/
# define CTX_LAST CTX_LDOUBLE
/*@constant cprim cprim_int@*/
# define cprim_int CTX_INT
extern bool cprim_equal (cprim, cprim);
# define cprim_equal(p1,p2) ((p1) == (p2))
extern bool cprim_closeEnough (cprim, cprim) /*@*/ ;
extern bool cprim_closeEnoughDeep (cprim, cprim) /*@*/ ;
extern /*@only@*/ cstring cprim_unparse (cprim) /*@*/ ;
extern cprim cprim_fromInt (int p_i);
extern bool cprim_isInt(cprim p_c);
extern int cprim_getExpectedBits (cprim p_c) /*@*/ ;
# else
# error "Multiple include"
# endif
syntax highlighted by Code2HTML, v. 0.9.1