Squashed 'third_party/apriltag/' content from commit 3e8e974d0

git-subtree-dir: third_party/apriltag
git-subtree-split: 3e8e974d0d8d6ab318abf56d87506d15d7f2cc35
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
Change-Id: I04ba3cb2106b6813a1013d57aa8074c26f856598
diff --git a/common/pthreads_cross.h b/common/pthreads_cross.h
new file mode 100644
index 0000000..897a333
--- /dev/null
+++ b/common/pthreads_cross.h
@@ -0,0 +1,81 @@
+/**

+Copyright John Schember <john@nachtimwald.com>

+

+Permission is hereby granted, free of charge, to any person obtaining a copy of

+this software and associated documentation files (the "Software"), to deal in

+the Software without restriction, including without limitation the rights to

+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies

+of the Software, and to permit persons to whom the Software is furnished to do

+so, subject to the following conditions:

+

+The above copyright notice and this permission notice shall be included in all

+copies or substantial portions of the Software.

+

+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE

+SOFTWARE.

+*/

+

+#ifndef __CPTHREAD_H__

+#define __CPTHREAD_H__

+

+#ifdef _WIN32

+#include <stdbool.h>

+#include <windows.h>

+#else

+#include <pthread.h>

+#include <sched.h>

+#endif

+

+#ifdef _WIN32

+

+typedef CRITICAL_SECTION pthread_mutex_t;

+typedef void pthread_mutexattr_t;

+typedef void pthread_attr_t;

+typedef void pthread_condattr_t;

+typedef void pthread_rwlockattr_t;

+typedef HANDLE pthread_t;

+typedef CONDITION_VARIABLE pthread_cond_t;

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);

+int pthread_join(pthread_t thread, void **value_ptr);

+int pthread_detach(pthread_t);

+

+int pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *attr);

+int pthread_mutex_destroy(pthread_mutex_t *mutex);

+int pthread_mutex_lock(pthread_mutex_t *mutex);

+int pthread_mutex_unlock(pthread_mutex_t *mutex);

+

+int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *attr);

+int pthread_cond_destroy(pthread_cond_t *cond);

+int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);

+int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime);

+int pthread_cond_signal(pthread_cond_t *cond);

+int pthread_cond_broadcast(pthread_cond_t *cond);

+

+int sched_yield(void);

+#ifdef __cplusplus

+}

+#endif

+#endif

+

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+unsigned int pcthread_get_num_procs();

+

+void ms_to_timespec(struct timespec *ts, unsigned int ms);

+unsigned int timespec_to_ms(const struct timespec *abstime);

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CPTHREAD_H__ */