diff options
author | 2015-01-31 20:35:30 +0200 | |
---|---|---|
committer | 2015-03-03 23:36:16 +0200 | |
commit | 8b26e3ef33e3871762ebd62acbff85b2c3abd9fc (patch) | |
tree | 67d917b8694572b735662d2786fb77eac23ccaa9 /include/rin | |
download | librin-8b26e3ef33e3871762ebd62acbff85b2c3abd9fc.tar.gz librin-8b26e3ef33e3871762ebd62acbff85b2c3abd9fc.tar.bz2 librin-8b26e3ef33e3871762ebd62acbff85b2c3abd9fc.zip |
Initial commit - Release 0.0.1librin-0.0.1
Diffstat (limited to 'include/rin')
-rw-r--r-- | include/rin/diagnostic.h | 29 | ||||
-rw-r--r-- | include/rin/float.h | 66 | ||||
-rw-r--r-- | include/rin/float_types.h | 157 |
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 */ |