рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ i32 рдорд╛рдиреЛрдВ рдХреА 2d рд╕рд░рдгреА рд▓реЗрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:
export class Kernel {
public size: i32;
public margin: i32;
public multipliers: Array<Array<i32>>;
public products: Array<Array<i32>>;
constructor(multipliers: Array<Array<i32>>) {
...
}
public getAverage(): i32 {
...
}
public iterate(grid: Array<Array<i32>>): Array<Array<i32>> {
...
}
}
рдЗрд╕ рддрд░рд╣ рдореИрдВ рдЗрд╕реЗ рддреБрд░рдВрдд рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
const kernelMultipliers = [
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]
];
let ptr = module.__retain(module.__allocArray(module.INT32ARRAY, kernelMultipliers));
let kernel = new module.exports.Kernel(ptr);
рдХреНрдпрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдореВрд▓реНрдпреЛрдВ рдХреА 2d рд╕рд░рдгреА рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рдХреЛрдИ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ 1d рд╕рд░рдгреА рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдХрдХреНрд╖рд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ Array<i32>
рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рд╕рд░рдгреА рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ 2 рдбреА рд╕рд░рдгреА рдХреЛ рдлрд╝реНрд▓реИрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИред
рдкрд╣рд▓реЗ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╣рд░реА рд╕рд░рдгреА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрди рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
export const INNER_ID = idof<i32[]>();
export const OUTER_ID = idof<i32[][]>();
let ptr = module.__retain(
module.__allocArray(module.OUTER_ID,
kernelMultipliers.map(row => module.__allocArray(module.INNER_ID, row))
)
);
let kernel = new module.Kernel(ptr);
module.__release(ptr); // unless you still need it externally
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдлрд╝реНрд▓реИрдЯрди 2d рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХреА рд╣рдореЗрд╢рд╛ рдмреЗрд╣рддрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдлрд╝реНрд▓реИрдЯрди 2d рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХреА рд╣рдореЗрд╢рд╛ рдмреЗрд╣рддрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ