summaryrefslogtreecommitdiff
path: root/gtk/fallback-c89.c
diff options
context:
space:
mode:
authorChun-wei Fan <fanchunwei@src.gnome.org>2011-08-19 15:56:32 +0800
committerChun-wei Fan <fanchunwei@src.gnome.org>2011-08-20 11:17:43 +0800
commitdb3fecc5b9a06af7b015b241b8ee735b65f786ea (patch)
tree687513809169d8e78a74b987dc581a41ad285a34 /gtk/fallback-c89.c
parent054a62549738d2305486a43d88750d316be44f9b (diff)
downloadgtk+-db3fecc5b9a06af7b015b241b8ee735b65f786ea.tar.gz
Add fallback implemetation for rint()/round()
Add an implementation for rint() and round() for compilers that do not define one or both of them. Note that this file should be included after config.h was included.
Diffstat (limited to 'gtk/fallback-c89.c')
-rw-r--r--gtk/fallback-c89.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/gtk/fallback-c89.c b/gtk/fallback-c89.c
new file mode 100644
index 0000000000..8297e27d47
--- /dev/null
+++ b/gtk/fallback-c89.c
@@ -0,0 +1,58 @@
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 2011 Chun-wei Fan <fanc999@yahoo.com.tw>
+ *
+ * Author: Chun-wei Fan <fanc999@yahoo.com.tw>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <math.h>
+
+/* Workaround for round() for non-GCC/non-C99 compilers */
+#ifndef HAVE_ROUND
+static inline double
+round (double x)
+{
+ if (x >= 0)
+ return floor (x + 0.5);
+ else
+ return ceil (x - 0.5);
+}
+#endif
+
+/* Workaround for rint() for non-GCC/non-C99 compilers */
+#ifndef HAVE_RINT
+static inline double
+rint (double x)
+{
+ if (ceil (x + 0.5) == floor (x + 0.5))
+ {
+ int a;
+ a = (int) ceil (x);
+ if (a % 2 == 0)
+ return ceil (x);
+ else
+ return floor (x);
+ }
+ else
+ {
+ if (x >= 0)
+ return floor (x + 0.5);
+ else
+ return ceil (x - 0.5);
+ }
+}
+#endif \ No newline at end of file