Squashed 'third_party/osqp/' content from commit 33454b3e23
Change-Id: I056df0582ca06664e86554c341a94c47ab932001
git-subtree-dir: third_party/osqp
git-subtree-split: 33454b3e236f1f44193bfbbb6b8c8e71f8f04e9a
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/include/util.h b/include/util.h
new file mode 100644
index 0000000..6b2aac3
--- /dev/null
+++ b/include/util.h
@@ -0,0 +1,222 @@
+#ifndef UTIL_H
+# define UTIL_H
+
+# ifdef __cplusplus
+extern "C" {
+# endif // ifdef __cplusplus
+
+# include "types.h"
+# include "constants.h"
+
+/******************
+* Versioning *
+******************/
+
+/**
+ * Return OSQP version
+ * @return OSQP version
+ */
+const char* osqp_version(void);
+
+
+/**********************
+* Utility Functions *
+**********************/
+
+# ifndef EMBEDDED
+
+/**
+ * Copy settings creating a new settings structure (uses MALLOC)
+ * @param settings Settings to be copied
+ * @return New settings structure
+ */
+OSQPSettings* copy_settings(const OSQPSettings *settings);
+
+# endif // #ifndef EMBEDDED
+
+/**
+ * Custom string copy to avoid string.h library
+ * @param dest destination string
+ * @param source source string
+ */
+void c_strcpy(char dest[],
+ const char source[]);
+
+
+# ifdef PRINTING
+
+/**
+ * Print Header before running the algorithm
+ * @param work osqp workspace
+ */
+void print_setup_header(const OSQPWorkspace *work);
+
+/**
+ * Print header with data to be displayed per iteration
+ */
+void print_header(void);
+
+/**
+ * Print iteration summary
+ * @param work current workspace
+ */
+void print_summary(OSQPWorkspace *work);
+
+/**
+ * Print information after polish
+ * @param work current workspace
+ */
+void print_polish(OSQPWorkspace *work);
+
+/**
+ * Print footer when algorithm terminates
+ * @param info info structure
+ * @param polish is polish enabled?
+ */
+void print_footer(OSQPInfo *info,
+ c_int polish);
+
+
+# endif // ifdef PRINTING
+
+
+/*********************************
+* Timer Structs and Functions * *
+*********************************/
+
+/*! \cond PRIVATE */
+
+# ifdef PROFILING
+
+// Windows
+# ifdef IS_WINDOWS
+
+ // Some R packages clash with elements
+ // of the windows.h header, so use a
+ // slimmer version for conflict avoidance
+# ifdef R_LANG
+#define NOGDI
+# endif
+
+# include <windows.h>
+
+struct OSQP_TIMER {
+ LARGE_INTEGER tic;
+ LARGE_INTEGER toc;
+ LARGE_INTEGER freq;
+};
+
+// Mac
+# elif defined IS_MAC
+
+# include <mach/mach_time.h>
+
+/* Use MAC OSX mach_time for timing */
+struct OSQP_TIMER {
+ uint64_t tic;
+ uint64_t toc;
+ mach_timebase_info_data_t tinfo;
+};
+
+// Linux
+# else // ifdef IS_WINDOWS
+
+/* Use POSIX clock_gettime() for timing on non-Windows machines */
+# include <time.h>
+# include <sys/time.h>
+
+
+struct OSQP_TIMER {
+ struct timespec tic;
+ struct timespec toc;
+};
+
+# endif // ifdef IS_WINDOWS
+
+/*! \endcond */
+
+/**
+ * Timer Methods
+ */
+
+/**
+ * Start timer
+ * @param t Timer object
+ */
+void osqp_tic(OSQPTimer *t);
+
+/**
+ * Report time
+ * @param t Timer object
+ * @return Reported time
+ */
+c_float osqp_toc(OSQPTimer *t);
+
+# endif /* END #ifdef PROFILING */
+
+
+/* ================================= DEBUG FUNCTIONS ======================= */
+
+/*! \cond PRIVATE */
+
+
+# ifndef EMBEDDED
+
+/* Compare CSC matrices */
+c_int is_eq_csc(csc *A,
+ csc *B,
+ c_float tol);
+
+/* Convert sparse CSC to dense */
+c_float* csc_to_dns(csc *M);
+
+# endif // #ifndef EMBEDDED
+
+
+# ifdef PRINTING
+# include <stdio.h>
+
+
+/* Print a csc sparse matrix */
+void print_csc_matrix(csc *M,
+ const char *name);
+
+/* Dump csc sparse matrix to file */
+void dump_csc_matrix(csc *M,
+ const char *file_name);
+
+/* Print a triplet format sparse matrix */
+void print_trip_matrix(csc *M,
+ const char *name);
+
+/* Print a dense matrix */
+void print_dns_matrix(c_float *M,
+ c_int m,
+ c_int n,
+ const char *name);
+
+/* Print vector */
+void print_vec(c_float *v,
+ c_int n,
+ const char *name);
+
+/* Dump vector to file */
+void dump_vec(c_float *v,
+ c_int len,
+ const char *file_name);
+
+// Print int array
+void print_vec_int(c_int *x,
+ c_int n,
+ const char *name);
+
+# endif // ifdef PRINTING
+
+/*! \endcond */
+
+
+# ifdef __cplusplus
+}
+# endif // ifdef __cplusplus
+
+#endif // ifndef UTIL_H