summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dimension/parse.c2
-rw-r--r--libdimension/Makefile.am2
-rw-r--r--libdimension/color_map.c4
-rw-r--r--libdimension/dimension.h27
-rw-r--r--libdimension/dimension/inline.h48
-rw-r--r--libdimension/dimension/polynomial.h4
-rw-r--r--libdimension/inline.c (renamed from libdimension/inlines.c)0
-rw-r--r--libdimension/polynomial.c10
8 files changed, 60 insertions, 37 deletions
diff --git a/dimension/parse.c b/dimension/parse.c
index 4e748cc..5e6b6b1 100644
--- a/dimension/parse.c
+++ b/dimension/parse.c
@@ -564,7 +564,7 @@ dmnsn_eval_zeroary(dmnsn_astnode astnode, dmnsn_symbol_table *symtable)
switch (astnode.type) {
case DMNSN_AST_PI:
- dmnsn_make_ast_float(&ret, M_PI);
+ dmnsn_make_ast_float(&ret, 4.0*atan(1.0));
break;
case DMNSN_AST_TRUE:
dmnsn_make_ast_integer(&ret, 1);
diff --git a/libdimension/Makefile.am b/libdimension/Makefile.am
index 7875682..107d3a9 100644
--- a/libdimension/Makefile.am
+++ b/libdimension/Makefile.am
@@ -67,7 +67,7 @@ libdimension_la_SOURCES = $(nobase_include_HEADERS) \
finish_combination.c \
geometry.c \
gradient.c \
- inlines.c \
+ inline.c \
interior.c \
light.c \
list.c \
diff --git a/libdimension/color_map.c b/libdimension/color_map.c
index f567db6..1123789 100644
--- a/libdimension/color_map.c
+++ b/libdimension/color_map.c
@@ -47,9 +47,9 @@ dmnsn_add_color_map_entry(dmnsn_color_map *map, double n, dmnsn_color c)
dmnsn_color_map_entry entry = { .n = n, .color = c };
/* Sorted insertion */
- ssize_t i;
+ size_t i;
dmnsn_color_map_entry *other = dmnsn_array_last(map);
- for (i = dmnsn_array_size(map) - 1; i >= 0; --i, --other) {
+ for (i = dmnsn_array_size(map); i-- > 0;) {
if (other->n <= n)
break;
}
diff --git a/libdimension/dimension.h b/libdimension/dimension.h
index 985ff14..5f84054 100644
--- a/libdimension/dimension.h
+++ b/libdimension/dimension.h
@@ -25,32 +25,6 @@
#ifndef DIMENSION_H
#define DIMENSION_H
-/* Set some feature test macros so we work even in ANSI C mode */
-#ifndef _XOPEN_SOURCE
- #define _XOPEN_SOURCE 600
-#endif
-
-/* Handle inlines nicely without cheating and making them static. The
- DMNSN_INLINE macro is set appropriately for the version of C you're using,
- and non-inline versions are emitted in exactly one translation unit when
- necessary. */
-#ifndef DMNSN_INLINE
- #ifdef __cplusplus
- /* C++ inline semantics */
- #define DMNSN_INLINE inline
- #elif __STDC_VERSION__ >= 199901L
- /* C99 inline semantics */
- #define DMNSN_INLINE inline
- #elif defined(__GNUC__)
- /* GCC inline semantics */
- #define DMNSN_INLINE __extension__ extern __inline__
- #else
- /* Unknown C - mark functions static and hope the compiler is smart enough
- to inline them */
- #define DMNSN_INLINE static
- #endif
-#endif
-
#ifdef __cplusplus
/* We've been included from a C++ file; mark everything here as extern "C" */
extern "C" {
@@ -60,6 +34,7 @@ extern "C" {
typedef void dmnsn_free_fn(void *ptr);
/* Include all the libdimension headers */
+#include <dimension/inline.h>
#include <dimension/error.h>
#include <dimension/malloc.h>
#include <dimension/array.h>
diff --git a/libdimension/dimension/inline.h b/libdimension/dimension/inline.h
new file mode 100644
index 0000000..edf92b1
--- /dev/null
+++ b/libdimension/dimension/inline.h
@@ -0,0 +1,48 @@
+/*************************************************************************
+ * Copyright (C) 2009-2010 Tavian Barnes <tavianator@gmail.com> *
+ * *
+ * This file is part of The Dimension Library. *
+ * *
+ * The Dimension 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 3 of the *
+ * License, or (at your option) any later version. *
+ * *
+ * The Dimension 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 program. If not, see *
+ * <http://www.gnu.org/licenses/>. *
+ *************************************************************************/
+
+/*
+ * Handle inlines nicely without cheating and making them static. The
+ * DMNSN_INLINE macro is set appropriately for the version of C you're using,
+ * and non-inline versions are emitted in exactly one translation unit when
+ * necessary.
+ */
+
+#ifndef DIMENSION_INLINE_H
+#define DIMENSION_INLINE_H
+
+#ifndef DMNSN_INLINE
+ #ifdef __cplusplus
+ /* C++ inline semantics */
+ #define DMNSN_INLINE inline
+ #elif __STDC_VERSION__ >= 199901L
+ /* C99 inline semantics */
+ #define DMNSN_INLINE inline
+ #elif defined(__GNUC__)
+ /* GCC inline semantics */
+ #define DMNSN_INLINE __extension__ extern __inline__
+ #else
+ /* Unknown C - mark functions static and hope the compiler is smart enough
+ to inline them */
+ #define DMNSN_INLINE static
+ #endif
+#endif
+
+#endif /* DIMENSION_INLINE_H */
diff --git a/libdimension/dimension/polynomial.h b/libdimension/dimension/polynomial.h
index ffe3014..56e3ac0 100644
--- a/libdimension/dimension/polynomial.h
+++ b/libdimension/dimension/polynomial.h
@@ -34,8 +34,8 @@ DMNSN_INLINE double
dmnsn_evaluate_polynomial(const double poly[], size_t degree, double x)
{
double ret = poly[degree];
- ssize_t i;
- for (i = degree - 1; i >= 0; --i) {
+ size_t i;
+ for (i = degree; i-- > 0;) {
ret = ret*x + poly[i];
}
return ret;
diff --git a/libdimension/inlines.c b/libdimension/inline.c
index adffd6c..adffd6c 100644
--- a/libdimension/inlines.c
+++ b/libdimension/inline.c
diff --git a/libdimension/polynomial.c b/libdimension/polynomial.c
index f042ef2..20c3423 100644
--- a/libdimension/polynomial.c
+++ b/libdimension/polynomial.c
@@ -25,7 +25,7 @@
static inline size_t
dmnsn_real_degree(const double poly[], size_t degree)
{
- for (ssize_t i = degree; i >= 0; --i) {
+ for (size_t i = degree + 1; i-- > 0;) {
if (fabs(poly[i]) >= dmnsn_epsilon) {
return i;
}
@@ -135,7 +135,7 @@ dmnsn_uspensky_bounds(const double poly[], size_t degree, double bounds[][2],
/* First divide poly[] by (x - 1) to test for a root at x = 1 */
double pdiv1[degree], rem = poly[degree];
- for (ssize_t i = degree - 1; i >= 0; --i) {
+ for (size_t i = degree; i-- > 0;) {
pdiv1[i] = rem;
rem += poly[i];
}
@@ -223,7 +223,7 @@ dmnsn_improve_root(const double poly[], size_t degree, double x)
/* Calculate the value of the polynomial and its derivative at once */
p = poly[degree];
double dp = 0.0;
- for (ssize_t i = degree - 1; i >= 0; --i) {
+ for (size_t i = degree; i-- > 0;) {
dp = dp*x + p;
p = p*x + poly[i];
}
@@ -299,7 +299,7 @@ dmnsn_eliminate_root(double poly[], size_t *degree, double r)
{
size_t deg = *degree;
double rem = poly[deg];
- for (ssize_t i = deg - 1; i >= 0; --i) {
+ for (size_t i = deg; i-- > 0;) {
double temp = poly[i];
poly[i] = rem;
rem = temp + r*rem;
@@ -389,7 +389,7 @@ dmnsn_solve_polynomial(const double poly[], size_t degree, double x[])
void
dmnsn_print_polynomial(FILE *file, const double poly[], size_t degree)
{
- for (ssize_t i = degree; i >= 0; --i) {
+ for (size_t i = degree + 1; i-- > 0;) {
if (i < degree) {
fprintf(file, (poly[i] >= 0.0) ? " + " : " - ");
}