From f650bc134e5e1db71498bd4504a98331a99993d2 Mon Sep 17 00:00:00 2001 From: reinelt Date: Wed, 30 Mar 2005 04:57:50 +0000 Subject: [lcd4linux @ 2005-03-30 04:57:50 by reinelt] Evaluator speedup: use bsearch for finding functions and variables git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@521 3ae390bd-cb1e-0410-b409-cd5a39f66f1f --- evaluator.c | 70 ++++++++++++++++++++++++++++++++++++++++++++---------------- lcd4linux.c | 13 ++++++++--- plugin_cfg.c | 7 ++++-- 3 files changed, 67 insertions(+), 23 deletions(-) diff --git a/evaluator.c b/evaluator.c index b07926c..a4e373a 100644 --- a/evaluator.c +++ b/evaluator.c @@ -1,4 +1,4 @@ -/* $Id: evaluator.c,v 1.23 2005/01/18 06:30:23 reinelt Exp $ +/* $Id: evaluator.c,v 1.24 2005/03/30 04:57:50 reinelt Exp $ * * expression evaluation * @@ -23,6 +23,9 @@ * * * $Log: evaluator.c,v $ + * Revision 1.24 2005/03/30 04:57:50 reinelt + * Evaluator speedup: use bsearch for finding functions and variables + * * Revision 1.23 2005/01/18 06:30:23 reinelt * added (C) to all copyright statements * @@ -441,16 +444,30 @@ char* R2S (RESULT *result) } -static VARIABLE *FindVariable (const char *name) + +/* bsearch compare function for variables */ +static int LookupVariable (const void *a, const void *b) { - int i; + char *key = (char*)a; + VARIABLE *var = (VARIABLE*)b; - for (i=0; iname); +} + + +/* qsort compare function for variables */ +static int SortVariable (const void *a, const void *b) +{ + VARIABLE *va=(VARIABLE*)a; + VARIABLE *vb=(VARIABLE*)b; + + return strcmp(va->name, vb->name); +} + + +static VARIABLE *FindVariable (const char *name) +{ + return bsearch(name, Variable, nVariable, sizeof(VARIABLE), LookupVariable); } @@ -461,7 +478,7 @@ int SetVariable (const char *name, RESULT *value) V = FindVariable(name); if (V != NULL) { FreeResult (V->value); - V->value = value; + V->value = DupResult(value); return 1; } @@ -470,6 +487,8 @@ int SetVariable (const char *name, RESULT *value) Variable[nVariable-1].name = strdup(name); Variable[nVariable-1].value = DupResult(value); + qsort(Variable, nVariable, sizeof(VARIABLE), SortVariable); + return 0; } @@ -510,16 +529,29 @@ void DeleteVariables(void) } -static FUNCTION* FindFunction (const char *name) +/* bsearch compare function for functions */ +static int LookupFunction (const void *a, const void *b) { - int i; + char *n = (char*)a; + FUNCTION *f = (FUNCTION*)b; - for (i=0; iname); +} + + +/* qsort compare function for functions */ +static int SortFunction (const void *a, const void *b) +{ + FUNCTION *fa=(FUNCTION*)a; + FUNCTION *fb=(FUNCTION*)b; + + return strcmp(fa->name, fb->name); +} + + +static FUNCTION* FindFunction (const char *name) +{ + return bsearch(name, Function, nFunction, sizeof(FUNCTION), LookupFunction); } @@ -530,6 +562,8 @@ int AddFunction (const char *name, const int argc, void (*func)()) Function[nFunction-1].name = strdup(name); Function[nFunction-1].argc = argc; Function[nFunction-1].func = func; + + qsort(Function, nFunction, sizeof(FUNCTION), SortFunction); return 0; } diff --git a/lcd4linux.c b/lcd4linux.c index d4885b1..65e4a66 100644 --- a/lcd4linux.c +++ b/lcd4linux.c @@ -1,4 +1,4 @@ -/* $Id: lcd4linux.c,v 1.76 2005/01/18 06:30:23 reinelt Exp $ +/* $Id: lcd4linux.c,v 1.77 2005/03/30 04:57:50 reinelt Exp $ * * LCD4Linux * @@ -23,6 +23,9 @@ * * * $Log: lcd4linux.c,v $ + * Revision 1.77 2005/03/30 04:57:50 reinelt + * Evaluator speedup: use bsearch for finding functions and variables + * * Revision 1.76 2005/01/18 06:30:23 reinelt * added (C) to all copyright statements * @@ -417,10 +420,14 @@ static void interactive_mode (void) if (strlen(line)>0) { if (Compile(line, &tree)!=-1) { Eval (tree, &result); - if (result.type==R_NUMBER) { + if (result.type == R_NUMBER) { printf ("%g\n", R2N(&result)); - } else if (result.type==R_STRING) { + } else if (result.type == R_STRING) { printf ("'%s'\n", R2S(&result)); + } else if (result.type == (R_NUMBER|R_STRING)) { + printf ("'%s' (%g)\n", R2S(&result), R2N(&result)); + } else { + printf ("internal error: unknown result type %d\n", result.type); } DelResult (&result); } diff --git a/plugin_cfg.c b/plugin_cfg.c index 8518eaa..2996045 100644 --- a/plugin_cfg.c +++ b/plugin_cfg.c @@ -1,4 +1,4 @@ -/* $Id: plugin_cfg.c,v 1.12 2005/01/18 06:30:23 reinelt Exp $ +/* $Id: plugin_cfg.c,v 1.13 2005/03/30 04:57:50 reinelt Exp $ * * plugin for config file access * @@ -23,6 +23,9 @@ * * * $Log: plugin_cfg.c,v $ + * Revision 1.13 2005/03/30 04:57:50 reinelt + * Evaluator speedup: use bsearch for finding functions and variables + * * Revision 1.12 2005/01/18 06:30:23 reinelt * added (C) to all copyright statements * @@ -128,8 +131,8 @@ static void load_variables (void) if (expression!=NULL && *expression!='\0') { tree = NULL; if (Compile(expression, &tree) == 0 && Eval(tree, &result)==0) { - debug ("Variable %s = '%s' (%f)", l, R2S(&result), R2N(&result)); SetVariable (l, &result); + debug ("Variable %s = '%s' (%g)", l, R2S(&result), R2N(&result)); DelResult (&result); } else { error ("error evaluating variable '%s' from %s", list, cfg_source()); -- cgit v1.2.3 -3/+12 2017-06-19New upstream version 0+git20170425.fb5fe05upstream/0+git20170425.fb5fe05Jonathan McCrohan16-102/+786 2017-01-05Release 0+git20161227.ac7535a-1debian/0+git20161227.ac7535a-1Jonathan McCrohan1-0/+6 2017-01-05New upstream version 0+git20161227.ac7535aupstream/0+git20161227.ac7535aJonathan McCrohan39-1522/+4879 2016-06-11Release 0+git20160503.4f192bd-1debian/0+git20160503.4f192bd-1Jonathan McCrohan1-2/+2 2016-06-11d/control: update insecure Vcs-Git URLJonathan McCrohan2-1/+2 2016-06-11d/control: update Standards Version to 3.9.8Jonathan McCrohan2-1/+9 2016-06-11Imported Upstream version 0+git20160503.4f192bdupstream/0+git20160503.4f192bdJonathan McCrohan1307-2667/+38002 2016-01-18Release 0+git20151202.3864e0a-1debian/0+git20151202.3864e0a-1Jonathan McCrohan1-2/+3 2016-01-18Imported Upstream version 0+git20151202.3864e0aJonathan McCrohan840-4057/+18230 2016-01-18Update get-vcs-snapshot.sh to reflect gbp changesJonathan McCrohan2-1/+2 2016-01-18Imported Upstream version 0+git20151202.3864e0aupstream/0+git20151202.3864e0aJonathan McCrohan840-4057/+18230 2015-05-05d/control: various fixes found by libconfig-model-dpkg-perlJonathan McCrohan2-5/+13 2015-04-01Release 0+git20150208.f2053b3-1Jonathan McCrohan1-2/+2 2015-04-01Describe changes made in snapshotJonathan McCrohan1-0/+3 2015-04-01New Upstream Snapshot (commit f2053b3)Jonathan McCrohan1-0/+6 2015-04-01Imported Upstream version 0+git20150208.f2053b3upstream/0+git20150208.f2053b3Jonathan McCrohan32-333/+483 2014-12-28Release 0+git20141218.b46a22c-1debian/0+git20141218.b46a22c-1Jonathan McCrohan1-2/+2 2014-12-28Updated AU DVB-T files; Thanks Brian Burch! (Closes LP: #1393280)Jonathan McCrohan1-0/+1 2014-12-28New Upstream Snapshot (commit b46a22c)Jonathan McCrohan1-0/+6 2014-12-28Imported Upstream version 0+git20141218.b46a22cupstream/0+git20141218.b46a22cJonathan McCrohan535-639/+317 2014-10-20Release 0+git20141009.d26b627-1debian/0+git20141009.d26b627-1Jonathan McCrohan1-2/+2 2014-10-20Fix up packaging to account for move to DVBv5Jonathan McCrohan2-2/+6 2014-10-20delete d/dtv-scan-files.install; Upstream now supplies a MakefileJonathan McCrohan2-4/+1 2014-10-15d/control: update Standards Version to 3.9.6Jonathan McCrohan2-1/+3 2014-10-15d/control: add Build-Depends on dvb-toolsJonathan McCrohan2-1/+2 2014-10-15New Upstream Snapshot (commit d26b627)Jonathan McCrohan1-0/+10 2014-10-15Imported Upstream version 0+git20141009.d26b627upstream/0+git20141009.d26b627Jonathan McCrohan2010-11120/+159271 2014-07-23Release 0+git20140611.14bd6c7-1debian/0+git20140611.14bd6c7-1Jonathan McCrohan1-2/+2 2014-07-23New Upstream Snapshot (commit 14bd6c7)Jonathan McCrohan1-2/+3 2014-07-23Imported Upstream version 0+git20140611.14bd6c7upstream/0+git20140611.14bd6c7Jonathan McCrohan7-11/+60 2014-05-13New Upstream Snapshot (commit 1246b27)Jonathan McCrohan1-0/+6 2014-05-13Imported Upstream version 0+git20140512.1246b27upstream/0+git20140512.1246b27Jonathan McCrohan391-301/+3983 2014-04-05Release 0+git20140326.cfc2975-1debian/0+git20140326.cfc2975-1Jonathan McCrohan1-2/+2 2014-04-05d/control: update Homepage (upstream has moved from Gitweb to cgit)Jonathan McCrohan2-1/+2 2014-04-05New Upstream Snapshot (commit cfc2975)Jonathan McCrohan1-0/+6 2014-04-05Imported Upstream version 0+git20140326.cfc2975upstream/0+git20140326.cfc2975Jonathan McCrohan118-656/+877 2014-01-16Release 0+git20140107.1850cf8-1debian/0+git20140107.1850cf8-1Jonathan McCrohan1-2/+2 2014-01-16Update Standards Version to 3.9.5Jonathan McCrohan2-1/+9