enhanced qse_fma_h to have more consistency with qse_xma_h

This commit is contained in:
2010-08-27 00:26:28 +00:00
parent 530ab74909
commit 810134f0ea
23 changed files with 422 additions and 207 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: fio.c 323 2010-04-05 12:50:01Z hyunghwan.chung $
* $Id: fio.c 348 2010-08-26 06:26:28Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -81,6 +81,8 @@ qse_fio_t* qse_fio_init (
{
qse_fio_hnd_t handle;
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
QSE_MEMSET (fio, 0, QSE_SIZEOF(*fio));
fio->mmgr = mmgr;

View File

@ -29,7 +29,7 @@ qse_fma_t* qse_fma_open (
{
qse_fma_t* fma;
if (mmgr == QSE_NULL)
if (mmgr == QSE_NULL)
{
mmgr = QSE_MMGR_GETDFL();
@ -61,13 +61,14 @@ qse_fma_t* qse_fma_init (
qse_fma_t* fma, qse_mmgr_t* mmgr,
qse_size_t blksize, qse_size_t maxblks, qse_size_t maxcnks)
{
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
QSE_MEMSET (fma, 0, QSE_SIZEOF(*fma));
fma->mmgr = mmgr;
if (blksize <= QSE_SIZEOF(qse_fma_blk_t))
if (blksize < QSE_SIZEOF(qse_fma_blk_t))
blksize = QSE_SIZEOF(qse_fma_blk_t);
if (maxblks <= 0) maxblks = 1;
if (maxcnks <= 0) maxcnks = 1;
fma->blksize = blksize;
fma->maxblks = maxblks;
@ -78,6 +79,7 @@ qse_fma_t* qse_fma_init (
void qse_fma_fini (qse_fma_t* fma)
{
/* destroys the chunks allocated */
while (fma->cnkhead)
{
qse_fma_cnk_t* next = fma->cnkhead->next;
@ -93,7 +95,7 @@ static QSE_INLINE qse_fma_cnk_t* add_chunk (qse_fma_t* fma)
qse_size_t i;
/* check if there are too many chunks */
if (fma->numcnks >= fma->maxcnks) return QSE_NULL;
if (fma->maxcnks && fma->numcnks >= fma->maxcnks) return QSE_NULL;
/* allocate a chunk */
cnk = (qse_fma_cnk_t*) QSE_MMGR_ALLOC (fma->mmgr,
@ -118,10 +120,16 @@ static QSE_INLINE qse_fma_cnk_t* add_chunk (qse_fma_t* fma)
return cnk;
}
void* qse_fma_alloc (qse_fma_t* fma)
void* qse_fma_alloc (qse_fma_t* fma, qse_size_t size)
{
void* blk;
QSE_ASSERTX (size <= fma->blksize,
"You must not request a block larger than the fixed size set in the allocator. Use a generic allocator instead"
);
if (size > fma->blksize) return QSE_NULL;
if ((blk = fma->freeblk) == QSE_NULL)
{
if (add_chunk (fma) == QSE_NULL) return QSE_NULL;
@ -131,9 +139,23 @@ void* qse_fma_alloc (qse_fma_t* fma)
return blk;
}
void* qse_fma_realloc (qse_fma_t* fma, void* blk, qse_size_t size)
{
if (blk)
{
QSE_ASSERTX (size <= fma->blksize,
"A block can be enlarged with a fixed-size block allocator. Use a generic allocator instead"
);
if (size > fma->blksize) return QSE_NULL;
return blk;
}
return qse_fma_alloc (fma, size);
}
void qse_fma_free (qse_fma_t* fma, void* blk)
{
((qse_fma_blk_t*)blk)->next = fma->freeblk;
fma->freeblk = blk;
}

View File

@ -1,5 +1,5 @@
/*
* $Id: htb.c 332 2010-07-13 11:25:24Z hyunghwan.chung $
* $Id: htb.c 348 2010-08-26 06:26:28Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -248,11 +248,14 @@ void qse_htb_close (htb_t* htb)
htb_t* qse_htb_init (htb_t* htb, mmgr_t* mmgr, size_t capa, int factor)
{
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
QSE_ASSERTX (capa > 0,
"The initial capacity should be greater than 0. Otherwise, it is adjusted to 1 in the release mode");
QSE_ASSERTX (factor >= 0 && factor <= 100,
"The load factor should be between 0 and 100 inclusive. In the release mode, a value out of the range is adjusted to 100");
/* some initial adjustment */
if (capa <= 0) capa = 1;
if (factor > 100) factor = 100;

View File

@ -1,5 +1,5 @@
/*
* $Id: lda.c 327 2010-05-10 13:15:55Z hyunghwan.chung $
* $Id: lda.c 348 2010-08-26 06:26:28Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -108,10 +108,10 @@ lda_t* qse_lda_open (mmgr_t* mmgr, size_t ext, size_t capa)
if (mmgr == QSE_NULL) return QSE_NULL;
}
lda = QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(lda_t) + ext);
if (lda == QSE_NULL) return QSE_NULL;
lda = QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(lda_t) + ext);
if (lda == QSE_NULL) return QSE_NULL;
if (qse_lda_init (lda, mmgr, capa) == QSE_NULL)
if (qse_lda_init (lda, mmgr, capa) == QSE_NULL)
{
QSE_MMGR_FREE (mmgr, lda);
return QSE_NULL;
@ -128,6 +128,8 @@ void qse_lda_close (lda_t* lda)
lda_t* qse_lda_init (lda_t* lda, mmgr_t* mmgr, size_t capa)
{
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
QSE_MEMSET (lda, 0, QSE_SIZEOF(*lda));
lda->mmgr = mmgr;

View File

@ -1,5 +1,5 @@
/*
* $Id: pio.c 316 2009-12-14 12:50:11Z hyunghwan.chung $
* $Id: pio.c 348 2010-08-26 06:26:28Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -72,7 +72,6 @@ void qse_pio_close (qse_pio_t* pio)
qse_pio_t* qse_pio_init (
qse_pio_t* pio, qse_mmgr_t* mmgr, const qse_char_t* cmd, int oflags)
{
qse_pio_hnd_t handle[6] =
{
QSE_PIO_HND_NIL,
@ -92,6 +91,8 @@ qse_pio_t* qse_pio_init (
int i, minidx = -1, maxidx = -1;
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
#ifdef _WIN32
SECURITY_ATTRIBUTES secattr;
PROCESS_INFORMATION procinfo;

View File

@ -192,6 +192,8 @@ void qse_rbt_close (rbt_t* rbt)
rbt_t* qse_rbt_init (rbt_t* rbt, mmgr_t* mmgr)
{
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
/* do not zero out the extension */
QSE_MEMSET (rbt, 0, SIZEOF(*rbt));
rbt->mmgr = mmgr;

View File

@ -1,5 +1,5 @@
/*
* $Id: rex.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
* $Id: rex.c 348 2010-08-26 06:26:28Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -118,6 +118,8 @@ struct cand_t
qse_rex_t* qse_rex_init (qse_rex_t* rex, qse_mmgr_t* mmgr, qse_rex_node_t* code)
{
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
QSE_MEMSET (rex, 0, QSE_SIZEOF(*rex));
rex->mmgr = mmgr;

View File

@ -1,5 +1,5 @@
/*
* $Id: sio.c 340 2010-08-01 13:13:38Z hyunghwan.chung $
* $Id: sio.c 348 2010-08-26 06:26:28Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -178,6 +178,8 @@ qse_sio_t* qse_sio_init (
{
int mode;
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
QSE_MEMSET (sio, 0, QSE_SIZEOF(*sio));
sio->mmgr = mmgr;

View File

@ -1,5 +1,5 @@
/*
* $Id: sll.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
* $Id: sll.c 348 2010-08-26 06:26:28Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -124,6 +124,8 @@ void qse_sll_close (sll_t* sll)
sll_t* qse_sll_init (sll_t* sll, mmgr_t* mmgr)
{
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
/* do not zero out the extension */
QSE_MEMSET (sll, 0, SIZEOF(*sll));

View File

@ -1,5 +1,5 @@
/*
* $Id: str_dyn.c 297 2009-10-08 13:09:19Z hyunghwan.chung $
* $Id: str_dyn.c 348 2010-08-26 06:26:28Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -57,6 +57,8 @@ void qse_str_close (qse_str_t* str)
qse_str_t* qse_str_init (qse_str_t* str, qse_mmgr_t* mmgr, qse_size_t capa)
{
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
QSE_MEMSET (str, 0, QSE_SIZEOF(qse_str_t));
str->mmgr = mmgr;

View File

@ -1,5 +1,5 @@
/*
* $Id: tio.c 287 2009-09-15 10:01:02Z hyunghwan.chung $
* $Id: tio.c 348 2010-08-26 06:26:28Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -58,6 +58,8 @@ int qse_tio_close (qse_tio_t* tio)
qse_tio_t* qse_tio_init (qse_tio_t* tio, qse_mmgr_t* mmgr)
{
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
QSE_MEMSET (tio, 0, QSE_SIZEOF(*tio));
tio->mmgr = mmgr;

View File

@ -142,6 +142,8 @@ qse_xma_t* qse_xma_init (qse_xma_t* xma, qse_mmgr_t* mmgr, qse_size_t zonesize)
qse_xma_blk_t* free;
qse_size_t xfi;
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
/* round 'zonesize' to be the multiples of ALIGN */
zonesize = ((zonesize + ALIGN - 1) / ALIGN) * ALIGN;

View File

@ -109,6 +109,8 @@ void qse_cut_close (qse_cut_t* cut)
static qse_cut_t* qse_cut_init (qse_cut_t* cut, qse_mmgr_t* mmgr)
{
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
QSE_MEMSET (cut, 0, QSE_SIZEOF(*cut));
cut->mmgr = mmgr;

View File

@ -1,5 +1,5 @@
/*
* $Id: sed.c 344 2010-08-17 13:15:14Z hyunghwan.chung $
* $Id: sed.c 348 2010-08-26 06:26:28Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -75,6 +75,8 @@ void qse_sed_close (qse_sed_t* sed)
static qse_sed_t* qse_sed_init (qse_sed_t* sed, qse_mmgr_t* mmgr)
{
if (mmgr == QSE_NULL) mmgr = QSE_MMGR_GETDFL();
QSE_MEMSET (sed, 0, QSE_SIZEOF(*sed));
sed->mmgr = mmgr;
sed->errstr = qse_sed_dflerrstr;