oceanbase

Форк
0
/
easy_array.c 
43 строки · 1.0 Кб
1
#include "util/easy_array.h"
2

3
easy_array_t *easy_array_create(int object_size)
4
{
5
    easy_pool_t             *pool;
6
    easy_array_t            *array;
7

8
    if ((pool = easy_pool_create(0)) == NULL)
9
        return NULL;
10

11
    if ((array = (easy_array_t *)easy_pool_alloc(pool, sizeof(easy_array_t))) == NULL)
12
        return NULL;
13

14
    easy_list_init(&array->list);
15
    array->count = 0;
16
    array->pool = pool;
17
    array->object_size = easy_max(object_size, (int)sizeof(easy_list_t));
18

19
    return array;
20
}
21

22
void easy_array_destroy(easy_array_t *array)
23
{
24
    easy_pool_destroy(array->pool);
25
}
26

27
void *easy_array_alloc(easy_array_t *array)
28
{
29
    if (easy_list_empty(&array->list) == 0) {
30
        array->count --;
31
        char                    *ptr = (char *)array->list.prev;
32
        easy_list_del((easy_list_t *)ptr);
33
        return ptr;
34
    }
35

36
    return easy_pool_alloc(array->pool, array->object_size);
37
}
38

39
void easy_array_free(easy_array_t *array, void *ptr)
40
{
41
    array->count ++;
42
    easy_list_add_tail((easy_list_t *)ptr, &array->list);
43
}
44

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.