|
3012 | 3012 | (if (= 1 path-length)
|
3013 | 3013 | (let ((indexer (if (not (functionp base-indexer))
|
3014 | 3014 | base-indexer
|
3015 |
| - (if (typep base 'vader-mix) |
| 3015 | + (if (or (typep base 'vader-mix) |
| 3016 | + (and (typep base 'vader-pick) |
| 3017 | + (typep (vader-base base) 'vader-mix))) |
| 3018 | + ;; vader-pick is handled here for cases like |
| 3019 | + ;; { ee←{↑⍪/(⊂⍺),⍶,⊂⍵} ⋄ ⍵⊃⊃↑{⍺ ee⌿⍵}/9⍴⊂⍳9 } 22 |
| 3020 | + ;; TODO: condense successive picks like ⍵⊃⊃ into one |
3016 | 3021 | (let ((bix (funcall base-indexer 0)))
|
| 3022 | + ;; (print (list :ib bix path-value)) |
3017 | 3023 | (if (not (arrayp bix))
|
3018 |
| - bix (row-major-aref bix path-value))) |
3019 |
| - (funcall base-indexer path-value)) |
3020 |
| - ;; (let ((bix (funcall base-indexer 0))) |
3021 |
| - ;; (if (or (not (arrayp bix)) |
3022 |
| - ;; (typep base 'vader-mix)) |
3023 |
| - ;; bix (row-major-aref bix path-value))) |
3024 |
| - ))) |
3025 |
| - ;; (print (list :nn indexer base-indexer (funcall base-indexer 0))) |
3026 |
| - (if (and (not (shape-of indexer)) |
3027 |
| - (or (arrayp indexer) (varrayp indexer))) |
3028 |
| - (setf (vads-subrendering varray) t)) |
| 3024 | + (funcall (generator-of bix) path-value) |
| 3025 | + (row-major-aref bix path-value))) |
| 3026 | + (funcall base-indexer path-value))))) |
| 3027 | + ;; (print (list :nn base indexer base-indexer (funcall base-indexer 0))) |
| 3028 | + ;; (print (list :n2 base indexer path-value)) |
| 3029 | + ;; (setf april::oop base) |
| 3030 | + (when (and (not (shape-of indexer)) |
| 3031 | + (or (arrayp indexer) (varrayp indexer))) |
| 3032 | + (setf (vads-subrendering varray) t)) |
3029 | 3033 | indexer)
|
3030 | 3034 | (fetch-reference varray (funcall base-indexer path-value)
|
3031 | 3035 | path (1+ (or path-index 0)))))))
|
|
3041 | 3045 | (if (zerop (size-of base))
|
3042 | 3046 | (prototype-of base)
|
3043 | 3047 | (let ((bix (funcall base-indexer 0)))
|
3044 |
| - ;; (print (list :ba base bix (funcall (generator-of base) 0) |
3045 |
| - ;; (render (generator-of |
3046 |
| - ;; (generator-of (funcall (generator-of base) 0)))) |
3047 |
| - ;; )) |
3048 | 3048 | (if (or (not (arrayp bix))
|
3049 | 3049 | ;; TODO: special mix case, generalize
|
3050 |
| - (not (typep base 'vader-mix)) |
3051 |
| - ) |
| 3050 | + (not (typep base 'vader-mix))) |
3052 | 3051 | bix (row-major-aref bix 0)))))))
|
3053 | 3052 | ;; (print (list :ind indexer base (shape-of base)))
|
3054 | 3053 | (when (and (shape-of base) (not (shape-of indexer))
|
|
0 commit comments