enhanced lda with binary heap functions
added more wide character handling functions
This commit is contained in:
@ -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
|
||||
|
@ -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@
|
||||
|
@ -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("["));
|
||||
|
@ -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);
|
||||
|
@ -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
20
qse/samples/cmn/main.c
Normal 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);
|
||||
}
|
||||
|
@ -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];
|
||||
|
Reference in New Issue
Block a user