From dd7595a3475407a7fa96a97393bae8c5220e8762 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Wed, 4 Jan 2012 18:41:13 +1000 Subject: Add the base Enlightenment Foundation Libraries - eina, eet, evas, ecore, embryo, and edje. Note that embryo wont be used, but I'm not sure yet if you can build edje without it. --- .../eina/src/include/eina_inline_lock_wince.x | 178 +++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 libraries/eina/src/include/eina_inline_lock_wince.x (limited to 'libraries/eina/src/include/eina_inline_lock_wince.x') diff --git a/libraries/eina/src/include/eina_inline_lock_wince.x b/libraries/eina/src/include/eina_inline_lock_wince.x new file mode 100644 index 0000000..965d475 --- /dev/null +++ b/libraries/eina/src/include/eina_inline_lock_wince.x @@ -0,0 +1,178 @@ +/* EINA - EFL data type library + * Copyright (C) 2011 Vincent Torri + * + * 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; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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, see . + */ + +#ifndef EINA_INLINE_LOCK_WIN32_X_ +#define EINA_INLINE_LOCK_WIN32_X_ + +#include + +EAPI extern Eina_Bool _threads_activated; + +typedef HANDLE Eina_Lock; +typedef Eina_Lock Eina_RWLock; +typedef DWORD Eina_TLS; + +static inline Eina_Bool +eina_lock_new(Eina_Lock *mutex) +{ + Eina_Lock m; + + m = CreateMutex(NULL, FALSE, NULL); + if (m) *mutex = m; + return (m != NULL); +} + +static inline void +eina_lock_free(Eina_Lock *mutex) +{ + CloseHandle(*mutex); +} + +static inline Eina_Lock_Result +eina_lock_take(Eina_Lock *mutex) +{ + DWORD res; + +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) return EINA_LOCK_FAIL; +#endif + + res = WaitForSingleObject(*mutex, INFINITE); + if ((res == WAIT_ABANDONED) || (res == WAIT_FAILED)) + return EINA_LOCK_FAIL; + + return EINA_LOCK_SUCCEED; +} + +static inline Eina_Lock_Result +eina_lock_take_try(Eina_Lock *mutex) +{ + return eina_lock_take(*mutex); +} + +static inline Eina_Lock_Result +eina_lock_release(Eina_Lock *mutex) +{ +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) return ; +#endif + + return ReleaseMutex(*mutex) ? EINA_LOCK_SUCCEED : EINA_LOCK_FAIL; +} + +static inline void +eina_lock_debug(const Eina_Lock *mutex) +{ +} + +static inline Eina_Bool +eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex) +{ + return EINA_FALSE; +} + +static inline void +eina_condition_free(Eina_Condition *cond) +{ +} + +static inline Eina_Bool +eina_condition_wait(Eina_Condition *cond) +{ + return EINA_FALSE; +} + +static inline Eina_Bool +eina_condition_timedwait(Eina_Condition *cond, double t) +{ + return EINA_FALSE; +} + +static inline Eina_Bool +eina_condition_broadcast(Eina_Condition *cond) +{ + return EINA_FALSE; +} + +static inline Eina_Bool +eina_condition_signal(Eina_Condition *cond) +{ + return EINA_FALSE; +} + +static inline Eina_Bool +eina_rwlock_new(Eina_RWLock *mutex) +{ + return eina_lock_new(mutex); +} + +static inline void +eina_rwlock_free(Eina_RWLock *mutex) +{ + return eina_lock_free(mutex); +} + +static inline Eina_Lock_Result +eina_rwlock_take_read(Eina_RWLock *mutex) +{ + return eina_lock_take(mutex); +} + +static inline Eina_Lock_Result +eina_rwlock_take_write(Eina_RWLock *mutex) +{ + return eina_lock_take(mutex); +} + +static inline Eina_Lock_Result +eina_rwlock_release(Eina_RWLock *mutex) +{ + return eina_lock_release(mutex); +} + +static inline Eina_Bool +eina_tls_new(Eina_TLS *key) +{ + if (TlsAlloc() == TLS_OUT_OF_INDEXES) + return EINA_FALSE; + return EINA_TRUE; +} + +static inline void +eina_tls_free(Eina_TLS key) +{ + TlsFree(key); +} + +static inline void * +eina_tls_get(Eina_TLS key) +{ + return (void*)TlsGetValue(key); +} + +static inline Eina_Bool +eina_tls_set(Eina_TLS key, const void *data) +{ + if (TlsSetValue(key, (LPVOID)data) == 0) + return EINA_FALSE; + return EINA_TRUE; +} + + + +#endif -- cgit v1.1