Added cddlib-094h from http://www.inf.ethz.ch/personal/fukudak/cdd_home/

Change-Id: I64519509269e434b1b9ea87c3fe0805e711c0ac9
diff --git a/third_party/cddlib/lib-src/cddmp.c b/third_party/cddlib/lib-src/cddmp.c
new file mode 100644
index 0000000..fe04849
--- /dev/null
+++ b/third_party/cddlib/lib-src/cddmp.c
@@ -0,0 +1,185 @@
+/* cddmp.c       (cddlib arithmetic operations using gmp)
+   written by Komei Fukuda, fukuda@math.ethz.ch
+   Version 0.94h, April 30, 2015
+*/
+/* This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "setoper.h"  /* set operation library header (Ver. March 16,1995 or later) */
+#include "cdd.h"
+
+void dd_set_global_constants()
+{
+ dd_init(dd_zero);
+ dd_init(dd_minuszero);
+ dd_init(dd_one);
+ dd_init(dd_minusone);
+ dd_init(dd_purezero);
+  
+ time(&dd_statStartTime); /* cddlib starting time */
+ dd_statBApivots=0;  /* basis finding pivots */
+ dd_statCCpivots=0;  /* criss-cross pivots */
+ dd_statDS1pivots=0; /* phase 1 pivots */
+ dd_statDS2pivots=0; /* phase 2 pivots */
+ dd_statACpivots=0;  /* anticycling (cc) pivots */
+
+ dd_choiceLPSolverDefault=dd_DualSimplex;  /* Default LP solver Algorithm */
+ dd_choiceRedcheckAlgorithm=dd_DualSimplex;  /* Redundancy Checking Algorithm */
+ dd_choiceLexicoPivotQ=dd_TRUE;    /* whether to use the lexicographic pivot */
+ 
+#if defined GMPRATIONAL
+ dd_statBSpivots=0;  /* basis status checking pivots */
+ mpq_set_ui(dd_zero,0U,1U);
+ mpq_set_ui(dd_purezero,0U,1U);
+ mpq_set_ui(dd_one,1U,1U);
+ mpq_set_si(dd_minusone,-1L,1U);
+ ddf_set_global_constants();
+#elif defined GMPFLOAT
+ mpf_set_d(dd_zero,dd_almostzero);
+ mpf_set_ui(dd_purezero,0U);
+ mpf_set_ui(dd_one,1U);
+ mpf_set_si(dd_minusone,-1L,1U);
+#else
+ dd_zero[0]= dd_almostzero;  /*real zero */
+ dd_purezero[0]= 0.0;
+ dd_one[0]= 1L;
+ dd_minusone[0]= -1L;
+#endif
+ dd_neg(dd_minuszero,dd_zero);
+}
+
+void dd_free_global_constants()
+{
+ dd_clear(dd_zero);
+ dd_clear(dd_minuszero);
+ dd_clear(dd_one);
+ dd_clear(dd_minusone);
+ dd_clear(dd_purezero);
+  
+ time(&dd_statStartTime); /* cddlib starting time */
+ dd_statBApivots=0;  /* basis finding pivots */
+ dd_statCCpivots=0;  /* criss-cross pivots */
+ dd_statDS1pivots=0; /* phase 1 pivots */
+ dd_statDS2pivots=0; /* phase 2 pivots */
+ dd_statACpivots=0;  /* anticycling (cc) pivots */
+
+ dd_choiceLPSolverDefault=dd_DualSimplex;  /* Default LP solver Algorithm */
+ dd_choiceRedcheckAlgorithm=dd_DualSimplex;  /* Redundancy Checking Algorithm */
+ dd_choiceLexicoPivotQ=dd_TRUE;    /* whether to use the lexicographic pivot */
+ 
+#if defined GMPRATIONAL
+ dd_statBSpivots=0;  /* basis status checking pivots */
+ ddf_free_global_constants();
+#endif
+}
+
+
+#if defined GMPRATIONAL
+void ddd_mpq_set_si(mytype a,signed long b)
+{
+  mpz_t nz, dz;
+
+  mpz_init(nz); mpz_init(dz);
+
+  mpz_set_si(nz, b);
+  mpz_set_ui(dz, 1U);
+  mpq_set_num(a, nz);
+  mpq_set_den(a, dz);
+  mpz_clear(nz);  mpz_clear(dz);
+}
+#endif
+
+#if defined dd_CDOUBLE
+void ddd_init(mytype a)   
+{
+  a[0]=0L;
+}
+  
+void ddd_clear(mytype a)
+{
+  /* a[0]=0L;  */
+}
+
+void ddd_set(mytype a,mytype b)
+{
+  a[0]=b[0];
+}
+
+void ddd_set_d(mytype a,double b)
+{
+  a[0]=b;
+}
+
+void ddd_set_si(mytype a,signed long b)
+{
+  a[0]=(double)b;
+}
+
+void ddd_set_si2(mytype a,signed long b, unsigned long c)
+{
+  a[0]=(double)b/(double)c;
+}
+
+void ddd_add(mytype a,mytype b,mytype c)
+{
+  a[0]=b[0]+c[0];
+}
+
+void ddd_sub(mytype a,mytype b,mytype c)
+{
+  a[0]=b[0]-c[0];
+}
+
+void ddd_mul(mytype a,mytype b,mytype c)
+{
+  a[0]=b[0]*c[0];
+}
+
+void ddd_div(mytype a,mytype b,mytype c)
+{
+  a[0]=b[0]/c[0];
+}
+
+void ddd_neg(mytype a,mytype b)
+{
+  a[0]=-b[0];
+}
+
+void ddd_inv(mytype a,mytype b)
+{
+  a[0]=1/b[0];
+}
+
+int ddd_cmp(mytype a,mytype b)
+{
+  if (a[0]-b[0]>0) return 1;
+  else if (a[0]-b[0]>=0) return 0;
+  else return -1;
+}
+
+int ddd_sgn(mytype a)
+{
+  if (a[0]>0) return 1;
+  else if (a[0]>=0) return 0;
+  else return -1;
+}
+
+double ddd_get_d(mytype a)
+{
+  return a[0];
+}
+#endif
+
+/* end of  cddmp.h  */