source: svn/trunk/newcon3bcm2_21bu/magnum/syslib/synclib/7552/bsynclib_resource_pool.c

Last change on this file was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 2.1 KB
Line 
1
2#include "bstd.h"
3#include "bsyslib_list.h"
4#include "bsynclib_resource_pool.h"
5
6BDBG_MODULE(synclib_resource_pool);
7
8BSYNClib_ResourcePool * BSYNClib_ResourcePool_Create(void)
9{
10        BSYNClib_ResourcePool * psPool;
11
12        BDBG_ENTER(BSYNClib_ResourcePool_Create);
13
14        psPool = (BSYNClib_ResourcePool *)BKNI_Malloc(sizeof(BSYNClib_ResourcePool));
15
16        if (psPool)
17        {
18                psPool->hResources = BSYSlib_List_Create();
19                psPool->hFree = BSYSlib_List_Create();
20        }
21
22        BDBG_LEAVE(BSYNClib_ResourcePool_Create);
23        return psPool;
24}
25
26void BSYNClib_ResourcePool_Destroy(BSYNClib_ResourcePool * psPool)
27{
28        BDBG_ENTER(BSYNClib_ResourcePool_Destroy);
29
30        BDBG_ASSERT(psPool);
31
32        BSYSlib_List_Destroy(psPool->hResources);
33        BSYSlib_List_Destroy(psPool->hFree);
34
35        BKNI_Free(psPool);
36
37        BDBG_LEAVE(BSYNClib_ResourcePool_Destroy);
38}
39
40void BSYNClib_ResourcePool_Add(BSYNClib_ResourcePool * psPool, void * pvResource)
41{
42        BDBG_ENTER(BSYNClib_ResourcePool_Add);
43
44        BDBG_ASSERT(psPool);
45        BDBG_ASSERT(pvResource);
46
47        BSYSlib_List_AddElement(psPool->hResources, pvResource);
48        BSYSlib_List_AddElement(psPool->hFree, pvResource);
49
50        BDBG_LEAVE(BSYNClib_ResourcePool_Add);
51}
52
53void BSYNClib_ResourcePool_Remove(BSYNClib_ResourcePool * psPool, void * pvResource)
54{
55        BDBG_ENTER(BSYNClib_ResourcePool_Remove);
56
57        BDBG_ASSERT(psPool);
58        BDBG_ASSERT(pvResource);
59
60        BSYSlib_List_RemoveElement(psPool->hResources, pvResource);
61        BSYSlib_List_RemoveElement(psPool->hFree, pvResource);
62
63        BDBG_LEAVE(BSYNClib_ResourcePool_Remove);
64}
65
66void * BSYNClib_ResourcePool_Acquire(BSYNClib_ResourcePool * psPool)
67{
68        void * pvResource = NULL;
69       
70        BDBG_ENTER(BSYNClib_ResourcePool_Acquire);
71
72        BDBG_ASSERT(psPool);
73
74        if (!BSYSlib_List_IsEmpty(psPool->hFree))
75        {
76                pvResource = BSYSlib_List_GetByIndex(psPool->hFree, 0);
77                BSYSlib_List_RemoveElement(psPool->hFree, pvResource);
78        }
79
80        BDBG_LEAVE(BSYNClib_ResourcePool_Acquire);
81        return pvResource;
82}
83
84void BSYNClib_ResourcePool_Release(BSYNClib_ResourcePool * psPool, void * pvResource)
85{
86        BDBG_ENTER(BSYNClib_ResourcePool_Release);
87
88        BDBG_ASSERT(psPool);
89        BDBG_ASSERT(pvResource);
90
91        BSYSlib_List_AddElement(psPool->hFree, pvResource);
92
93        BDBG_LEAVE(BSYNClib_ResourcePool_Release);
94}
95
Note: See TracBrowser for help on using the repository browser.