From: Mark Wooding Date: Sun, 30 Aug 2015 09:58:38 +0000 (+0100) Subject: src/method-aggregate.lisp: Expose number of methods to custom combination. X-Git-Tag: 0.2.0~31 X-Git-Url: https://git.distorted.org.uk/~mdw/sod/commitdiff_plain/05170d7a72f151d07b30b73f0466d56b820190b3?hp=6bc944c3cebb89056d9ed0b53eff6260909291a9 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. --- 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)