2
* Copyright (c) 2003 Nara Institute of Science and Technology
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
9
* 1. Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
* 2. Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
* 3. The name Nara Institute of Science and Technology may not be used to
15
* endorse or promote products derived from this software without
16
* specific prior written permission.
18
* THIS SOFTWARE IS PROVIDED BY Nara Institute of Science and Technology
19
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
21
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE Nara Institute
22
* of Science and Technology BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
24
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
* $Id: block.c,v 1.2 2003/07/08 17:08:49 kazuma-t Exp $
45
cha_block_new(size_t size, int nitem)
49
block = cha_malloc(sizeof(cha_block_t));
51
block->item_size = size;
52
block->allocated_num = nitem;
53
block->blocks = cha_malloc(size * nitem);
59
void cha_block_delete(cha_block_t *block)
61
cha_free(block->blocks);
66
cha_block_new_item(cha_block_t *block)
68
if (++block->num > block->allocated_num) {
69
block->allocated_num *= 2;
70
block->blocks = cha_realloc(block->blocks,
71
block->item_size * block->allocated_num);
73
return block->blocks + block->item_size * (block->num - 1);
77
cha_block_get_item(cha_block_t *block, int i)
79
return block->blocks + block->item_size * i;
83
cha_block_pop(cha_block_t *block)
85
return block->blocks + block->item_size * --block->num;
89
cha_block_num(cha_block_t *block)
95
cha_block_clear(cha_block_t *block)