enhanced lda with binary heap functions

added more wide character handling functions
This commit is contained in:
2010-04-06 06:50:01 +00:00
parent aaa1097128
commit 2a045b7ff0
22 changed files with 846 additions and 458 deletions

View File

@ -1,6 +1,6 @@
AM_CPPFLAGS = -I$(top_srcdir)/include -DNDEBUG
bin_PROGRAMS = chr str sll map lda fio pio sio time rex01
bin_PROGRAMS = chr str sll map lda fio pio sio time main rex01
LDFLAGS = -L../../lib/cmn
LDADD = -lqsecmn
@ -14,6 +14,7 @@ fio_SOURCES = fio.c
pio_SOURCES = pio.c
sio_SOURCES = sio.c
time_SOURCES = time.c
main_SOURCES = main.c
rex01_SOURCES = rex01.c
if ENABLE_CXX

View File

@ -36,7 +36,7 @@ build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = chr$(EXEEXT) str$(EXEEXT) sll$(EXEEXT) map$(EXEEXT) \
lda$(EXEEXT) fio$(EXEEXT) pio$(EXEEXT) sio$(EXEEXT) \
time$(EXEEXT) rex01$(EXEEXT)
time$(EXEEXT) main$(EXEEXT) rex01$(EXEEXT)
subdir = samples/cmn
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@ -65,6 +65,10 @@ am_lda_OBJECTS = lda.$(OBJEXT)
lda_OBJECTS = $(am_lda_OBJECTS)
lda_LDADD = $(LDADD)
lda_DEPENDENCIES =
am_main_OBJECTS = main.$(OBJEXT)
main_OBJECTS = $(am_main_OBJECTS)
main_LDADD = $(LDADD)
main_DEPENDENCIES =
am_map_OBJECTS = map.$(OBJEXT)
map_OBJECTS = $(am_map_OBJECTS)
map_LDADD = $(LDADD)
@ -106,12 +110,12 @@ CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(chr_SOURCES) $(fio_SOURCES) $(lda_SOURCES) $(map_SOURCES) \
$(pio_SOURCES) $(rex01_SOURCES) $(sio_SOURCES) $(sll_SOURCES) \
$(str_SOURCES) $(time_SOURCES)
DIST_SOURCES = $(chr_SOURCES) $(fio_SOURCES) $(lda_SOURCES) \
SOURCES = $(chr_SOURCES) $(fio_SOURCES) $(lda_SOURCES) $(main_SOURCES) \
$(map_SOURCES) $(pio_SOURCES) $(rex01_SOURCES) $(sio_SOURCES) \
$(sll_SOURCES) $(str_SOURCES) $(time_SOURCES)
DIST_SOURCES = $(chr_SOURCES) $(fio_SOURCES) $(lda_SOURCES) \
$(main_SOURCES) $(map_SOURCES) $(pio_SOURCES) $(rex01_SOURCES) \
$(sio_SOURCES) $(sll_SOURCES) $(str_SOURCES) $(time_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@ -265,6 +269,7 @@ fio_SOURCES = fio.c
pio_SOURCES = pio.c
sio_SOURCES = sio.c
time_SOURCES = time.c
main_SOURCES = main.c
rex01_SOURCES = rex01.c
all: all-am
@ -352,6 +357,9 @@ fio$(EXEEXT): $(fio_OBJECTS) $(fio_DEPENDENCIES)
lda$(EXEEXT): $(lda_OBJECTS) $(lda_DEPENDENCIES)
@rm -f lda$(EXEEXT)
$(LINK) $(lda_OBJECTS) $(lda_LDADD) $(LIBS)
main$(EXEEXT): $(main_OBJECTS) $(main_DEPENDENCIES)
@rm -f main$(EXEEXT)
$(LINK) $(main_OBJECTS) $(main_LDADD) $(LIBS)
map$(EXEEXT): $(map_OBJECTS) $(map_DEPENDENCIES)
@rm -f map$(EXEEXT)
$(LINK) $(map_OBJECTS) $(map_LDADD) $(LIBS)
@ -383,6 +391,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chr.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fio.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/map.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rex01.Po@am__quote@

View File

@ -37,7 +37,7 @@ static int test2 (void)
for (i = 0; i < QSE_COUNTOF(x); i++)
{
qse_size_t k = strlen(x[i]);
qse_size_t k = qse_mbslen(x[i]);
qse_size_t j = 0;
qse_wchar_t wc;
@ -102,7 +102,7 @@ static int test3 (void)
for (i = 0; i < QSE_COUNTOF(x); i++)
{
int len = wcslen (x[i]);
int len = qse_wcslen (x[i]);
if (len == 0) len++; /* for x[0] */
qse_printf (QSE_T("["));

View File

@ -32,7 +32,7 @@ static int test1 (void)
return -1;
}
n = qse_fio_write (fio, x, strlen(x));
n = qse_fio_write (fio, x, qse_mbslen(x));
qse_printf (QSE_T("written %d bytes\n"), (int)n);
@ -77,7 +77,7 @@ static int test1 (void)
qse_printf (QSE_T("moved file offset to %lld\n"), (long long)off);
}
n = qse_fio_write (fio, x2, strlen(x2));
n = qse_fio_write (fio, x2, qse_mbslen(x2));
qse_printf (QSE_T("written %d bytes\n"), (int)n);
qse_fio_close (fio);
@ -110,7 +110,7 @@ static int test2 (void)
for (i = 0; i < 2; i++)
{
n = qse_fio_write (fio, x, strlen(x));
n = qse_fio_write (fio, x, qse_mbslen(x));
qse_printf (QSE_T("written %d bytes\n"), (int)n);
off = qse_fio_seek (fio, 0, QSE_FIO_CURRENT);
@ -156,7 +156,7 @@ static int test2 (void)
qse_printf (QSE_T("moved file offset to %lld\n"), (long long)off);
}
n = qse_fio_write (fio, x2, strlen(x2));
n = qse_fio_write (fio, x2, qse_mbslen(x2));
qse_printf (QSE_T("written %d bytes\n"), (int)n);
off = qse_fio_seek (fio, 0, QSE_FIO_CURRENT);
@ -174,7 +174,7 @@ static int test2 (void)
qse_printf (QSE_T("failed to truncate the file\n"));
}
n = qse_fio_write (fio, x2, strlen(x2));
n = qse_fio_write (fio, x2, qse_mbslen(x2));
qse_printf (QSE_T("written %d bytes\n"), (int)n);
off = qse_fio_seek (fio, 0, QSE_FIO_CURRENT);

View File

@ -2,6 +2,7 @@
#include <qse/cmn/str.h>
#include <qse/cmn/lda.h>
#include <qse/cmn/stdio.h>
#include <stdlib.h>
#define R(f) \
@ -28,6 +29,13 @@ qse_lda_walk_t rwalker1 (qse_lda_t* lda, qse_size_t index, void* arg)
return QSE_LDA_WALK_BACKWARD;
}
qse_lda_walk_t walker3 (qse_lda_t* lda, qse_size_t index, void* arg)
{
qse_printf (QSE_T("%d => [%d]\n"),
index, *(int*)QSE_LDA_DPTR(lda,index));
return QSE_LDA_WALK_FORWARD;
}
static int test1 ()
{
qse_lda_t* s1;
@ -102,6 +110,8 @@ static int test1 ()
qse_printf (QSE_T("lda size => %lu\n"), QSE_LDA_SIZE(s1));
qse_lda_rwalk (s1, rwalker1, QSE_NULL);
qse_lda_setcapa (s1, 3);
qse_lda_close (s1);
return 0;
}
@ -328,7 +338,7 @@ static int test4 ()
s1 = qse_lda_open (QSE_MMGR_GETDFL(), 0, 3);
if (s1 == QSE_NULL)
{
qse_printf (QSE_T("cannot open a string\n"));
qse_printf (QSE_T("cannot open an array\n"));
return -1;
}
@ -359,11 +369,92 @@ static int test4 ()
return 0;
}
qse_lda_comper_t default_comparator;
static int inverse_comparator (qse_lda_t* lda,
const void* dptr1, size_t dlen1,
const void* dptr2, size_t dlen2)
{
return -default_comparator (lda, dptr1, dlen1, dptr2, dlen2);
}
static int test5 ()
{
qse_lda_t* s1;
int i, j;
s1 = qse_lda_open (QSE_MMGR_GETDFL(), 0, 3);
if (s1 == QSE_NULL)
{
qse_printf (QSE_T("cannot open an array\n"));
return -1;
}
qse_lda_setcopier (s1, QSE_LDA_COPIER_INLINE);
qse_lda_setscale (s1, QSE_SIZEOF(i));
/* inverse the comparator to implement min-heap */
default_comparator = qse_lda_getcomper (s1);
qse_lda_setcomper (s1, inverse_comparator);
for (i = 0; i < 25; i++)
{
j = random () % 100;
qse_lda_pushheap (s1, &j, 1);
}
qse_printf (QSE_T("lda size => %lu\n"), QSE_LDA_SIZE(s1));
qse_lda_walk (s1, walker3, QSE_NULL);
while (QSE_LDA_SIZE(s1) > 10 )
{
qse_printf (QSE_T("top => %d\n"), *(int*)QSE_LDA_DPTR(s1,0));
qse_lda_popheap (s1);
}
for (i = 0; i < 25; i++)
{
j = random () % 100;
qse_lda_pushheap (s1, &j, 1);
}
qse_printf (QSE_T("lda size => %lu\n"), QSE_LDA_SIZE(s1));
qse_lda_walk (s1, walker3, QSE_NULL);
while (QSE_LDA_SIZE(s1))
{
qse_printf (QSE_T("top => %d\n"), *(int*)QSE_LDA_DPTR(s1,0));
qse_lda_popheap (s1);
}
qse_lda_setcomper (s1, default_comparator);
for (i = 0; i < 25; i++)
{
j = random () % 100;
qse_lda_pushheap (s1, &j, 1);
}
qse_printf (QSE_T("lda size => %lu\n"), QSE_LDA_SIZE(s1));
qse_lda_walk (s1, walker3, QSE_NULL);
while (QSE_LDA_SIZE(s1))
{
qse_printf (QSE_T("top => %d\n"), *(int*)QSE_LDA_DPTR(s1,0));
qse_lda_popheap (s1);
}
qse_lda_close (s1);
return 0;
}
int main ()
{
R (test1);
R (test2);
R (test3);
R (test4);
R (test5);
return 0;
}

20
qse/samples/cmn/main.c Normal file
View File

@ -0,0 +1,20 @@
#include <qse/cmn/main.h>
#include <qse/cmn/stdio.h>
static int test_main (int argc, qse_char_t* argv[])
{
int i;
for (i = 0; i < argc; i++)
{
qse_printf (QSE_T("%d => [%s]\n"), i, argv[i]);
}
return 0;
}
int qse_main (int argc, qse_achar_t* argv[])
{
return qse_runmain (argc, argv, test_main);
}

View File

@ -168,7 +168,7 @@ static int test5 (void)
for (i = 0; i < QSE_COUNTOF(x); i++)
{
qse_size_t k = strlen(x[i]);
qse_size_t k = qse_mbslen(x[i]);
qse_size_t j = 0;
qse_wchar_t wc;
qse_wchar_t buf[10];