On 2012-07-10 17:11, Christophe Travert wrote:

What is wrong with foo.chain(["bar"])?

I think it conceptually wrong for what I want to do. I don't know if I misunderstood ranges completely but I'm seeing them as an abstraction over a collection. With most mutable collection you can add/append an element.

you might try this (untested)


string function(Parameter) stringify = (x)
{
  return (x.isConst? "const("~x.type~")": x.type)
     ~ (x.name.any?" "~translateIdentifier(x.name):"");
}

auto params = parameters
   .map!stringify()
   .chain(variadic? []: ["..."])
   .joiner(", ");

context ~= params;

I am not sure this will be more efficient. joiner may be slowed down by
the fact that it is called with a chain result, which is slower on
front. But at leat you save yourself the heap-allocation of the params
array*.

I would use:
context ~= parameters.map!stringify().joiner(",  ");
if (variadic) context ~= ", ...";

To make the best implementation would require to know how the String
context works.

*Note that here, stringify is not lazy, and thus allocates. It
could be a chain or a joiner, but I'm not sure the result would really
be more efficient.

String is a wrapper around str.array.Appender.

--
/Jacob Carlborg


Reply via email to