From 05170d7a72f151d07b30b73f0466d56b820190b3 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Sun, 30 Aug 2015 10:58:38 +0100 Subject: [PATCH 1/1] src/method-aggregate.lisp: Expose number of methods to custom combination. This permits pre-allocating an array for collecting results, for example. Suggested by Tony Finch. --- src/method-aggregate.lisp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/method-aggregate.lisp b/src/method-aggregate.lisp index 9d0a6dd..e374924 100644 --- a/src/method-aggregate.lisp +++ b/src/method-aggregate.lisp @@ -406,18 +406,21 @@ :before :fragment :first :fragment :each :fragment - :after :fragment)) + :after :fragment + :count :id)) (defmethod compute-aggregating-message-kernel ((message aggregating-message) (combination (eql :custom)) codegen target methods arg-names &key (retvar "sod_ret") (valvar "sod_val") - decls before each (first each) after) + decls before each (first each) after count) (let* ((type (c-type-subtype (sod-message-type message))) (not-void-p (not (eq type c-type-void)))) (when not-void-p (ensure-var codegen retvar type) (ensure-var codegen valvar type)) + (when count + (ensure-var codegen count c-type-int (length methods))) (when decls (emit-decl codegen decls)) (labels ((maybe-emit (fragment) -- 2.11.0