integrated multimap primitive

pull/95/head
jmoenig 2020-12-07 13:27:29 +01:00
rodzic 3973983b13
commit 5aece84881
5 zmienionych plików z 24 dodań i 14 usunięć

Wyświetl plik

@ -7,6 +7,7 @@
* hyperdyadic MIN and MAX primitives reachable via "relabel"
* hyperdyadic less / great than or equals primitives reachable via "relabel"
* new SIGN function in arithmetic dropdown
* new experimental compiled Multimap, thanks, Brian
* **Notable Changes:**
* searching for blocks and keyboard entry now includes the contents of dropdown menus
* disabled dropping reporters into certain dropdowns (monadic functions, types, costume attributees, graphic effects, layers, audio attributes, pen attributes, dates, relation, keys, video attributes)
@ -22,6 +23,7 @@
### 2020-12-07
* GUI: improved SVG loading, thanks, Joan!
* threads, objects, blocks: compiled multimap, thanks, Brian
### 2020-12-05
* objects: alternative collision detection method using the video-cache, commented out for reference.

Wyświetl plik

@ -8,9 +8,9 @@
<script src="src/morphic.js?version=2020-12-02"></script>
<script src="src/symbols.js?version=2020-10-07"></script>
<script src="src/widgets.js?version=2020-10-06"></script>
<script src="src/blocks.js?version=2020-12-04"></script>
<script src="src/threads.js?version=2020-12-04"></script>
<script src="src/objects.js?version=2020-12-05"></script>
<script src="src/blocks.js?version=2020-12-07"></script>
<script src="src/threads.js?version=2020-12-07"></script>
<script src="src/objects.js?version=2020-12-07"></script>
<script src="src/gui.js?version=2020-12-07"></script>
<script src="src/paint.js?version=2020-05-17"></script>
<script src="src/lists.js?version=2020-12-01"></script>

Wyświetl plik

@ -158,7 +158,7 @@ CustomCommandBlockMorph, SymbolMorph, ToggleButtonMorph, DialMorph*/
// Global stuff ////////////////////////////////////////////////////////
modules.blocks = '2020-December-04';
modules.blocks = '2020-December-07';
var SyntaxElementMorph;
var BlockMorph;
@ -2839,7 +2839,6 @@ BlockMorph.prototype.userMenu = function () {
) {
alternatives = {
reportMap : 'reportAtomicMap',
reportMap : 'reportAtomicMultimap',
reportKeep : 'reportAtomicKeep',
reportFindFirst: 'reportAtomicFindFirst',
reportCombine : 'reportAtomicCombine'
@ -2854,7 +2853,7 @@ BlockMorph.prototype.userMenu = function () {
contains(
[
'reportAtomicMap',
'reportAtomicMultimap',
'reportAtomicMultimap',
'reportAtomicKeep',
'reportAtomicFindFirst',
'reportAtomicCombine'
@ -2864,7 +2863,7 @@ BlockMorph.prototype.userMenu = function () {
) {
alternatives = {
reportAtomicMap : 'reportMap',
reportAtomicMultimap : 'reportMap',
reportAtomicMultimap : 'reportMap',
reportAtomicKeep : 'reportKeep',
reportAtomicFindFirst: 'reportFindFirst',
reportAtomicCombine : 'reportCombine'
@ -11717,7 +11716,7 @@ MultiArgMorph.prototype.is3ArgRingInHOF = function () {
[
'reportMap',
'reportAtomicMap',
'reportAtomicMultimap',
'reportAtomicMultimap',
'reportKeep',
'reportAtomicKeep',
'reportFindFirst',

Wyświetl plik

@ -84,7 +84,7 @@ BlockEditorMorph, BlockDialogMorph, PrototypeHatBlockMorph, BooleanSlotMorph,
localize, TableMorph, TableFrameMorph, normalizeCanvas, VectorPaintEditorMorph,
AlignmentMorph, Process, WorldMap, copyCanvas, useBlurredShadows*/
modules.objects = '2020-December-05';
modules.objects = '2020-December-07';
var SpriteMorph;
var StageMorph;
@ -1385,7 +1385,7 @@ SpriteMorph.prototype.initBlocks = function () {
dev: true, // not shown in palette, only accessible via relabelling
type: 'reporter',
category: 'lists',
spec: '%blitz map %repRing over %lists'
spec: '%blitz multimap %repRing over %lists'
},
reportKeep: {
type: 'reporter',
@ -1694,7 +1694,12 @@ SpriteMorph.prototype.blockAlternatives = {
reportKeep: ['reportFindFirst', 'reportMap'],
reportFindFirst: ['reportKeep', 'reportMap'],
doForEach: [['doFor', 1], ['doForever', -2], ['doRepeat', -1],
['doUntil', -1]]
['doUntil', -1]],
// lists - special hidden HOFs
reportAtomicMap: ['reportAtomicMultimap'],
reportAtomicMultimap: ['reportAtomicMap']
};
// SpriteMorph instance creation

Wyświetl plik

@ -61,7 +61,7 @@ StageMorph, SpriteMorph, StagePrompterMorph, Note, modules, isString, copy, Map,
isNil, WatcherMorph, List, ListWatcherMorph, alert, console, TableMorph, BLACK,
TableFrameMorph, ColorSlotMorph, isSnapObject, newCanvas, Symbol, SVG_Costume*/
modules.threads = '2020-December-04';
modules.threads = '2020-December-07';
var ThreadManager;
var Process;
@ -6113,11 +6113,15 @@ Process.prototype.reportAtomicMultimap = function (reporter, list) {
// #3 - optional | source list
this.assertType(list, 'list');
if (list.itemsArray().length == 1) {
return this.reportAtomicMap(reporter, list.at(1));
}
var result = [],
src = list.itemsArray().map(onelist => onelist.itemsArray()),
len = src[1].length,
width = src.length,
formalParameterCount = reporter.inputs.length,
column = (list, index) => list.map(row => row[index]),
parms,
func,
i;
@ -6140,9 +6144,9 @@ Process.prototype.reportAtomicMultimap = function (reporter, list) {
for (i = 0; i < len; i += 1) {
if (formalParameterCount > 0) {
parms = [new List(src.map(onearg => onearg[i]))];
parms = [new List(column(src, i))];
} else {
parms = src.map(onearg => onearg[i]);
parms = column(src, i);
}
if (formalParameterCount > 1) {
parms.push(i + 1);