enhanced dll
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/include -DNDEBUG
|
||||
|
||||
bin_PROGRAMS = xma fma chr str sll lda htb rbt fio pio sio time main rex01
|
||||
bin_PROGRAMS = xma fma chr str sll dll lda htb rbt fio pio sio time main rex01
|
||||
|
||||
LDFLAGS = -L../../lib/cmn
|
||||
LDADD = -lqsecmn
|
||||
@ -10,6 +10,7 @@ fma_SOURCES = fma.c
|
||||
chr_SOURCES = chr.c
|
||||
str_SOURCES = str.c
|
||||
sll_SOURCES = sll.c
|
||||
dll_SOURCES = dll.c
|
||||
lda_SOURCES = lda.c
|
||||
htb_SOURCES = htb.c
|
||||
rbt_SOURCES = rbt.c
|
||||
|
@ -35,9 +35,9 @@ POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
bin_PROGRAMS = xma$(EXEEXT) fma$(EXEEXT) chr$(EXEEXT) str$(EXEEXT) \
|
||||
sll$(EXEEXT) lda$(EXEEXT) htb$(EXEEXT) rbt$(EXEEXT) \
|
||||
fio$(EXEEXT) pio$(EXEEXT) sio$(EXEEXT) time$(EXEEXT) \
|
||||
main$(EXEEXT) rex01$(EXEEXT)
|
||||
sll$(EXEEXT) dll$(EXEEXT) lda$(EXEEXT) htb$(EXEEXT) \
|
||||
rbt$(EXEEXT) fio$(EXEEXT) pio$(EXEEXT) sio$(EXEEXT) \
|
||||
time$(EXEEXT) main$(EXEEXT) rex01$(EXEEXT)
|
||||
subdir = samples/cmn
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
@ -58,6 +58,10 @@ am_chr_OBJECTS = chr.$(OBJEXT)
|
||||
chr_OBJECTS = $(am_chr_OBJECTS)
|
||||
chr_LDADD = $(LDADD)
|
||||
chr_DEPENDENCIES =
|
||||
am_dll_OBJECTS = dll.$(OBJEXT)
|
||||
dll_OBJECTS = $(am_dll_OBJECTS)
|
||||
dll_LDADD = $(LDADD)
|
||||
dll_DEPENDENCIES =
|
||||
am_fio_OBJECTS = fio.$(OBJEXT)
|
||||
fio_OBJECTS = $(am_fio_OBJECTS)
|
||||
fio_LDADD = $(LDADD)
|
||||
@ -123,14 +127,14 @@ CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
SOURCES = $(chr_SOURCES) $(fio_SOURCES) $(fma_SOURCES) $(htb_SOURCES) \
|
||||
$(lda_SOURCES) $(main_SOURCES) $(pio_SOURCES) $(rbt_SOURCES) \
|
||||
$(rex01_SOURCES) $(sio_SOURCES) $(sll_SOURCES) $(str_SOURCES) \
|
||||
$(time_SOURCES) $(xma_SOURCES)
|
||||
DIST_SOURCES = $(chr_SOURCES) $(fio_SOURCES) $(fma_SOURCES) \
|
||||
SOURCES = $(chr_SOURCES) $(dll_SOURCES) $(fio_SOURCES) $(fma_SOURCES) \
|
||||
$(htb_SOURCES) $(lda_SOURCES) $(main_SOURCES) $(pio_SOURCES) \
|
||||
$(rbt_SOURCES) $(rex01_SOURCES) $(sio_SOURCES) $(sll_SOURCES) \
|
||||
$(str_SOURCES) $(time_SOURCES) $(xma_SOURCES)
|
||||
DIST_SOURCES = $(chr_SOURCES) $(dll_SOURCES) $(fio_SOURCES) \
|
||||
$(fma_SOURCES) $(htb_SOURCES) $(lda_SOURCES) $(main_SOURCES) \
|
||||
$(pio_SOURCES) $(rbt_SOURCES) $(rex01_SOURCES) $(sio_SOURCES) \
|
||||
$(sll_SOURCES) $(str_SOURCES) $(time_SOURCES) $(xma_SOURCES)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
@ -280,6 +284,7 @@ fma_SOURCES = fma.c
|
||||
chr_SOURCES = chr.c
|
||||
str_SOURCES = str.c
|
||||
sll_SOURCES = sll.c
|
||||
dll_SOURCES = dll.c
|
||||
lda_SOURCES = lda.c
|
||||
htb_SOURCES = htb.c
|
||||
rbt_SOURCES = rbt.c
|
||||
@ -369,6 +374,9 @@ clean-binPROGRAMS:
|
||||
chr$(EXEEXT): $(chr_OBJECTS) $(chr_DEPENDENCIES)
|
||||
@rm -f chr$(EXEEXT)
|
||||
$(LINK) $(chr_OBJECTS) $(chr_LDADD) $(LIBS)
|
||||
dll$(EXEEXT): $(dll_OBJECTS) $(dll_DEPENDENCIES)
|
||||
@rm -f dll$(EXEEXT)
|
||||
$(LINK) $(dll_OBJECTS) $(dll_LDADD) $(LIBS)
|
||||
fio$(EXEEXT): $(fio_OBJECTS) $(fio_DEPENDENCIES)
|
||||
@rm -f fio$(EXEEXT)
|
||||
$(LINK) $(fio_OBJECTS) $(fio_LDADD) $(LIBS)
|
||||
@ -416,6 +424,7 @@ distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chr.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dll.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fio.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fma.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htb.Po@am__quote@
|
||||
|
165
qse/samples/cmn/dll.c
Normal file
165
qse/samples/cmn/dll.c
Normal file
@ -0,0 +1,165 @@
|
||||
#include <qse/cmn/mem.h>
|
||||
#include <qse/cmn/str.h>
|
||||
#include <qse/cmn/dll.h>
|
||||
#include <qse/cmn/stdio.h>
|
||||
|
||||
|
||||
#define R(f) \
|
||||
do { \
|
||||
qse_printf (QSE_T("== %s ==\n"), QSE_T(#f)); \
|
||||
if (f() == -1) return -1; \
|
||||
} while (0)
|
||||
|
||||
static qse_dll_walk_t walk_dll (qse_dll_t* dll, qse_dll_node_t* n, void* arg)
|
||||
{
|
||||
qse_printf (QSE_T("[%.*s]\n"), (int)QSE_DLL_DLEN(n), QSE_DLL_DPTR(n));
|
||||
return QSE_DLL_WALK_FORWARD;
|
||||
}
|
||||
|
||||
static qse_dll_walk_t rwalk_dll (qse_dll_t* dll, qse_dll_node_t* n, void* arg)
|
||||
{
|
||||
qse_printf (QSE_T("[%.*s]\n"), (int)QSE_DLL_DLEN(n), QSE_DLL_DPTR(n));
|
||||
return QSE_DLL_WALK_BACKWARD;
|
||||
}
|
||||
|
||||
static int test1 ()
|
||||
{
|
||||
qse_dll_t* s1;
|
||||
qse_dll_node_t* p;
|
||||
qse_char_t* x[] =
|
||||
{
|
||||
QSE_T("this is so good"),
|
||||
QSE_T("what the hack"),
|
||||
QSE_T("do you like it?")
|
||||
};
|
||||
int i;
|
||||
|
||||
s1 = qse_dll_open (QSE_MMGR_GETDFL(), 0);
|
||||
if (s1 == QSE_NULL)
|
||||
{
|
||||
qse_printf (QSE_T("cannot open a string\n"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_dll_setcopier (s1, QSE_DLL_COPIER_INLINE);
|
||||
qse_dll_setscale (s1, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
for (i = 0; i < QSE_COUNTOF(x); i++)
|
||||
{
|
||||
qse_dll_pushtail (s1, x[i], qse_strlen(x[i]));
|
||||
}
|
||||
qse_printf (QSE_T("s1 holding [%d] nodes\n"), QSE_DLL_SIZE(s1));
|
||||
qse_dll_walk (s1, walk_dll, QSE_NULL);
|
||||
|
||||
|
||||
p = qse_dll_search (s1, QSE_NULL, x[0], qse_strlen(x[0]));
|
||||
if (p != QSE_NULL)
|
||||
{
|
||||
qse_dll_delete (s1, p);
|
||||
}
|
||||
qse_printf (QSE_T("s1 holding [%d] nodes\n"), QSE_DLL_SIZE(s1));
|
||||
qse_dll_walk (s1, walk_dll, QSE_NULL);
|
||||
|
||||
qse_dll_close (s1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int test2 ()
|
||||
{
|
||||
qse_dll_t* s1;
|
||||
qse_dll_node_t* p;
|
||||
qse_char_t* x[] =
|
||||
{
|
||||
QSE_T("this is so good"),
|
||||
QSE_T("what the hack"),
|
||||
QSE_T("do you like it?")
|
||||
};
|
||||
int i;
|
||||
|
||||
s1 = qse_dll_open (QSE_MMGR_GETDFL(), 0);
|
||||
if (s1 == QSE_NULL)
|
||||
{
|
||||
qse_printf (QSE_T("cannot open a string\n"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
qse_dll_setcopier (s1, QSE_DLL_COPIER_INLINE);
|
||||
qse_dll_setscale (s1, QSE_SIZEOF(qse_char_t));
|
||||
|
||||
for (i = 0; i < QSE_COUNTOF(x); i++)
|
||||
{
|
||||
qse_dll_pushtail (s1, x[i], qse_strlen(x[i]));
|
||||
}
|
||||
qse_printf (QSE_T("s1 holding [%d] nodes\n"), QSE_DLL_SIZE(s1));
|
||||
qse_dll_rwalk (s1, rwalk_dll, QSE_NULL);
|
||||
|
||||
|
||||
p = qse_dll_search (s1, QSE_NULL, x[0], qse_strlen(x[0]));
|
||||
if (p != QSE_NULL)
|
||||
{
|
||||
qse_dll_delete (s1, p);
|
||||
}
|
||||
qse_printf (QSE_T("s1 holding [%d] nodes\n"), QSE_DLL_SIZE(s1));
|
||||
qse_dll_rwalk (s1, rwalk_dll, QSE_NULL);
|
||||
|
||||
qse_dll_close (s1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
typedef struct item_t item_t;
|
||||
struct item_t
|
||||
{
|
||||
int a;
|
||||
int b;
|
||||
};
|
||||
QSE_DLL_DEFINE_SIMPLE (item_t);
|
||||
|
||||
static int test3 ()
|
||||
{
|
||||
qse_size_t n;
|
||||
QSE_DLL_TYPE(item_t) ii;
|
||||
QSE_DLL_NODE_TYPE(item_t) x[30];
|
||||
QSE_DLL_NODE_TYPE(item_t)* p;
|
||||
|
||||
QSE_DLL_INIT(&ii);
|
||||
|
||||
for (n = 0; n < QSE_COUNTOF(x); n++)
|
||||
{
|
||||
x[n].data.a = n;
|
||||
x[n].data.b = n * 2;
|
||||
}
|
||||
|
||||
for (n = 0; n < QSE_COUNTOF(x)/2; n++)
|
||||
{
|
||||
QSE_DLL_ADDHEAD (&ii, &x[n]);
|
||||
}
|
||||
|
||||
for (; n < QSE_COUNTOF(x); n++)
|
||||
{
|
||||
QSE_DLL_ADDTAIL (&ii, &x[n]);
|
||||
}
|
||||
|
||||
qse_printf (QSE_T("total %d items\n"), (int)QSE_DLL_SIZE (&ii));
|
||||
for (p = QSE_DLL_HEAD(&ii); QSE_DLL_ISMEMBER(&ii,p); p = p->next)
|
||||
{
|
||||
qse_printf (QSE_T("%d %d\n"), p->data.a, p->data.b);
|
||||
}
|
||||
|
||||
QSE_DLL_UNCHAIN (&ii, QSE_DLL_TAIL(&ii)->prev);
|
||||
QSE_DLL_DELHEAD (&ii);
|
||||
qse_printf (QSE_T("total %d items. printing in reverse\n"), (int)QSE_DLL_SIZE (&ii));
|
||||
for (p = QSE_DLL_TAIL(&ii); QSE_DLL_ISMEMBER(&ii,p); p = p->prev)
|
||||
{
|
||||
qse_printf (QSE_T("%d %d\n"), p->data.a, p->data.b);
|
||||
}
|
||||
QSE_DLL_FINI (&ii);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
R (test1);
|
||||
R (test2);
|
||||
R (test3);
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user