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.
---
.../modules/mp/ememoa_fixed/eina_ememoa_fixed.c | 176 +++++++++++++++++++++
1 file changed, 176 insertions(+)
create mode 100644 libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c
(limited to 'libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c')
diff --git a/libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c b/libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c
new file mode 100644
index 0000000..0d02f80
--- /dev/null
+++ b/libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c
@@ -0,0 +1,176 @@
+/* EINA - EFL data type library
+ * Copyright (C) 2008 Cedric BAIL
+ *
+ * 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 .
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include
+#include
+#include
+
+#include "eina_inlist.h"
+#include "eina_error.h"
+#include "eina_module.h"
+#include "eina_mempool.h"
+
+#include "eina_private.h"
+
+typedef struct _Eina_Ememoa_Fixed_Mempool Eina_Ememoa_Fixed_Mempool;
+struct _Eina_Ememoa_Fixed_Mempool
+{
+ struct ememoa_mempool_desc_s *desc;
+ int pool;
+};
+
+static void *
+eina_ememoa_fixed_malloc(void *data, __UNUSED__ unsigned int size)
+{
+ Eina_Ememoa_Fixed_Mempool *efm = data;
+
+ return ememoa_mempool_fixed_pop_object(efm->pool);
+}
+
+static void
+eina_ememoa_fixed_free(void *data, void *ptr)
+{
+ Eina_Ememoa_Fixed_Mempool *efm = data;
+
+ ememoa_mempool_fixed_push_object(efm->pool, ptr);
+}
+
+static void *
+eina_ememoa_fixed_realloc(__UNUSED__ void *data,
+ __UNUSED__ void *element,
+ __UNUSED__ unsigned int size)
+{
+ return NULL;
+}
+
+static void
+eina_ememoa_fixed_gc(void *data)
+{
+ Eina_Ememoa_Fixed_Mempool *efm = data;
+
+ ememoa_mempool_fixed_garbage_collect(efm->pool);
+}
+
+static void
+eina_ememoa_fixed_statistics(void *data)
+{
+ Eina_Ememoa_Fixed_Mempool *efm = data;
+
+ ememoa_mempool_fixed_display_statistic(efm->pool);
+ (void)efm;
+}
+
+static void *
+eina_ememoa_fixed_init(const char *context,
+ __UNUSED__ const char *option,
+ va_list args)
+{
+ struct ememoa_mempool_desc_s *desc = NULL;
+ Eina_Ememoa_Fixed_Mempool *efm = NULL;
+ Eina_Bool thread_protect;
+ int context_length;
+ int item_size;
+ int pool_size;
+
+ if (context)
+ {
+ context_length = strlen(context) + 1;
+
+ desc = calloc(1, sizeof (struct ememoa_mempool_desc_s) + context_length);
+ if (!desc)
+ goto on_error;
+
+ desc->name = (char *)(desc + 1);
+ memcpy((char *)desc->name, context, context_length);
+ }
+
+ item_size = va_arg(args, int);
+ pool_size = va_arg(args, int);
+ thread_protect = va_arg(args, int);
+
+ efm = malloc(sizeof (Eina_Ememoa_Fixed_Mempool));
+ if (!efm)
+ goto on_error;
+
+ efm->desc = desc;
+ efm->pool = ememoa_mempool_fixed_init(
+ item_size,
+ pool_size,
+ thread_protect ?
+ EMEMOA_THREAD_PROTECTION : 0,
+ efm->desc);
+ if (efm->pool < 0)
+ goto on_error;
+
+ return efm;
+
+on_error:
+ if (desc)
+ free(desc);
+
+ if (efm)
+ free(efm);
+
+ return NULL;
+}
+
+static void
+eina_ememoa_fixed_shutdown(void *data)
+{
+ Eina_Ememoa_Fixed_Mempool *efm = data;
+
+ if (efm->desc)
+ free(efm->desc);
+
+ ememoa_mempool_fixed_clean(efm->pool);
+ free(efm);
+}
+
+static Eina_Mempool_Backend _eina_ememoa_mp_backend = {
+ .name = "ememoa_fixed",
+ .init = &eina_ememoa_fixed_init,
+ .shutdown = &eina_ememoa_fixed_shutdown,
+ .realloc = &eina_ememoa_fixed_realloc,
+ .alloc = &eina_ememoa_fixed_malloc,
+ .free = &eina_ememoa_fixed_free,
+ .garbage_collect = &eina_ememoa_fixed_gc,
+ .statistics = &eina_ememoa_fixed_statistics,
+ .repack = NULL
+};
+
+Eina_Bool ememoa_fixed_init(void)
+{
+ return eina_mempool_register(&_eina_ememoa_mp_backend);
+}
+
+void ememoa_fixed_shutdown(void)
+{
+ eina_mempool_unregister(&_eina_ememoa_mp_backend);
+}
+
+
+#ifndef EINA_STATIC_BUILD_EMEMOA_FIXED
+
+EINA_MODULE_INIT(ememoa_fixed_init);
+EINA_MODULE_SHUTDOWN(ememoa_fixed_shutdown);
+
+#endif /* ! EINA_STATIC_BUILD_EMEMOA_FIXED */
--
cgit v1.1