diff options
author | Robert Haas <rhaas@postgresql.org> | 2010-07-30 04:30:23 +0000 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2010-07-30 04:30:23 +0000 |
commit | 8a4dc94ca0efec20b656f61f2efd3ab7f0d64ae7 (patch) | |
tree | 299866965be9338977177bd4d145d31a621d2ae2 /src/include/utils/numeric.h | |
parent | f223bb7a4175e921c37bb12e9417541655219564 (diff) | |
download | postgresql-8a4dc94ca0efec20b656f61f2efd3ab7f0d64ae7.tar.gz postgresql-8a4dc94ca0efec20b656f61f2efd3ab7f0d64ae7.zip |
Make details of the Numeric representation private to numeric.c.
Review by Tom Lane.
Diffstat (limited to 'src/include/utils/numeric.h')
-rw-r--r-- | src/include/utils/numeric.h | 42 |
1 files changed, 6 insertions, 36 deletions
diff --git a/src/include/utils/numeric.h b/src/include/utils/numeric.h index 6096439e5b3..7bbe34bdeac 100644 --- a/src/include/utils/numeric.h +++ b/src/include/utils/numeric.h @@ -7,7 +7,7 @@ * * Copyright (c) 1998-2010, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/include/utils/numeric.h,v 1.29 2010/01/02 16:58:10 momjian Exp $ + * $PostgreSQL: pgsql/src/include/utils/numeric.h,v 1.30 2010/07/30 04:30:23 rhaas Exp $ * *------------------------------------------------------------------------- */ @@ -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,8 @@ typedef NumericData *Numeric; /* * Utility functions in numeric.c */ +extern bool numeric_is_nan(Numeric num); +int32 numeric_maximum_size(int32 typemod); extern char *numeric_out_sci(Numeric num, int scale); #endif /* _PG_NUMERIC_H_ */ |