Changed reverse shape list to tail cached variant

This commit is contained in:
daniel-starke 2017-04-21 22:05:26 +02:00
parent 3f40cbc53e
commit 096f60a5c5

View File

@ -435,6 +435,7 @@ typedef struct NSVGparser
NSVGpath* plist;
NSVGimage* image;
NSVGgradientData* gradients;
NSVGshape* shapesTail;
float viewMinx, viewMiny, viewWidth, viewHeight;
int alignX, alignY, alignType;
float dpi;
@ -921,7 +922,7 @@ static void nsvg__addShape(NSVGparser* p)
{
NSVGattrib* attr = nsvg__getAttr(p);
float scale = 1.0f;
NSVGshape *shape;
NSVGshape* shape;
NSVGpath* path;
int i;
@ -996,9 +997,12 @@ static void nsvg__addShape(NSVGparser* p)
// Set flags
shape->flags = (attr->visible ? NSVG_FLAGS_VISIBLE : 0x00);
// Add to head due to performance, reverse list later
shape->next = p->image->shapes;
// Add to tail
if (p->image->shapes == NULL)
p->image->shapes = shape;
else
p->shapesTail->next = shape;
p->shapesTail = shape;
return;
@ -2787,7 +2791,6 @@ NSVGimage* nsvgParse(char* input, const char* units, float dpi)
{
NSVGparser* p;
NSVGimage* ret = 0;
NSVGshape* cur, *prev, *tmp;
p = nsvg__createParser();
if (p == NULL) {
@ -2797,17 +2800,6 @@ NSVGimage* nsvgParse(char* input, const char* units, float dpi)
nsvg__parseXML(input, nsvg__startElement, nsvg__endElement, nsvg__content, p);
// Reverse the list of shapes to match SVG order
cur = p->image->shapes;
prev = NULL;
while (cur != NULL) {
tmp = cur;
cur = cur->next;
tmp->next = prev;
prev = tmp;
}
if (prev != NULL) p->image->shapes = prev;
// Scale to viewBox
nsvg__scaleToViewbox(p, units);