aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorGravatar Gediminas Jakutis <gediminas@varciai.lt> 2015-01-31 20:35:30 +0200
committerGravatar Gediminas Jakutis <gediminas@varciai.lt> 2015-03-03 23:36:16 +0200
commit8b26e3ef33e3871762ebd62acbff85b2c3abd9fc (patch)
tree67d917b8694572b735662d2786fb77eac23ccaa9 /include
downloadlibrin-b3a66e31520a5dd2a8f95827aa42ce6c4b7933a0.tar.gz
librin-b3a66e31520a5dd2a8f95827aa42ce6c4b7933a0.tar.bz2
librin-b3a66e31520a5dd2a8f95827aa42ce6c4b7933a0.zip
Initial commit - Release 0.0.1librin-0.0.1
Diffstat (limited to 'include')
-rw-r--r--include/rin/diagnostic.h29
-rw-r--r--include/rin/float.h66
-rw-r--r--include/rin/float_types.h157
3 files changed, 252 insertions, 0 deletions
diff --git a/include/rin/diagnostic.h b/include/rin/diagnostic.h
new file mode 100644
index 0000000..aeff035
--- /dev/null
+++ b/include/rin/diagnostic.h
@@ -0,0 +1,29 @@
+/*
+ * The Rin Library – diagnostics module
+ *
+ * Copyright (C) 2015 Gediminas Jakutis
+ *
+ * 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; version 2.1
+ * of the License.
+ *
+ * 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
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef LIBRIN_DIAGNOSTIC_INCLUDED
+#define LIBRIN_DIAGNOSTIC_INCLUDED
+
+void rin_err(const char *format, ...);
+void rin_fixme(const char *format, ...)
+void rin_warn(const char *format, ...);
+void rin_info(const char *format, ...);
+
+#endif /* LIBRIN_DIAGNOSTIC_INCLUDED */
diff --git a/include/rin/float.h b/include/rin/float.h
new file mode 100644
index 0000000..afd63f5
--- /dev/null
+++ b/include/rin/float.h
@@ -0,0 +1,66 @@
+/*
+ * The Rin Library – floating point module
+ *
+ * Copyright (C) 2015 Gediminas Jakutis
+ *
+ * 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; version 2.1
+ * of the License.
+ *
+ * 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
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef LIBRIN_FLOAT_INCLUDED
+#define LIBRIN_FLOAT_INCLUDED
+
+#include <stdint.h>
+#include <rin/float_types.h>
+
+/*
+ * TODO:
+ * · weak aliasing
+ * · more modes
+ */
+
+static const unsigned int RIN_HEXSTRING_DEFAULT = 0x00000000u;
+static const unsigned int RIN_HEXSTRING_NOPREFIX = 0x00000001u;
+
+/*
+ * All following the functions assume IEEE 754 floating point numbers
+ * and thus are only expected to work only on systems which use IEEE 754.
+ *
+ * The versions suffixed with "d" / double versions are otherwise
+ * identical to the float counterparts.
+ */
+
+uint32_t rin_signbitf(const float num);
+uint64_t rin_signbitd(const double num);
+
+char *rin_float_to_hexstring(const float num, char *str, unsigned int mode);
+char *rin_double_to_hexstring(const double num, char *str, unsigned int mode);
+
+unsigned int rin_compare_float(const float a, const float b, uint32_t max_ulps);
+unsigned int rin_compare_vec2(const struct vec2 a, const struct vec2 b, uint32_t max_ulps);
+unsigned int rin_compare_vec3(const struct vec3 a, const struct vec3 b, uint32_t max_ulps);
+unsigned int rin_compare_vec4(const struct vec4 a, const struct vec4 b, uint32_t max_ulps);
+
+unsigned int rin_compare_double(const double a, const double b, uint64_t max_ulps);
+unsigned int rin_compare_vec2d(const struct vec2d a, const struct vec2d b, uint64_t max_ulps);
+unsigned int rin_compare_vec3d(const struct vec3d a, const struct vec3d b, uint64_t max_ulps);
+unsigned int rin_compare_vec4d(const struct vec4d a, const struct vec4d b, uint64_t max_ulps);
+
+uint32_t rin_float_to_uint(const float num);
+int32_t rin_float_to_int(const float num);
+
+uint64_t rin_double_to_ulong(const double num);
+int64_t rin_double_to_long(const double num);
+
+#endif /* LIBRIN_FLOAT_INCLUDED */
diff --git a/include/rin/float_types.h b/include/rin/float_types.h
new file mode 100644
index 0000000..2d99b2f
--- /dev/null
+++ b/include/rin/float_types.h
@@ -0,0 +1,157 @@
+/*
+ * The Rin Library – floating point module
+ *
+ * Copyright (C) 2015 Gediminas Jakutis
+ *
+ * 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; version 2.1
+ * of the License.
+ *
+ * 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
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef LIBRIN_FLOAT_TYPES_INCLUDED
+#define LIBRIN_FLOAT_TYPES_INCLUDED
+
+/* These vec[num] types mostly mimic the analogous types found in OpenGL
+ * Might get renamed to rin_vec[num] in case namespace clashes
+ * with other existing libraries get noticed.
+ *
+ * vecd[num] use double instead of float, but are otherwise identical to vec[num].
+ */
+
+struct vec2 {
+ union {
+ struct {
+ float x;
+ float y;
+ };
+ struct {
+ float r;
+ float g;
+ };
+ struct {
+ float s;
+ float t;
+ };
+ };
+};
+
+struct vec3 {
+ union {
+ struct {
+ float x;
+ float y;
+ float z;
+ };
+ struct {
+ float r;
+ float g;
+ float b;
+ };
+ struct {
+ float s;
+ float t;
+ float p;
+ };
+ };
+};
+
+struct vec4 {
+ union {
+ struct {
+ float x;
+ float y;
+ float z;
+ float w;
+ };
+ struct {
+ float r;
+ float g;
+ float b;
+ float a;
+ };
+ struct {
+ float s;
+ float t;
+ float p;
+ float q;
+ };
+ };
+};
+
+struct vec2d {
+ union {
+ struct {
+ double x;
+ double y;
+ };
+ struct {
+ double r;
+ double g;
+ };
+ struct {
+ double s;
+ double t;
+ };
+ };
+};
+
+struct vec3d {
+ union {
+ struct {
+ double x;
+ double y;
+ double z;
+ };
+ struct {
+ double r;
+ double g;
+ double b;
+ };
+ struct {
+ double s;
+ double t;
+ double p;
+ };
+ };
+};
+
+struct vec4d {
+ union {
+ struct {
+ double x;
+ double y;
+ double z;
+ double w;
+ };
+ struct {
+ double r;
+ double g;
+ double b;
+ double a;
+ };
+ struct {
+ double s;
+ double t;
+ double p;
+ double q;
+ };
+ };
+};
+
+/* A simple 3D vertex with position and normal data. */
+struct vertex {
+ struct vec3 position;
+ struct vec3 normal;
+};
+
+#endif /* LIBRIN_FLOAT_TYPES_INCLUDED */