diff --git a/Source/DrangPlatform/Source/sync/cond_var.c b/Source/DrangPlatform/Source/sync/cond_var.c new file mode 100644 index 0000000..36477d4 --- /dev/null +++ b/Source/DrangPlatform/Source/sync/cond_var.c @@ -0,0 +1,36 @@ +#include "drang/alloc.h" +#include "drang/error.h" +#include + + +int drang_cond_new(struct drang_cond **cond) +{ + struct drang_cond *c = NULL; + DRANG_BEGIN_TRY(); + + DRANG_CHECK(cond != NULL, DRANG_EINVAL); + + c = DRANG_TRY_ALLOC_ALIGNED(drang_cond_size(), drang_cond_alignment()); + + DRANG_TRY(drang_cond_init(c)); + + DRANG_RETURN_IN(cond, c); + + DRANG_CATCH(_) + { + if (c != NULL) { + drang_free(c); + } + } + DRANG_END_TRY(); +} + +void drang_cond_free(struct drang_cond *cond) +{ + if (cond == NULL) { + return; + } + + drang_cond_fini(cond); + drang_free(cond); +} \ No newline at end of file diff --git a/Source/DrangPlatform/Source/sync/mutex.c b/Source/DrangPlatform/Source/sync/mutex.c new file mode 100644 index 0000000..aaef7e8 --- /dev/null +++ b/Source/DrangPlatform/Source/sync/mutex.c @@ -0,0 +1,36 @@ +#include "drang/alloc.h" +#include "drang/error.h" +#include + + +int drang_mutex_new(struct drang_mutex **mutex) +{ + struct drang_mutex* m = NULL; + DRANG_BEGIN_TRY(); + + DRANG_CHECK(mutex != NULL, DRANG_EINVAL); + + m = DRANG_TRY_ALLOC_ALIGNED(drang_mutex_size(), drang_mutex_alignment()); + + DRANG_TRY(drang_mutex_init(m)); + + DRANG_RETURN_IN(mutex, m); + + DRANG_CATCH(_) + { + if (m != NULL) { + drang_free(m); + } + } + + DRANG_END_TRY() +} + +void drang_mutex_free(struct drang_mutex *mutex) +{ + if (mutex == NULL) { + return; + } + drang_mutex_fini(mutex); + drang_free(mutex); +} \ No newline at end of file diff --git a/Source/DrangPlatform/Source/sync/rwlock.c b/Source/DrangPlatform/Source/sync/rwlock.c new file mode 100644 index 0000000..47f7470 --- /dev/null +++ b/Source/DrangPlatform/Source/sync/rwlock.c @@ -0,0 +1,36 @@ +#include +#include +#include + + +int drang_rwlock_new(struct drang_rwlock **rwlock) +{ + struct drang_rwlock *rw = NULL; + DRANG_BEGIN_TRY(); + + DRANG_CHECK(rwlock != NULL, DRANG_EINVAL); + + rw = DRANG_TRY_ALLOC_ALIGNED(drang_rwlock_size(), drang_rwlock_alignment()); + + DRANG_TRY(drang_rwlock_init(rw)); + + DRANG_RETURN_IN(rwlock, rw); + + DRANG_CATCH(_) + { + if (rw != NULL) { + drang_free(rw); + } + } + DRANG_END_TRY(); +} + +void drang_rwlock_free(struct drang_rwlock *rwlock) +{ + if (rwlock == NULL) { + return; + } + + drang_rwlock_fini(rwlock); + drang_free(rwlock); +} \ No newline at end of file diff --git a/Source/DrangPlatform/Source/win32/sync/cond_var.c b/Source/DrangPlatform/Source/win32/sync/cond_var.c index 59845b7..62dde1a 100644 --- a/Source/DrangPlatform/Source/win32/sync/cond_var.c +++ b/Source/DrangPlatform/Source/win32/sync/cond_var.c @@ -8,36 +8,9 @@ size_t drang_cond_size(void) return sizeof(struct drang_cond); } -int drang_cond_new(struct drang_cond **cond) +size_t drang_cond_alignment(void) { - struct drang_cond *c = NULL; - DRANG_BEGIN_TRY(); - - DRANG_CHECK(cond != NULL, DRANG_EINVAL); - - c = DRANG_TRY_ALLOC_T(struct drang_cond); - - DRANG_TRY(drang_cond_init(c)); - - DRANG_RETURN_IN(cond, c); - - DRANG_CATCH(_) - { - if (c != NULL) { - drang_free(c); - } - } - DRANG_END_TRY(); -} - -void drang_cond_free(struct drang_cond *cond) -{ - if (cond == NULL) { - return; - } - - drang_cond_fini(cond); - drang_free(cond); + return alignof(struct drang_cond); } int drang_cond_init(struct drang_cond *cond) diff --git a/Source/DrangPlatform/Source/win32/sync/mutex.c b/Source/DrangPlatform/Source/win32/sync/mutex.c index b74d0be..3864515 100644 --- a/Source/DrangPlatform/Source/win32/sync/mutex.c +++ b/Source/DrangPlatform/Source/win32/sync/mutex.c @@ -7,37 +7,11 @@ size_t drang_mutex_size(void) return sizeof(struct drang_mutex); } -int drang_mutex_new(struct drang_mutex **mutex) +size_t drang_mutex_alignment(void) { - struct drang_mutex *m = NULL; - DRANG_BEGIN_TRY(); - - DRANG_CHECK(mutex != NULL, DRANG_EINVAL); - - m = DRANG_TRY_ALLOC_T(struct drang_mutex); - - DRANG_TRY(drang_mutex_init(m)); - - DRANG_RETURN_IN(mutex, m); - - DRANG_CATCH(_) - { - if (m != NULL) { - drang_free(m); - } - } - DRANG_END_TRY(); + return alignof(struct drang_mutex); } -void drang_mutex_free(struct drang_mutex *mutex) -{ - if (mutex == NULL) { - return; - } - - drang_mutex_fini(mutex); - drang_free(mutex); -} int drang_mutex_init(struct drang_mutex *mutex) { diff --git a/Source/DrangPlatform/Source/win32/sync/rwlock.c b/Source/DrangPlatform/Source/win32/sync/rwlock.c index 5e860e8..161de6d 100644 --- a/Source/DrangPlatform/Source/win32/sync/rwlock.c +++ b/Source/DrangPlatform/Source/win32/sync/rwlock.c @@ -7,36 +7,9 @@ size_t drang_rwlock_size(void) return sizeof(struct drang_rwlock); } -int drang_rwlock_new(struct drang_rwlock **rwlock) +size_t drang_rwlock_alignment(void) { - struct drang_rwlock *rw = NULL; - DRANG_BEGIN_TRY(); - - DRANG_CHECK(rwlock != NULL, DRANG_EINVAL); - - rw = DRANG_TRY_ALLOC_T(struct drang_rwlock); - - DRANG_TRY(drang_rwlock_init(rw)); - - DRANG_RETURN_IN(rwlock, rw); - - DRANG_CATCH(_) - { - if (rw != NULL) { - drang_free(rw); - } - } - DRANG_END_TRY(); -} - -void drang_rwlock_free(struct drang_rwlock *rwlock) -{ - if (rwlock == NULL) { - return; - } - - drang_rwlock_fini(rwlock); - drang_free(rwlock); + return alignof(struct drang_rwlock); } int drang_rwlock_init(struct drang_rwlock *rwlock)