X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=src%2Finclude%2Futils%2Fnumeric.h;h=d298718f7d70d8b2bc8ba39170c0823006f7c7b4;hb=4a14f13a0abfbf7e7d44a3d2689444d1806aa9dc;hp=6096439e5b309ffe14cbfb4efdce20fb5f77884e;hpb=0239800893ef4901e3c085e06534934a485d3bf0;p=postgresql diff --git a/src/include/utils/numeric.h b/src/include/utils/numeric.h index 6096439e5b..d298718f7d 100644 --- a/src/include/utils/numeric.h +++ b/src/include/utils/numeric.h @@ -5,9 +5,9 @@ * * Original coding 1998, Jan Wieck. Heavily revised 2003, Tom Lane. * - * Copyright (c) 1998-2010, PostgreSQL Global Development Group + * Copyright (c) 1998-2014, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/include/utils/numeric.h,v 1.29 2010/01/02 16:58:10 momjian Exp $ + * src/include/utils/numeric.h * *------------------------------------------------------------------------- */ @@ -37,41 +37,9 @@ */ #define NUMERIC_MIN_SIG_DIGITS 16 - -/* - * Sign values and macros to deal with packing/unpacking n_sign_dscale - */ -#define NUMERIC_SIGN_MASK 0xC000 -#define NUMERIC_POS 0x0000 -#define NUMERIC_NEG 0x4000 -#define NUMERIC_NAN 0xC000 -#define NUMERIC_DSCALE_MASK 0x3FFF -#define NUMERIC_SIGN(n) ((n)->n_sign_dscale & NUMERIC_SIGN_MASK) -#define NUMERIC_DSCALE(n) ((n)->n_sign_dscale & NUMERIC_DSCALE_MASK) -#define NUMERIC_IS_NAN(n) (NUMERIC_SIGN(n) != NUMERIC_POS && \ - NUMERIC_SIGN(n) != NUMERIC_NEG) - - -/* - * The Numeric data type stored in the database - * - * NOTE: by convention, values in the packed form have been stripped of - * all leading and trailing zero digits (where a "digit" is of base NBASE). - * In particular, if the value is zero, there will be no digits at all! - * The weight is arbitrary in that case, but we normally set it to zero. - */ -typedef struct NumericData -{ - int32 vl_len_; /* varlena header (do not touch directly!) */ - uint16 n_sign_dscale; /* Sign + display scale */ - int16 n_weight; /* Weight of 1st digit */ - char n_data[1]; /* Digits (really array of NumericDigit) */ -} NumericData; - -typedef NumericData *Numeric; - -#define NUMERIC_HDRSZ (VARHDRSZ + sizeof(uint16) + sizeof(int16)) - +/* The actual contents of Numeric are private to numeric.c */ +struct NumericData; +typedef struct NumericData *Numeric; /* * fmgr interface macros @@ -87,6 +55,9 @@ typedef NumericData *Numeric; /* * Utility functions in numeric.c */ +extern bool numeric_is_nan(Numeric num); +int32 numeric_maximum_size(int32 typmod); extern char *numeric_out_sci(Numeric num, int scale); +extern char *numeric_normalize(Numeric num); #endif /* _PG_NUMERIC_H_ */