From 4a76d4b8866b60601f66fa19a559cc87e48c81aa Mon Sep 17 00:00:00 2001 From: Ferdinand Majerech Date: Sat, 19 Jul 2014 01:59:26 +0200 Subject: [PATCH] assumeSafeAppend to decrease GC usage. --- source/dyaml/composer.d | 6 +++++- source/dyaml/constructor.d | 17 ++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/source/dyaml/composer.d b/source/dyaml/composer.d index df01fac..25256a7 100644 --- a/source/dyaml/composer.d +++ b/source/dyaml/composer.d @@ -309,7 +309,11 @@ final class Composer Node[] toMerge; foreach(ref Node key, ref Node value; root) { - if(key.isType!YAMLMerge){toMerge ~= value;} + if(key.isType!YAMLMerge) + { + toMerge.assumeSafeAppend(); + toMerge ~= value; + } else { auto temp = Node.Pair(key, value); diff --git a/source/dyaml/constructor.d b/source/dyaml/constructor.d index 617a16c..cafa226 100644 --- a/source/dyaml/constructor.d +++ b/source/dyaml/constructor.d @@ -693,8 +693,9 @@ Node.Pair[] getPairs(string type, Node[] nodes) { enforce(node.isMapping && node.length == 1, new Exception("While constructing " ~ type ~ - ", expected a mapping with single element")); + ", expected a mapping with single element")); + pairs.assumeSafeAppend(); pairs ~= node.as!(Node.Pair[]); } @@ -730,8 +731,8 @@ unittest Node[] pairs; foreach(long i; 0 .. length) { - auto pair = (i % 2) ? Pair(to!string(i), i) - : Pair(i, to!string(i)); + auto pair = (i % 2) ? Pair(i.to!string, i) : Pair(i, i.to!string); + pairs.assumeSafeAppend(); pairs ~= Node([pair]); } return pairs; @@ -742,7 +743,8 @@ unittest Node[] pairs; foreach(long i; 0 .. length) { - auto pair = Pair(to!string(i), i); + auto pair = Pair(i.to!string, i); + pairs.assumeSafeAppend(); pairs ~= Node([pair]); } return pairs; @@ -781,9 +783,9 @@ Node[] constructSet(ref Node node) Node[] nodes; foreach(ref pair; pairs) { - enforce((pair.key in map) is null, - new Exception("Duplicate entry in a set")); + enforce((pair.key in map) is null, new Exception("Duplicate entry in a set")); map[pair.key] = 0; + nodes.assumeSafeAppend(); nodes ~= pair.key; } @@ -798,7 +800,8 @@ unittest Node.Pair[] pairs; foreach(long i; 0 .. length) { - pairs ~= Node.Pair(to!string(i), YAMLNull()); + pairs.assumeSafeAppend(); + pairs ~= Node.Pair(i.to!string, YAMLNull()); } return pairs;