Mercurial > repos > youngkim > ezbamqc
diff ezBAMQC/src/htslib/cram/pooled_alloc.h @ 0:dfa3745e5fd8
Uploaded
author | youngkim |
---|---|
date | Thu, 24 Mar 2016 17:12:52 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ezBAMQC/src/htslib/cram/pooled_alloc.h Thu Mar 24 17:12:52 2016 -0400 @@ -0,0 +1,56 @@ +/* +Copyright (c) 2009 Genome Research Ltd. +Author: Rob Davies <rmd@sanger.ac.uk> + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + + 3. Neither the names Genome Research Ltd and Wellcome Trust Sanger +Institute nor the names of its contributors may be used to endorse or promote +products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY GENOME RESEARCH LTD AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL GENOME RESEARCH LTD OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _POOLED_ALLOC_H_ +#define _POOLED_ALLOC_H_ + +/* + * Implements a pooled block allocator where all items are the same size, + * but we need many of them. + */ +typedef struct { + void *pool; + size_t used; +} pool_t; + +typedef struct { + size_t dsize; + size_t npools; + pool_t *pools; + void *free; +} pool_alloc_t; + +pool_alloc_t *pool_create(size_t dsize); +void pool_destroy(pool_alloc_t *p); +void *pool_alloc(pool_alloc_t *p); +void pool_free(pool_alloc_t *p, void *ptr); + + +#endif /*_POOLED_ALLOC_H_*/