mirror of
https://github.com/xodio/xod.git
synced 2026-03-22 08:36:53 +01:00
Merge pull request #1091 from xodio/feat-1068-make-standard-nodes-variadic
Make standard nodes variadic
This commit is contained in:
@@ -25,7 +25,7 @@ describe('xod-patch-search/index', () => {
|
||||
const result = idx.search('path:number');
|
||||
assert.equal(
|
||||
result[0].item.path,
|
||||
'xod/core/nth-number-2'
|
||||
'xod/core/nth-number'
|
||||
);
|
||||
});
|
||||
|
||||
@@ -37,7 +37,7 @@ describe('xod-patch-search/index', () => {
|
||||
|
||||
it('searches: "number"', () => assert.equal(
|
||||
idx.search('number')[0].item.path,
|
||||
'xod/core/nth-number-2' // Cause it has a `number` in the path and it alphabetically sorted (that's why not *-to-string)
|
||||
'xod/core/nth-number' // Cause it has a `number` in the path and it alphabetically sorted (that's why not *-to-string)
|
||||
));
|
||||
|
||||
it('searches: "lib:xod/patch-nodes number"', () => {
|
||||
|
||||
@@ -57,8 +57,8 @@ const createAdditionalValueTerminalGroups = (
|
||||
const getValueTerminalX = (terminalGroupIndex, terminalIndex) => (
|
||||
rightmostInputTerminalX +
|
||||
DISTANCE_BETWEEN_TERMINALS +
|
||||
// because terminalGroupIndex always starts from 2
|
||||
((terminalGroupIndex - 2) * valueTerminalsGroupWidth) +
|
||||
// because terminalGroupIndex always starts from 1
|
||||
((terminalGroupIndex - 1) * valueTerminalsGroupWidth) +
|
||||
(terminalIndex * DISTANCE_BETWEEN_TERMINALS)
|
||||
);
|
||||
|
||||
@@ -77,8 +77,7 @@ const createAdditionalValueTerminalGroups = (
|
||||
)(node),
|
||||
originalValueTerminalNodes
|
||||
)),
|
||||
R.range(2), // [2; desiredArityLevel]
|
||||
R.inc
|
||||
R.range(1), // [1; desiredArityLevel)
|
||||
)(desiredArityLevel);
|
||||
};
|
||||
|
||||
@@ -152,12 +151,12 @@ const createLinksToAdditionalValueTerminals =
|
||||
|
||||
|
||||
const createLinksFromNodeOutputsToAccPins = (variadicPinKeys, expansionNodeIds) => {
|
||||
const accOutPinKeyPairs = R.zip(variadicPinKeys.outputs, variadicPinKeys.acc);
|
||||
const accOutPinKeyPairs = R.zip(variadicPinKeys.acc, variadicPinKeys.outputs);
|
||||
return R.compose(
|
||||
R.chain(([inputNodeId, outputNodeId]) => R.map(
|
||||
R.chain(([outputNodeId, inputNodeId]) => R.map(
|
||||
([accPinKey, outputPinKey]) => Link.createLink(
|
||||
accPinKey, inputNodeId,
|
||||
outputPinKey, outputNodeId
|
||||
outputPinKey, outputNodeId,
|
||||
),
|
||||
accOutPinKeyPairs
|
||||
)),
|
||||
|
||||
@@ -203,11 +203,29 @@
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
"HkCo0rJuM-$1": {
|
||||
"label": "V1",
|
||||
"id": "HkCo0rJuM-$1",
|
||||
"position": {
|
||||
"x": 526,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
"ByZ0o0HyOz-$1": {
|
||||
"label": "V2",
|
||||
"id": "ByZ0o0HyOz-$1",
|
||||
"position": {
|
||||
"x": 576,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-string"
|
||||
},
|
||||
"HkCo0rJuM-$2": {
|
||||
"label": "V1",
|
||||
"id": "HkCo0rJuM-$2",
|
||||
"position": {
|
||||
"x": 526,
|
||||
"x": 626,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
@@ -216,7 +234,7 @@
|
||||
"label": "V2",
|
||||
"id": "ByZ0o0HyOz-$2",
|
||||
"position": {
|
||||
"x": 576,
|
||||
"x": 676,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-string"
|
||||
@@ -225,7 +243,7 @@
|
||||
"label": "V1",
|
||||
"id": "HkCo0rJuM-$3",
|
||||
"position": {
|
||||
"x": 626,
|
||||
"x": 726,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
@@ -234,7 +252,7 @@
|
||||
"label": "V2",
|
||||
"id": "ByZ0o0HyOz-$3",
|
||||
"position": {
|
||||
"x": 676,
|
||||
"x": 776,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-string"
|
||||
@@ -243,7 +261,7 @@
|
||||
"label": "V1",
|
||||
"id": "HkCo0rJuM-$4",
|
||||
"position": {
|
||||
"x": 726,
|
||||
"x": 826,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
@@ -251,64 +269,46 @@
|
||||
"ByZ0o0HyOz-$4": {
|
||||
"label": "V2",
|
||||
"id": "ByZ0o0HyOz-$4",
|
||||
"position": {
|
||||
"x": 776,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-string"
|
||||
},
|
||||
"HkCo0rJuM-$5": {
|
||||
"label": "V1",
|
||||
"id": "HkCo0rJuM-$5",
|
||||
"position": {
|
||||
"x": 826,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
"ByZ0o0HyOz-$5": {
|
||||
"label": "V2",
|
||||
"id": "ByZ0o0HyOz-$5",
|
||||
"position": {
|
||||
"x": 876,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-string"
|
||||
},
|
||||
"S112Prb_f": {
|
||||
"id": "S112Prb_f",
|
||||
"SJm79rXOz": {
|
||||
"id": "SJm79rXOz",
|
||||
"type": "@/my-variadic",
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": 0
|
||||
}
|
||||
},
|
||||
"rkxJ2vrbOG": {
|
||||
"id": "rkxJ2vrbOG",
|
||||
"Syx7m9BXuM": {
|
||||
"id": "Syx7m9BXuM",
|
||||
"type": "@/my-variadic",
|
||||
"position": {
|
||||
"x": 100,
|
||||
"y": 100
|
||||
}
|
||||
},
|
||||
"BJWkhwSbdG": {
|
||||
"id": "BJWkhwSbdG",
|
||||
"rk-7X5SmdM": {
|
||||
"id": "rk-7X5SmdM",
|
||||
"type": "@/my-variadic",
|
||||
"position": {
|
||||
"x": 200,
|
||||
"y": 200
|
||||
}
|
||||
},
|
||||
"ryz12Pr-uG": {
|
||||
"id": "ryz12Pr-uG",
|
||||
"HkfQm9HQOG": {
|
||||
"id": "HkfQm9HQOG",
|
||||
"type": "@/my-variadic",
|
||||
"position": {
|
||||
"x": 300,
|
||||
"y": 300
|
||||
}
|
||||
},
|
||||
"BkQy2DS-dM": {
|
||||
"id": "BkQy2DS-dM",
|
||||
"HkQX79Hm_f": {
|
||||
"id": "HkQX79Hm_f",
|
||||
"type": "@/my-variadic",
|
||||
"position": {
|
||||
"x": 400,
|
||||
@@ -317,120 +317,120 @@
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
"HkNJ2PH-_M": {
|
||||
"id": "HkNJ2PH-_M",
|
||||
"SkEQXcSXuf": {
|
||||
"id": "SkEQXcSXuf",
|
||||
"output": {
|
||||
"nodeId": "By1oTHyuz",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "S112Prb_f",
|
||||
"nodeId": "SJm79rXOz",
|
||||
"pinKey": "By1oTHyuz"
|
||||
}
|
||||
},
|
||||
"SJSJ2wH-df": {
|
||||
"id": "SJSJ2wH-df",
|
||||
"SkS77qrmuM": {
|
||||
"id": "SkS77qrmuM",
|
||||
"output": {
|
||||
"nodeId": "By1oTHyuz",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "rkxJ2vrbOG",
|
||||
"nodeId": "Syx7m9BXuM",
|
||||
"pinKey": "By1oTHyuz"
|
||||
}
|
||||
},
|
||||
"By8JnwHZuz": {
|
||||
"id": "By8JnwHZuz",
|
||||
"ryUQQqBmdM": {
|
||||
"id": "ryUQQqBmdM",
|
||||
"output": {
|
||||
"nodeId": "By1oTHyuz",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "BJWkhwSbdG",
|
||||
"nodeId": "rk-7X5SmdM",
|
||||
"pinKey": "By1oTHyuz"
|
||||
}
|
||||
},
|
||||
"H1D1nwrW_G": {
|
||||
"id": "H1D1nwrW_G",
|
||||
"BkD7QqHQdG": {
|
||||
"id": "BkD7QqHQdG",
|
||||
"output": {
|
||||
"nodeId": "By1oTHyuz",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "ryz12Pr-uG",
|
||||
"nodeId": "HkfQm9HQOG",
|
||||
"pinKey": "By1oTHyuz"
|
||||
}
|
||||
},
|
||||
"HJOy3DSbuz": {
|
||||
"id": "HJOy3DSbuz",
|
||||
"ryumQqSmOf": {
|
||||
"id": "ryumQqSmOf",
|
||||
"output": {
|
||||
"nodeId": "By1oTHyuz",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "BkQy2DS-dM",
|
||||
"nodeId": "HkQX79Hm_f",
|
||||
"pinKey": "By1oTHyuz"
|
||||
}
|
||||
},
|
||||
"SyKJ3wHWuG": {
|
||||
"id": "SyKJ3wHWuG",
|
||||
"SktXm9H7dz": {
|
||||
"id": "SktXm9H7dz",
|
||||
"output": {
|
||||
"nodeId": "Sk1jCBJ_M",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "S112Prb_f",
|
||||
"nodeId": "SJm79rXOz",
|
||||
"pinKey": "Sk1jCBJ_M"
|
||||
}
|
||||
},
|
||||
"Hk91nPSZdf": {
|
||||
"id": "Hk91nPSZdf",
|
||||
"Sy5XQqSQ_M": {
|
||||
"id": "Sy5XQqSQ_M",
|
||||
"output": {
|
||||
"nodeId": "Sk1jCBJ_M",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "rkxJ2vrbOG",
|
||||
"nodeId": "Syx7m9BXuM",
|
||||
"pinKey": "Sk1jCBJ_M"
|
||||
}
|
||||
},
|
||||
"Syok2wrW_z": {
|
||||
"id": "Syok2wrW_z",
|
||||
"S1iQ75BmuG": {
|
||||
"id": "S1iQ75BmuG",
|
||||
"output": {
|
||||
"nodeId": "Sk1jCBJ_M",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "BJWkhwSbdG",
|
||||
"nodeId": "rk-7X5SmdM",
|
||||
"pinKey": "Sk1jCBJ_M"
|
||||
}
|
||||
},
|
||||
"rynJ2vS-uG": {
|
||||
"id": "rynJ2vS-uG",
|
||||
"S12mX5SXOf": {
|
||||
"id": "S12mX5SXOf",
|
||||
"output": {
|
||||
"nodeId": "Sk1jCBJ_M",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "ryz12Pr-uG",
|
||||
"nodeId": "HkfQm9HQOG",
|
||||
"pinKey": "Sk1jCBJ_M"
|
||||
}
|
||||
},
|
||||
"B16k2PHb_z": {
|
||||
"id": "B16k2PHb_z",
|
||||
"rk6XmcB7_M": {
|
||||
"id": "rk6XmcB7_M",
|
||||
"output": {
|
||||
"nodeId": "Sk1jCBJ_M",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "BkQy2DS-dM",
|
||||
"nodeId": "HkQX79Hm_f",
|
||||
"pinKey": "Sk1jCBJ_M"
|
||||
}
|
||||
},
|
||||
"S1RJ2DBWuM": {
|
||||
"id": "S1RJ2DBWuM",
|
||||
"ryCmQcSmOf": {
|
||||
"id": "ryCmQcSmOf",
|
||||
"output": {
|
||||
"nodeId": "BkQy2DS-dM",
|
||||
"nodeId": "HkQX79Hm_f",
|
||||
"pinKey": "H13YRHyOM"
|
||||
},
|
||||
"input": {
|
||||
@@ -438,10 +438,10 @@
|
||||
"pinKey": "__in__"
|
||||
}
|
||||
},
|
||||
"B1yxyhwr-uM": {
|
||||
"id": "B1yxyhwr-uM",
|
||||
"ryyxQmcSmuz": {
|
||||
"id": "ryyxQmcSmuz",
|
||||
"output": {
|
||||
"nodeId": "BkQy2DS-dM",
|
||||
"nodeId": "HkQX79Hm_f",
|
||||
"pinKey": "SkUhpHkdf"
|
||||
},
|
||||
"input": {
|
||||
@@ -449,10 +449,10 @@
|
||||
"pinKey": "__in__"
|
||||
}
|
||||
},
|
||||
"HJgg13DBZOG": {
|
||||
"id": "HJgg13DBZOG",
|
||||
"SJggXXcHQOG": {
|
||||
"id": "SJggXXcHQOG",
|
||||
"output": {
|
||||
"nodeId": "BkQy2DS-dM",
|
||||
"nodeId": "HkQX79Hm_f",
|
||||
"pinKey": "S16hpryOG"
|
||||
},
|
||||
"input": {
|
||||
@@ -460,279 +460,279 @@
|
||||
"pinKey": "__in__"
|
||||
}
|
||||
},
|
||||
"SkWek2wrbuM": {
|
||||
"id": "SkWek2wrbuM",
|
||||
"HyWgQ7cS7uz": {
|
||||
"id": "HyWgQ7cS7uz",
|
||||
"output": {
|
||||
"nodeId": "ryNjTHyOz",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "S112Prb_f",
|
||||
"nodeId": "SJm79rXOz",
|
||||
"pinKey": "ryNjTHyOz"
|
||||
}
|
||||
},
|
||||
"Hyzey3DH-_M": {
|
||||
"id": "Hyzey3DH-_M",
|
||||
"r1zlQmqSmuf": {
|
||||
"id": "r1zlQmqSmuf",
|
||||
"output": {
|
||||
"nodeId": "HytsTHkOf",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "S112Prb_f",
|
||||
"nodeId": "SJm79rXOz",
|
||||
"pinKey": "HytsTHkOf"
|
||||
}
|
||||
},
|
||||
"H17gknwH-OG": {
|
||||
"id": "H17gknwH-OG",
|
||||
"BkXe779S7Oz": {
|
||||
"id": "BkXe779S7Oz",
|
||||
"output": {
|
||||
"nodeId": "Hkl2pHkuz",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "S112Prb_f",
|
||||
"nodeId": "SJm79rXOz",
|
||||
"pinKey": "Hkl2pHkuz"
|
||||
}
|
||||
},
|
||||
"H14ly3PSbuz": {
|
||||
"id": "H14ly3PSbuz",
|
||||
"SkVgQmqHQOM": {
|
||||
"id": "SkVgQmqHQOM",
|
||||
"output": {
|
||||
"nodeId": "HkCo0rJuM",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "S112Prb_f",
|
||||
"nodeId": "SJm79rXOz",
|
||||
"pinKey": "HkCo0rJuM"
|
||||
}
|
||||
},
|
||||
"B1Hly3wHW_G": {
|
||||
"id": "B1Hly3wHW_G",
|
||||
"HJremX5SmdM": {
|
||||
"id": "HJremX5SmdM",
|
||||
"output": {
|
||||
"nodeId": "ByZ0o0HyOz",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "S112Prb_f",
|
||||
"nodeId": "SJm79rXOz",
|
||||
"pinKey": "ByZ0o0HyOz"
|
||||
}
|
||||
},
|
||||
"r1Llk2vBbOf": {
|
||||
"id": "r1Llk2vBbOf",
|
||||
"ByIeXQ9Hm_G": {
|
||||
"id": "ByIeXQ9Hm_G",
|
||||
"output": {
|
||||
"nodeId": "HkCo0rJuM-$1",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "Syx7m9BXuM",
|
||||
"pinKey": "HkCo0rJuM"
|
||||
}
|
||||
},
|
||||
"BJweXQcrm_M": {
|
||||
"id": "BJweXQcrm_M",
|
||||
"output": {
|
||||
"nodeId": "ByZ0o0HyOz-$1",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "Syx7m9BXuM",
|
||||
"pinKey": "ByZ0o0HyOz"
|
||||
}
|
||||
},
|
||||
"Skdx7X5Bm_z": {
|
||||
"id": "Skdx7X5Bm_z",
|
||||
"output": {
|
||||
"nodeId": "HkCo0rJuM-$2",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "rkxJ2vrbOG",
|
||||
"nodeId": "rk-7X5SmdM",
|
||||
"pinKey": "HkCo0rJuM"
|
||||
}
|
||||
},
|
||||
"r1Dx13wSb_z": {
|
||||
"id": "r1Dx13wSb_z",
|
||||
"ryYe7X9HmOM": {
|
||||
"id": "ryYe7X9HmOM",
|
||||
"output": {
|
||||
"nodeId": "ByZ0o0HyOz-$2",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "rkxJ2vrbOG",
|
||||
"nodeId": "rk-7X5SmdM",
|
||||
"pinKey": "ByZ0o0HyOz"
|
||||
}
|
||||
},
|
||||
"r1_xkhvrW_M": {
|
||||
"id": "r1_xkhvrW_M",
|
||||
"rJqxXQqHQuG": {
|
||||
"id": "rJqxXQqHQuG",
|
||||
"output": {
|
||||
"nodeId": "HkCo0rJuM-$3",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "BJWkhwSbdG",
|
||||
"nodeId": "HkfQm9HQOG",
|
||||
"pinKey": "HkCo0rJuM"
|
||||
}
|
||||
},
|
||||
"rkFg1hwS-_z": {
|
||||
"id": "rkFg1hwS-_z",
|
||||
"ByolQQqrQuz": {
|
||||
"id": "ByolQQqrQuz",
|
||||
"output": {
|
||||
"nodeId": "ByZ0o0HyOz-$3",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "BJWkhwSbdG",
|
||||
"nodeId": "HkfQm9HQOG",
|
||||
"pinKey": "ByZ0o0HyOz"
|
||||
}
|
||||
},
|
||||
"HkcgkhvSZdM": {
|
||||
"id": "HkcgkhvSZdM",
|
||||
"S1nlQXqB7dG": {
|
||||
"id": "S1nlQXqB7dG",
|
||||
"output": {
|
||||
"nodeId": "HkCo0rJuM-$4",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "ryz12Pr-uG",
|
||||
"nodeId": "HkQX79Hm_f",
|
||||
"pinKey": "HkCo0rJuM"
|
||||
}
|
||||
},
|
||||
"HJoly2vSZOz": {
|
||||
"id": "HJoly2vSZOz",
|
||||
"B16gXm9SXdG": {
|
||||
"id": "B16gXm9SXdG",
|
||||
"output": {
|
||||
"nodeId": "ByZ0o0HyOz-$4",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "ryz12Pr-uG",
|
||||
"nodeId": "HkQX79Hm_f",
|
||||
"pinKey": "ByZ0o0HyOz"
|
||||
}
|
||||
},
|
||||
"Hkne1hvSWuf": {
|
||||
"id": "Hkne1hvSWuf",
|
||||
"B1CemXcSXuz": {
|
||||
"id": "B1CemXcSXuz",
|
||||
"output": {
|
||||
"nodeId": "HkCo0rJuM-$5",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "BkQy2DS-dM",
|
||||
"pinKey": "HkCo0rJuM"
|
||||
}
|
||||
},
|
||||
"rkpe12DSWOG": {
|
||||
"id": "rkpe12DSWOG",
|
||||
"output": {
|
||||
"nodeId": "ByZ0o0HyOz-$5",
|
||||
"pinKey": "__out__"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "BkQy2DS-dM",
|
||||
"pinKey": "ByZ0o0HyOz"
|
||||
}
|
||||
},
|
||||
"B1RgJhwr-_z": {
|
||||
"id": "B1RgJhwr-_z",
|
||||
"output": {
|
||||
"nodeId": "rkxJ2vrbOG",
|
||||
"pinKey": "ryNjTHyOz"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "S112Prb_f",
|
||||
"nodeId": "SJm79rXOz",
|
||||
"pinKey": "H13YRHyOM"
|
||||
}
|
||||
},
|
||||
"ry1Zk3DrZuM": {
|
||||
"id": "ry1Zk3DrZuM",
|
||||
"output": {
|
||||
"nodeId": "rkxJ2vrbOG",
|
||||
"pinKey": "HytsTHkOf"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "S112Prb_f",
|
||||
"pinKey": "SkUhpHkdf"
|
||||
}
|
||||
},
|
||||
"SJxZJ3PH-OG": {
|
||||
"id": "SJxZJ3PH-OG",
|
||||
"output": {
|
||||
"nodeId": "rkxJ2vrbOG",
|
||||
"pinKey": "Hkl2pHkuz"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "S112Prb_f",
|
||||
"pinKey": "S16hpryOG"
|
||||
}
|
||||
},
|
||||
"ry-ZJ3vH-_M": {
|
||||
"id": "ry-ZJ3vH-_M",
|
||||
"output": {
|
||||
"nodeId": "BJWkhwSbdG",
|
||||
"nodeId": "Syx7m9BXuM",
|
||||
"pinKey": "ryNjTHyOz"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "rkxJ2vrbOG",
|
||||
"pinKey": "H13YRHyOM"
|
||||
}
|
||||
},
|
||||
"ryf-y2DS-_f": {
|
||||
"id": "ryf-y2DS-_f",
|
||||
"Hk1bmQcHmOG": {
|
||||
"id": "Hk1bmQcHmOG",
|
||||
"output": {
|
||||
"nodeId": "BJWkhwSbdG",
|
||||
"pinKey": "HytsTHkOf"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "rkxJ2vrbOG",
|
||||
"nodeId": "SJm79rXOz",
|
||||
"pinKey": "SkUhpHkdf"
|
||||
}
|
||||
},
|
||||
"ryQWkhwS-OM": {
|
||||
"id": "ryQWkhwS-OM",
|
||||
"output": {
|
||||
"nodeId": "BJWkhwSbdG",
|
||||
"pinKey": "Hkl2pHkuz"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "rkxJ2vrbOG",
|
||||
"pinKey": "S16hpryOG"
|
||||
"nodeId": "Syx7m9BXuM",
|
||||
"pinKey": "HytsTHkOf"
|
||||
}
|
||||
},
|
||||
"Hy4-ynvBWdz": {
|
||||
"id": "Hy4-ynvBWdz",
|
||||
"H1g-QXcBmdf": {
|
||||
"id": "H1g-QXcBmdf",
|
||||
"output": {
|
||||
"nodeId": "ryz12Pr-uG",
|
||||
"nodeId": "SJm79rXOz",
|
||||
"pinKey": "S16hpryOG"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "Syx7m9BXuM",
|
||||
"pinKey": "Hkl2pHkuz"
|
||||
}
|
||||
},
|
||||
"ryWZmX9B7Of": {
|
||||
"id": "ryWZmX9B7Of",
|
||||
"output": {
|
||||
"nodeId": "Syx7m9BXuM",
|
||||
"pinKey": "H13YRHyOM"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "rk-7X5SmdM",
|
||||
"pinKey": "ryNjTHyOz"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "BJWkhwSbdG",
|
||||
"pinKey": "H13YRHyOM"
|
||||
}
|
||||
},
|
||||
"ByHZJhwHWOf": {
|
||||
"id": "ByHZJhwHWOf",
|
||||
"SJfb7QcHQdG": {
|
||||
"id": "SJfb7QcHQdG",
|
||||
"output": {
|
||||
"nodeId": "ryz12Pr-uG",
|
||||
"pinKey": "HytsTHkOf"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "BJWkhwSbdG",
|
||||
"nodeId": "Syx7m9BXuM",
|
||||
"pinKey": "SkUhpHkdf"
|
||||
}
|
||||
},
|
||||
"BkIbJhDSZuG": {
|
||||
"id": "BkIbJhDSZuG",
|
||||
"output": {
|
||||
"nodeId": "ryz12Pr-uG",
|
||||
"pinKey": "Hkl2pHkuz"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "BJWkhwSbdG",
|
||||
"pinKey": "S16hpryOG"
|
||||
"nodeId": "rk-7X5SmdM",
|
||||
"pinKey": "HytsTHkOf"
|
||||
}
|
||||
},
|
||||
"SJw-1hPBZ_G": {
|
||||
"id": "SJw-1hPBZ_G",
|
||||
"BkQ-7QqSX_G": {
|
||||
"id": "BkQ-7QqSX_G",
|
||||
"output": {
|
||||
"nodeId": "BkQy2DS-dM",
|
||||
"nodeId": "Syx7m9BXuM",
|
||||
"pinKey": "S16hpryOG"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "rk-7X5SmdM",
|
||||
"pinKey": "Hkl2pHkuz"
|
||||
}
|
||||
},
|
||||
"S1V-m7qHX_f": {
|
||||
"id": "S1V-m7qHX_f",
|
||||
"output": {
|
||||
"nodeId": "rk-7X5SmdM",
|
||||
"pinKey": "H13YRHyOM"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "HkfQm9HQOG",
|
||||
"pinKey": "ryNjTHyOz"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "ryz12Pr-uG",
|
||||
"pinKey": "H13YRHyOM"
|
||||
}
|
||||
},
|
||||
"HyuZyhwSZOM": {
|
||||
"id": "HyuZyhwSZOM",
|
||||
"BJrWX79SXuz": {
|
||||
"id": "BJrWX79SXuz",
|
||||
"output": {
|
||||
"nodeId": "BkQy2DS-dM",
|
||||
"pinKey": "HytsTHkOf"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "ryz12Pr-uG",
|
||||
"nodeId": "rk-7X5SmdM",
|
||||
"pinKey": "SkUhpHkdf"
|
||||
}
|
||||
},
|
||||
"ryKWJ3vr-OM": {
|
||||
"id": "ryKWJ3vr-OM",
|
||||
"output": {
|
||||
"nodeId": "BkQy2DS-dM",
|
||||
"pinKey": "Hkl2pHkuz"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "ryz12Pr-uG",
|
||||
"nodeId": "HkfQm9HQOG",
|
||||
"pinKey": "HytsTHkOf"
|
||||
}
|
||||
},
|
||||
"r18ZQ79rXdf": {
|
||||
"id": "r18ZQ79rXdf",
|
||||
"output": {
|
||||
"nodeId": "rk-7X5SmdM",
|
||||
"pinKey": "S16hpryOG"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "HkfQm9HQOG",
|
||||
"pinKey": "Hkl2pHkuz"
|
||||
}
|
||||
},
|
||||
"Hkv-XXcrXOG": {
|
||||
"id": "Hkv-XXcrXOG",
|
||||
"output": {
|
||||
"nodeId": "HkfQm9HQOG",
|
||||
"pinKey": "H13YRHyOM"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "HkQX79Hm_f",
|
||||
"pinKey": "ryNjTHyOz"
|
||||
}
|
||||
},
|
||||
"ryd-mX5r7_G": {
|
||||
"id": "ryd-mX5r7_G",
|
||||
"output": {
|
||||
"nodeId": "HkfQm9HQOG",
|
||||
"pinKey": "SkUhpHkdf"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "HkQX79Hm_f",
|
||||
"pinKey": "HytsTHkOf"
|
||||
}
|
||||
},
|
||||
"BkYZQX9BQOM": {
|
||||
"id": "BkYZQX9BQOM",
|
||||
"output": {
|
||||
"nodeId": "HkfQm9HQOG",
|
||||
"pinKey": "S16hpryOG"
|
||||
},
|
||||
"input": {
|
||||
"nodeId": "HkQX79Hm_f",
|
||||
"pinKey": "Hkl2pHkuz"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"description": "Computes bitwise AND of two bytes. A resulting bit at a particular position is 1 only if corresponding bits of inputs are both 1.",
|
||||
"description": "Computes bitwise AND of two or more bytes. A resulting bit at a particular position is 1 only if corresponding bits of all inputs are 1.",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "ByjTuuxef",
|
||||
@@ -9,6 +9,14 @@
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
{
|
||||
"id": "HkpP80W_f",
|
||||
"position": {
|
||||
"x": 136,
|
||||
"y": 102
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
},
|
||||
{
|
||||
"id": "S1YR_dgeG",
|
||||
"position": {
|
||||
|
||||
@@ -1,11 +1,19 @@
|
||||
{
|
||||
"description": "Computes bitwise OR of two bytes. A resulting bit at a particular position is 0 only if corresponding bits of inputs are both 0.",
|
||||
"description": "Computes bitwise OR of two or more bytes. A resulting bit at a particular position is 0 only if all corresponding bits of inputs are 0.",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "HkiYIAWuz",
|
||||
"position": {
|
||||
"x": 102,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
},
|
||||
{
|
||||
"id": "SkC1aTZeM",
|
||||
"position": {
|
||||
"x": 33,
|
||||
"y": -1
|
||||
"x": 34,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
@@ -20,8 +28,8 @@
|
||||
{
|
||||
"id": "r1zA16pbxM",
|
||||
"position": {
|
||||
"x": -1,
|
||||
"y": -1
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
{
|
||||
"description": "Computes bitwise XOR of two bytes. A resulting bit at a particular position is 1 only if either of corresponding bits of inputs is 1 and another is 0.",
|
||||
"description": "Computes bitwise XOR of two or more bytes. A resulting bit at a particular position is 1 only if an odd number of corresponding bits of inputs is 1.",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "B1b5LAbOz",
|
||||
"position": {
|
||||
"x": 102,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
},
|
||||
{
|
||||
"id": "BkbqIa6ZgM",
|
||||
"position": {
|
||||
|
||||
@@ -7,7 +7,7 @@ struct State {
|
||||
{{ GENERATED_CODE }}
|
||||
|
||||
void evaluate(Context ctx) {
|
||||
auto x = getValue<input_X>(ctx);
|
||||
auto y = getValue<input_Y>(ctx);
|
||||
emitValue<output_SUM>(ctx, x + y);
|
||||
auto x = getValue<input_IN1>(ctx);
|
||||
auto y = getValue<input_IN2>(ctx);
|
||||
emitValue<output_OUT>(ctx, x + y);
|
||||
}
|
||||
|
||||
@@ -1,21 +1,27 @@
|
||||
{
|
||||
"description": "Adds two numbers",
|
||||
"description": "Adds numbers",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "BJnQUR_BwyZ",
|
||||
"label": "X",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 16
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
{
|
||||
"id": "HkqmLAOrD1W",
|
||||
"label": "Y",
|
||||
"id": "By-kyWjDG",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 16
|
||||
"x": 272,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
},
|
||||
{
|
||||
"id": "HkqmLAOrD1W",
|
||||
"position": {
|
||||
"x": 136,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
@@ -24,10 +30,9 @@
|
||||
"__in__": 0
|
||||
},
|
||||
"id": "SyomIRurDJ-",
|
||||
"label": "SUM",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 224
|
||||
"x": 0,
|
||||
"y": 204
|
||||
},
|
||||
"type": "xod/patch-nodes/output-number"
|
||||
},
|
||||
|
||||
@@ -7,7 +7,7 @@ struct State {
|
||||
{{ GENERATED_CODE }}
|
||||
|
||||
void evaluate(Context ctx) {
|
||||
auto a = getValue<input_A>(ctx);
|
||||
auto b = getValue<input_B>(ctx);
|
||||
emitValue<output_AND>(ctx, a && b);
|
||||
auto a = getValue<input_IN1>(ctx);
|
||||
auto b = getValue<input_IN2>(ctx);
|
||||
emitValue<output_OUT>(ctx, a && b);
|
||||
}
|
||||
|
||||
@@ -1,24 +1,22 @@
|
||||
{
|
||||
"description": "Outputs false if and only if both inputs are true",
|
||||
"description": "Outputs true if and only if all inputs are true",
|
||||
"nodes": [
|
||||
{
|
||||
"boundValues": {
|
||||
"__in__": false
|
||||
},
|
||||
"id": "B1gN80uHvk-",
|
||||
"label": "AND",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 224
|
||||
"x": 0,
|
||||
"y": 204
|
||||
},
|
||||
"type": "xod/patch-nodes/output-boolean"
|
||||
},
|
||||
{
|
||||
"id": "SJMVU0urvkZ",
|
||||
"label": "A",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 16
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-boolean"
|
||||
},
|
||||
@@ -32,12 +30,19 @@
|
||||
},
|
||||
{
|
||||
"id": "r1bVLR_BPJW",
|
||||
"label": "B",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 16
|
||||
"x": 136,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-boolean"
|
||||
},
|
||||
{
|
||||
"id": "ry_ukWsPM",
|
||||
"position": {
|
||||
"x": 272,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@ struct State {
|
||||
{{ GENERATED_CODE }}
|
||||
|
||||
void evaluate(Context ctx) {
|
||||
bool p1 = isInputDirty<input_P1>(ctx);
|
||||
bool p2 = isInputDirty<input_P2>(ctx);
|
||||
bool p1 = isInputDirty<input_IN1>(ctx);
|
||||
bool p2 = isInputDirty<input_IN2>(ctx);
|
||||
if (p1 || p2)
|
||||
emitValue<output_ANY>(ctx, true);
|
||||
emitValue<output_OUT>(ctx, true);
|
||||
}
|
||||
|
||||
@@ -6,22 +6,28 @@
|
||||
"__in__": false
|
||||
},
|
||||
"id": "ByHmL0uHPk-",
|
||||
"label": "ANY",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 224
|
||||
"x": 0,
|
||||
"y": 204
|
||||
},
|
||||
"type": "xod/patch-nodes/output-pulse"
|
||||
},
|
||||
{
|
||||
"id": "ByU7LRuSPkW",
|
||||
"label": "P2",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 16
|
||||
"x": 136,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-pulse"
|
||||
},
|
||||
{
|
||||
"id": "HJIw1ZsPz",
|
||||
"position": {
|
||||
"x": 272,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
},
|
||||
{
|
||||
"id": "noNativeImpl",
|
||||
"position": {
|
||||
@@ -32,10 +38,9 @@
|
||||
},
|
||||
{
|
||||
"id": "ryv7IRdSP1b",
|
||||
"label": "P1",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 16
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-pulse"
|
||||
}
|
||||
|
||||
@@ -9,8 +9,8 @@ struct State {
|
||||
|
||||
void evaluate(Context ctx) {
|
||||
auto state = getState(ctx);
|
||||
auto head = getValue<input_HEAD>(ctx);
|
||||
auto tail = getValue<input_TAIL>(ctx);
|
||||
auto head = getValue<input_IN1>(ctx);
|
||||
auto tail = getValue<input_IN2>(ctx);
|
||||
state->view = ConcatListView<char>(head, tail);
|
||||
emitValue<output_STR>(ctx, XString(&state->view));
|
||||
emitValue<output_OUT>(ctx, XString(&state->view));
|
||||
}
|
||||
|
||||
@@ -1,40 +1,45 @@
|
||||
{
|
||||
"description": "Concatenates (adds together) two strings",
|
||||
"description": "Concatenates (adds together) strings",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "Bk_h9jpZW",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 120
|
||||
"x": 0,
|
||||
"y": 102
|
||||
},
|
||||
"type": "xod/patch-nodes/not-implemented-in-xod"
|
||||
},
|
||||
{
|
||||
"id": "BkeKcj6ZZ",
|
||||
"label": "TAIL",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 16
|
||||
"x": 136,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-string"
|
||||
},
|
||||
{
|
||||
"id": "Hkqu9oaWb",
|
||||
"label": "HEAD",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 16
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-string"
|
||||
},
|
||||
{
|
||||
"id": "rksccsp-W",
|
||||
"label": "STR",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 224
|
||||
"x": 0,
|
||||
"y": 204
|
||||
},
|
||||
"type": "xod/patch-nodes/output-string"
|
||||
},
|
||||
{
|
||||
"id": "ry63AlsPf",
|
||||
"position": {
|
||||
"x": 272,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
155
workspace/__lib__/xod/core/discretize/patch.xodp
Normal file
155
workspace/__lib__/xod/core/discretize/patch.xodp
Normal file
@@ -0,0 +1,155 @@
|
||||
{
|
||||
"description": "Rounds input `X` up to the first threshold `T0`, `T1`, ..., `T𝑛` greater or equal to the `X`. If `X` is even greater than the last threshold, the value is round down to it.",
|
||||
"links": [
|
||||
{
|
||||
"id": "BJqR9pWYZ",
|
||||
"input": {
|
||||
"nodeId": "ryua56WYb",
|
||||
"pinKey": "r1AgIROHDJW"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "r1SqqabFZ",
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "HJ0_LU7Oz",
|
||||
"input": {
|
||||
"nodeId": "rkVicaZFZ",
|
||||
"pinKey": "__in__"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "ryLFq6btW",
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "HJPC5T-FZ",
|
||||
"input": {
|
||||
"nodeId": "ryua56WYb",
|
||||
"pinKey": "ryTeUROHD1b"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "rJl5qpZYZ",
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Hkc35TZKb",
|
||||
"input": {
|
||||
"nodeId": "HJw2cTbFW",
|
||||
"pinKey": "SJqZ8COrDkW"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "r1SqqabFZ",
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Sk_yopZY-",
|
||||
"input": {
|
||||
"nodeId": "rkpc9pZYb",
|
||||
"pinKey": "__in__"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "ryua56WYb",
|
||||
"pinKey": "S13xLCuHvkW"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "r1325T-tb",
|
||||
"input": {
|
||||
"nodeId": "HJw2cTbFW",
|
||||
"pinKey": "HJjZLRdBw1-"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "ryLFq6btW",
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ryZR5aWKW",
|
||||
"input": {
|
||||
"nodeId": "ryua56WYb",
|
||||
"pinKey": "S1yZIA_rDJZ"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "HJw2cTbFW",
|
||||
"pinKey": "HktZUCdrPkZ"
|
||||
}
|
||||
}
|
||||
],
|
||||
"nodes": [
|
||||
{
|
||||
"id": "HJw2cTbFW",
|
||||
"position": {
|
||||
"x": 68,
|
||||
"y": 102
|
||||
},
|
||||
"type": "@/less"
|
||||
},
|
||||
{
|
||||
"id": "SyLXO0Wuz",
|
||||
"position": {
|
||||
"x": 272,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
},
|
||||
{
|
||||
"id": "r1SqqabFZ",
|
||||
"label": "T1",
|
||||
"position": {
|
||||
"x": 204,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
{
|
||||
"id": "rJl5qpZYZ",
|
||||
"label": "T0",
|
||||
"position": {
|
||||
"x": 170,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
{
|
||||
"description": "Utility output needed for expanding node. Shoud be ignored by the end user.",
|
||||
"id": "rkVicaZFZ",
|
||||
"label": "_",
|
||||
"position": {
|
||||
"x": 34,
|
||||
"y": 306
|
||||
},
|
||||
"type": "xod/patch-nodes/output-number"
|
||||
},
|
||||
{
|
||||
"description": "The rounding result. Equals to one of Tx.",
|
||||
"id": "rkpc9pZYb",
|
||||
"label": "T",
|
||||
"position": {
|
||||
"x": 136,
|
||||
"y": 306
|
||||
},
|
||||
"type": "xod/patch-nodes/output-number"
|
||||
},
|
||||
{
|
||||
"id": "ryLFq6btW",
|
||||
"label": "X",
|
||||
"position": {
|
||||
"x": 34,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
{
|
||||
"id": "ryua56WYb",
|
||||
"position": {
|
||||
"x": 136,
|
||||
"y": 204
|
||||
},
|
||||
"type": "@/if-else"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -7,7 +7,7 @@ struct State {
|
||||
{{ GENERATED_CODE }}
|
||||
|
||||
void evaluate(Context ctx) {
|
||||
auto x = getValue<input_X>(ctx);
|
||||
auto y = getValue<input_Y>(ctx);
|
||||
emitValue<output_PROD>(ctx, x * y);
|
||||
auto x = getValue<input_IN1>(ctx);
|
||||
auto y = getValue<input_IN2>(ctx);
|
||||
emitValue<output_OUT>(ctx, x * y);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
{
|
||||
"description": "Multiplies two numbers",
|
||||
"description": "Multiplies numbers",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "B1GfLR_SPk-",
|
||||
"label": "X",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 16
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
@@ -15,27 +14,33 @@
|
||||
"__in__": 0
|
||||
},
|
||||
"id": "BkQzLCurwJZ",
|
||||
"label": "PROD",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 224
|
||||
"x": 0,
|
||||
"y": 204
|
||||
},
|
||||
"type": "xod/patch-nodes/output-number"
|
||||
},
|
||||
{
|
||||
"id": "SJ4zUC_BD1-",
|
||||
"label": "Y",
|
||||
"id": "H1eCJbsPf",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 16
|
||||
"x": 272,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
},
|
||||
{
|
||||
"id": "SJ4zUC_BD1-",
|
||||
"position": {
|
||||
"x": 136,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
{
|
||||
"id": "noNativeImpl",
|
||||
"position": {
|
||||
"x": 100,
|
||||
"y": 100
|
||||
"x": 102,
|
||||
"y": 102
|
||||
},
|
||||
"type": "xod/patch-nodes/not-implemented-in-xod"
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ struct State {
|
||||
{{ GENERATED_CODE }}
|
||||
|
||||
void evaluate(Context ctx) {
|
||||
auto a = getValue<input_A>(ctx);
|
||||
auto b = getValue<input_B>(ctx);
|
||||
emitValue<output_NAND>(ctx, !(a && b));
|
||||
auto a = getValue<input_IN1>(ctx);
|
||||
auto b = getValue<input_IN2>(ctx);
|
||||
emitValue<output_OUT>(ctx, !(a && b));
|
||||
}
|
||||
|
||||
@@ -1,21 +1,27 @@
|
||||
{
|
||||
"description": "Outputs false if and only if both inputs are true",
|
||||
"description": "Outputs false if and only if all inputs are true",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "BkwGIROSw1Z",
|
||||
"label": "A",
|
||||
"id": "BJbWl-jDG",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 16
|
||||
"x": 272,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
},
|
||||
{
|
||||
"id": "BkwGIROSw1Z",
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-boolean"
|
||||
},
|
||||
{
|
||||
"id": "HkHG8COBPJ-",
|
||||
"label": "B",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 16
|
||||
"x": 136,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-boolean"
|
||||
},
|
||||
@@ -32,10 +38,9 @@
|
||||
"__in__": false
|
||||
},
|
||||
"id": "r18G80_Hvyb",
|
||||
"label": "NAND",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 224
|
||||
"x": 0,
|
||||
"y": 204
|
||||
},
|
||||
"type": "xod/patch-nodes/output-boolean"
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ struct State {
|
||||
{{ GENERATED_CODE }}
|
||||
|
||||
void evaluate(Context ctx) {
|
||||
auto a = getValue<input_A>(ctx);
|
||||
auto b = getValue<input_B>(ctx);
|
||||
emitValue<output_NOR>(ctx, !(a || b));
|
||||
auto a = getValue<input_IN1>(ctx);
|
||||
auto b = getValue<input_IN2>(ctx);
|
||||
emitValue<output_OUT>(ctx, !(a || b));
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
{
|
||||
"description": "Outputs true if and only if both inputs are false",
|
||||
"description": "Outputs true if and only if all inputs are false",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "S1dG8AOBPJW",
|
||||
"label": "B",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 16
|
||||
"x": 136,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-boolean"
|
||||
},
|
||||
@@ -20,22 +19,28 @@
|
||||
},
|
||||
{
|
||||
"id": "r1tz8CdBDkb",
|
||||
"label": "A",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 16
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-boolean"
|
||||
},
|
||||
{
|
||||
"id": "rJWMxZjPM",
|
||||
"position": {
|
||||
"x": 272,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
},
|
||||
{
|
||||
"boundValues": {
|
||||
"__in__": false
|
||||
},
|
||||
"id": "rJqfIRdHwkW",
|
||||
"label": "NOR",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 224
|
||||
"x": 0,
|
||||
"y": 204
|
||||
},
|
||||
"type": "xod/patch-nodes/output-boolean"
|
||||
}
|
||||
|
||||
169
workspace/__lib__/xod/core/nth-number/patch.xodp
Normal file
169
workspace/__lib__/xod/core/nth-number/patch.xodp
Normal file
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"description": "Selects either `X0` or `X1` based on `IDX` index value.",
|
||||
"links": [
|
||||
{
|
||||
"id": "BkCNBaWFW",
|
||||
"input": {
|
||||
"nodeId": "SJrESpZKW",
|
||||
"pinKey": "r1AgIROHDJW"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "BkGyBpZKZ",
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Hk64BaWKZ",
|
||||
"input": {
|
||||
"nodeId": "SJrESpZKW",
|
||||
"pinKey": "ryTeUROHD1b"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "S13CNpbK-",
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "SJX4STWYb",
|
||||
"input": {
|
||||
"nodeId": "rJcQrTWtZ",
|
||||
"pinKey": "HJjZLRdBw1-"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "rJXCVpWtZ",
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "rJGSBpbFZ",
|
||||
"input": {
|
||||
"nodeId": "SJrESpZKW",
|
||||
"pinKey": "S1yZIA_rDJZ"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "rJcQrTWtZ",
|
||||
"pinKey": "HktZUCdrPkZ"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "rJYVHTbYb",
|
||||
"input": {
|
||||
"nodeId": "rJCJSpbt-",
|
||||
"pinKey": "__in__"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "SJrESpZKW",
|
||||
"pinKey": "S13xLCuHvkW"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ryWq4yXOG",
|
||||
"input": {
|
||||
"nodeId": "HyNBEJXdG",
|
||||
"pinKey": "__in__"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "HywtN1QdM",
|
||||
"pinKey": "HyRmUCdBDkZ"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "rymc4kmuf",
|
||||
"input": {
|
||||
"nodeId": "HywtN1QdM",
|
||||
"pinKey": "BypX80uSD1Z"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "rJXCVpWtZ",
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
}
|
||||
],
|
||||
"nodes": [
|
||||
{
|
||||
"id": "BkGyBpZKZ",
|
||||
"label": "X1",
|
||||
"position": {
|
||||
"x": 204,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
{
|
||||
"description": "Utility output needed for expanding node. Shoud be ignored by the end user.\n",
|
||||
"id": "HyNBEJXdG",
|
||||
"label": "_",
|
||||
"position": {
|
||||
"x": 34,
|
||||
"y": 306
|
||||
},
|
||||
"type": "xod/patch-nodes/output-number"
|
||||
},
|
||||
{
|
||||
"boundValues": {
|
||||
"rkJ4URuHDJ-": 1
|
||||
},
|
||||
"id": "HywtN1QdM",
|
||||
"position": {
|
||||
"x": 34,
|
||||
"y": 204
|
||||
},
|
||||
"type": "@/subtract"
|
||||
},
|
||||
{
|
||||
"id": "S13CNpbK-",
|
||||
"label": "X0",
|
||||
"position": {
|
||||
"x": 170,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
{
|
||||
"id": "SJrESpZKW",
|
||||
"position": {
|
||||
"x": 136,
|
||||
"y": 204
|
||||
},
|
||||
"type": "@/if-else"
|
||||
},
|
||||
{
|
||||
"description": "The selected value. Equals to one of `Xi` input.",
|
||||
"id": "rJCJSpbt-",
|
||||
"position": {
|
||||
"x": 136,
|
||||
"y": 306
|
||||
},
|
||||
"type": "xod/patch-nodes/output-number"
|
||||
},
|
||||
{
|
||||
"description": "Index to select. All values below 1 are considered to be 0. Values of 1 and above are considered to be 1.",
|
||||
"id": "rJXCVpWtZ",
|
||||
"label": "IDX",
|
||||
"position": {
|
||||
"x": 102,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
{
|
||||
"boundValues": {
|
||||
"SJqZ8COrDkW": 1
|
||||
},
|
||||
"id": "rJcQrTWtZ",
|
||||
"position": {
|
||||
"x": 102,
|
||||
"y": 102
|
||||
},
|
||||
"type": "@/less"
|
||||
},
|
||||
{
|
||||
"id": "ryJ0VH7Of",
|
||||
"position": {
|
||||
"x": 272,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -7,7 +7,7 @@ struct State {
|
||||
{{ GENERATED_CODE }}
|
||||
|
||||
void evaluate(Context ctx) {
|
||||
auto a = getValue<input_A>(ctx);
|
||||
auto b = getValue<input_B>(ctx);
|
||||
emitValue<output_OR>(ctx, a || b);
|
||||
auto a = getValue<input_IN1>(ctx);
|
||||
auto b = getValue<input_IN2>(ctx);
|
||||
emitValue<output_OUT>(ctx, a || b);
|
||||
}
|
||||
|
||||
@@ -1,21 +1,27 @@
|
||||
{
|
||||
"description": "Outputs false if and only if both inputs are false",
|
||||
"description": "Outputs false if and only if all inputs are false",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "BJaG80urD1-",
|
||||
"label": "A",
|
||||
"id": "BJS2bbsPG",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 16
|
||||
"x": 272,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
},
|
||||
{
|
||||
"id": "BJaG80urD1-",
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-boolean"
|
||||
},
|
||||
{
|
||||
"id": "HJCfI0dBDkb",
|
||||
"label": "B",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 16
|
||||
"x": 136,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-boolean"
|
||||
},
|
||||
@@ -24,10 +30,9 @@
|
||||
"__in__": false
|
||||
},
|
||||
"id": "SJyXI0OrD1-",
|
||||
"label": "OR",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 224
|
||||
"x": 0,
|
||||
"y": 204
|
||||
},
|
||||
"type": "xod/patch-nodes/output-boolean"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"description": "Outputs either `X1` or `X2` value based on which pulse came last — `S1` or `S2`. By default outputs `X1`.",
|
||||
"description": "Outputs `X𝑛` value based on which `S𝑛` pulse came last. By default outputs `X1`.",
|
||||
"links": [
|
||||
{
|
||||
"id": "BkDeLCaL-",
|
||||
@@ -23,6 +23,17 @@
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "S1c4DAWdf",
|
||||
"input": {
|
||||
"nodeId": "BJ97PAWOM",
|
||||
"pinKey": "ByU7LRuSPkW"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "rJUjrCTUb",
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Sk-xI0pL-",
|
||||
"input": {
|
||||
@@ -34,6 +45,17 @@
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "SkKEw0b_M",
|
||||
"input": {
|
||||
"nodeId": "BJ97PAWOM",
|
||||
"pinKey": "ryv7IRdSP1b"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "rkmiHCaIZ",
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "SkSgU0TLb",
|
||||
"input": {
|
||||
@@ -56,6 +78,17 @@
|
||||
"pinKey": "__out__"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "rkVSvAbdM",
|
||||
"input": {
|
||||
"nodeId": "rkWHDAW_f",
|
||||
"pinKey": "__in__"
|
||||
},
|
||||
"output": {
|
||||
"nodeId": "BJ97PAWOM",
|
||||
"pinKey": "ByHmL0uHPk-"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "rysRHCaIb",
|
||||
"input": {
|
||||
@@ -69,28 +102,44 @@
|
||||
}
|
||||
],
|
||||
"nodes": [
|
||||
{
|
||||
"id": "BJ97PAWOM",
|
||||
"position": {
|
||||
"x": 408,
|
||||
"y": 204
|
||||
},
|
||||
"type": "@/any"
|
||||
},
|
||||
{
|
||||
"id": "BkiBD0buG",
|
||||
"position": {
|
||||
"x": 476,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-2"
|
||||
},
|
||||
{
|
||||
"id": "S10qrR6UZ",
|
||||
"label": "X1",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 16
|
||||
"x": 68,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
{
|
||||
"id": "S1oJLRpLW",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 224
|
||||
"x": 102,
|
||||
"y": 204
|
||||
},
|
||||
"type": "@/if-else"
|
||||
},
|
||||
{
|
||||
"id": "S1yaHC6UW",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 328
|
||||
"x": 102,
|
||||
"y": 306
|
||||
},
|
||||
"type": "xod/patch-nodes/output-number"
|
||||
},
|
||||
@@ -98,17 +147,25 @@
|
||||
"id": "rJUjrCTUb",
|
||||
"label": "S2",
|
||||
"position": {
|
||||
"x": 394,
|
||||
"y": 16
|
||||
"x": 340,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-pulse"
|
||||
},
|
||||
{
|
||||
"id": "rkWHDAW_f",
|
||||
"position": {
|
||||
"x": 408,
|
||||
"y": 306
|
||||
},
|
||||
"type": "xod/patch-nodes/output-pulse"
|
||||
},
|
||||
{
|
||||
"id": "rkmiHCaIZ",
|
||||
"label": "S1",
|
||||
"position": {
|
||||
"x": 266,
|
||||
"y": 16
|
||||
"x": 136,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-pulse"
|
||||
},
|
||||
@@ -116,16 +173,16 @@
|
||||
"id": "rygjH06LW",
|
||||
"label": "X2",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 16
|
||||
"x": 272,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
{
|
||||
"id": "ryj6SCpL-",
|
||||
"position": {
|
||||
"x": 266,
|
||||
"y": 224
|
||||
"x": 238,
|
||||
"y": 204
|
||||
},
|
||||
"type": "@/flip-flop"
|
||||
}
|
||||
|
||||
@@ -9,5 +9,5 @@ struct State {
|
||||
void evaluate(Context ctx) {
|
||||
auto x = getValue<input_X>(ctx);
|
||||
auto y = getValue<input_Y>(ctx);
|
||||
emitValue<output_DIFF>(ctx, x - y);
|
||||
emitValue<output_OUT>(ctx, x - y);
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
"id": "BypX80uSD1Z",
|
||||
"label": "X",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 16
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
@@ -15,18 +15,17 @@
|
||||
"__in__": 0
|
||||
},
|
||||
"id": "HyRmUCdBDkZ",
|
||||
"label": "DIFF",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 224
|
||||
"x": 0,
|
||||
"y": 204
|
||||
},
|
||||
"type": "xod/patch-nodes/output-number"
|
||||
},
|
||||
{
|
||||
"id": "noNativeImpl",
|
||||
"position": {
|
||||
"x": 100,
|
||||
"y": 100
|
||||
"x": 0,
|
||||
"y": 102
|
||||
},
|
||||
"type": "xod/patch-nodes/not-implemented-in-xod"
|
||||
},
|
||||
@@ -34,10 +33,18 @@
|
||||
"id": "rkJ4URuHDJ-",
|
||||
"label": "Y",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 16
|
||||
"x": 102,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-number"
|
||||
},
|
||||
{
|
||||
"id": "ry8ts1m_f",
|
||||
"position": {
|
||||
"x": 204,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ struct State {
|
||||
{{ GENERATED_CODE }}
|
||||
|
||||
void evaluate(Context ctx) {
|
||||
auto a = getValue<input_A>(ctx);
|
||||
auto b = getValue<input_B>(ctx);
|
||||
emitValue<output_XOR>(ctx, a != b);
|
||||
auto a = getValue<input_IN1>(ctx);
|
||||
auto b = getValue<input_IN2>(ctx);
|
||||
emitValue<output_OUT>(ctx, a != b);
|
||||
}
|
||||
|
||||
@@ -3,10 +3,9 @@
|
||||
"nodes": [
|
||||
{
|
||||
"id": "HkOV8CdSvyW",
|
||||
"label": "A",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 16
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-boolean"
|
||||
},
|
||||
@@ -15,29 +14,35 @@
|
||||
"__in__": false
|
||||
},
|
||||
"id": "Hkw48AdSPyb",
|
||||
"label": "XOR",
|
||||
"position": {
|
||||
"x": 10,
|
||||
"y": 224
|
||||
"x": 0,
|
||||
"y": 204
|
||||
},
|
||||
"type": "xod/patch-nodes/output-boolean"
|
||||
},
|
||||
{
|
||||
"id": "SkKNUR_SwyW",
|
||||
"label": "B",
|
||||
"position": {
|
||||
"x": 138,
|
||||
"y": 16
|
||||
"x": 136,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/input-boolean"
|
||||
},
|
||||
{
|
||||
"id": "noNativeImpl",
|
||||
"position": {
|
||||
"x": 100,
|
||||
"y": 100
|
||||
"x": 102,
|
||||
"y": 102
|
||||
},
|
||||
"type": "xod/patch-nodes/not-implemented-in-xod"
|
||||
},
|
||||
{
|
||||
"id": "r15nxZjvM",
|
||||
"position": {
|
||||
"x": 272,
|
||||
"y": 0
|
||||
},
|
||||
"type": "xod/patch-nodes/variadic-1"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user