mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-26 23:52:30 +01:00
52 lines
1 KiB
C
52 lines
1 KiB
C
|
/* Copyright 2007 Nick Mathewson */
|
||
|
/* See LICENSE for licensing information */
|
||
|
/* $Id: /tor/trunk/src/common/util.c 12153 2007-03-12T03:11:12.797278Z nickm $ */
|
||
|
|
||
|
/**
|
||
|
* \file util.h
|
||
|
* \brief Headers for mempool.c
|
||
|
**/
|
||
|
|
||
|
#ifndef MEMPOOL_H
|
||
|
#define MEMPOOL_H
|
||
|
|
||
|
typedef struct mp_pool_t mp_pool_t;
|
||
|
|
||
|
void *mp_pool_get(mp_pool_t *pool);
|
||
|
void mp_pool_release(void *item);
|
||
|
mp_pool_t *mp_pool_new(size_t item_size, unsigned int n_per_chunk);
|
||
|
void mp_pool_clean(mp_pool_t *pool);
|
||
|
void mp_pool_destroy(mp_pool_t *pool);
|
||
|
|
||
|
#ifdef MEMPOOL_PRIVATE
|
||
|
typedef struct mp_allocated_t mp_allocated_t;
|
||
|
typedef struct mp_chunk_t mp_chunk_t;
|
||
|
|
||
|
/** DOCDOC */
|
||
|
struct mp_chunk_t {
|
||
|
unsigned long magic;
|
||
|
mp_chunk_t *next;
|
||
|
mp_chunk_t *prev;
|
||
|
mp_pool_t *pool;
|
||
|
mp_allocated_t *first_free;
|
||
|
int n_allocated;
|
||
|
int capacity;
|
||
|
size_t mem_size;
|
||
|
char *next_mem;
|
||
|
char mem[1];
|
||
|
};
|
||
|
|
||
|
/** DOCDOC */
|
||
|
struct mp_pool_t {
|
||
|
mp_chunk_t *empty_chunks;
|
||
|
mp_chunk_t *used_chunks;
|
||
|
mp_chunk_t *full_chunks;
|
||
|
int n_empty_chunks;
|
||
|
size_t new_chunk_capacity;
|
||
|
size_t item_alloc_size;
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#endif
|
||
|
|