commit 4731fce957c755f180bfe70136e66d15211a55e4
parent cf43b267d0bd0104c38c1008e725ffc6d428f99b
Author: vaplv <vaplv@free.fr>
Date: Sun, 6 Jul 2014 14:25:06 +0200
Begin the implementation and the tests of the Mtl loader
Diffstat:
4 files changed, 65 insertions(+), 26 deletions(-)
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
@@ -17,7 +17,7 @@ include(rcmake)
################################################################################
# Define targets
################################################################################
-set(AW_FILES_SRC aw_obj.c)
+set(AW_FILES_SRC aw_obj.c aw_mtl.c)
set(AW_FILES_INC aw.h)
rcmake_prepend_path(AW_FILES_SRC ${AW_SOURCE_DIR})
rcmake_prepend_path(AW_FILES_INC ${AW_SOURCE_DIR})
@@ -43,6 +43,10 @@ add_executable(test_aw_obj ${AW_SOURCE_DIR}/test_aw_obj.c)
target_link_libraries(test_aw_obj loader-aw)
add_test(test_aw_obj test_aw_obj)
+add_executable(test_aw_mtl ${AW_SOURCE_DIR}/test_aw_mtl.c)
+target_link_libraries(test_aw_mtl loader-aw)
+add_test(test_aw_mtl test_aw_mtl)
+
################################################################################
# Install directories
################################################################################
diff --git a/src/aw.h b/src/aw.h
@@ -134,12 +134,12 @@ aw_obj_vertex_get
AW_API enum aw_result
aw_mtl_create
(struct mem_allocator* allocator, /* NULL <=> use default allocator */
- struct aw_mtl* mtl);
+ struct aw_mtl** mtl);
AW_API enum aw_result
aw_mtl_ref_get
(struct aw_mtl* mtl);
-
+
AW_API enum aw_result
aw_mtl_ref_put
(struct aw_mtl* mtl);
diff --git a/src/aw_mtl.c b/src/aw_mtl.c
@@ -1,11 +1,11 @@
#define _POSIX_C_SOURCE 200112L /* strtok_r support */
-#include "obj.h"
+#include "aw.h"
#include <rsys/mem_allocator.h>
#include <rsys/ref_count.h>
-struct mtl {
+struct aw_mtl {
ref_T ref;
struct mem_allocator* allocator;
};
@@ -14,9 +14,9 @@ struct mtl {
* Helper functions
******************************************************************************/
static void
-obj_mtl_release(ref_T* ref)
+aw_mtl_release(ref_T* ref)
{
- struct obj_mtl* mtl = CONTAINER_OF(ref, struct obj_mtl, ref);
+ struct aw_mtl* mtl = CONTAINER_OF(ref, struct aw_mtl, ref);
ASSERT(ref);
MEM_FREE(mtl->allocator, mtl);
}
@@ -24,26 +24,26 @@ obj_mtl_release(ref_T* ref)
/*******************************************************************************
* Exported functions
******************************************************************************/
-enum obj_result
-obj_mtl_create
+enum aw_result
+aw_mtl_create
(struct mem_allocator* mem_allocator,
- struct obj_mtl** mtl_out)
+ struct aw_mtl** mtl_out)
{
struct mem_allocator* allocator;
- struct obj_mtl* mtl = NULL;
- enum obj_result res = OBJ_OK;
+ struct aw_mtl* mtl = NULL;
+ enum aw_result res = AW_OK;
if(!mtl_out) {
- res = OBJ_BAD_ARGUMENT;
+ res = AW_BAD_ARGUMENT;
goto error;
}
allocator = mem_allocator ? mem_allocator : &mem_default_allocator;
- mtl = MEM_CALLOC(allocator, 1, sizeof(struct obj_mtl));
+ mtl = MEM_CALLOC(allocator, 1, sizeof(struct aw_mtl));
if(!mtl) {
- res = OBJ_MEMORY_ERROR;
+ res = AW_MEMORY_ERROR;
goto error;
}
- obj->allocator = allocator;
+ mtl->allocator = allocator;
ref_init(&mtl->ref);
exit:
@@ -52,26 +52,26 @@ exit:
return res;
error:
if(mtl) {
- OBJ(mtl_ref_put(mtl));
+ AW(mtl_ref_put(mtl));
mtl = NULL;
}
goto exit;
}
-enum obj_result
-obj_mtl_ref_get(struct obj_mtl* mtl)
+enum aw_result
+aw_mtl_ref_get(struct aw_mtl* mtl)
{
if(!mtl)
- return OBJ_BAD_ARGUMENT;
+ return AW_BAD_ARGUMENT;
ref_get(&mtl->ref);
- return OBJ_OK;
+ return AW_OK;
}
-enum obj_result
-obj_mtl_ref_put(struct obj_mtl* mtl)
+enum aw_result
+aw_mtl_ref_put(struct aw_mtl* mtl)
{
if(!mtl)
- return OBJ_BAD_ARGUMENT;
- ref_put(&mtl->ref, obj_mtl_release);
- return OBJ_OK;
+ return AW_BAD_ARGUMENT;
+ ref_put(&mtl->ref, aw_mtl_release);
+ return AW_OK;
}
diff --git a/src/test_aw_mtl.c b/src/test_aw_mtl.c
@@ -0,0 +1,35 @@
+#include "aw.h"
+#include <rsys/mem_allocator.h>
+
+int
+main(int argc, char** argv)
+{
+ struct mem_allocator allocator;
+ struct aw_mtl* mtl;
+ (void)argc, (void)argv;
+
+ mem_init_proxy_allocator(&allocator, &mem_default_allocator);
+
+ CHECK(aw_mtl_create(NULL, NULL), AW_BAD_ARGUMENT);
+ CHECK(aw_mtl_create(&allocator, NULL), AW_BAD_ARGUMENT);
+ CHECK(aw_mtl_create(NULL, &mtl), AW_OK);
+
+ CHECK(aw_mtl_ref_get(NULL), AW_BAD_ARGUMENT);
+ CHECK(aw_mtl_ref_get(mtl), AW_OK);
+ CHECK(aw_mtl_ref_put(NULL), AW_BAD_ARGUMENT);
+ CHECK(aw_mtl_ref_put(mtl), AW_OK);
+ CHECK(aw_mtl_ref_put(mtl), AW_OK);
+
+ CHECK(aw_mtl_create(&allocator, &mtl), AW_OK);
+ CHECK(aw_mtl_ref_put(mtl), AW_OK);
+
+ if(MEM_ALLOCATED_SIZE(&allocator)) {
+ char dump[512];
+ MEM_DUMP(&allocator, dump, sizeof(dump)/sizeof(char));
+ fprintf(stderr, "%s\n", dump);
+ FATAL("Memory leaks\n");
+ }
+ mem_shutdown_proxy_allocator(&allocator);
+ CHECK(mem_allocated_size(), 0);
+ return 0;
+}