summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/prc/PRCdouble.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/prc/PRCdouble.h')
-rw-r--r--Build/source/utils/asymptote/prc/PRCdouble.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/prc/PRCdouble.h b/Build/source/utils/asymptote/prc/PRCdouble.h
new file mode 100644
index 00000000000..4a3a79dccc5
--- /dev/null
+++ b/Build/source/utils/asymptote/prc/PRCdouble.h
@@ -0,0 +1,140 @@
+#ifndef __PRC_DOUBLE_H
+#define __PRC_DOUBLE_H
+
+#include <cstdlib>
+#include <cmath>
+#include <cstring>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef BYTE_ORDER
+# undef WORDS_BIG_ENDIAN
+# undef WORDS_LITTLE_ENDIAN
+# if BYTE_ORDER == BIG_ENDIAN
+# define WORDS_BIG_ENDIAN 1
+# endif
+# if BYTE_ORDER == LITTLE_ENDIAN
+# define WORDS_LITTLE_ENDIAN 1
+# endif
+#endif
+
+// from Adobe's documentation
+
+union ieee754_double
+{
+ double d;
+ /* This is the IEEE 754 double-precision format. */
+ struct
+ {
+#ifdef WORDS_BIGENDIAN
+ unsigned int negative:1;
+ unsigned int exponent:11;
+ /* Together these comprise the mantissa. */
+ unsigned int mantissa0:20;
+ unsigned int mantissa1:32;
+#else
+ /* Together these comprise the mantissa. */
+ unsigned int mantissa1:32;
+ unsigned int mantissa0:20;
+ unsigned int exponent:11;
+ unsigned int negative:1;
+#endif
+ } ieee;
+};
+
+union ieee754_float
+{
+ float f;
+ /* This is the IEEE 754 float-precision format. */
+ struct {
+#ifdef WORDS_BIGENDIAN
+ unsigned int negative:1;
+ unsigned int exponent:8;
+ unsigned int mantissa:23;
+#else
+ unsigned int mantissa:23;
+ unsigned int exponent:8;
+ unsigned int negative:1;
+#endif
+ } ieee;
+};
+
+enum ValueType {VT_double,VT_exponent};
+
+struct sCodageOfFrequentDoubleOrExponent
+{
+ short Type;
+ short NumberOfBits;
+ unsigned Bits;
+ union {
+ unsigned ul[2];
+ double Value;
+ } u2uod;
+};
+
+#ifdef WORDS_BIGENDIAN
+# define DOUBLEWITHTWODWORD(upper,lower) upper,lower
+# define UPPERPOWER (0)
+# define LOWERPOWER (!UPPERPOWER)
+
+# define NEXTBYTE(pbd) ((pbd)++)
+# define PREVIOUSBYTE(pbd) ((pbd)--)
+# define MOREBYTE(pbd,pbend) ((pbd)<=(pbend))
+# define OFFSETBYTE(pbd,offset) ((pbd)+=offset)
+# define BEFOREBYTE(pbd) ((pbd)-1)
+# define DIFFPOINTERS(p1,p2) ((p1)-(p2))
+# define SEARCHBYTE(pbstart,b,nb) (unsigned char *)memrchr((pbstart),(b),(nb))
+# define BYTEAT(pb,i) *((pb)-(i))
+#else
+# define DOUBLEWITHTWODWORD(upper,lower) lower,upper
+# define UPPERPOWER (1)
+# define LOWERPOWER (!UPPERPOWER)
+
+# define NEXTBYTE(pbd) ((pbd)--)
+# define PREVIOUSBYTE(pbd) ((pbd)++)
+# define MOREBYTE(pbd,pbend) ((pbd)>=(pbend))
+# define OFFSETBYTE(pbd,offset) ((pbd)-=offset)
+# define BEFOREBYTE(pbd) ((pbd)+1)
+# define DIFFPOINTERS(p1,p2) ((unsigned)((p2)-(p1)))
+# define SEARCHBYTE(pbstart,b,nb) (unsigned char *)memchr((pbstart),(b),(nb))
+# define BYTEAT(pb,i) *((pb)+(i))
+#endif
+
+#define MAXLENGTHFORCOMPRESSEDTYPE ((22+1+1+4+6*(1+8))+7)/8
+
+#define NEGATIVE(d) (((union ieee754_double *)&(d))->ieee.negative)
+#define EXPONENT(d) (((union ieee754_double *)&(d))->ieee.exponent)
+#define MANTISSA0(d) (((union ieee754_double *)&(d))->ieee.mantissa0)
+#define MANTISSA1(d) (((union ieee754_double *)&(d))->ieee.mantissa1)
+
+typedef unsigned char PRCbyte;
+typedef unsigned short PRCword;
+typedef unsigned PRCdword;
+
+extern PRCdword stadwZero[2],stadwNegativeZero[2];
+
+#define NUMBEROFELEMENTINACOFDOE (2077)
+
+#ifdef WORDS_BIGENDIAN
+# define DOUBLEWITHTWODWORDINTREE(upper,lower) {upper,lower}
+#else
+# define DOUBLEWITHTWODWORDINTREE(upper,lower) {lower,upper}
+#endif
+extern sCodageOfFrequentDoubleOrExponent acofdoe[NUMBEROFELEMENTINACOFDOE];
+
+struct sCodageOfFrequentDoubleOrExponent* getcofdoe(unsigned,short);
+
+#define STAT_V
+#define STAT_DOUBLE
+
+int stCOFDOECompare(const void*,const void*);
+
+#ifdef WORDS_BIGENDIAN
+#ifndef HAVE_MEMRCHR
+void *memrchr(const void *,int,size_t);
+#endif
+#endif
+
+#endif // __PRC_DOUBLE_H