summaryrefslogtreecommitdiff
path: root/include/osm/types.h
diff options
context:
space:
mode:
authorKyle Gunger <kgunger12@gmail.com>2024-05-02 03:58:29 -0400
committerKyle Gunger <kgunger12@gmail.com>2024-05-02 03:58:29 -0400
commit50871e715812060a8dfb515fe2b432b1778583d6 (patch)
treeca3df41b8817c760022aa885dfafc93e5621001e /include/osm/types.h
parent65e52cd2a11f4d0433e3ef60b6719ea490b3f6c8 (diff)
Working on bitwise ops for float conversion
Diffstat (limited to 'include/osm/types.h')
-rw-r--r--include/osm/types.h109
1 files changed, 109 insertions, 0 deletions
diff --git a/include/osm/types.h b/include/osm/types.h
new file mode 100644
index 0000000..5120098
--- /dev/null
+++ b/include/osm/types.h
@@ -0,0 +1,109 @@
+#ifndef OSM_TYPES_H
+#define OSM_TYPES_H
+
+#include <stdint.h>
+#include <stdbool.h>
+
+/*
+ * Defines all types which can be transfered reliably across
+ * a device connection
+ */
+
+// Raw data
+typedef struct {
+ uint32_t length;
+} OSMRaw;
+
+
+
+// Bools
+
+#define OSMTrue 1
+#define OSMFalse 0
+
+/// Represents a bool
+typedef uint8_t OSMBool;
+
+
+
+// Numeric
+
+/// Represents an integer
+typedef int64_t OSMInteger;
+/// Represents a floating point (IEEE 754 64 bit)
+typedef uint64_t OSMFloat;
+
+/// Represents the broken down floating point number
+typedef struct {
+ uint8_t sign;
+ uint16_t mantissa;
+ uint64_t fraction;
+} OSMFloatBreakdown;
+
+/// Break a OSMFloat into it's constituant parts
+OSMFloatBreakdown osm_break_float(OSMFloat f);
+/// Break a native float into constituant parts
+OSMFloatBreakdown osm_break_native_float(double d);
+
+/// Convert an osm float to a native one
+double osm_float_to_native(OSMFloat f);
+/// Convert a native float to an osm one
+OSMFloat osm_native_to_float(double d);
+
+/// Check whether a float is NaN
+bool osm_is_nan(OSMFloat f);
+
+/// Check whether a float is infinity
+/// if positive infinity, returns 1
+/// if negative infinity, returns -1
+/// otherwise returns 0
+uint8_t osm_is_infinity(OSMFloat f);
+
+
+
+// Color
+
+/// Color struct with support for extra channels (up to 255)
+/// each channel has a range from 0-255
+typedef struct {
+ uint8_t
+ r,
+ g,
+ b;
+
+ uint8_t extra;
+ uint8_t *ex;
+ uint8_t **ex_names; /// Extra channel names encoded in UTF-8
+} OSMColor;
+
+/// Output rgb from a color struct
+uint32_t osm_to_rgb(OSMColor color);
+
+/// Output color struct from 24-bit RGB
+OSMColor osm_rgb_to_color(uint8_t r, uint8_t g, uint8_t b);
+
+/// Parse a 32-bit integer as a 24-bit color.
+/// Assumes r, g, and b channels are stores in
+/// the lower 24 bits of the number.
+OSMColor osm_int_to_color(uint32_t c);
+
+/// Deep copy a color struct
+OSMColor osm_color_copy(OSMColor color);
+
+/// Free a color struct
+void osm_color_free(OSMColor color);
+
+
+
+// Selection
+
+typedef struct {
+ /// TODO: Should getting selection options be an async operation?
+} OSMSelect;
+
+
+
+// TODO: Time, others
+
+
+#endif