Mercurial > hg > index.cgi
view lwar/lwar.c @ 337:3b5a45c6ab92
Speed improvement to lw_expr
Instead of using a singly linked list and doing the slow append algorithm
when adding an operand to an expression (scan from the start to find the
end), now maintain a tail pointer. Also maintain a previous pointer in each
entry. Benchmarking suggests this yields a rougly 30% improvement in
runtime.
Also refactor some of the code in lw_expr.c to make it somewhat clearer to
understand. For some values of clearer and understand.
author | William Astle <lost@l-w.ca> |
---|---|
date | Sat, 02 Aug 2014 10:08:01 -0600 |
parents | 6eed14cccac9 |
children | 221b5f58d8ad |
line wrap: on
line source
/* lwar.c Copyright © 2009 William Astle This file is part of LWAR. LWAR is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Implements the program startup code */ #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include <lw_alloc.h> #define __lwar_c_seen__ #include "lwar.h" typedef struct { FILE *f; } arhandle_real; int debug_level = 0; int operation = 0; int nfiles = 0; char *archive_file = NULL; int mergeflag = 0; char **files = NULL; void add_file_name(char *fn) { files = lw_realloc(files, sizeof(char *) * (nfiles + 1)); files[nfiles] = fn; nfiles++; }