lsquic_malo.h revision c51ce338
150aadb33SDmitri Tikhonov/* Copyright (c) 2017 LiteSpeed Technologies Inc. See LICENSE. */ 250aadb33SDmitri Tikhonov/* 350aadb33SDmitri Tikhonov * lsquic_malo.h -- Fast allocator for fixed-sized objects. 450aadb33SDmitri Tikhonov */ 550aadb33SDmitri Tikhonov 650aadb33SDmitri Tikhonov#ifndef LSQUIC_MALO_H 750aadb33SDmitri Tikhonov#define LSQUIC_MALO_H 1 850aadb33SDmitri Tikhonov 950aadb33SDmitri Tikhonovstruct malo; 1050aadb33SDmitri Tikhonov 1150aadb33SDmitri Tikhonov/* Create a malo allocator for objects of size `obj_size'. */ 1250aadb33SDmitri Tikhonovstruct malo * 1350aadb33SDmitri Tikhonovlsquic_malo_create (size_t obj_size); 1450aadb33SDmitri Tikhonov 1550aadb33SDmitri Tikhonov/* Get a new object. */ 1650aadb33SDmitri Tikhonovvoid * 1750aadb33SDmitri Tikhonovlsquic_malo_get (struct malo *); 1850aadb33SDmitri Tikhonov 1950aadb33SDmitri Tikhonov/* Return obj to the pool */ 2050aadb33SDmitri Tikhonovvoid 2150aadb33SDmitri Tikhonovlsquic_malo_put (void *obj); 2250aadb33SDmitri Tikhonov 2350aadb33SDmitri Tikhonov/* This deallocates all remaining objects. */ 2450aadb33SDmitri Tikhonovvoid 2550aadb33SDmitri Tikhonovlsquic_malo_destroy (struct malo *); 2650aadb33SDmitri Tikhonov 2750aadb33SDmitri Tikhonov/* The iterator is built-in. Usage: 2850aadb33SDmitri Tikhonov * void *obj; 2950aadb33SDmitri Tikhonov * for (obj = lsquic_malo_first(obj); obj; lsquic_malo_next(obj)) 3050aadb33SDmitri Tikhonov * do_stuff(obj); 3150aadb33SDmitri Tikhonov */ 3250aadb33SDmitri Tikhonovvoid * 3350aadb33SDmitri Tikhonovlsquic_malo_first (struct malo *); 3450aadb33SDmitri Tikhonov 3550aadb33SDmitri Tikhonovvoid * 3650aadb33SDmitri Tikhonovlsquic_malo_next (struct malo *); 3750aadb33SDmitri Tikhonov 38c51ce338SDmitri Tikhonovsize_t 39c51ce338SDmitri Tikhonovlsquic_malo_mem_used (const struct malo *); 40c51ce338SDmitri Tikhonov 4150aadb33SDmitri Tikhonov#endif 42