aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrodri <rgl@antares-labs.eu>2023-12-11 23:56:00 +0000
committerrodri <rgl@antares-labs.eu>2023-12-11 23:56:00 +0000
commit82e650b577a5c7eea32fcff32d85b3fbcdfc6f0a (patch)
treec031000145289aa37cd36c88a79d558ea03ba7a0
parentb4d8077f0ce99505f7b65a67fc92aa20dc96ed78 (diff)
downloadlibobj-82e650b577a5c7eea32fcff32d85b3fbcdfc6f0a.tar.gz
libobj-82e650b577a5c7eea32fcff32d85b3fbcdfc6f0a.tar.bz2
libobj-82e650b577a5c7eea32fcff32d85b3fbcdfc6f0a.zip
improve element insertion procedure.
brought the processing time of a 38MB file from 26 minutes down to less than 20 seconds with this change. it was a very naive insertion procedure that was waiting to be pruned.
-rw-r--r--obj.c11
-rw-r--r--obj.h1
2 files changed, 5 insertions, 7 deletions
diff --git a/obj.c b/obj.c
index b410e7c..f896214 100644
--- a/obj.c
+++ b/obj.c
@@ -87,15 +87,12 @@ addvert(OBJ *obj, OBJVertex v, int vtype)
static void
addelem(OBJObject *o, OBJElem *e)
{
- OBJElem *ep;
-
- if(o->child == nil){
- o->child = e;
+ if(o->lastone == nil){
+ o->lastone = o->child = e;
return;
}
- for(ep = o->child; ep->next != nil; ep = ep->next)
- ;
- ep->next = e;
+ o->lastone->next = e;
+ o->lastone = o->lastone->next;
}
static OBJElem *
diff --git a/obj.h b/obj.h
index dff7d6e..e758a78 100644
--- a/obj.h
+++ b/obj.h
@@ -80,6 +80,7 @@ struct OBJObject
{
char *name;
OBJElem *child;
+ OBJElem *lastone;
OBJObject *next;
};