From 5d9449723e3a408fc3cb5311e7d8af9350d3302f Mon Sep 17 00:00:00 2001 From: Sarsoo Date: Tue, 29 Jun 2021 23:46:00 +0000 Subject: [PATCH] deploy: 8dbc2eb5863292f2c52de94202221f0a620aadce --- 03257114f6704ea051f4.module.wasm | Bin 71295 -> 0 bytes 10.bootstrap.js | 2 + 10.bootstrap.js.map | 1 + bootstrap.js | 381 +----------------- bootstrap.js.map | 1 + doc/draught/all.html | 2 +- doc/draught/board/constant.STD_HEIGHT.html | 2 +- doc/draught/board/constant.STD_WIDTH.html | 2 +- doc/draught/board/index.html | 12 +- doc/draught/board/iter/index.html | 4 +- doc/draught/board/iter/sidebar-items.js | 2 +- .../board/iter/struct.PieceIterator.html | 142 +++++++ .../board/iter/struct.RowIndexIterator.html | 6 +- .../board/iter/struct.RowSquareIterator.html | 6 +- doc/draught/board/sidebar-items.js | 2 +- doc/draught/board/struct.Board.html | 79 ++-- doc/draught/board/struct.BrdIdx.html | 40 +- doc/draught/board/struct.Direction.html | 18 +- doc/draught/board/struct.Piece.html | 38 +- doc/draught/board/struct.Square.html | 40 +- ...fn.__wasm_bindgen_generated_init_game.html | 2 +- doc/draught/fn.init_game.html | 2 +- doc/draught/game/index.html | 2 +- doc/draught/game/struct.Game.html | 39 +- doc/draught/index.html | 4 +- doc/draught/macro.log.html | 2 +- doc/draught/player/index.html | 6 + doc/draught/player/sidebar-items.js | 1 + doc/draught/player/struct.Player.html | 48 +++ doc/draught/sidebar-items.js | 2 +- doc/implementors/core/clone/trait.Clone.js | 2 +- doc/implementors/core/convert/trait.From.js | 2 +- doc/implementors/core/fmt/trait.Debug.js | 2 +- doc/implementors/core/fmt/trait.Display.js | 2 +- .../iter/traits/iterator/trait.Iterator.js | 2 +- doc/implementors/core/marker/trait.Freeze.js | 2 +- doc/implementors/core/marker/trait.Send.js | 2 +- doc/implementors/core/marker/trait.Sync.js | 2 +- doc/implementors/core/marker/trait.Unpin.js | 2 +- .../std/panic/trait.RefUnwindSafe.js | 2 +- .../std/panic/trait.UnwindSafe.js | 2 +- .../convert/traits/trait.FromWasmAbi.js | 2 +- .../convert/traits/trait.IntoWasmAbi.js | 2 +- .../convert/traits/trait.OptionFromWasmAbi.js | 2 +- .../convert/traits/trait.OptionIntoWasmAbi.js | 2 +- .../convert/traits/trait.RefFromWasmAbi.js | 2 +- .../convert/traits/trait.RefMutFromWasmAbi.js | 2 +- .../describe/trait.WasmDescribe.js | 2 +- doc/search-index.js | 2 +- doc/source-files.js | 2 +- doc/src/draught/board/iter.rs.html | 184 ++++++++- doc/src/draught/board/mod.rs.html | 358 ++++++++++++---- doc/src/draught/game/mod.rs.html | 290 +++++++++++++ doc/src/draught/lib.rs.html | 2 + .../draught/{game.rs.html => player.rs.html} | 34 +- ec83f0cc0b0f5722fdc1.module.wasm | Bin 0 -> 78475 bytes index_js.bootstrap.js | 44 -- 57 files changed, 1158 insertions(+), 682 deletions(-) delete mode 100644 03257114f6704ea051f4.module.wasm create mode 100644 10.bootstrap.js create mode 100644 10.bootstrap.js.map create mode 100644 bootstrap.js.map create mode 100644 doc/draught/board/iter/struct.PieceIterator.html create mode 100644 doc/draught/player/index.html create mode 100644 doc/draught/player/sidebar-items.js create mode 100644 doc/draught/player/struct.Player.html create mode 100644 doc/src/draught/game/mod.rs.html rename doc/src/draught/{game.rs.html => player.rs.html} (57%) create mode 100644 ec83f0cc0b0f5722fdc1.module.wasm delete mode 100644 index_js.bootstrap.js diff --git a/03257114f6704ea051f4.module.wasm b/03257114f6704ea051f4.module.wasm deleted file mode 100644 index c946d2f94410874637148bf23c384987c6fcfc9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71295 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"use strict";t.a(e,(async r=>{t.d(n,{QC:()=>s,h4:()=>p,ug:()=>O,a:()=>T,h9:()=>k,Dz:()=>v,kF:()=>j,Or:()=>E});var c=t(813);e=t.hmd(e);var o=r([c]);c=(o.then?await o:o)[0];let u=new("undefined"==typeof TextDecoder?(0,e.require)("util").TextDecoder:TextDecoder)("utf-8",{ignoreBOM:!0,fatal:!0});u.decode();let a=null;function l(){return null!==a&&a.buffer===c.memory.buffer||(a=new Uint8Array(c.memory.buffer)),a}function i(e,n){return u.decode(l().subarray(e,e+n))}const f=new Array(32).fill(void 0);f.push(void 0,null,!0,!1);let d=f.length;function b(e){d===f.length&&f.push(f.length+1);const n=d;return d=f[n],f[n]=e,n}function g(e){return f[e]}function s(){c.init_game()}let _=0,h=new("undefined"==typeof TextEncoder?(0,e.require)("util").TextEncoder:TextEncoder)("utf-8");const w="function"==typeof h.encodeInto?function(e,n){return h.encodeInto(e,n)}:function(e,n){const t=h.encode(e);return n.set(t),{read:e.length,written:t.length}};let m=null;function y(){return null!==m&&m.buffer===c.memory.buffer||(m=new Int32Array(c.memory.buffer)),m}function p(e,n){return b(i(e,n))}function O(e){!function(e){const n=g(e);(function(e){e<36||(f[e]=d,d=e)})(e)}(e)}function T(e){console.log(g(e))}function k(){return b(new Error)}function v(e,n){var t=function(e,n,t){if(void 0===t){const t=h.encode(e),r=n(t.length);return l().subarray(r,r+t.length).set(t),_=t.length,r}let r=e.length,c=n(r);const o=l();let u=0;for(;u127)break;o[c+u]=n}if(u!==r){0!==u&&(e=e.slice(u)),c=t(c,r,r=u+3*e.length);const n=l().subarray(c+u,c+r);u+=w(e,n).written}return _=u,c}(g(n).stack,c.__wbindgen_malloc,c.__wbindgen_realloc),r=_;y()[e/4+1]=r,y()[e/4+0]=t}function j(e,n){try{console.error(i(e,n))}finally{c.__wbindgen_free(e,n)}}function E(e,n){throw new Error(i(e,n))}Object.freeze({Black:0,0:"Black",White:1,1:"White"}),Object.freeze({Man:0,0:"Man",King:1,1:"King"}),Object.freeze({Empty:0,0:"Empty",Occupied:1,1:"Occupied",Unplayable:2,2:"Unplayable"}),Object.freeze({Allowed:0,0:"Allowed",UnoccupiedSrc:1,1:"UnoccupiedSrc",OccupiedDest:2,2:"OccupiedDest",OutOfBounds:3,3:"OutOfBounds",Unplayable:4,4:"Unplayable",WrongTeamSrc:5,5:"WrongTeamSrc",IllegalTrajectory:6,6:"IllegalTrajectory",NoJumpablePiece:7,7:"NoJumpablePiece",JumpingSameTeam:8,8:"JumpingSameTeam"})}))},813:(e,n,t)=>{"use strict";var r=([r])=>t.v(n,e.id,"ec83f0cc0b0f5722fdc1",{"./draught_bg.js":{__wbindgen_string_new:r.h4,__wbindgen_object_drop_ref:r.ug,__wbg_log_9a99fb1af846153b:r.a,__wbg_new_59cb74e423758ede:r.h9,__wbg_stack_558ba5917b466edd:r.Dz,__wbg_error_4bb6c2a97407129a:r.kF,__wbindgen_throw:r.Or}});t.a(e,(e=>{var n=e([t(171)]);return n.then?n.then(r):r(n)}),1)},10:(e,n,t)=>{"use strict";t.a(e,(async e=>{t.r(n);var r=t(171),c=e([r]);(0,(r=(c.then?await c:c)[0]).QC)(),document.getElementById("game-canvas").getContext("2d")}))}}]); +//# sourceMappingURL=10.bootstrap.js.map \ No newline at end of file diff --git a/10.bootstrap.js.map b/10.bootstrap.js.map new file mode 100644 index 0000000..396e80f --- /dev/null +++ b/10.bootstrap.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://draught/../pkg/draught_bg.js","webpack://draught/./index.js"],"names":["cachedTextDecoder","TextDecoder","module","require","ignoreBOM","fatal","decode","cachegetUint8Memory0","getUint8Memory0","buffer","Uint8Array","getStringFromWasm0","ptr","len","subarray","heap","Array","fill","undefined","push","heap_next","length","addHeapObject","obj","idx","getObject","init_game","WASM_VECTOR_LEN","cachedTextEncoder","TextEncoder","encodeString","encodeInto","arg","view","buf","encode","set","read","written","cachegetInt32Memory0","getInt32Memory0","Int32Array","__wbindgen_string_new","arg0","arg1","__wbindgen_object_drop_ref","ret","dropObject","takeObject","__wbg_log_9a99fb1af846153b","console","log","__wbg_new_59cb74e423758ede","Error","__wbg_stack_558ba5917b466edd","ptr0","malloc","realloc","mem","offset","code","charCodeAt","slice","passStringToWasm0","stack","len0","__wbg_error_4bb6c2a97407129a","error","__wbindgen_throw","Object","freeze","Black","White","Man","King","Empty","Occupied","Unplayable","Allowed","UnoccupiedSrc","OccupiedDest","OutOfBounds","WrongTeamSrc","IllegalTrajectory","NoJumpablePiece","JumpingSameTeam","document","getElementById","getContext"],"mappings":"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","file":"10.bootstrap.js","sourcesContent":["import * as wasm from './draught_bg.wasm';\n\nconst lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder;\n\nlet cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nlet heap_next = heap.length;\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction getObject(idx) { return heap[idx]; }\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction _assertClass(instance, klass) {\n if (!(instance instanceof klass)) {\n throw new Error(`expected instance of ${klass.name}`);\n }\n return instance.ptr;\n}\n/**\n*/\nexport function init_game() {\n wasm.init_game();\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst lTextEncoder = typeof TextEncoder === 'undefined' ? (0, module.require)('util').TextEncoder : TextEncoder;\n\nlet cachedTextEncoder = new lTextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n/**\n*/\nexport const Team = Object.freeze({ Black:0,\"0\":\"Black\",White:1,\"1\":\"White\", });\n/**\n*/\nexport const Strength = Object.freeze({ Man:0,\"0\":\"Man\",King:1,\"1\":\"King\", });\n/**\n*/\nexport const SquareState = Object.freeze({ Empty:0,\"0\":\"Empty\",Occupied:1,\"1\":\"Occupied\",Unplayable:2,\"2\":\"Unplayable\", });\n/**\n*/\nexport const Moveable = Object.freeze({ Allowed:0,\"0\":\"Allowed\",UnoccupiedSrc:1,\"1\":\"UnoccupiedSrc\",OccupiedDest:2,\"2\":\"OccupiedDest\",OutOfBounds:3,\"3\":\"OutOfBounds\",Unplayable:4,\"4\":\"Unplayable\",WrongTeamSrc:5,\"5\":\"WrongTeamSrc\",IllegalTrajectory:6,\"6\":\"IllegalTrajectory\",NoJumpablePiece:7,\"7\":\"NoJumpablePiece\",JumpingSameTeam:8,\"8\":\"JumpingSameTeam\", });\n/**\n* Single state of a checkers board\n*/\nexport class Board {\n\n static __wrap(ptr) {\n const obj = Object.create(Board.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_board_free(ptr);\n }\n /**\n * Get a copy of a board square by 1D array index\n * @param {number} idx\n * @returns {Square}\n */\n cell(idx) {\n var ret = wasm.board_cell(this.ptr, idx);\n return Square.__wrap(ret);\n }\n /**\n * Get a copy of a board square by 1D array index\n * @param {number} idx\n * @param {Square} square\n */\n set_cell(idx, square) {\n _assertClass(square, Square);\n var ptr0 = square.ptr;\n square.ptr = 0;\n wasm.board_set_cell(this.ptr, idx, ptr0);\n }\n /**\n * Get a copy of a board square by 2D [`BrdIdx`] index\n * @param {BrdIdx} idx\n * @returns {Square}\n */\n grid_cell(idx) {\n _assertClass(idx, BrdIdx);\n var ptr0 = idx.ptr;\n idx.ptr = 0;\n var ret = wasm.board_grid_cell(this.ptr, ptr0);\n return Square.__wrap(ret);\n }\n /**\n * Transform a 2D row/column board index into a single 1D index for use with [`Board::cells`]\n * @param {number} row\n * @param {number} col\n * @returns {number}\n */\n cell_index(row, col) {\n var ret = wasm.board_cell_index(this.ptr, row, col);\n return ret >>> 0;\n }\n /**\n * Similar to [`Board::cell_index`] but with a [`BrdIdx`] instead of separate indices. Transform a 2D row/column board index into a single 1D index for use with [`Board::cells`]\n * @param {BrdIdx} idx\n * @returns {number}\n */\n cell_idx(idx) {\n _assertClass(idx, BrdIdx);\n var ptr0 = idx.ptr;\n idx.ptr = 0;\n var ret = wasm.board_cell_idx(this.ptr, ptr0);\n return ret >>> 0;\n }\n /**\n * Transform a 1D array index (for [`Board::cells`]) into a 2D game board index (by row/col)\n * @param {number} idx\n * @returns {BrdIdx}\n */\n board_index(idx) {\n var ret = wasm.board_board_index(this.ptr, idx);\n return BrdIdx.__wrap(ret);\n }\n /**\n * Check whether a move given by source and destination indices is legal\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n can_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_can_move(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @param {Piece} from_square_occupant\n * @returns {number}\n */\n validate_man_move(from, to, from_square_occupant) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n _assertClass(from_square_occupant, Piece);\n var ptr2 = from_square_occupant.ptr;\n from_square_occupant.ptr = 0;\n var ret = wasm.board_validate_man_move(this.ptr, ptr0, ptr1, ptr2);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @param {Piece} from_square_occupant\n * @returns {number}\n */\n validate_king_move(from, to, from_square_occupant) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n _assertClass(from_square_occupant, Piece);\n var ptr2 = from_square_occupant.ptr;\n from_square_occupant.ptr = 0;\n var ret = wasm.board_validate_king_move(this.ptr, ptr0, ptr1, ptr2);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n jumpee_idx(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_jumpee_idx(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Unwrap the jumpee piece from the square and [`Board::check_jumpee_team`] with [`Moveable`] response\n * @param {Square} jumpee\n * @param {Piece} from_occ\n * @returns {number}\n */\n static validate_jumpee(jumpee, from_occ) {\n _assertClass(jumpee, Square);\n var ptr0 = jumpee.ptr;\n jumpee.ptr = 0;\n _assertClass(from_occ, Piece);\n var ptr1 = from_occ.ptr;\n from_occ.ptr = 0;\n var ret = wasm.board_validate_jumpee(ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Check that the source piece and the jumpee are of opposing teams\n * @param {Piece} from\n * @param {Piece} jumpee\n * @returns {boolean}\n */\n static check_jumpee_team(from, jumpee) {\n _assertClass(from, Piece);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(jumpee, Piece);\n var ptr1 = jumpee.ptr;\n jumpee.ptr = 0;\n var ret = wasm.board_check_jumpee_team(ptr0, ptr1);\n return ret !== 0;\n }\n /**\n * Initialise a game board without game pieces\n * @param {number} width\n * @param {number} height\n * @param {number} current_turn\n */\n constructor(width, height, current_turn) {\n var ret = wasm.board_new(width, height, current_turn);\n return Board.__wrap(ret);\n }\n /**\n * Reset the given board to a starting layout with 3 rows of opposing pieces\n * @param {Board} board\n * @param {number} piece_rows\n * @returns {Board}\n */\n static init_game(board, piece_rows) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n var ret = wasm.board_init_game(ptr0, piece_rows);\n return Board.__wrap(ret);\n }\n /**\n * Get the [`Board::current_turn`] parameter\n * @returns {number}\n */\n current_turn() {\n var ret = wasm.board_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} new_team\n */\n set_turn(new_team) {\n wasm.board_set_turn(this.ptr, new_team);\n }\n /**\n * Get a pointer to the backing array of board squares, [`Board::cells`]\n * @returns {number}\n */\n cells() {\n var ret = wasm.board_cells(this.ptr);\n return ret;\n }\n /**\n * Get the number of board squares\n * @returns {number}\n */\n num_cells() {\n var ret = wasm.board_num_cells(this.ptr);\n return ret >>> 0;\n }\n /**\n * Get the number of remaining pieces\n * @returns {number}\n */\n num_pieces() {\n var ret = wasm.board_num_pieces(this.ptr);\n return ret >>> 0;\n }\n /**\n * Get the number of remaining pieces for a player\n * @param {number} team\n * @returns {number}\n */\n num_player(team) {\n var ret = wasm.board_num_player(this.ptr, team);\n return ret >>> 0;\n }\n /**\n * Get the score value, Black - White pieces\n * @returns {number}\n */\n score() {\n var ret = wasm.board_score(this.ptr);\n return ret;\n }\n /**\n * Get the state of a board square by 1D array index\n * @param {number} idx\n * @returns {number}\n */\n cell_state(idx) {\n var ret = wasm.board_cell_state(this.ptr, idx);\n return ret >>> 0;\n }\n}\n/**\n* Rank 2 tensor index to identify a board square by row and column\n*/\nexport class BrdIdx {\n\n static __wrap(ptr) {\n const obj = Object.create(BrdIdx.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_brdidx_free(ptr);\n }\n /**\n * @param {number} row\n * @param {number} col\n * @returns {BrdIdx}\n */\n static from(row, col) {\n var ret = wasm.brdidx_from(row, col);\n return BrdIdx.__wrap(ret);\n }\n}\n/**\n* Root-level structure for managing the game as a collection of board states\n*/\nexport class Game {\n\n static __wrap(ptr) {\n const obj = Object.create(Game.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_game_free(ptr);\n }\n /**\n * Attempt to make a move given a source and destination index\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n */\n make_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n wasm.game_make_move(this.ptr, ptr0, ptr1);\n }\n /**\n * Update board state with given move and push new board into current state\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n */\n execute_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n wasm.game_execute_move(this.ptr, ptr0, ptr1);\n }\n /**\n * Update board state with given jump move and push new board into current state\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n */\n execute_jump(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n wasm.game_execute_jump(this.ptr, ptr0, ptr1);\n }\n /**\n * Push current board into the previous turns and set given board to current\n * @param {Board} board\n */\n push_new_board(board) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n wasm.game_push_new_board(this.ptr, ptr0);\n }\n /**\n * Set current board to given\n * @param {Board} board\n */\n set_current(board) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n wasm.game_set_current(this.ptr, ptr0);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n */\n constructor(width, height, piece_rows, first_turn) {\n var ret = wasm.game_new(width, height, piece_rows, first_turn);\n return Game.__wrap(ret);\n }\n}\n/**\n* Game piece given by its team and strength (normal or kinged)\n*/\nexport class Piece {\n\n static __wrap(ptr) {\n const obj = Object.create(Piece.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_piece_free(ptr);\n }\n /**\n * @param {number} team\n * @param {number} strength\n */\n constructor(team, strength) {\n var ret = wasm.piece_new(team, strength);\n return Piece.__wrap(ret);\n }\n}\n/**\n*/\nexport class Player {\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_player_free(ptr);\n }\n}\n/**\n* Board squares given by a state and a possible occupying game piece\n*/\nexport class Square {\n\n static __wrap(ptr) {\n const obj = Object.create(Square.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_square_free(ptr);\n }\n /**\n * @param {number} state\n * @param {Piece | undefined} occupant\n */\n constructor(state, occupant) {\n let ptr0 = 0;\n if (!isLikeNone(occupant)) {\n _assertClass(occupant, Piece);\n ptr0 = occupant.ptr;\n occupant.ptr = 0;\n }\n var ret = wasm.square_new(state, ptr0);\n return Square.__wrap(ret);\n }\n /**\n * @param {number} team\n * @param {number} strength\n * @returns {Square}\n */\n static pc(team, strength) {\n var ret = wasm.square_pc(team, strength);\n return Square.__wrap(ret);\n }\n /**\n * @returns {Square}\n */\n static empty() {\n var ret = wasm.square_empty();\n return Square.__wrap(ret);\n }\n}\n\nexport function __wbindgen_string_new(arg0, arg1) {\n var ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_object_drop_ref(arg0) {\n takeObject(arg0);\n};\n\nexport function __wbg_log_9a99fb1af846153b(arg0) {\n console.log(getObject(arg0));\n};\n\nexport function __wbg_new_59cb74e423758ede() {\n var ret = new Error();\n return addHeapObject(ret);\n};\n\nexport function __wbg_stack_558ba5917b466edd(arg0, arg1) {\n var ret = getObject(arg1).stack;\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nexport function __wbg_error_4bb6c2a97407129a(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(arg0, arg1);\n }\n};\n\nexport function __wbindgen_throw(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\n","import { init_game } from \"draught\";\nimport { memory } from \"draught/draught_bg.wasm\";\n\n// let PLAY = true;\n// let PLAY = false;\ninit_game();\n\nconst canvas = document.getElementById(\"game-canvas\");\nconst ctx = canvas.getContext('2d');\n"],"sourceRoot":""} \ No newline at end of file diff --git a/bootstrap.js b/bootstrap.js index f1cd41e..d4c67ea 100644 --- a/bootstrap.js +++ b/bootstrap.js @@ -1,379 +1,2 @@ -/* - * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./bootstrap.js": -/*!**********************!*\ - !*** ./bootstrap.js ***! - \**********************/ -/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { - -eval("// A dependency graph that contains any wasm must all be imported\n// asynchronously. This `bootstrap.js` file does the single async import, so\n// that no one else needs to worry about it again.\n__webpack_require__.e(/*! import() */ \"index_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./index.js */ \"./index.js\"))\n .catch(e => console.error(\"Error importing `index.js`:\", e));\n\n\n//# sourceURL=webpack://draught/./bootstrap.js?"); - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ id: moduleId, -/******/ loaded: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.loaded = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = __webpack_modules__; -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/async module */ -/******/ (() => { -/******/ var webpackThen = typeof Symbol === "function" ? Symbol("webpack then") : "__webpack_then__"; -/******/ var webpackExports = typeof Symbol === "function" ? Symbol("webpack exports") : "__webpack_exports__"; -/******/ var completeQueue = (queue) => { -/******/ if(queue) { -/******/ queue.forEach((fn) => (fn.r--)); -/******/ queue.forEach((fn) => (fn.r-- ? fn.r++ : fn())); -/******/ } -/******/ } -/******/ var completeFunction = (fn) => (!--fn.r && fn()); -/******/ var queueFunction = (queue, fn) => (queue ? queue.push(fn) : completeFunction(fn)); -/******/ var wrapDeps = (deps) => (deps.map((dep) => { -/******/ if(dep !== null && typeof dep === "object") { -/******/ if(dep[webpackThen]) return dep; -/******/ if(dep.then) { -/******/ var queue = []; -/******/ dep.then((r) => { -/******/ obj[webpackExports] = r; -/******/ completeQueue(queue); -/******/ queue = 0; -/******/ }); -/******/ var obj = { [webpackThen]: (fn, reject) => (queueFunction(queue, fn), dep.catch(reject)) }; -/******/ return obj; -/******/ } -/******/ } -/******/ return { [webpackThen]: (fn) => (completeFunction(fn)), [webpackExports]: dep }; -/******/ })); -/******/ __webpack_require__.a = (module, body, hasAwait) => { -/******/ var queue = hasAwait && []; -/******/ var exports = module.exports; -/******/ var currentDeps; -/******/ var outerResolve; -/******/ var reject; -/******/ var isEvaluating = true; -/******/ var nested = false; -/******/ var whenAll = (deps, onResolve, onReject) => { -/******/ if (nested) return; -/******/ nested = true; -/******/ onResolve.r += deps.length; -/******/ deps.map((dep, i) => (dep[webpackThen](onResolve, onReject))); -/******/ nested = false; -/******/ }; -/******/ var promise = new Promise((resolve, rej) => { -/******/ reject = rej; -/******/ outerResolve = () => (resolve(exports), completeQueue(queue), queue = 0); -/******/ }); -/******/ promise[webpackExports] = exports; -/******/ promise[webpackThen] = (fn, rejectFn) => { -/******/ if (isEvaluating) { return completeFunction(fn); } -/******/ if (currentDeps) whenAll(currentDeps, fn, rejectFn); -/******/ queueFunction(queue, fn); -/******/ promise.catch(rejectFn); -/******/ }; -/******/ module.exports = promise; -/******/ body((deps) => { -/******/ if(!deps) return outerResolve(); -/******/ currentDeps = wrapDeps(deps); -/******/ var fn, result; -/******/ var promise = new Promise((resolve, reject) => { -/******/ fn = () => (resolve(result = currentDeps.map((d) => (d[webpackExports])))); -/******/ fn.r = 0; -/******/ whenAll(currentDeps, fn, reject); -/******/ }); -/******/ return fn.r ? promise : result; -/******/ }).then(outerResolve, reject); -/******/ isEvaluating = false; -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/define property getters */ -/******/ (() => { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = (exports, definition) => { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/ensure chunk */ -/******/ (() => { -/******/ __webpack_require__.f = {}; -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = (chunkId) => { -/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { -/******/ __webpack_require__.f[key](chunkId, promises); -/******/ return promises; -/******/ }, [])); -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/get javascript chunk filename */ -/******/ (() => { -/******/ // This function allow to reference async chunks -/******/ __webpack_require__.u = (chunkId) => { -/******/ // return url for filenames based on template -/******/ return "" + chunkId + ".bootstrap.js"; -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/global */ -/******/ (() => { -/******/ __webpack_require__.g = (function() { -/******/ if (typeof globalThis === 'object') return globalThis; -/******/ try { -/******/ return this || new Function('return this')(); -/******/ } catch (e) { -/******/ if (typeof window === 'object') return window; -/******/ } -/******/ })(); -/******/ })(); -/******/ -/******/ /* webpack/runtime/harmony module decorator */ -/******/ (() => { -/******/ __webpack_require__.hmd = (module) => { -/******/ module = Object.create(module); -/******/ if (!module.children) module.children = []; -/******/ Object.defineProperty(module, 'exports', { -/******/ enumerable: true, -/******/ set: () => { -/******/ throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id); -/******/ } -/******/ }); -/******/ return module; -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ (() => { -/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) -/******/ })(); -/******/ -/******/ /* webpack/runtime/load script */ -/******/ (() => { -/******/ var inProgress = {}; -/******/ var dataWebpackPrefix = "draught:"; -/******/ // loadScript function to load a script via script tag -/******/ __webpack_require__.l = (url, done, key, chunkId) => { -/******/ if(inProgress[url]) { inProgress[url].push(done); return; } -/******/ var script, needAttach; -/******/ if(key !== undefined) { -/******/ var scripts = document.getElementsByTagName("script"); -/******/ for(var i = 0; i < scripts.length; i++) { -/******/ var s = scripts[i]; -/******/ if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; } -/******/ } -/******/ } -/******/ if(!script) { -/******/ needAttach = true; -/******/ script = document.createElement('script'); -/******/ -/******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ if (__webpack_require__.nc) { -/******/ script.setAttribute("nonce", __webpack_require__.nc); -/******/ } -/******/ script.setAttribute("data-webpack", dataWebpackPrefix + key); -/******/ script.src = url; -/******/ } -/******/ inProgress[url] = [done]; -/******/ var onScriptComplete = (prev, event) => { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var doneFns = inProgress[url]; -/******/ delete inProgress[url]; -/******/ script.parentNode && script.parentNode.removeChild(script); -/******/ doneFns && doneFns.forEach((fn) => (fn(event))); -/******/ if(prev) return prev(event); -/******/ } -/******/ ; -/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); -/******/ script.onerror = onScriptComplete.bind(null, script.onerror); -/******/ script.onload = onScriptComplete.bind(null, script.onload); -/******/ needAttach && document.head.appendChild(script); -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ (() => { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = (exports) => { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/publicPath */ -/******/ (() => { -/******/ var scriptUrl; -/******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + ""; -/******/ var document = __webpack_require__.g.document; -/******/ if (!scriptUrl && document) { -/******/ if (document.currentScript) -/******/ scriptUrl = document.currentScript.src -/******/ if (!scriptUrl) { -/******/ var scripts = document.getElementsByTagName("script"); -/******/ if(scripts.length) scriptUrl = scripts[scripts.length - 1].src -/******/ } -/******/ } -/******/ // When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration -/******/ // or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic. -/******/ if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser"); -/******/ scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/"); -/******/ __webpack_require__.p = scriptUrl; -/******/ })(); -/******/ -/******/ /* webpack/runtime/jsonp chunk loading */ -/******/ (() => { -/******/ // no baseURI -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ "main": 0 -/******/ }; -/******/ -/******/ __webpack_require__.f.j = (chunkId, promises) => { -/******/ // JSONP chunk loading for javascript -/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ if(true) { // all chunks have JS -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); -/******/ // create error before stack unwound to get useful stacktrace later -/******/ var error = new Error(); -/******/ var loadingEnded = (event) => { -/******/ if(__webpack_require__.o(installedChunks, chunkId)) { -/******/ installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; -/******/ if(installedChunkData) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; -/******/ error.name = 'ChunkLoadError'; -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ installedChunkData[1](error); -/******/ } -/******/ } -/******/ }; -/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); -/******/ } else installedChunks[chunkId] = 0; -/******/ } -/******/ } -/******/ }; -/******/ -/******/ // no prefetching -/******/ -/******/ // no preloaded -/******/ -/******/ // no HMR -/******/ -/******/ // no HMR manifest -/******/ -/******/ // no on chunks loaded -/******/ -/******/ // install a JSONP callback for chunk loading -/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { -/******/ var [chunkIds, moreModules, runtime] = data; -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0; -/******/ for(moduleId in moreModules) { -/******/ if(__webpack_require__.o(moreModules, moduleId)) { -/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(runtime) var result = runtime(__webpack_require__); -/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { -/******/ installedChunks[chunkId][0](); -/******/ } -/******/ installedChunks[chunkIds[i]] = 0; -/******/ } -/******/ -/******/ } -/******/ -/******/ var chunkLoadingGlobal = self["webpackChunkdraught"] = self["webpackChunkdraught"] || []; -/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); -/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); -/******/ })(); -/******/ -/******/ /* webpack/runtime/wasm chunk loading */ -/******/ (() => { -/******/ __webpack_require__.v = (exports, wasmModuleId, wasmModuleHash, importsObj) => { -/******/ var req = fetch(__webpack_require__.p + "" + wasmModuleHash + ".module.wasm"); -/******/ if (typeof WebAssembly.instantiateStreaming === 'function') { -/******/ return WebAssembly.instantiateStreaming(req, importsObj) -/******/ .then((res) => (Object.assign(exports, res.instance.exports))); -/******/ } -/******/ return req -/******/ .then((x) => (x.arrayBuffer())) -/******/ .then((bytes) => (WebAssembly.instantiate(bytes, importsObj))) -/******/ .then((res) => (Object.assign(exports, res.instance.exports))); -/******/ }; -/******/ })(); -/******/ -/************************************************************************/ -/******/ -/******/ // startup -/******/ // Load entry module and return exports -/******/ // This entry module can't be inlined because the eval devtool is used. -/******/ var __webpack_exports__ = __webpack_require__("./bootstrap.js"); -/******/ -/******/ })() -; \ No newline at end of file +(()=>{var e,r,t,n,o,a,i,s={},c={};function l(e){var r=c[e];if(void 0!==r)return r.exports;var t=c[e]={id:e,loaded:!1,exports:{}};return s[e](t,t.exports,l),t.loaded=!0,t.exports}l.m=s,e="function"==typeof Symbol?Symbol("webpack then"):"__webpack_then__",r="function"==typeof Symbol?Symbol("webpack exports"):"__webpack_exports__",t=e=>{e&&(e.forEach((e=>e.r--)),e.forEach((e=>e.r--?e.r++:e())))},n=e=>!--e.r&&e(),o=(e,r)=>e?e.push(r):n(r),l.a=(a,i,s)=>{var c,l,u,p=s&&[],d=a.exports,h=!0,f=!1,b=(r,t,n)=>{f||(f=!0,t.r+=r.length,r.map(((r,o)=>r[e](t,n))),f=!1)},m=new Promise(((e,r)=>{u=r,l=()=>(e(d),t(p),p=0)}));m[r]=d,m[e]=(e,r)=>{if(h)return n(e);c&&b(c,e,r),o(p,e),m.catch(r)},a.exports=m,i((a=>{if(!a)return l();var i,s;c=(a=>a.map((a=>{if(null!==a&&"object"==typeof a){if(a[e])return a;if(a.then){var i=[];a.then((e=>{s[r]=e,t(i),i=0}));var s={[e]:(e,r)=>(o(i,e),a.catch(r))};return s}}return{[e]:e=>n(e),[r]:a}})))(a);var u=new Promise(((e,t)=>{(i=()=>e(s=c.map((e=>e[r])))).r=0,b(c,i,t)}));return i.r?u:s})).then(l,u),h=!1},l.d=(e,r)=>{for(var t in r)l.o(r,t)&&!l.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},l.f={},l.e=e=>Promise.all(Object.keys(l.f).reduce(((r,t)=>(l.f[t](e,r),r)),[])),l.u=e=>e+".bootstrap.js",l.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),l.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),l.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),a={},i="draught:",l.l=(e,r,t,n)=>{if(a[e])a[e].push(r);else{var o,s;if(void 0!==t)for(var c=document.getElementsByTagName("script"),u=0;u{o.onerror=o.onload=null,clearTimeout(h);var n=a[e];if(delete a[e],o.parentNode&&o.parentNode.removeChild(o),n&&n.forEach((e=>e(t))),r)return r(t)},h=setTimeout(d.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=d.bind(null,o.onerror),o.onload=d.bind(null,o.onload),s&&document.head.appendChild(o)}},l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;l.g.importScripts&&(e=l.g.location+"");var r=l.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");t.length&&(e=t[t.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),l.p=e})(),(()=>{var e={179:0};l.f.j=(r,t)=>{var n=l.o(e,r)?e[r]:void 0;if(0!==n)if(n)t.push(n[2]);else{var o=new Promise(((t,o)=>n=e[r]=[t,o]));t.push(n[2]=o);var a=l.p+l.u(r),i=new Error;l.l(a,(t=>{if(l.o(e,r)&&(0!==(n=e[r])&&(e[r]=void 0),n)){var o=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,n[1](i)}}),"chunk-"+r,r)}};var r=(r,t)=>{var n,o,[a,i,s]=t,c=0;for(n in i)l.o(i,n)&&(l.m[n]=i[n]);for(s&&s(l),r&&r(t);c{var o=fetch(l.p+""+t+".module.wasm");return"function"==typeof WebAssembly.instantiateStreaming?WebAssembly.instantiateStreaming(o,n).then((r=>Object.assign(e,r.instance.exports))):o.then((e=>e.arrayBuffer())).then((e=>WebAssembly.instantiate(e,n))).then((r=>Object.assign(e,r.instance.exports)))},l.e(10).then(l.bind(l,10)).catch((e=>console.error("Error importing `index.js`:",e)))})(); +//# sourceMappingURL=bootstrap.js.map \ No newline at end of file diff --git a/bootstrap.js.map b/bootstrap.js.map new file mode 100644 index 0000000..66bcb2b --- /dev/null +++ b/bootstrap.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://draught/webpack/runtime/async module","webpack://draught/webpack/runtime/load script","webpack://draught/webpack/bootstrap","webpack://draught/webpack/runtime/define property getters","webpack://draught/webpack/runtime/ensure chunk","webpack://draught/webpack/runtime/get javascript chunk filename","webpack://draught/webpack/runtime/global","webpack://draught/webpack/runtime/harmony module decorator","webpack://draught/webpack/runtime/hasOwnProperty shorthand","webpack://draught/webpack/runtime/make namespace object","webpack://draught/webpack/runtime/publicPath","webpack://draught/webpack/runtime/jsonp chunk loading","webpack://draught/webpack/runtime/wasm chunk loading","webpack://draught/./bootstrap.js"],"names":["webpackThen","webpackExports","completeQueue","completeFunction","queueFunction","inProgress","dataWebpackPrefix","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","id","loaded","__webpack_modules__","m","Symbol","queue","forEach","fn","r","push","a","body","hasAwait","currentDeps","outerResolve","reject","isEvaluating","nested","whenAll","deps","onResolve","onReject","length","map","dep","i","promise","Promise","resolve","rej","rejectFn","catch","result","then","obj","wrapDeps","d","definition","key","o","Object","defineProperty","enumerable","get","f","e","chunkId","all","keys","reduce","promises","u","g","globalThis","this","Function","window","hmd","create","children","set","Error","prop","prototype","hasOwnProperty","call","l","url","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","setTimeout","bind","type","target","head","appendChild","toStringTag","value","scriptUrl","importScripts","location","currentScript","replace","p","installedChunks","179","j","installedChunkData","error","errorType","realSrc","message","name","request","webpackJsonpCallback","parentChunkLoadingFunction","data","chunkIds","moreModules","runtime","chunkLoadingGlobal","self","v","wasmModuleId","wasmModuleHash","importsObj","req","fetch","WebAssembly","instantiateStreaming","res","assign","instance","x","arrayBuffer","bytes","instantiate","console"],"mappings":"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","file":"bootstrap.js","sourcesContent":["var webpackThen = typeof Symbol === \"function\" ? Symbol(\"webpack then\") : \"__webpack_then__\";\nvar webpackExports = typeof Symbol === \"function\" ? Symbol(\"webpack exports\") : \"__webpack_exports__\";\nvar completeQueue = (queue) => {\n\tif(queue) {\n\t\tqueue.forEach((fn) => (fn.r--));\n\t\tqueue.forEach((fn) => (fn.r-- ? fn.r++ : fn()));\n\t}\n}\nvar completeFunction = (fn) => (!--fn.r && fn());\nvar queueFunction = (queue, fn) => (queue ? queue.push(fn) : completeFunction(fn));\nvar wrapDeps = (deps) => (deps.map((dep) => {\n\tif(dep !== null && typeof dep === \"object\") {\n\t\tif(dep[webpackThen]) return dep;\n\t\tif(dep.then) {\n\t\t\tvar queue = [];\n\t\t\tdep.then((r) => {\n\t\t\t\tobj[webpackExports] = r;\n\t\t\t\tcompleteQueue(queue);\n\t\t\t\tqueue = 0;\n\t\t\t});\n\t\t\tvar obj = { [webpackThen]: (fn, reject) => (queueFunction(queue, fn), dep.catch(reject)) };\n\t\t\treturn obj;\n\t\t}\n\t}\n\treturn { [webpackThen]: (fn) => (completeFunction(fn)), [webpackExports]: dep };\n}));\n__webpack_require__.a = (module, body, hasAwait) => {\n\tvar queue = hasAwait && [];\n\tvar exports = module.exports;\n\tvar currentDeps;\n\tvar outerResolve;\n\tvar reject;\n\tvar isEvaluating = true;\n\tvar nested = false;\n\tvar whenAll = (deps, onResolve, onReject) => {\n\t\tif (nested) return;\n\t\tnested = true;\n\t\tonResolve.r += deps.length;\n\t\tdeps.map((dep, i) => (dep[webpackThen](onResolve, onReject)));\n\t\tnested = false;\n\t};\n\tvar promise = new Promise((resolve, rej) => {\n\t\treject = rej;\n\t\touterResolve = () => (resolve(exports), completeQueue(queue), queue = 0);\n\t});\n\tpromise[webpackExports] = exports;\n\tpromise[webpackThen] = (fn, rejectFn) => {\n\t\tif (isEvaluating) { return completeFunction(fn); }\n\t\tif (currentDeps) whenAll(currentDeps, fn, rejectFn);\n\t\tqueueFunction(queue, fn);\n\t\tpromise.catch(rejectFn);\n\t};\n\tmodule.exports = promise;\n\tbody((deps) => {\n\t\tif(!deps) return outerResolve();\n\t\tcurrentDeps = wrapDeps(deps);\n\t\tvar fn, result;\n\t\tvar promise = new Promise((resolve, reject) => {\n\t\t\tfn = () => (resolve(result = currentDeps.map((d) => (d[webpackExports]))));\n\t\t\tfn.r = 0;\n\t\t\twhenAll(currentDeps, fn, reject);\n\t\t});\n\t\treturn fn.r ? promise : result;\n\t}).then(outerResolve, reject);\n\tisEvaluating = false;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"draught:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".bootstrap.js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = (module) => {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: () => {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tfor(moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) var result = runtime(__webpack_require__);\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkIds[i]] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkdraught\"] = self[\"webpackChunkdraught\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.v = (exports, wasmModuleId, wasmModuleHash, importsObj) => {\n\tvar req = fetch(__webpack_require__.p + \"\" + wasmModuleHash + \".module.wasm\");\n\tif (typeof WebAssembly.instantiateStreaming === 'function') {\n\t\treturn WebAssembly.instantiateStreaming(req, importsObj)\n\t\t\t.then((res) => (Object.assign(exports, res.instance.exports)));\n\t}\n\treturn req\n\t\t.then((x) => (x.arrayBuffer()))\n\t\t.then((bytes) => (WebAssembly.instantiate(bytes, importsObj)))\n\t\t.then((res) => (Object.assign(exports, res.instance.exports)));\n};","// A dependency graph that contains any wasm must all be imported\n// asynchronously. This `bootstrap.js` file does the single async import, so\n// that no one else needs to worry about it again.\nimport(\"./index.js\")\n .catch(e => console.error(\"Error importing `index.js`:\", e));\n"],"sourceRoot":""} \ No newline at end of file diff --git a/doc/draught/all.html b/doc/draught/all.html index 35a9958..2f0e8e7 100644 --- a/doc/draught/all.html +++ b/doc/draught/all.html @@ -3,5 +3,5 @@

List of all items[] -

Structs

Enums

Macros

Functions

Constants

+

Structs

Enums

Macros

Functions

Constants

\ No newline at end of file diff --git a/doc/draught/board/constant.STD_HEIGHT.html b/doc/draught/board/constant.STD_HEIGHT.html index c407835..b634db2 100644 --- a/doc/draught/board/constant.STD_HEIGHT.html +++ b/doc/draught/board/constant.STD_HEIGHT.html @@ -1,6 +1,6 @@ draught::board::STD_HEIGHT - Rust

Constant draught::board::STD_HEIGHT[][src]

pub const STD_HEIGHT: usize = 8;

Standard height of a checkers board is 8 squares

+ Change settings

Constant draught::board::STD_HEIGHT[][src]

pub const STD_HEIGHT: usize = 8;

Standard height of a checkers board is 8 squares

\ No newline at end of file diff --git a/doc/draught/board/constant.STD_WIDTH.html b/doc/draught/board/constant.STD_WIDTH.html index cfbbc9c..320cf8e 100644 --- a/doc/draught/board/constant.STD_WIDTH.html +++ b/doc/draught/board/constant.STD_WIDTH.html @@ -1,6 +1,6 @@ draught::board::STD_WIDTH - Rust

Constant draught::board::STD_WIDTH[][src]

pub const STD_WIDTH: usize = 8;

Standard width of a checkers board is 8 squares

+ Change settings

Constant draught::board::STD_WIDTH[][src]

pub const STD_WIDTH: usize = 8;

Standard width of a checkers board is 8 squares

\ No newline at end of file diff --git a/doc/draught/board/index.html b/doc/draught/board/index.html index 36fb6d5..2985e53 100644 --- a/doc/draught/board/index.html +++ b/doc/draught/board/index.html @@ -1,14 +1,14 @@ draught::board - Rust

Module draught::board[][src]

Board module for components related to the checkers board and game structure

+ Change settings

Module draught::board[][src]

Board module for components related to the checkers board and game structure

Modules

enums
iter

Structs

-
Board

Models a single state for a checkers board

-
BrdIdx

Model a rank 2 tensor index to identify a board square by row and column

-
Direction

Model the standard diagonal movements by north west/east etc

-
Piece

Model a game piece by its team and strength (normal or kinged)

-
Square

Model board squares by a state and a possible occupying game piece

+
Board

Single state of a checkers board

+
BrdIdx

Rank 2 tensor index to identify a board square by row and column

+
Direction

Standard diagonal movements given by north west/east etc

+
Piece

Game piece given by its team and strength (normal or kinged)

+
Square

Board squares given by a state and a possible occupying game piece

Constants

STD_HEIGHT

Standard height of a checkers board is 8 squares

STD_WIDTH

Standard width of a checkers board is 8 squares

diff --git a/doc/draught/board/iter/index.html b/doc/draught/board/iter/index.html index 566e8e9..c4a3a38 100644 --- a/doc/draught/board/iter/index.html +++ b/doc/draught/board/iter/index.html @@ -1,6 +1,6 @@ draught::board::iter - Rust

Module draught::board::iter[][src]

Structs

-
RowIndexIterator
RowSquareIterator
+ Change settings

Module draught::board::iter[][src]

Structs

+
PieceIterator
RowIndexIterator
RowSquareIterator
\ No newline at end of file diff --git a/doc/draught/board/iter/sidebar-items.js b/doc/draught/board/iter/sidebar-items.js index fb9b2ee..e395733 100644 --- a/doc/draught/board/iter/sidebar-items.js +++ b/doc/draught/board/iter/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"struct":[["RowIndexIterator",""],["RowSquareIterator",""]]}); \ No newline at end of file +initSidebarItems({"struct":[["PieceIterator",""],["RowIndexIterator",""],["RowSquareIterator",""]]}); \ No newline at end of file diff --git a/doc/draught/board/iter/struct.PieceIterator.html b/doc/draught/board/iter/struct.PieceIterator.html new file mode 100644 index 0000000..a4817f4 --- /dev/null +++ b/doc/draught/board/iter/struct.PieceIterator.html @@ -0,0 +1,142 @@ +draught::board::iter::PieceIterator - Rust + +

Struct draught::board::iter::PieceIterator[][src]

pub struct PieceIterator<'a> {
+    board: &'a Board,
+    index_cursor: usize,
+}

+ Fields

board: &'a Boardindex_cursor: usize

Implementations

impl<'a> PieceIterator<'a>[src]

pub fn new(board: &'a Board) -> Self[src]

Trait Implementations

impl<'a> Iterator for PieceIterator<'a>[src]

type Item = (usize, Square)

The type of the elements being iterated over.

+

fn next(&mut self) -> Option<(usize, Square)>[src]

Get next item from the iterator

+

Auto Trait Implementations

impl<'a> RefUnwindSafe for PieceIterator<'a>

impl<'a> Send for PieceIterator<'a>

impl<'a> Sync for PieceIterator<'a>

impl<'a> Unpin for PieceIterator<'a>

impl<'a> UnwindSafe for PieceIterator<'a>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<I> IntoIterator for I where
    I: Iterator
[src]

type Item = <I as Iterator>::Item

The type of the elements being iterated over.

+

type IntoIter = I

Which kind of iterator are we turning this into?

+

impl<I> IteratorRandom for I where
    I: Iterator
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

+

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

+

impl<V, T> VZip<V> for T where
    V: MultiLane<T>, 

+ \ No newline at end of file diff --git a/doc/draught/board/iter/struct.RowIndexIterator.html b/doc/draught/board/iter/struct.RowIndexIterator.html index 5392ae8..2eabd06 100644 --- a/doc/draught/board/iter/struct.RowIndexIterator.html +++ b/doc/draught/board/iter/struct.RowIndexIterator.html @@ -1,12 +1,12 @@ draught::board::iter::RowIndexIterator - Rust

Struct draught::board::iter::RowIndexIterator[][src]

pub struct RowIndexIterator<'a> {
+                Change settings

Struct draught::board::iter::RowIndexIterator[][src]

pub struct RowIndexIterator<'a> {
     board: &'a Board,
     row_cursor: usize,
 }

- Fields

board: &'a Boardrow_cursor: usize

Implementations

impl<'a> RowIndexIterator<'a>[src]

pub fn new(board: &'a Board) -> Self[src]

Trait Implementations

impl<'a> Iterator for RowIndexIterator<'a>[src]

type Item = Vec<usize>

The type of the elements being iterated over.

-

fn next(&mut self) -> Option<Vec<usize>>[src]

Get next item from the iterator

+ Fieldsboard: &'a Boardrow_cursor: usize

Implementations

impl<'a> RowIndexIterator<'a>[src]

pub fn new(board: &'a Board) -> Self[src]

Trait Implementations

impl<'a> Iterator for RowIndexIterator<'a>[src]

type Item = Vec<usize>

The type of the elements being iterated over.

+

fn next(&mut self) -> Option<Vec<usize>>[src]

Get next item from the iterator

game
player
utils

Macros

log

Wrap the web_sys access to the browser console in a macro for easy logging

Functions

__wasm_bindgen_generated_init_game
init_game
diff --git a/doc/draught/macro.log.html b/doc/draught/macro.log.html index 267fc0a..7ceae85 100644 --- a/doc/draught/macro.log.html +++ b/doc/draught/macro.log.html @@ -1,7 +1,7 @@ draught::log - Rust

Macro draught::log[][src]

+                Change settings

Macro draught::log[][src]

 macro_rules! log {
     ( $( $t:tt )* ) => { ... };
 }
diff --git a/doc/draught/player/index.html b/doc/draught/player/index.html new file mode 100644 index 0000000..1f31b7c --- /dev/null +++ b/doc/draught/player/index.html @@ -0,0 +1,6 @@ +draught::player - Rust + +

Module draught::player[][src]

Structs

+
Player
+ \ No newline at end of file diff --git a/doc/draught/player/sidebar-items.js b/doc/draught/player/sidebar-items.js new file mode 100644 index 0000000..430fbcd --- /dev/null +++ b/doc/draught/player/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"struct":[["Player",""]]}); \ No newline at end of file diff --git a/doc/draught/player/struct.Player.html b/doc/draught/player/struct.Player.html new file mode 100644 index 0000000..3a1d9e2 --- /dev/null +++ b/doc/draught/player/struct.Player.html @@ -0,0 +1,48 @@ +draught::player::Player - Rust + +

Struct draught::player::Player[][src]

pub struct Player {
+    score: usize,
+}

+ Fields

score: usize

Trait Implementations

impl Clone for Player[src]

impl From<Player> for JsValue[src]

impl FromWasmAbi for Player[src]

type Abi = u32

The wasm ABI type that this converts from when coming back out from the +ABI boundary. Read more

+

impl IntoWasmAbi for Player[src]

type Abi = u32

The wasm ABI type that this converts into when crossing the ABI +boundary. Read more

+

impl OptionFromWasmAbi for Player[src]

impl OptionIntoWasmAbi for Player[src]

impl RefFromWasmAbi for Player[src]

type Abi = u32

The wasm ABI type references to Self are recovered from.

+

type Anchor = Ref<'static, Player>

The type that holds the reference to Self for the duration of the +invocation of the function that has an &Self parameter. This is +required to ensure that the lifetimes don’t persist beyond one function +call, and so that they remain anonymous. Read more

+

impl RefMutFromWasmAbi for Player[src]

type Abi = u32

Same as RefFromWasmAbi::Abi

+

type Anchor = RefMut<'static, Player>

Same as RefFromWasmAbi::Anchor

+

impl WasmDescribe for Player[src]

Auto Trait Implementations

impl RefUnwindSafe for Player

impl Send for Player

impl Sync for Player

impl Unpin for Player

impl UnwindSafe for Player

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ReturnWasmAbi for T where
    T: IntoWasmAbi
[src]

type Abi = <T as IntoWasmAbi>::Abi

Same as IntoWasmAbi::Abi

+

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

+

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

+

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

+

impl<V, T> VZip<V> for T where
    V: MultiLane<T>, 

+ \ No newline at end of file diff --git a/doc/draught/sidebar-items.js b/doc/draught/sidebar-items.js index a53c6a5..e590a1c 100644 --- a/doc/draught/sidebar-items.js +++ b/doc/draught/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["__wasm_bindgen_generated_init_game",""],["init_game",""]],"macro":[["log","Wrap the [`web_sys`] access to the browser console in a macro for easy logging"]],"mod":[["board","Board module for components related to the checkers board and game structure"],["game",""],["utils",""]]}); \ No newline at end of file +initSidebarItems({"fn":[["__wasm_bindgen_generated_init_game",""],["init_game",""]],"macro":[["log","Wrap the [`web_sys`] access to the browser console in a macro for easy logging"]],"mod":[["board","Board module for components related to the checkers board and game structure"],["game",""],["player",""],["utils",""]]}); \ No newline at end of file diff --git a/doc/implementors/core/clone/trait.Clone.js b/doc/implementors/core/clone/trait.Clone.js index 0499c7a..e8aaac6 100644 --- a/doc/implementors/core/clone/trait.Clone.js +++ b/doc/implementors/core/clone/trait.Clone.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl Clone for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl Clone for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl Clone for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl Clone for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl Clone for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: Clone + Copy> Clone for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl Clone for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl Clone for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl Clone for Board","synthetic":false,"types":["draught::board::Board"]}]; +implementors["draught"] = [{"text":"impl Clone for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl Clone for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl Clone for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl Clone for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl Clone for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: Clone + Copy> Clone for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl Clone for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl Clone for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl Clone for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl Clone for Player","synthetic":false,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/convert/trait.From.js b/doc/implementors/core/convert/trait.From.js index e2c61f7..e2cdf14 100644 --- a/doc/implementors/core/convert/trait.From.js +++ b/doc/implementors/core/convert/trait.From.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl From<Piece> for JsValue","synthetic":false,"types":["wasm_bindgen::JsValue"]},{"text":"impl From<Square> for JsValue","synthetic":false,"types":["wasm_bindgen::JsValue"]},{"text":"impl From<BrdIdx> for JsValue","synthetic":false,"types":["wasm_bindgen::JsValue"]},{"text":"impl From<Board> for JsValue","synthetic":false,"types":["wasm_bindgen::JsValue"]},{"text":"impl From<Game> for JsValue","synthetic":false,"types":["wasm_bindgen::JsValue"]}]; +implementors["draught"] = [{"text":"impl From<Piece> for JsValue","synthetic":false,"types":["wasm_bindgen::JsValue"]},{"text":"impl From<Square> for JsValue","synthetic":false,"types":["wasm_bindgen::JsValue"]},{"text":"impl From<BrdIdx> for JsValue","synthetic":false,"types":["wasm_bindgen::JsValue"]},{"text":"impl From<Board> for JsValue","synthetic":false,"types":["wasm_bindgen::JsValue"]},{"text":"impl From<Game> for JsValue","synthetic":false,"types":["wasm_bindgen::JsValue"]},{"text":"impl From<Player> for JsValue","synthetic":false,"types":["wasm_bindgen::JsValue"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/fmt/trait.Debug.js b/doc/implementors/core/fmt/trait.Debug.js index 9601e5b..c471737 100644 --- a/doc/implementors/core/fmt/trait.Debug.js +++ b/doc/implementors/core/fmt/trait.Debug.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl Debug for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl Debug for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl Debug for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl Debug for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl Debug for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: Debug + Clone + Copy> Debug for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl Debug for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl Debug for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]}]; +implementors["draught"] = [{"text":"impl Debug for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl Debug for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl Debug for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl Debug for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl Debug for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: Debug + Clone + Copy> Debug for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl Debug for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl Debug for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl Debug for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl Debug for Game","synthetic":false,"types":["draught::game::Game"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/fmt/trait.Display.js b/doc/implementors/core/fmt/trait.Display.js index 4547dfc..f13dffb 100644 --- a/doc/implementors/core/fmt/trait.Display.js +++ b/doc/implementors/core/fmt/trait.Display.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl Display for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl Display for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl Display for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl Display for Board","synthetic":false,"types":["draught::board::Board"]}]; +implementors["draught"] = [{"text":"impl Display for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl Display for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl Display for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl Display for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl Display for Game","synthetic":false,"types":["draught::game::Game"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/iter/traits/iterator/trait.Iterator.js b/doc/implementors/core/iter/traits/iterator/trait.Iterator.js index 3b1b783..e10ea71 100644 --- a/doc/implementors/core/iter/traits/iterator/trait.Iterator.js +++ b/doc/implementors/core/iter/traits/iterator/trait.Iterator.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl<'a> Iterator for RowIndexIterator<'a>","synthetic":false,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> Iterator for RowSquareIterator<'a>","synthetic":false,"types":["draught::board::iter::RowSquareIterator"]}]; +implementors["draught"] = [{"text":"impl<'a> Iterator for RowIndexIterator<'a>","synthetic":false,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> Iterator for RowSquareIterator<'a>","synthetic":false,"types":["draught::board::iter::RowSquareIterator"]},{"text":"impl<'a> Iterator for PieceIterator<'a>","synthetic":false,"types":["draught::board::iter::PieceIterator"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.Freeze.js b/doc/implementors/core/marker/trait.Freeze.js index e85f6aa..715e3f5 100644 --- a/doc/implementors/core/marker/trait.Freeze.js +++ b/doc/implementors/core/marker/trait.Freeze.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl Freeze for Team","synthetic":true,"types":["draught::board::enums::Team"]},{"text":"impl Freeze for Strength","synthetic":true,"types":["draught::board::enums::Strength"]},{"text":"impl Freeze for SquareState","synthetic":true,"types":["draught::board::enums::SquareState"]},{"text":"impl Freeze for Moveable","synthetic":true,"types":["draught::board::enums::Moveable"]},{"text":"impl<'a> Freeze for RowIndexIterator<'a>","synthetic":true,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> Freeze for RowSquareIterator<'a>","synthetic":true,"types":["draught::board::iter::RowSquareIterator"]},{"text":"impl Freeze for Piece","synthetic":true,"types":["draught::board::Piece"]},{"text":"impl<T> Freeze for Direction<T> where
    T: Freeze
","synthetic":true,"types":["draught::board::Direction"]},{"text":"impl Freeze for Square","synthetic":true,"types":["draught::board::Square"]},{"text":"impl Freeze for BrdIdx","synthetic":true,"types":["draught::board::BrdIdx"]},{"text":"impl Freeze for Board","synthetic":true,"types":["draught::board::Board"]},{"text":"impl Freeze for Game","synthetic":true,"types":["draught::game::Game"]}]; +implementors["draught"] = [{"text":"impl Freeze for Team","synthetic":true,"types":["draught::board::enums::Team"]},{"text":"impl Freeze for Strength","synthetic":true,"types":["draught::board::enums::Strength"]},{"text":"impl Freeze for SquareState","synthetic":true,"types":["draught::board::enums::SquareState"]},{"text":"impl Freeze for Moveable","synthetic":true,"types":["draught::board::enums::Moveable"]},{"text":"impl<'a> Freeze for RowIndexIterator<'a>","synthetic":true,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> Freeze for RowSquareIterator<'a>","synthetic":true,"types":["draught::board::iter::RowSquareIterator"]},{"text":"impl<'a> Freeze for PieceIterator<'a>","synthetic":true,"types":["draught::board::iter::PieceIterator"]},{"text":"impl Freeze for Piece","synthetic":true,"types":["draught::board::Piece"]},{"text":"impl<T> Freeze for Direction<T> where
    T: Freeze
","synthetic":true,"types":["draught::board::Direction"]},{"text":"impl Freeze for Square","synthetic":true,"types":["draught::board::Square"]},{"text":"impl Freeze for BrdIdx","synthetic":true,"types":["draught::board::BrdIdx"]},{"text":"impl Freeze for Board","synthetic":true,"types":["draught::board::Board"]},{"text":"impl Freeze for Game","synthetic":true,"types":["draught::game::Game"]},{"text":"impl Freeze for Player","synthetic":true,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.Send.js b/doc/implementors/core/marker/trait.Send.js index 31920a4..e8dc007 100644 --- a/doc/implementors/core/marker/trait.Send.js +++ b/doc/implementors/core/marker/trait.Send.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl Send for Team","synthetic":true,"types":["draught::board::enums::Team"]},{"text":"impl Send for Strength","synthetic":true,"types":["draught::board::enums::Strength"]},{"text":"impl Send for SquareState","synthetic":true,"types":["draught::board::enums::SquareState"]},{"text":"impl Send for Moveable","synthetic":true,"types":["draught::board::enums::Moveable"]},{"text":"impl<'a> Send for RowIndexIterator<'a>","synthetic":true,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> Send for RowSquareIterator<'a>","synthetic":true,"types":["draught::board::iter::RowSquareIterator"]},{"text":"impl Send for Piece","synthetic":true,"types":["draught::board::Piece"]},{"text":"impl<T> Send for Direction<T> where
    T: Send
","synthetic":true,"types":["draught::board::Direction"]},{"text":"impl Send for Square","synthetic":true,"types":["draught::board::Square"]},{"text":"impl Send for BrdIdx","synthetic":true,"types":["draught::board::BrdIdx"]},{"text":"impl Send for Board","synthetic":true,"types":["draught::board::Board"]},{"text":"impl Send for Game","synthetic":true,"types":["draught::game::Game"]}]; +implementors["draught"] = [{"text":"impl Send for Team","synthetic":true,"types":["draught::board::enums::Team"]},{"text":"impl Send for Strength","synthetic":true,"types":["draught::board::enums::Strength"]},{"text":"impl Send for SquareState","synthetic":true,"types":["draught::board::enums::SquareState"]},{"text":"impl Send for Moveable","synthetic":true,"types":["draught::board::enums::Moveable"]},{"text":"impl<'a> Send for RowIndexIterator<'a>","synthetic":true,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> Send for RowSquareIterator<'a>","synthetic":true,"types":["draught::board::iter::RowSquareIterator"]},{"text":"impl<'a> Send for PieceIterator<'a>","synthetic":true,"types":["draught::board::iter::PieceIterator"]},{"text":"impl Send for Piece","synthetic":true,"types":["draught::board::Piece"]},{"text":"impl<T> Send for Direction<T> where
    T: Send
","synthetic":true,"types":["draught::board::Direction"]},{"text":"impl Send for Square","synthetic":true,"types":["draught::board::Square"]},{"text":"impl Send for BrdIdx","synthetic":true,"types":["draught::board::BrdIdx"]},{"text":"impl Send for Board","synthetic":true,"types":["draught::board::Board"]},{"text":"impl Send for Game","synthetic":true,"types":["draught::game::Game"]},{"text":"impl Send for Player","synthetic":true,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.Sync.js b/doc/implementors/core/marker/trait.Sync.js index 7d72a11..197414c 100644 --- a/doc/implementors/core/marker/trait.Sync.js +++ b/doc/implementors/core/marker/trait.Sync.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl Sync for Team","synthetic":true,"types":["draught::board::enums::Team"]},{"text":"impl Sync for Strength","synthetic":true,"types":["draught::board::enums::Strength"]},{"text":"impl Sync for SquareState","synthetic":true,"types":["draught::board::enums::SquareState"]},{"text":"impl Sync for Moveable","synthetic":true,"types":["draught::board::enums::Moveable"]},{"text":"impl<'a> Sync for RowIndexIterator<'a>","synthetic":true,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> Sync for RowSquareIterator<'a>","synthetic":true,"types":["draught::board::iter::RowSquareIterator"]},{"text":"impl Sync for Piece","synthetic":true,"types":["draught::board::Piece"]},{"text":"impl<T> Sync for Direction<T> where
    T: Sync
","synthetic":true,"types":["draught::board::Direction"]},{"text":"impl Sync for Square","synthetic":true,"types":["draught::board::Square"]},{"text":"impl Sync for BrdIdx","synthetic":true,"types":["draught::board::BrdIdx"]},{"text":"impl Sync for Board","synthetic":true,"types":["draught::board::Board"]},{"text":"impl Sync for Game","synthetic":true,"types":["draught::game::Game"]}]; +implementors["draught"] = [{"text":"impl Sync for Team","synthetic":true,"types":["draught::board::enums::Team"]},{"text":"impl Sync for Strength","synthetic":true,"types":["draught::board::enums::Strength"]},{"text":"impl Sync for SquareState","synthetic":true,"types":["draught::board::enums::SquareState"]},{"text":"impl Sync for Moveable","synthetic":true,"types":["draught::board::enums::Moveable"]},{"text":"impl<'a> Sync for RowIndexIterator<'a>","synthetic":true,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> Sync for RowSquareIterator<'a>","synthetic":true,"types":["draught::board::iter::RowSquareIterator"]},{"text":"impl<'a> Sync for PieceIterator<'a>","synthetic":true,"types":["draught::board::iter::PieceIterator"]},{"text":"impl Sync for Piece","synthetic":true,"types":["draught::board::Piece"]},{"text":"impl<T> Sync for Direction<T> where
    T: Sync
","synthetic":true,"types":["draught::board::Direction"]},{"text":"impl Sync for Square","synthetic":true,"types":["draught::board::Square"]},{"text":"impl Sync for BrdIdx","synthetic":true,"types":["draught::board::BrdIdx"]},{"text":"impl Sync for Board","synthetic":true,"types":["draught::board::Board"]},{"text":"impl Sync for Game","synthetic":true,"types":["draught::game::Game"]},{"text":"impl Sync for Player","synthetic":true,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.Unpin.js b/doc/implementors/core/marker/trait.Unpin.js index c79e161..42a647b 100644 --- a/doc/implementors/core/marker/trait.Unpin.js +++ b/doc/implementors/core/marker/trait.Unpin.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl Unpin for Team","synthetic":true,"types":["draught::board::enums::Team"]},{"text":"impl Unpin for Strength","synthetic":true,"types":["draught::board::enums::Strength"]},{"text":"impl Unpin for SquareState","synthetic":true,"types":["draught::board::enums::SquareState"]},{"text":"impl Unpin for Moveable","synthetic":true,"types":["draught::board::enums::Moveable"]},{"text":"impl<'a> Unpin for RowIndexIterator<'a>","synthetic":true,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> Unpin for RowSquareIterator<'a>","synthetic":true,"types":["draught::board::iter::RowSquareIterator"]},{"text":"impl Unpin for Piece","synthetic":true,"types":["draught::board::Piece"]},{"text":"impl<T> Unpin for Direction<T> where
    T: Unpin
","synthetic":true,"types":["draught::board::Direction"]},{"text":"impl Unpin for Square","synthetic":true,"types":["draught::board::Square"]},{"text":"impl Unpin for BrdIdx","synthetic":true,"types":["draught::board::BrdIdx"]},{"text":"impl Unpin for Board","synthetic":true,"types":["draught::board::Board"]},{"text":"impl Unpin for Game","synthetic":true,"types":["draught::game::Game"]}]; +implementors["draught"] = [{"text":"impl Unpin for Team","synthetic":true,"types":["draught::board::enums::Team"]},{"text":"impl Unpin for Strength","synthetic":true,"types":["draught::board::enums::Strength"]},{"text":"impl Unpin for SquareState","synthetic":true,"types":["draught::board::enums::SquareState"]},{"text":"impl Unpin for Moveable","synthetic":true,"types":["draught::board::enums::Moveable"]},{"text":"impl<'a> Unpin for RowIndexIterator<'a>","synthetic":true,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> Unpin for RowSquareIterator<'a>","synthetic":true,"types":["draught::board::iter::RowSquareIterator"]},{"text":"impl<'a> Unpin for PieceIterator<'a>","synthetic":true,"types":["draught::board::iter::PieceIterator"]},{"text":"impl Unpin for Piece","synthetic":true,"types":["draught::board::Piece"]},{"text":"impl<T> Unpin for Direction<T> where
    T: Unpin
","synthetic":true,"types":["draught::board::Direction"]},{"text":"impl Unpin for Square","synthetic":true,"types":["draught::board::Square"]},{"text":"impl Unpin for BrdIdx","synthetic":true,"types":["draught::board::BrdIdx"]},{"text":"impl Unpin for Board","synthetic":true,"types":["draught::board::Board"]},{"text":"impl Unpin for Game","synthetic":true,"types":["draught::game::Game"]},{"text":"impl Unpin for Player","synthetic":true,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/std/panic/trait.RefUnwindSafe.js b/doc/implementors/std/panic/trait.RefUnwindSafe.js index 9c712e7..e2631be 100644 --- a/doc/implementors/std/panic/trait.RefUnwindSafe.js +++ b/doc/implementors/std/panic/trait.RefUnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl RefUnwindSafe for Team","synthetic":true,"types":["draught::board::enums::Team"]},{"text":"impl RefUnwindSafe for Strength","synthetic":true,"types":["draught::board::enums::Strength"]},{"text":"impl RefUnwindSafe for SquareState","synthetic":true,"types":["draught::board::enums::SquareState"]},{"text":"impl RefUnwindSafe for Moveable","synthetic":true,"types":["draught::board::enums::Moveable"]},{"text":"impl<'a> RefUnwindSafe for RowIndexIterator<'a>","synthetic":true,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> RefUnwindSafe for RowSquareIterator<'a>","synthetic":true,"types":["draught::board::iter::RowSquareIterator"]},{"text":"impl RefUnwindSafe for Piece","synthetic":true,"types":["draught::board::Piece"]},{"text":"impl<T> RefUnwindSafe for Direction<T> where
    T: RefUnwindSafe
","synthetic":true,"types":["draught::board::Direction"]},{"text":"impl RefUnwindSafe for Square","synthetic":true,"types":["draught::board::Square"]},{"text":"impl RefUnwindSafe for BrdIdx","synthetic":true,"types":["draught::board::BrdIdx"]},{"text":"impl RefUnwindSafe for Board","synthetic":true,"types":["draught::board::Board"]},{"text":"impl RefUnwindSafe for Game","synthetic":true,"types":["draught::game::Game"]}]; +implementors["draught"] = [{"text":"impl RefUnwindSafe for Team","synthetic":true,"types":["draught::board::enums::Team"]},{"text":"impl RefUnwindSafe for Strength","synthetic":true,"types":["draught::board::enums::Strength"]},{"text":"impl RefUnwindSafe for SquareState","synthetic":true,"types":["draught::board::enums::SquareState"]},{"text":"impl RefUnwindSafe for Moveable","synthetic":true,"types":["draught::board::enums::Moveable"]},{"text":"impl<'a> RefUnwindSafe for RowIndexIterator<'a>","synthetic":true,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> RefUnwindSafe for RowSquareIterator<'a>","synthetic":true,"types":["draught::board::iter::RowSquareIterator"]},{"text":"impl<'a> RefUnwindSafe for PieceIterator<'a>","synthetic":true,"types":["draught::board::iter::PieceIterator"]},{"text":"impl RefUnwindSafe for Piece","synthetic":true,"types":["draught::board::Piece"]},{"text":"impl<T> RefUnwindSafe for Direction<T> where
    T: RefUnwindSafe
","synthetic":true,"types":["draught::board::Direction"]},{"text":"impl RefUnwindSafe for Square","synthetic":true,"types":["draught::board::Square"]},{"text":"impl RefUnwindSafe for BrdIdx","synthetic":true,"types":["draught::board::BrdIdx"]},{"text":"impl RefUnwindSafe for Board","synthetic":true,"types":["draught::board::Board"]},{"text":"impl RefUnwindSafe for Game","synthetic":true,"types":["draught::game::Game"]},{"text":"impl RefUnwindSafe for Player","synthetic":true,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/std/panic/trait.UnwindSafe.js b/doc/implementors/std/panic/trait.UnwindSafe.js index fb587a2..f9748f3 100644 --- a/doc/implementors/std/panic/trait.UnwindSafe.js +++ b/doc/implementors/std/panic/trait.UnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl UnwindSafe for Team","synthetic":true,"types":["draught::board::enums::Team"]},{"text":"impl UnwindSafe for Strength","synthetic":true,"types":["draught::board::enums::Strength"]},{"text":"impl UnwindSafe for SquareState","synthetic":true,"types":["draught::board::enums::SquareState"]},{"text":"impl UnwindSafe for Moveable","synthetic":true,"types":["draught::board::enums::Moveable"]},{"text":"impl<'a> UnwindSafe for RowIndexIterator<'a>","synthetic":true,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> UnwindSafe for RowSquareIterator<'a>","synthetic":true,"types":["draught::board::iter::RowSquareIterator"]},{"text":"impl UnwindSafe for Piece","synthetic":true,"types":["draught::board::Piece"]},{"text":"impl<T> UnwindSafe for Direction<T> where
    T: UnwindSafe
","synthetic":true,"types":["draught::board::Direction"]},{"text":"impl UnwindSafe for Square","synthetic":true,"types":["draught::board::Square"]},{"text":"impl UnwindSafe for BrdIdx","synthetic":true,"types":["draught::board::BrdIdx"]},{"text":"impl UnwindSafe for Board","synthetic":true,"types":["draught::board::Board"]},{"text":"impl UnwindSafe for Game","synthetic":true,"types":["draught::game::Game"]}]; +implementors["draught"] = [{"text":"impl UnwindSafe for Team","synthetic":true,"types":["draught::board::enums::Team"]},{"text":"impl UnwindSafe for Strength","synthetic":true,"types":["draught::board::enums::Strength"]},{"text":"impl UnwindSafe for SquareState","synthetic":true,"types":["draught::board::enums::SquareState"]},{"text":"impl UnwindSafe for Moveable","synthetic":true,"types":["draught::board::enums::Moveable"]},{"text":"impl<'a> UnwindSafe for RowIndexIterator<'a>","synthetic":true,"types":["draught::board::iter::RowIndexIterator"]},{"text":"impl<'a> UnwindSafe for RowSquareIterator<'a>","synthetic":true,"types":["draught::board::iter::RowSquareIterator"]},{"text":"impl<'a> UnwindSafe for PieceIterator<'a>","synthetic":true,"types":["draught::board::iter::PieceIterator"]},{"text":"impl UnwindSafe for Piece","synthetic":true,"types":["draught::board::Piece"]},{"text":"impl<T> UnwindSafe for Direction<T> where
    T: UnwindSafe
","synthetic":true,"types":["draught::board::Direction"]},{"text":"impl UnwindSafe for Square","synthetic":true,"types":["draught::board::Square"]},{"text":"impl UnwindSafe for BrdIdx","synthetic":true,"types":["draught::board::BrdIdx"]},{"text":"impl UnwindSafe for Board","synthetic":true,"types":["draught::board::Board"]},{"text":"impl UnwindSafe for Game","synthetic":true,"types":["draught::game::Game"]},{"text":"impl UnwindSafe for Player","synthetic":true,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/wasm_bindgen/convert/traits/trait.FromWasmAbi.js b/doc/implementors/wasm_bindgen/convert/traits/trait.FromWasmAbi.js index 4c5a73b..f81d1b0 100644 --- a/doc/implementors/wasm_bindgen/convert/traits/trait.FromWasmAbi.js +++ b/doc/implementors/wasm_bindgen/convert/traits/trait.FromWasmAbi.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl FromWasmAbi for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl FromWasmAbi for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl FromWasmAbi for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl FromWasmAbi for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl FromWasmAbi for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl FromWasmAbi for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl FromWasmAbi for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl FromWasmAbi for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl FromWasmAbi for Game","synthetic":false,"types":["draught::game::Game"]}]; +implementors["draught"] = [{"text":"impl FromWasmAbi for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl FromWasmAbi for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl FromWasmAbi for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl FromWasmAbi for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl FromWasmAbi for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl FromWasmAbi for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl FromWasmAbi for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl FromWasmAbi for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl FromWasmAbi for Game","synthetic":false,"types":["draught::game::Game"]},{"text":"impl FromWasmAbi for Player","synthetic":false,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/wasm_bindgen/convert/traits/trait.IntoWasmAbi.js b/doc/implementors/wasm_bindgen/convert/traits/trait.IntoWasmAbi.js index a7dd55b..c0d51e0 100644 --- a/doc/implementors/wasm_bindgen/convert/traits/trait.IntoWasmAbi.js +++ b/doc/implementors/wasm_bindgen/convert/traits/trait.IntoWasmAbi.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl IntoWasmAbi for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl IntoWasmAbi for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl IntoWasmAbi for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl IntoWasmAbi for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl IntoWasmAbi for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl IntoWasmAbi for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl IntoWasmAbi for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl IntoWasmAbi for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl IntoWasmAbi for Game","synthetic":false,"types":["draught::game::Game"]}]; +implementors["draught"] = [{"text":"impl IntoWasmAbi for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl IntoWasmAbi for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl IntoWasmAbi for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl IntoWasmAbi for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl IntoWasmAbi for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl IntoWasmAbi for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl IntoWasmAbi for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl IntoWasmAbi for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl IntoWasmAbi for Game","synthetic":false,"types":["draught::game::Game"]},{"text":"impl IntoWasmAbi for Player","synthetic":false,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/wasm_bindgen/convert/traits/trait.OptionFromWasmAbi.js b/doc/implementors/wasm_bindgen/convert/traits/trait.OptionFromWasmAbi.js index 3b75e37..0c36a0b 100644 --- a/doc/implementors/wasm_bindgen/convert/traits/trait.OptionFromWasmAbi.js +++ b/doc/implementors/wasm_bindgen/convert/traits/trait.OptionFromWasmAbi.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl OptionFromWasmAbi for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl OptionFromWasmAbi for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl OptionFromWasmAbi for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl OptionFromWasmAbi for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl OptionFromWasmAbi for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl OptionFromWasmAbi for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl OptionFromWasmAbi for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl OptionFromWasmAbi for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl OptionFromWasmAbi for Game","synthetic":false,"types":["draught::game::Game"]}]; +implementors["draught"] = [{"text":"impl OptionFromWasmAbi for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl OptionFromWasmAbi for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl OptionFromWasmAbi for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl OptionFromWasmAbi for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl OptionFromWasmAbi for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl OptionFromWasmAbi for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl OptionFromWasmAbi for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl OptionFromWasmAbi for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl OptionFromWasmAbi for Game","synthetic":false,"types":["draught::game::Game"]},{"text":"impl OptionFromWasmAbi for Player","synthetic":false,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/wasm_bindgen/convert/traits/trait.OptionIntoWasmAbi.js b/doc/implementors/wasm_bindgen/convert/traits/trait.OptionIntoWasmAbi.js index d3a0d97..85ce029 100644 --- a/doc/implementors/wasm_bindgen/convert/traits/trait.OptionIntoWasmAbi.js +++ b/doc/implementors/wasm_bindgen/convert/traits/trait.OptionIntoWasmAbi.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl OptionIntoWasmAbi for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl OptionIntoWasmAbi for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl OptionIntoWasmAbi for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl OptionIntoWasmAbi for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl OptionIntoWasmAbi for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl OptionIntoWasmAbi for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl OptionIntoWasmAbi for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl OptionIntoWasmAbi for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl OptionIntoWasmAbi for Game","synthetic":false,"types":["draught::game::Game"]}]; +implementors["draught"] = [{"text":"impl OptionIntoWasmAbi for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl OptionIntoWasmAbi for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl OptionIntoWasmAbi for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl OptionIntoWasmAbi for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl OptionIntoWasmAbi for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl OptionIntoWasmAbi for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl OptionIntoWasmAbi for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl OptionIntoWasmAbi for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl OptionIntoWasmAbi for Game","synthetic":false,"types":["draught::game::Game"]},{"text":"impl OptionIntoWasmAbi for Player","synthetic":false,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/wasm_bindgen/convert/traits/trait.RefFromWasmAbi.js b/doc/implementors/wasm_bindgen/convert/traits/trait.RefFromWasmAbi.js index ae4c394..481b41a 100644 --- a/doc/implementors/wasm_bindgen/convert/traits/trait.RefFromWasmAbi.js +++ b/doc/implementors/wasm_bindgen/convert/traits/trait.RefFromWasmAbi.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl RefFromWasmAbi for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl RefFromWasmAbi for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl RefFromWasmAbi for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl RefFromWasmAbi for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl RefFromWasmAbi for Game","synthetic":false,"types":["draught::game::Game"]}]; +implementors["draught"] = [{"text":"impl RefFromWasmAbi for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl RefFromWasmAbi for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl RefFromWasmAbi for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl RefFromWasmAbi for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl RefFromWasmAbi for Game","synthetic":false,"types":["draught::game::Game"]},{"text":"impl RefFromWasmAbi for Player","synthetic":false,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/wasm_bindgen/convert/traits/trait.RefMutFromWasmAbi.js b/doc/implementors/wasm_bindgen/convert/traits/trait.RefMutFromWasmAbi.js index f1e47f2..e585919 100644 --- a/doc/implementors/wasm_bindgen/convert/traits/trait.RefMutFromWasmAbi.js +++ b/doc/implementors/wasm_bindgen/convert/traits/trait.RefMutFromWasmAbi.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl RefMutFromWasmAbi for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl RefMutFromWasmAbi for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl RefMutFromWasmAbi for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl RefMutFromWasmAbi for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl RefMutFromWasmAbi for Game","synthetic":false,"types":["draught::game::Game"]}]; +implementors["draught"] = [{"text":"impl RefMutFromWasmAbi for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl RefMutFromWasmAbi for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl RefMutFromWasmAbi for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl RefMutFromWasmAbi for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl RefMutFromWasmAbi for Game","synthetic":false,"types":["draught::game::Game"]},{"text":"impl RefMutFromWasmAbi for Player","synthetic":false,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/wasm_bindgen/describe/trait.WasmDescribe.js b/doc/implementors/wasm_bindgen/describe/trait.WasmDescribe.js index 6b502d7..cfaf90e 100644 --- a/doc/implementors/wasm_bindgen/describe/trait.WasmDescribe.js +++ b/doc/implementors/wasm_bindgen/describe/trait.WasmDescribe.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl WasmDescribe for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl WasmDescribe for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl WasmDescribe for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl WasmDescribe for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl WasmDescribe for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl WasmDescribe for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl WasmDescribe for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl WasmDescribe for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl WasmDescribe for Game","synthetic":false,"types":["draught::game::Game"]}]; +implementors["draught"] = [{"text":"impl WasmDescribe for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl WasmDescribe for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl WasmDescribe for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl WasmDescribe for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl WasmDescribe for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl WasmDescribe for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl WasmDescribe for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl WasmDescribe for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl WasmDescribe for Game","synthetic":false,"types":["draught::game::Game"]},{"text":"impl WasmDescribe for Player","synthetic":false,"types":["draught::player::Player"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/search-index.js b/doc/search-index.js index 86ba293..c41f7fe 100644 --- a/doc/search-index.js +++ b/doc/search-index.js @@ -1,4 +1,4 @@ var searchIndex = JSON.parse('{\ -"draught":{"doc":"Draught","t":[0,0,4,13,13,11,4,13,13,4,13,13,13,4,13,13,13,13,13,13,13,13,13,0,3,12,12,11,3,12,12,11,17,17,3,12,12,11,3,12,12,12,12,11,3,12,12,11,3,12,12,11,3,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,5,0,3,12,12,12,5,5,14,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["board","enums","Team","Black","White","opponent","Strength","Man","King","SquareState","Empty","Occupied","Unplayable","Moveable","Allowed","UnoccupiedSrc","OccupiedDest","OutOfBounds","Unplayable","WrongTeamSrc","IllegalTrajectory","NoJumpablePiece","JumpingSameTeam","iter","RowIndexIterator","board","row_cursor","new","RowSquareIterator","board","index_iter","new","STD_WIDTH","STD_HEIGHT","Piece","team","strength","new","Direction","nw","ne","se","sw","empty","Square","occupant","state","new","BrdIdx","row","col","from","Board","cells","width","height","current_turn","cell_mut","diagonal_indices","adjacent_dir","filter_indices","player_diagonal_indices","jumpable_indices","jumpable_dir","player_jumpable_indices","cell","grid_cell","cell_index","cell_idx","board_index","can_move","validate_man_move","validate_king_move","get_jumpee","validate_jumpee","check_jumpee_team","new","init_game","current_turn","cells","num_cells","cell_state","utils","set_panic_hook","game","Game","current","previous_boards","tree","init_game","__wasm_bindgen_generated_init_game","log","from","into","to_owned","clone_into","to_string","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_owned","clone_into","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_owned","clone_into","to_string","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_owned","clone_into","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","into_iter","borrow","borrow_mut","try_from","try_into","type_id","vzip","from","into","into_iter","borrow","borrow_mut","try_from","try_into","type_id","vzip","from","into","to_owned","clone_into","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_owned","clone_into","borrow","borrow_mut","try_from","try_into","type_id","vzip","from","into","to_owned","clone_into","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_owned","clone_into","to_string","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_owned","clone_into","to_string","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","next","next","clone","clone","clone","clone","clone","clone","clone","clone","clone","eq","eq","eq","eq","eq","ne","eq","ne","eq","ne","eq","ne","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","ref_from_abi","ref_from_abi","ref_from_abi","ref_from_abi","ref_from_abi","from_abi","from_abi","from_abi","from_abi","from_abi","from_abi","from_abi","from_abi","from_abi","into_abi","into_abi","into_abi","into_abi","into_abi","into_abi","into_abi","into_abi","into_abi","describe","describe","describe","describe","describe","describe","describe","describe","describe","is_none","is_none","is_none","is_none","is_none","is_none","is_none","is_none","is_none","none","none","none","none","none","none","none","none","none","ref_mut_from_abi","ref_mut_from_abi","ref_mut_from_abi","ref_mut_from_abi","ref_mut_from_abi"],"q":["draught","draught::board","draught::board::enums","","","","","","","","","","","","","","","","","","","","","draught::board","draught::board::iter","","","","","","","","draught::board","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught","draught::utils","draught","draught::game","","","","draught","","","draught::board::enums","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::board::iter","","","","","","","","","","","","","","","","","","draught::board","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::game","","","","","","","","","draught::board::iter","","draught::board::enums","","","","draught::board","","","","","draught::board::enums","","","","draught::board","","","","","","","","draught::board::enums","","","","draught::board","","","","draught::board::enums","","draught::board","","","","","","draught::game","draught::board::enums","","","","draught::board","","","","draught::game","draught::board::enums","","","","draught::board","","","","draught::game","draught::board::enums","","","","draught::board","","","","draught::game","draught::board::enums","","","","draught::board","","","","draught::game","draught::board::enums","","","","draught::board","","","","draught::game","draught::board","","","","draught::game"],"d":["Board module for components related to the checkers board …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Standard width of a checkers board is 8 squares","Standard height of a checkers board is 8 squares","Model a game piece by its team and strength (normal or …","","","","Model the standard diagonal movements by north west/east …","North West ","North East","South East","South West","Create an empty direction full of [Option::None]","Model board squares by a state and a possible occupying …","Game piece if square is occupied","Description of whether the square is occupied or an …","","Model a rank 2 tensor index to identify a board square by …","","","","Models a single state for a checkers board","1D backing array of board squares for the 2D game board","","","","Get a mutable reference to a board square by 1D array …","Get the 1D array indices for the diagonally adjacent …","Get a [Direction] structure for the diagonally adjacent …","Filter an array of diagonal indices (Like those from […","","Get the 1D array indices for the diagonally jumpable …","Get a [Direction] structure for the diagonally jumpable …","","Get a copy of a board square by 1D array index","Get a copy of a board square by 2D [BrdIdx] index","Transform a 2D row/column board index into a single 1D …","Similar to [Board::cell_index] but with a [BrdIdx] …","Transform a 1D array index (for [Board::cells]) into a 2D …","","","","","","","Iniitalise a game board without game pieces","Reset the given board to a starting layout with 3 rows of …","Get the [Board::current_turn] parameter","Get a pointer to the backing array of board squares, […","Get the number of board squares","Get the state of a board square by 1D array index","","","","Root-level structure for managing the game as a …","","","","","","Wrap the [web_sys] access to the browser console in a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get next item from the iterator","Get next item from the iterator","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,1,1,1,0,2,2,0,3,3,3,0,4,4,4,4,4,4,4,4,4,0,0,5,5,5,0,6,6,6,0,0,0,7,7,7,0,8,8,8,8,8,0,9,9,9,0,10,10,10,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,12,12,12,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,5,6,1,2,3,4,7,8,9,10,11,1,2,3,4,7,7,8,8,9,9,10,10,1,2,3,4,7,8,9,10,1,3,10,11,7,9,10,11,12,1,2,3,4,7,9,10,11,12,1,2,3,4,7,9,10,11,12,1,2,3,4,7,9,10,11,12,1,2,3,4,7,9,10,11,12,1,2,3,4,7,9,10,11,12,7,9,10,11,12],"f":[null,null,null,null,null,[[],["team",4]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["board",3]]],null,null,null,[[["board",3]]],null,null,null,null,null,[[["strength",4],["team",4]],["piece",3]],null,null,null,null,null,[[],["direction",3]],null,null,null,[[["piece",3],["squarestate",4],["option",4]],["square",3]],null,null,null,[[["usize",15]],["brdidx",3]],null,null,null,null,null,[[["usize",15]],["square",3]],[[["brdidx",3]],[["option",4],["vec",3]]],[[["brdidx",3]],[["direction",3],["option",4]]],[[["usize",15],["team",4],["brdidx",3],["vec",3]],[["usize",15],["vec",3]]],[[["brdidx",3],["team",4]],[["option",4],["vec",3]]],[[["brdidx",3]],[["option",4],["vec",3]]],[[["brdidx",3]],[["direction",3],["option",4]]],[[["brdidx",3],["team",4]],[["option",4],["vec",3]]],[[["usize",15]],["square",3]],[[["brdidx",3]],["square",3]],[[["usize",15]],["usize",15]],[[["brdidx",3]],["usize",15]],[[["usize",15]],["brdidx",3]],[[["brdidx",3]],["moveable",4]],[[["brdidx",3],["piece",3],["i32",15]],["moveable",4]],[[["brdidx",3],["piece",3],["i32",15]],["moveable",4]],[[["brdidx",3],["i32",15]],["square",3]],[[["square",3],["brdidx",3],["piece",3]],["moveable",4]],[[["piece",3]],["bool",15]],[[["usize",15]],["board",3]],[[["board",3]],["board",3]],[[],["team",4]],[[]],[[],["usize",15]],[[["usize",15]],["squarestate",4]],null,[[]],null,null,null,null,null,[[]],[[]],null,[[]],[[]],[[]],[[]],[[],["string",3]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[],[["option",4],["vec",3]]],[[],[["option",4],["vec",3]]],[[],["team",4]],[[],["strength",4]],[[],["squarestate",4]],[[],["moveable",4]],[[],["piece",3]],[[],["direction",3]],[[],["square",3]],[[],["brdidx",3]],[[],["board",3]],[[["team",4]],["bool",15]],[[["strength",4]],["bool",15]],[[["squarestate",4]],["bool",15]],[[["moveable",4]],["bool",15]],[[["piece",3]],["bool",15]],[[["piece",3]],["bool",15]],[[["direction",3]],["bool",15]],[[["direction",3]],["bool",15]],[[["square",3]],["bool",15]],[[["square",3]],["bool",15]],[[["brdidx",3]],["bool",15]],[[["brdidx",3]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u32",15]],["bool",15]],[[["u32",15]],["bool",15]],[[["u32",15]],["bool",15]],[[["u32",15]],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]]],"p":[[4,"Team"],[4,"Strength"],[4,"SquareState"],[4,"Moveable"],[3,"RowIndexIterator"],[3,"RowSquareIterator"],[3,"Piece"],[3,"Direction"],[3,"Square"],[3,"BrdIdx"],[3,"Board"],[3,"Game"]]}\ +"draught":{"doc":"Draught","t":[0,0,4,13,13,11,4,13,13,4,13,13,13,4,13,13,13,13,13,13,13,13,13,0,3,12,12,11,3,12,12,11,3,12,12,11,17,17,3,12,12,11,3,12,12,12,12,11,3,12,12,11,11,11,3,12,12,11,3,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,5,0,3,12,12,11,11,11,11,11,11,11,11,0,3,12,5,5,14,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["board","enums","Team","Black","White","opponent","Strength","Man","King","SquareState","Empty","Occupied","Unplayable","Moveable","Allowed","UnoccupiedSrc","OccupiedDest","OutOfBounds","Unplayable","WrongTeamSrc","IllegalTrajectory","NoJumpablePiece","JumpingSameTeam","iter","RowIndexIterator","board","row_cursor","new","RowSquareIterator","board","index_iter","new","PieceIterator","board","index_cursor","new","STD_WIDTH","STD_HEIGHT","Piece","team","strength","new","Direction","nw","ne","se","sw","empty","Square","occupant","state","new","pc","empty","BrdIdx","row","col","from","Board","cells","width","height","current_turn","cell_mut","diagonal_indices","adjacent_dir","filter_indices","player_diagonal_indices","jumpable_indices","jumpable_dir","player_jumpable_indices","idx_diffs","cell","set_cell","grid_cell","cell_index","cell_idx","board_index","can_move","validate_man_move","validate_king_move","jumpee_idx","validate_jumpee","check_jumpee_team","new","init_game","current_turn","set_turn","cells","num_cells","num_pieces","num_player","score","cell_state","utils","set_panic_hook","game","Game","current","previous_boards","previous_board","current_board","make_move","execute_move","execute_jump","push_new_board","set_current","new","player","Player","score","init_game","__wasm_bindgen_generated_init_game","log","from","into","to_owned","clone_into","to_string","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_owned","clone_into","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_owned","clone_into","to_string","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_owned","clone_into","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","into_iter","borrow","borrow_mut","try_from","try_into","type_id","vzip","from","into","into_iter","borrow","borrow_mut","try_from","try_into","type_id","vzip","from","into","into_iter","borrow","borrow_mut","try_from","try_into","type_id","vzip","from","into","to_owned","clone_into","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_owned","clone_into","borrow","borrow_mut","try_from","try_into","type_id","vzip","from","into","to_owned","clone_into","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_owned","clone_into","to_string","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_owned","clone_into","to_string","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_string","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","from","into","to_owned","clone_into","borrow","borrow_mut","try_from","try_into","type_id","return_abi","vzip","next","next","next","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","eq","eq","eq","eq","eq","ne","eq","ne","eq","ne","eq","ne","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","ref_from_abi","ref_from_abi","ref_from_abi","ref_from_abi","ref_from_abi","ref_from_abi","from_abi","from_abi","from_abi","from_abi","from_abi","from_abi","from_abi","from_abi","from_abi","from_abi","into_abi","into_abi","into_abi","into_abi","into_abi","into_abi","into_abi","into_abi","into_abi","into_abi","describe","describe","describe","describe","describe","describe","describe","describe","describe","describe","is_none","is_none","is_none","is_none","is_none","is_none","is_none","is_none","is_none","is_none","none","none","none","none","none","none","none","none","none","none","ref_mut_from_abi","ref_mut_from_abi","ref_mut_from_abi","ref_mut_from_abi","ref_mut_from_abi","ref_mut_from_abi"],"q":["draught","draught::board","draught::board::enums","","","","","","","","","","","","","","","","","","","","","draught::board","draught::board::iter","","","","","","","","","","","","draught::board","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught","draught::utils","draught","draught::game","","","","","","","","","","","draught","draught::player","","draught","","","draught::board::enums","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::board::iter","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::board","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::game","","","","","","","","","","draught::player","","","","","","","","","","","draught::board::iter","","","draught::board::enums","","","","draught::board","","","","","draught::player","draught::board::enums","","","","draught::board","","","","","","","","draught::board::enums","","","","draught::board","","","","","draught::game","draught::board::enums","","draught::board","","draught::game","draught::board","","","","draught::game","draught::player","draught::board::enums","","","","draught::board","","","","draught::game","draught::player","draught::board::enums","","","","draught::board","","","","draught::game","draught::player","draught::board::enums","","","","draught::board","","","","draught::game","draught::player","draught::board::enums","","","","draught::board","","","","draught::game","draught::player","draught::board::enums","","","","draught::board","","","","draught::game","draught::player","draught::board","","","","draught::game","draught::player"],"d":["Board module for components related to the checkers board …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Standard width of a checkers board is 8 squares","Standard height of a checkers board is 8 squares","Game piece given by its team and strength (normal or …","","","","Standard diagonal movements given by north west/east etc","North West ","North East","South East","South West","Create an empty direction full of [Option::None]","Board squares given by a state and a possible occupying …","Game piece if square is occupied","Description of whether the square is occupied or an …","","","","Rank 2 tensor index to identify a board square by row and …","","","","Single state of a checkers board","1D backing array of board squares for the 2D game board","","","","Get a mutable reference to a board square by 1D array …","Get the 1D array indices for the diagonally adjacent …","Get a [Direction] structure for the diagonally adjacent …","Filter an array of diagonal indices (Like those from […","","Get the 1D array indices for the diagonally jumpable …","Get a [Direction] structure for the diagonally jumpable …","","cast the signed","Get a copy of a board square by 1D array index","Get a copy of a board square by 1D array index","Get a copy of a board square by 2D [BrdIdx] index","Transform a 2D row/column board index into a single 1D …","Similar to [Board::cell_index] but with a [BrdIdx] …","Transform a 1D array index (for [Board::cells]) into a 2D …","Check whether a move given by source and destination …","","","","Unwrap the jumpee piece from the square and […","Check that the source piece and the jumpee are of …","Initialise a game board without game pieces","Reset the given board to a starting layout with 3 rows of …","Get the [Board::current_turn] parameter","","Get a pointer to the backing array of board squares, […","Get the number of board squares","Get the number of remaining pieces","Get the number of remaining pieces for a player","Get the score value, Black - White pieces","Get the state of a board square by 1D array index","","","","Root-level structure for managing the game as a …","","","Get a read-only copy of a previous turn’s board","Set current board to given","Attempt to make a move given a source and destination …","Update board state with given move and push new board …","Update board state with given jump move and push new …","Push current board into the previous turns and set given …","Set current board to given","","","","","","","Wrap the [web_sys] access to the browser console in a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get next item from the iterator","Get next item from the iterator","Get next item from the iterator","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,1,1,1,0,2,2,0,3,3,3,0,4,4,4,4,4,4,4,4,4,0,0,5,5,5,0,6,6,6,0,7,7,7,0,0,0,8,8,8,0,9,9,9,9,9,0,10,10,10,10,10,0,11,11,11,0,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,0,0,0,0,13,13,13,13,13,13,13,13,13,13,0,0,14,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,5,6,7,1,2,3,4,8,9,10,11,12,14,1,2,3,4,8,8,9,9,10,10,11,11,1,2,3,4,8,9,10,11,12,13,1,3,11,12,13,8,10,11,12,13,14,1,2,3,4,8,10,11,12,13,14,1,2,3,4,8,10,11,12,13,14,1,2,3,4,8,10,11,12,13,14,1,2,3,4,8,10,11,12,13,14,1,2,3,4,8,10,11,12,13,14,8,10,11,12,13,14],"f":[null,null,null,null,null,[[],["team",4]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["board",3]]],null,null,null,[[["board",3]]],null,null,null,[[["board",3]]],null,null,null,null,null,[[["team",4],["strength",4]],["piece",3]],null,null,null,null,null,[[],["direction",3]],null,null,null,[[["squarestate",4],["piece",3],["option",4]],["square",3]],[[["team",4],["strength",4]],["square",3]],[[],["square",3]],null,null,null,[[["usize",15]],["brdidx",3]],null,null,null,null,null,[[["usize",15]],["square",3]],[[["brdidx",3]],[["option",4],["vec",3]]],[[["brdidx",3]],[["option",4],["direction",3]]],[[["usize",15],["brdidx",3],["team",4],["vec",3]],[["usize",15],["vec",3]]],[[["team",4],["brdidx",3]],[["option",4],["vec",3]]],[[["brdidx",3]],[["option",4],["vec",3]]],[[["brdidx",3]],[["option",4],["direction",3]]],[[["team",4],["brdidx",3]],[["option",4],["vec",3]]],[[["brdidx",3]]],[[["usize",15]],["square",3]],[[["usize",15],["square",3]]],[[["brdidx",3]],["square",3]],[[["usize",15]],["usize",15]],[[["brdidx",3]],["usize",15]],[[["usize",15]],["brdidx",3]],[[["brdidx",3]],["moveable",4]],[[["piece",3],["brdidx",3]],["moveable",4]],[[["piece",3],["brdidx",3]],["moveable",4]],[[["brdidx",3]],["usize",15]],[[["piece",3],["square",3]],["moveable",4]],[[["piece",3]],["bool",15]],[[["usize",15],["team",4]],["board",3]],[[["usize",15],["board",3]],["board",3]],[[],["team",4]],[[["team",4]]],[[]],[[],["usize",15]],[[],["usize",15]],[[["team",4]],["usize",15]],[[],["isize",15]],[[["usize",15]],["squarestate",4]],null,[[]],null,null,null,null,[[["usize",15]],["board",3]],[[],["board",3]],[[["brdidx",3]]],[[["brdidx",3]]],[[["brdidx",3]]],[[["board",3]]],[[["board",3]]],[[["usize",15],["team",4]],["game",3]],null,null,null,[[]],[[]],null,[[]],[[]],[[]],[[]],[[],["string",3]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[],["string",3]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[]],[[],[["option",4],["vec",3]]],[[],[["option",4],["vec",3]]],[[],["option",4]],[[],["team",4]],[[],["strength",4]],[[],["squarestate",4]],[[],["moveable",4]],[[],["piece",3]],[[],["direction",3]],[[],["square",3]],[[],["brdidx",3]],[[],["board",3]],[[],["player",3]],[[["team",4]],["bool",15]],[[["strength",4]],["bool",15]],[[["squarestate",4]],["bool",15]],[[["moveable",4]],["bool",15]],[[["piece",3]],["bool",15]],[[["piece",3]],["bool",15]],[[["direction",3]],["bool",15]],[[["direction",3]],["bool",15]],[[["square",3]],["bool",15]],[[["square",3]],["bool",15]],[[["brdidx",3]],["bool",15]],[[["brdidx",3]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u32",15]],["bool",15]],[[["u32",15]],["bool",15]],[[["u32",15]],["bool",15]],[[["u32",15]],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]]],"p":[[4,"Team"],[4,"Strength"],[4,"SquareState"],[4,"Moveable"],[3,"RowIndexIterator"],[3,"RowSquareIterator"],[3,"PieceIterator"],[3,"Piece"],[3,"Direction"],[3,"Square"],[3,"BrdIdx"],[3,"Board"],[3,"Game"],[3,"Player"]]}\ }'); initSearch(searchIndex); \ No newline at end of file diff --git a/doc/source-files.js b/doc/source-files.js index f5fdb31..33e55ab 100644 --- a/doc/source-files.js +++ b/doc/source-files.js @@ -1,3 +1,3 @@ var N = null;var sourcesIndex = {}; -sourcesIndex["draught"] = {"name":"","dirs":[{"name":"board","files":["enums.rs","iter.rs","mod.rs"]}],"files":["game.rs","lib.rs","utils.rs"]}; +sourcesIndex["draught"] = {"name":"","dirs":[{"name":"board","files":["enums.rs","iter.rs","mod.rs"]},{"name":"game","files":["mod.rs"]}],"files":["lib.rs","player.rs","utils.rs"]}; createSourceSidebar(); diff --git a/doc/src/draught/board/iter.rs.html b/doc/src/draught/board/iter.rs.html index 99149e1..409336d 100644 --- a/doc/src/draught/board/iter.rs.html +++ b/doc/src/draught/board/iter.rs.html @@ -107,8 +107,97 @@ 104 105 106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194
-use crate::board::{Board, Square};
+use crate::board::{Board, Piece, Square};
+use crate::board::enums::*;
 
 pub struct RowIndexIterator<'a> {
     board: &'a Board,
@@ -177,17 +266,51 @@
     }
 }
 
+pub struct PieceIterator<'a> {
+    board: &'a Board,
+    index_cursor: usize,
+}
+
+impl<'a> PieceIterator<'a> {
+    pub fn new(board: &'a Board) -> Self {
+        Self { 
+            board, 
+            index_cursor: 0
+        }
+    }
+}
+
+impl<'a> Iterator for PieceIterator<'a> {
+    type Item = (usize, Square);
+    
+    /// Get next item from the iterator
+    fn next(&mut self) -> Option<(usize, Square)> {
+
+        while self.index_cursor < self.board.num_cells() - 1 {
+            self.index_cursor += 1;
+            match self.board.cell(self.index_cursor).state {
+                SquareState::Empty | SquareState::Unplayable => continue,
+                SquareState::Occupied => return Some((self.index_cursor, self.board.cell(self.index_cursor))),
+            }
+        }
+
+        None
+    }
+}
+
 #[cfg(test)]
-mod tests {
+pub mod tests {
     use super::*;
     use crate::board::enums::SquareState;
     use wasm_bindgen_test::*;
 
+    use crate::log;
+
     wasm_bindgen_test_configure!(run_in_browser);
 
     #[wasm_bindgen_test]
     fn index_iterator() {
-        let board = Board::new(2, 2);
+        let board = Board::new(2, 2, Team::Black);
         let iter = RowIndexIterator::new(&board);
         let collected: Vec<Vec<usize>> = iter.collect();
         assert_eq!(vec![
@@ -198,7 +321,7 @@
 
     #[wasm_bindgen_test]
     fn square_iterator() {
-        let board = Board::new(2, 2);
+        let board = Board::new(2, 2, Team::Black);
         let iter = RowSquareIterator::new(&board);
         let collected: Vec<Vec<Square>> = iter.collect();
         assert_eq!(vec![
@@ -213,6 +336,59 @@
         ], collected);
     }
 
+    #[wasm_bindgen_test]
+    fn piece_iterator_one_piece() {
+        let idx = 2;
+
+        let mut board = Board::new(4, 4, Team::Black);
+        board.set_cell(idx, Square::new(
+            SquareState::Occupied, 
+            Some(
+                Piece::new(Team::White, Strength::Man)
+            )
+        ));
+
+        let iter = PieceIterator::new(&board);
+        let collected: Vec<(usize, Square)> = iter.collect();
+
+        assert_eq!(collected.len(), 1);
+        assert_eq!(collected[0], (idx, board.cell(idx)));
+    }
+
+    #[wasm_bindgen_test]
+    fn piece_iterator_multiple_pieces() {
+
+        let mut board = Board::new(4, 4, Team::Black);
+        board.set_cell(2, Square::new(
+            SquareState::Occupied, 
+            Some(
+                Piece::new(Team::White, Strength::Man)
+            )
+        ));
+
+        board.set_cell(4, Square::new(
+            SquareState::Occupied, 
+            Some(
+                Piece::new(Team::Black, Strength::Man)
+            )
+        ));
+
+        board.set_cell(5, Square::new(
+            SquareState::Occupied, 
+            Some(
+                Piece::new(Team::White, Strength::King)
+            )
+        ));
+
+        let iter = PieceIterator::new(&board);
+        let collected: Vec<(usize, Square)> = iter.collect();
+
+        assert_eq!(collected.len(), 3);
+        assert_eq!(collected[0], (2, board.cell(2)));
+        assert_eq!(collected[1], (4, board.cell(4)));
+        assert_eq!(collected[2], (5, board.cell(5)));
+    }
+
 }
\ No newline at end of file diff --git a/doc/src/draught/board/mod.rs.html b/doc/src/draught/board/mod.rs.html index d8e9c65..3273feb 100644 --- a/doc/src/draught/board/mod.rs.html +++ b/doc/src/draught/board/mod.rs.html @@ -631,6 +631,116 @@ 628 629 630 +631 +632 +633 +634 +635 +636 +637 +638 +639 +640 +641 +642 +643 +644 +645 +646 +647 +648 +649 +650 +651 +652 +653 +654 +655 +656 +657 +658 +659 +660 +661 +662 +663 +664 +665 +666 +667 +668 +669 +670 +671 +672 +673 +674 +675 +676 +677 +678 +679 +680 +681 +682 +683 +684 +685 +686 +687 +688 +689 +690 +691 +692 +693 +694 +695 +696 +697 +698 +699 +700 +701 +702 +703 +704 +705 +706 +707 +708 +709 +710 +711 +712 +713 +714 +715 +716 +717 +718 +719 +720 +721 +722 +723 +724 +725 +726 +727 +728 +729 +730 +731 +732 +733 +734 +735 +736 +737 +738 +739 +740
 //! Board module for components related to the checkers board and game structure
 
@@ -638,6 +748,9 @@
 
 pub mod enums;
 use enums::*;
+use enums::Team::*;
+use enums::Strength::*;
+use enums::SquareState::*;
 
 pub mod iter;
 use iter::*;
@@ -653,7 +766,7 @@
 /// Standard height of a checkers board is 8 squares
 pub const STD_HEIGHT: usize = 8;
 
-/// Model a game piece by its team and strength (normal or kinged)
+/// Game piece given by its team and strength (normal or kinged)
 #[wasm_bindgen]
 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
 pub struct Piece {
@@ -661,7 +774,9 @@
     strength: Strength
 }
 
+#[wasm_bindgen]
 impl Piece {
+    #[wasm_bindgen(constructor)]
     pub fn new(team: Team, strength: Strength) -> Piece {
         Piece {
             team, strength
@@ -669,7 +784,7 @@
     }
 }
 
-/// Model the standard diagonal movements by north west/east etc
+/// Standard diagonal movements given by north west/east etc
 /// 
 /// Used as an absolute measure, i.e. not relative to the team making a move
 /// 
@@ -698,7 +813,7 @@
     }
 }
 
-/// Model board squares by a state and a possible occupying game piece
+/// Board squares given by a state and a possible occupying game piece
 #[wasm_bindgen]
 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
 pub struct Square {
@@ -708,16 +823,32 @@
     state: SquareState
 }
 
+#[wasm_bindgen]
 impl Square {
+    #[wasm_bindgen(constructor)]
     pub fn new(state: SquareState, occupant: Option<Piece>) -> Square{
         Square {
             occupant,
             state
         }
     }
+
+    pub fn pc(team: Team, strength: Strength) -> Square {
+        Square {
+            occupant: Some(Piece::new(team, strength)),
+            state: Occupied,
+        }
+    }
+
+    pub fn empty() -> Square {
+        Square {
+            occupant: None,
+            state: Empty,
+        }
+    }
 }
 
-/// Model a rank 2 tensor index to identify a board square by row and column
+/// Rank 2 tensor index to identify a board square by row and column
 #[wasm_bindgen]
 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
 pub struct BrdIdx {
@@ -744,9 +875,9 @@
 //   BOARD
 ///////////////
 
-/// Models a single state for a checkers board
+/// Single state of a checkers board
 #[wasm_bindgen]
-#[derive(Clone)]
+#[derive(Clone, Debug)]
 pub struct Board {
     /// 1D backing array of board squares for the 2D game board
     cells: Vec<Square>,
@@ -756,6 +887,10 @@
     current_turn: Team
 }
 
+///////////////////
+//  PRIV FUNCS
+///////////////////
+
 impl Board {
     /// Get a mutable reference to a board square by 1D array index
     pub fn cell_mut(&mut self, idx: usize) -> &mut Square {
@@ -770,7 +905,7 @@
     /// Some(Vec<usize>): A variable length vector of 1D indices for diagonally adjacent squares. 
     /// Vector may be between 1 and 4 items long depending on the location of the given square
     pub fn diagonal_indices(&self, idx: BrdIdx) -> Option<Vec<usize>> {
-        if self.cell_state(self.cell_idx(idx)) == SquareState::Unplayable {
+        if self.cell_state(self.cell_idx(idx)) == Unplayable {
             return None;
         }
 
@@ -820,7 +955,7 @@
     /// 
     /// Some(Direction<Square>): A [`Direction`] structure for the diagonally adjacent squares.
     pub fn adjacent_dir(&self, idx: BrdIdx) -> Option<Direction<Square>> {
-        if self.cell_state(self.cell_idx(idx)) == SquareState::Unplayable {
+        if self.cell_state(self.cell_idx(idx)) == Unplayable {
             return None;
         }
 
@@ -856,8 +991,8 @@
     pub fn filter_indices(&self, idx: BrdIdx, player: Team, indices: Vec<usize>) -> Vec<usize> {
         indices.into_iter().filter(|i| {
             match player {
-                Team::Black => self.board_index(*i).row < idx.row,
-                Team::White => self.board_index(*i).row > idx.row,
+                Black => self.board_index(*i).row < idx.row,
+                White => self.board_index(*i).row > idx.row,
             }
         }).collect()
     }
@@ -877,7 +1012,7 @@
     /// Some(Vec<usize>): A variable length vector of 1D indices for diagonally jumpable squares. 
     /// Vector may be between 1 and 4 items long depending on the location of the given square
     pub fn jumpable_indices(&self, idx: BrdIdx) -> Option<Vec<usize>> {
-        if self.cell_state(self.cell_idx(idx)) == SquareState::Unplayable {
+        if self.cell_state(self.cell_idx(idx)) == Unplayable {
             return None;
         }
 
@@ -927,7 +1062,7 @@
     /// 
     /// Some(Direction<Square>): A [`Direction`] structure for the diagonally jumpable squares.
     pub fn jumpable_dir(&self, idx: BrdIdx) -> Option<Direction<Square>> {
-        if self.cell_state(self.cell_idx(idx)) == SquareState::Unplayable {
+        if self.cell_state(self.cell_idx(idx)) == Unplayable {
             return None;
         }
 
@@ -965,8 +1100,18 @@
             None => None
         }
     }
+
+    /// cast the signed
+    pub fn idx_diffs(from: BrdIdx, to: BrdIdx) -> (isize, isize) {
+        // cast to signed ints so that -1 will work for black moves
+        (to.row as isize - from.row as isize, to.col as isize - from.col as isize)
+    }
 }
 
+///////////////////
+//  BOUND FUNCS
+///////////////////
+
 #[wasm_bindgen]
 impl Board {
     /// Get a copy of a board square by 1D array index
@@ -974,6 +1119,15 @@
         self.cells[idx]
     }
 
+    /// Get a copy of a board square by 1D array index
+    pub fn set_cell(&mut self, idx: usize, square: Square) {
+        // TODO: handle this error better?
+        if idx >= self.num_cells() {
+            panic!("Given index is too large, idx: {}, square: {:?}", idx, square);
+        }
+        self.cells[idx] = square;
+    }
+
     /// Get a copy of a board square by 2D [`BrdIdx`] index
     pub fn grid_cell(&self, idx: BrdIdx) -> Square {
         self.cell(self.cell_idx(idx))
@@ -996,6 +1150,7 @@
         BrdIdx::from(row, col)
     }
 
+    /// Check whether a move given by source and destination indices is legal 
     pub fn can_move(&self, from: BrdIdx, to: BrdIdx) -> Moveable {
 
         if from.row > self.height - 1 || from.col > self.width - 1 {
@@ -1010,9 +1165,9 @@
 
         // check source square is occupied
         match from_square.state {
-            SquareState::Empty => return Moveable::UnoccupiedSrc,
-            SquareState::Unplayable => return Moveable::Unplayable,
-            SquareState::Occupied => {
+            Empty => return Moveable::UnoccupiedSrc,
+            Unplayable => return Moveable::Unplayable,
+            Occupied => {
 
                 // if its not the current teams piece then error
                 match from_square.occupant {
@@ -1025,29 +1180,50 @@
                             return Moveable::WrongTeamSrc;
                         }
 
-                        // cast to signed ints so that -1 will work for black moves
-                        let row_diff: i32 = to.row as i32 - from.row as i32;
-                        let col_diff: i32 = to.col as i32 - from.col as i32;
-
                         // depending on whether the piece is a king or not, the piece can make different moves
+                        // below validate_*_move() functions just check whether the trajectory is valid i.e a single ajacacent diagonal move for moves and 2 squares for a jump
+                        // this includes validating the jumpee when jumping
+                        // 
+                        // we use the Allowed type to indicate that the trajectory check passed
+                        // but we catch it instead of returning to allow further checks on 
+                        // the destination square
                         // TODO: refactor to a IsMove()/IsJump() to check whether the move has a legal trajectory
                         match from_square_occupant.strength {
-                            Strength::Man => self.validate_man_move(from, to, row_diff, col_diff, from_square_occupant),
-                            Strength::King => self.validate_king_move(from, to, row_diff, col_diff, from_square_occupant),
+                            Man => {
+                                let strength_check = self.validate_man_move(from, to, from_square_occupant);
+                                if strength_check != Moveable::Allowed {
+                                    return strength_check;
+                                }
+                            },
+                            King => {
+                                let strength_check = self.validate_king_move(from, to, from_square_occupant);
+                                if strength_check != Moveable::Allowed {
+                                    return strength_check;
+                                }
+                            },
                         };
+
+                        let to_square = self.cell(self.cell_idx(to));
+                        match to_square.state {
+                            Empty => {
+                                return Moveable::Allowed;
+                            },
+                            Unplayable => return Moveable::Unplayable,
+                            Occupied => return Moveable::OccupiedDest,
+                        }
                     }
                 }
             },
         }
-
-        Moveable::Allowed
     }
 
-    pub fn validate_man_move(&self, from: BrdIdx, to: BrdIdx, row_diff: i32, col_diff: i32, from_square_occupant: Piece) -> Moveable {
+    pub fn validate_man_move(&self, from: BrdIdx, to: BrdIdx, from_square_occupant: Piece) -> Moveable {
+        let (row_diff, col_diff) = Board::idx_diffs(from, to);
+
         // men can only move forwards, below is row difference for each team
-        let idx_scale: i32 = match self.current_turn {
-            Team::Black => -1,
-            Team::White => 1,
+        let idx_scale: isize = match self.current_turn {
+            Black => -1,
+            White => 1,
         };
 
         // legal standard move 
@@ -1067,14 +1243,14 @@
             if col_diff.abs() == 2 {
 
                 // piece to be jumped over
-                let jumpee = self.get_jumpee(from, row_diff, col_diff);
+                let jumpee = self.cell(self.jumpee_idx(from, to));
                 match jumpee.state {
-                    SquareState::Empty => Moveable::NoJumpablePiece,
-                    SquareState::Unplayable => panic!("Found an unplayable piece to try to jump over, from: {}, to: {}, jumpee: {:?}", from, to, jumpee),
-                    SquareState::Occupied => {
+                    Empty => Moveable::NoJumpablePiece,
+                    Unplayable => panic!("Found an unplayable piece to try to jump over, from: {}, to: {}, jumpee: {:?}", from, to, jumpee),
+                    Occupied => {
 
                         // check whether jumpee is an opponent's piece
-                        return Board::validate_jumpee(jumpee, from, to, from_square_occupant);
+                        return Board::validate_jumpee(jumpee, from_square_occupant);
                     },
                 }
             } 
@@ -1089,7 +1265,9 @@
         }
     }
 
-    pub fn validate_king_move(&self, from: BrdIdx, to: BrdIdx, row_diff: i32, col_diff: i32, from_square_occupant: Piece) -> Moveable {
+    pub fn validate_king_move(&self, from: BrdIdx, to: BrdIdx, from_square_occupant: Piece) -> Moveable {
+        let (row_diff, col_diff) = Board::idx_diffs(from, to);
+
         // legal standard move 
         if row_diff.abs() == 1 {
             // destination is directly to the left or right
@@ -1107,14 +1285,14 @@
             if col_diff.abs() == 2 {
 
                 // piece to be jumped over
-                let jumpee = self.get_jumpee(from, row_diff, col_diff);
+                let jumpee = self.cell(self.jumpee_idx(from, to));
                 match jumpee.state {
-                    SquareState::Empty => Moveable::NoJumpablePiece,
-                    SquareState::Unplayable => panic!("Found an unplayable piece to try to jump over, from: {}, to: {}, jumpee: {:?}", from, to, jumpee),
-                    SquareState::Occupied => {
+                    Empty => Moveable::NoJumpablePiece,
+                    Unplayable => panic!("Found an unplayable piece to try to jump over, from: {}, to: {}, jumpee: {:?}", from, to, jumpee),
+                    Occupied => {
 
                         // check whether jumpee is an opponent's piece
-                        return Board::validate_jumpee(jumpee, from, to, from_square_occupant);
+                        return Board::validate_jumpee(jumpee, from_square_occupant);
                     },
                 }
             } 
@@ -1129,20 +1307,20 @@
         }
     }
 
-    pub fn get_jumpee(&self, from: BrdIdx, row_diff: i32, col_diff: i32) -> Square {
-        self.cell(
-            self.cell_idx(
-                BrdIdx::from(
-                    ((from.row as i32) + row_diff / 2) as usize, 
-                    ((from.col as i32) + col_diff / 2) as usize)
-                )
+    pub fn jumpee_idx(&self, from: BrdIdx, to: BrdIdx) -> usize {
+        let (row_diff, col_diff) = Board::idx_diffs(from, to);
+        self.cell_idx(
+            BrdIdx::from(
+                ((from.row as isize) + row_diff / 2) as usize, 
+                ((from.col as isize) + col_diff / 2) as usize)
             )
     }
 
-    pub fn validate_jumpee(jumpee: Square, from: BrdIdx, to: BrdIdx, from_occ: Piece) -> Moveable {
+    /// Unwrap the jumpee piece from the square and [`Board::check_jumpee_team`] with [`Moveable`] response
+    pub fn validate_jumpee(jumpee: Square, from_occ: Piece) -> Moveable {
         // check whether jumpee is an opponent's piece
         match jumpee.occupant {
-            None => panic!("No occupant found when checking the jumpee, from: {}, to: {}, jumpee: {:?}", from, to, jumpee),
+            None => panic!("No occupant found when checking the from: {:?} , jumpee: {:?}", from_occ, jumpee),
             Some(jumpee_occupant_uw) => {
                 if Board::check_jumpee_team(from_occ, jumpee_occupant_uw) {
                     return Moveable::Allowed;
@@ -1154,13 +1332,14 @@
         }
     }
 
-
+    /// Check that the source piece and the jumpee are of opposing teams
     pub fn check_jumpee_team(from: Piece, jumpee: Piece) -> bool {
         return from.team.opponent() == jumpee.team
     }
 
-    /// Iniitalise a game board without game pieces
-    pub fn new(width: usize, height: usize) -> Board {
+    /// Initialise a game board without game pieces
+    #[wasm_bindgen(constructor)]
+    pub fn new(width: usize, height: usize, current_turn: Team) -> Board {
         let total_cells = width * height;
 
         let mut cells: Vec<Square>  = Vec::with_capacity(total_cells);
@@ -1169,10 +1348,10 @@
         for i in 0..height {
             for _ in 0..width {
                 if playable {
-                    cells.push(Square::new(SquareState::Empty, None));
+                    cells.push(Square::new(Empty, None));
                 }
                 else {
-                    cells.push(Square::new(SquareState::Unplayable, None));
+                    cells.push(Square::new(Unplayable, None));
                 }
                 playable = !playable;
             }
@@ -1184,33 +1363,27 @@
             width,
             height,
 
-            current_turn: Team::Black
+            current_turn
         }
     }
 
     /// Reset the given board to a starting layout with 3 rows of opposing pieces
-    pub fn init_game(board: Board) -> Board {
+    pub fn init_game(board: Board, piece_rows: usize) -> Board {
         let mut new_board = board.clone();
         for (idx, row) in RowSquareIterator::new(&board).enumerate() {
             for (jdx, square) in row.iter().enumerate() {
 
-                if square.state == SquareState::Empty || square.state == SquareState::Occupied {
-                    if idx < 3 {
+                if square.state == Empty || square.state == Occupied {
+                    if idx < piece_rows {
                         let cell_idx = new_board.cell_index(idx, jdx);
-                        new_board.cells[cell_idx] = Square::new(
-                            SquareState::Occupied, 
-                            Some(Piece::new(Team::White, Strength::Man))
-                        );
-                    } else if idx >= board.height - 3 {
+                        new_board.cells[cell_idx] = Square::pc(White, Man);
+                    } else if idx >= board.height - piece_rows {
                         let cell_idx = new_board.cell_index(idx, jdx);
-                        new_board.cells[cell_idx] = Square::new(
-                            SquareState::Occupied, 
-                            Some(Piece::new(Team::Black, Strength::Man))
-                        );
+                        new_board.cells[cell_idx] = Square::pc(Black, Man);
                     } else {
                         let cell_idx = new_board.cell_index(idx, jdx);
                         new_board.cells[cell_idx] = Square::new(
-                            SquareState::Empty, 
+                            Empty, 
                             None
                         );
                     }
@@ -1226,6 +1399,10 @@
         self.current_turn
     }
 
+    pub fn set_turn(&mut self, new_team: Team) {
+        self.current_turn = new_team;
+    }
+
     /// Get a pointer to the backing array of board squares, [`Board::cells`]
     pub fn cells(&self) -> *const Square {
         self.cells.as_ptr()
@@ -1236,6 +1413,49 @@
         self.cells.len()
     }
 
+    /// Get the number of remaining pieces
+    pub fn num_pieces(&self) -> usize {
+        let pieces: Vec<_> = PieceIterator::new(self).collect();
+        pieces.len()
+    }
+
+    /// Get the number of remaining pieces for a player
+    pub fn num_player(&self, team: Team) -> usize {
+        let mut total = 0;
+        for (_, square) in PieceIterator::new(self) {
+            match square.occupant {
+                None => {},
+                Some(x) => {
+                    if x.team == team {
+                        total += 1;
+                    }
+                },
+            }
+        }
+        total
+    }
+
+    /// Get the score value, Black - White pieces
+    pub fn score(&self) -> isize {
+        let mut black: isize = 0;
+        let mut white: isize = 0;
+
+        for (_, square) in PieceIterator::new(self) {
+            if let Some(x) = square.occupant {
+                match x.team {
+                    Black => {
+                        black += 1;
+                    },
+                    White => {
+                        white += 1;
+                    },
+                }
+            }
+        }
+
+        black - white
+    }
+
     /// Get the state of a board square by 1D array index
     pub fn cell_state(&self, idx: usize) -> SquareState {
         self.cell(idx).state
@@ -1251,9 +1471,9 @@
                 let idx = self.cell_index(i, j);
 
                 match self.cell_state(idx) {
-                    SquareState::Empty => { write!(string, "{}", SquareState::Empty); },
-                    SquareState::Occupied => { write!(string, "{}", self.cell(idx).occupant.unwrap().team); },
-                    SquareState::Unplayable => { write!(string, "{}", SquareState::Unplayable); },
+                    Empty => { write!(string, "_ "); },
+                    Occupied => { write!(string, "{} ", self.cell(idx).occupant.unwrap().team); },
+                    Unplayable => { write!(string, ". "); },
                 }
             }
             string.push('\n');
diff --git a/doc/src/draught/game/mod.rs.html b/doc/src/draught/game/mod.rs.html
new file mode 100644
index 0000000..2b5b2f2
--- /dev/null
+++ b/doc/src/draught/game/mod.rs.html
@@ -0,0 +1,290 @@
+mod.rs - source
+
+
  1
+  2
+  3
+  4
+  5
+  6
+  7
+  8
+  9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ 26
+ 27
+ 28
+ 29
+ 30
+ 31
+ 32
+ 33
+ 34
+ 35
+ 36
+ 37
+ 38
+ 39
+ 40
+ 41
+ 42
+ 43
+ 44
+ 45
+ 46
+ 47
+ 48
+ 49
+ 50
+ 51
+ 52
+ 53
+ 54
+ 55
+ 56
+ 57
+ 58
+ 59
+ 60
+ 61
+ 62
+ 63
+ 64
+ 65
+ 66
+ 67
+ 68
+ 69
+ 70
+ 71
+ 72
+ 73
+ 74
+ 75
+ 76
+ 77
+ 78
+ 79
+ 80
+ 81
+ 82
+ 83
+ 84
+ 85
+ 86
+ 87
+ 88
+ 89
+ 90
+ 91
+ 92
+ 93
+ 94
+ 95
+ 96
+ 97
+ 98
+ 99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+
+use crate::board::Board;
+use indextree::Arena;
+
+extern crate wasm_bindgen;
+use wasm_bindgen::prelude::*;
+
+use crate::log;
+
+use crate::board::{Square, BrdIdx};
+use crate::board::enums::{SquareState, Moveable, Team};
+
+use Team::*;
+use SquareState::*;
+
+use std::fmt::{Display, Write};
+
+#[cfg(test)] pub mod tests;
+
+/// Root-level structure for managing the game as a collection of board states
+#[wasm_bindgen]
+#[derive(Debug)]
+pub struct Game {
+    current: Board,
+    previous_boards: Vec<Board>,
+    // tree: Arena<Board>
+}
+
+impl Game {
+    /// Get a read-only copy of a previous turn's board
+    pub fn previous_board(&self, turn: usize) -> &Board {
+        &self.previous_boards[turn]
+    }
+
+    /// Set current board to given
+    pub fn current_board(&self) -> &Board {
+        &self.current
+    }
+}
+
+#[wasm_bindgen]
+impl Game {
+    /// Attempt to make a move given a source and destination index
+    pub fn make_move(&mut self, from: BrdIdx, to: BrdIdx) {
+        let able = self.current.can_move(from, to);
+
+        if let Moveable::Allowed = able {
+            let (_, col_diff) = Board::idx_diffs(from, to);
+            // MOVE
+            if col_diff.abs() == 1 {
+                self.execute_move(from, to);
+            } 
+            // JUMP
+            else {
+                self.execute_jump(from, to);
+            }
+        } else {
+            log!("Unable to make move, {:?}", able);
+        }
+
+        // board has been changed, update player turn
+        self.current.set_turn(self.current.current_turn().opponent());
+    }
+
+    /// Update board state with given move and push new board into current state
+    pub fn execute_move(&mut self, from: BrdIdx, to: BrdIdx) {
+        let mut new_board = self.current.clone();
+
+        let from_idx = self.current.cell_idx(from);
+        let to_idx = self.current.cell_idx(to);
+
+        // make move update
+        new_board.set_cell(
+            to_idx, // destination square
+            self.current.cell(from_idx) // source piece
+        );
+
+        // remove old piece
+        new_board.set_cell(
+            from_idx, // destination square
+            Square::empty() // empty piece
+        );
+
+        // set new board to current and push current to stack
+        self.push_new_board(new_board);
+    }
+
+    /// Update board state with given jump move and push new board into current state
+    pub fn execute_jump(&mut self, from: BrdIdx, to: BrdIdx) {
+        let mut new_board = self.current.clone();
+
+        let from_idx = self.current.cell_idx(from);
+        let to_idx = self.current.cell_idx(from);
+
+        // make move update
+        new_board.set_cell(
+            to_idx, // destination square
+            self.current.cell(from_idx) // source piece
+        );
+
+        // remove old piece
+        new_board.set_cell(
+            from_idx, // destination square
+            Square::empty() // empty piece
+        );
+
+        // remove jumpee
+        new_board.set_cell(
+            self.current.jumpee_idx(from, to), // destination square
+            Square::empty() // empty piece
+        );
+
+        // set new board to current and push current to stack
+        self.push_new_board(new_board);
+    }
+
+    /// Push current board into the previous turns and set given board to current
+    pub fn push_new_board(&mut self, board: Board) {
+        self.previous_boards.push(self.current.clone());
+        self.set_current(board);
+    }
+
+    /// Set current board to given
+    pub fn set_current(&mut self, board: Board) {
+        self.current = board;
+    }
+
+    #[wasm_bindgen(constructor)]
+    pub fn new(width: usize, height: usize, piece_rows: usize, first_turn: Team) -> Game {
+        Game {
+            current: Board::init_game(
+                Board::new(width, height, first_turn), piece_rows,
+            ),
+            previous_boards: Vec::with_capacity(10),
+        }
+    }
+}
+
+impl Display for Game {
+    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result{
+        write!(f, "{}", self.current)
+    }
+}
+
+ \ No newline at end of file diff --git a/doc/src/draught/lib.rs.html b/doc/src/draught/lib.rs.html index 11823f5..f617fff 100644 --- a/doc/src/draught/lib.rs.html +++ b/doc/src/draught/lib.rs.html @@ -37,6 +37,7 @@ 34 35 36 +37
 //! Draught
 //! 
@@ -45,6 +46,7 @@
 pub mod board;
 pub mod utils;
 pub mod game;
+pub mod player;
 
 extern crate wasm_bindgen;
 use wasm_bindgen::prelude::*;
diff --git a/doc/src/draught/game.rs.html b/doc/src/draught/player.rs.html
similarity index 57%
rename from doc/src/draught/game.rs.html
rename to doc/src/draught/player.rs.html
index d271142..e59f908 100644
--- a/doc/src/draught/game.rs.html
+++ b/doc/src/draught/player.rs.html
@@ -1,32 +1,22 @@
-game.rs - source
+player.rs - source
 
 
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
+                Change settings
1
+2
+3
+4
+5
+6
+7
+8
 
-use crate::board::Board;
-use indextree::Arena;
-
 extern crate wasm_bindgen;
 use wasm_bindgen::prelude::*;
 
-/// Root-level structure for managing the game as a collection of board states
 #[wasm_bindgen]
-pub struct Game {
-    current: Board,
-    previous_boards: Vec<Board>,
-    tree: Arena<Board>
+#[derive(Clone)]
+pub struct Player {
+    score: usize,
 }
\ No newline at end of file diff --git a/ec83f0cc0b0f5722fdc1.module.wasm b/ec83f0cc0b0f5722fdc1.module.wasm new file mode 100644 index 0000000000000000000000000000000000000000..5c841d9e0d8c3dd9d33364c9b31f49609af4e8c5 GIT binary patch literal 78475 zcmeFa3xFL}mG51T^XhZDlL`a~Nq{=XC=Dc}^Xg85k5onik*DGVpGl{4lJq0pNk0M^ zg>)b)3J5AHDk>lfA}Bhjpr~;M6&*wzQE-MC(P3t|_i~k)VMZL$e82zNRi{tqfq>{Y z-*<1IyLRo`wfEX7U>FTTZfXt%i?b{C$nF@w)t z0G!3C$Io9s+&)99LY8;|cBIb_Y6bJq0^uHRT6Tr)B{+&j2&&0zf;udsK!nN976 z*7enUM%Sz#9@?^IxW2&)_S<;lnt`E>YnF8{Tee}{g6<7V7k4gLvS{4_8#C&fCChr& zbuF$hUbv`h$?&w;ua9Q`h&7-DCj&2$rI>*b04-0KS55l0eR4P}(sinLZv=xeB zK3^(Kn^tHml*4?KFXs;}2*1%hd2M4D4T?2Vsy8XcClyAYUl9(p7~i zh6bz#rnj&VhDExi4KrdS4KLt4j~^cLBoDX&15qD_K0tUy)q7zsm-9kDY^#)bkV`=e z0#E;YKo{iRIu54&Eq-@*{z5By(+cmf!VW(fAK&d&il2HLP39Ih*EbIhZx1|MuZ?TA z^wxXoYc>qm>)!o-i@OsMf83vzlFQby?%}k>=YsNxyH%5cmh@&zk9U>dn%>kmZyDY0 z-4Ud(uNz+9yZ&4^zyp4zaXYlx`+ShXux_Y(c)e@#9lz}Edg=oMUe6SFGg2R2V-?r? zQ(eu*;okMGYE?Ax!Wx*dey(?mpT4Je)-b$RpXM65->%hpS)=a3HJgXF)xFmp<{oeB z9_U@)Jz8J0IeW5t#$HeQ#q0Lc%hKWd#x`%M*KM#@9I{ty_ssjKpAOKosSXFGZ;aNv zH+vuPTiiRs>xOiWy@S1@Yc_Uou6t)4 zk9c=y$Qm5mY`7ZnzU8Ojs>&97#QXE+s)6q9^v#Z)X#mbwz`@yDgJUGoN>gU#b#)M(j4Na~SUc4;_Te~e|Bby{s z*Vw$gH$_%!_rDu_ zCwQ;_3xDKaf<6BGgA4sjg1%W-20MfCVC%V$1V0L9zUXcKhl3aH@^1;spZm`XBzHew z4Wb?X`Oou`sK4gV@q!iEf3cT5?w``e14_BRBuYxrul?lBeX)1SEGt)oU`67!2lw5+ zq87$M5^k&IlB2fP^4n@&5^g=Q&3fbQ9V3aqHO}?bXfs;NClBAg+v{r&Jerm4nv3(v zgQ~3MPhvzb4wLia;GC_U>bupi#5Cv(TH}12>kLYj*wbjE(ZBey7kxRX=34U=Y5?Wo zJ64?576vO~FC9JcGtPmO}5LpD`0$3ca6}B2G zig97s@DS&!1;a&qP^uP$lK>Fnf-bFbAk^qm5L}=T_~=}?>=ariFr{H1V97vHNG&Ky zg3;vRucT{|kM0Sg8v`a$1?$l-{hHV2w+3`6h=p#RF&R-qe=TTuO-NkAA)ueVAHJ? z<6t%Ixb#!bouM)apjlkhI=FIcSYheCWV(@Uk>(z&b;PzLw-pX?G`(sTO^UOsAy0gU zi@i3l!bqXu2&*2rjPq@V&^(J>5>QZRiifS5I^*uME~>7C01O^8py9eR7)j6 z6=nf0#h8Nnu*LHjj->_!4Iy#_9hxgGc=Ze(vCj7ds)mSxJ0HyxCLw0GenN(t2Ys-d zNKh@IdPXubr{Nxn3Q_+y_>^haE)Z8L^k8YpzGBMRAjWYvs9`x9$ncw% zn8jj=GdMggrpP2)Q7wPE+<8QV>xhCA8jPid&E}lSSW#@^rDGc*iFs9H;suhJkjEJ) zk2q?R8W9Ki$$dz9IN6rZ>xYvh1o~1jk|`NPLmw7tjz`fa{n(ePD4f`4rBby;gSH2c zBhz@2s}=idz`(7me}W-J+5DU`t25x%Nd-s#kKM6ClI6)ec6(J1%7Hth_XVrk5aA#n zQRl(p;L)|d{HrjFR+wgIwD}UNtOd0~#h#-&gDbwusBueYaFG>Qp>ZqF>PZ7g3Z*l6 zThc*-)iMs zt$ue?`3@`JVfA-4mG89jomPKuQ~7Qy-);2|G?nkO@_knSP*eFqD?e!Uk68I(D?ip$ z|FD%GwfZNT+B|CI$E|++D~5k7KW_C;TKOWYcWs`u`dz3{@Nf05%`PinV)a*A*|oXE z%2!zZ)lF@#u<}(_e?wE7tE_yT)!)+8<~l3iWc9Z-wYka4w_5$~rZ%@)`3|eUtEtT$ zR=(5f?`>*xrFitp1^}b4DyAa|UJOBR-u?g3>W-BFqLUWP?aU=jfFl z3n+$se_x-ygnSwIJA+HUxT&*q_bRPjdyUt&qnny?Z|o#5k^VzCc6owSos3s-0&U}P22l#-Kp zL1lj!pq=SGWZ7f{G%p%LJ=D~T4*yzG1aE&IBG`-xG)ZPFpzf$=?0z&+<~!I@I-4Ke z!=0N8_{G|gTvrM8?be!=G;=?fYC6^0str6^2DAGxK0!FXCOq`XZ`?`16fHsgK4z0*+$VkSt&sub~5&!5duaB z7N{5f&}RrNS~Hf+VUiz{`U3_}It~!|aWGm7oTWf_siojm0~2l<0x zp2#3GDqw}R&eW$&*tdFCtz;_~m*R5D8fss0RMVPqZCl2*Q$VPRhN-T{sr|J`?@di4 z8Y+EpYk%CIaEE-zfAZ^(oQ?fy#n3nV!NAZ-njV|{Q4F>KN zLE;@FbzYr@%)v6@Zr4{=bb+m0JdF!59oPbpZAI&F1q3BIWOn)YSfCvK9P~k#xjv9y zVXXWrkk6%`2g0c+_qM=M4fcjn4W6~!>;qFxZnT!ms3zB-np}fwat*3!IMpfD0I5;1 zhCNmbZXPNO$YKVkwc()vlZ?m|-zgpGDPYzd{{nO>nAO;PW5=^*Jw5yPD;SSa-yCpW z`C*G+*a3`RK~*q_aj-Ac2IA-dOh=zKX>JnC?%yj9+!>$X9JLZ-bVg8V^aGv*PUy&@ z^!m+|oGKRf`>MX{4>rDCY6@;Z$goOun#zoZ#6aw&5`!2<+T*?w17FLF=1JuQC={Y3 z3Bd+o7G31bX!xEL2LKQ$Znjk_nMum1LG%tyjsA^?-MdaDPDoC_uSR#0ob>Bhfmbu| zQ+a0N=^eA^O(>uYV;_GoHP0R2_!-{>8Q(M%xX}kP+X4x(FS!nKn_~cU4>`#F$9R`s zqUrv7Z|*cx4kA4%5SBtZh2=VpxkH{rl;j}1Wh=%+D$M--2s6hp5@wY45oQp$WU>^0 zN*PY}C;qnRZ!BU%*9fSQB80ra znt&Fy>DC+hPvuh}4Xa7WMNP+aMu20YsW1z4@8qQ~dD*08eQ~s2f;SJS zWeH1ZLb#WvWf_K{rNPCJjO;Fg$DtrP)~%`B!5wC{P*U6{>X=!X3UBGnN#==T(Ujwv zNaengpWi_k_A#vBJYp`5e>h!kQpitsI-ed+BZxH~REsj`m}^m7%NSUDb3HHl`i@h% zD^^PqGerQx(k84Zlg|vomY66*+>-bp4a+YdmpX&#Vyn&|LT5j6-EK-VlDrE_)43S zrW>oVf{cL7uLL>VV)Nw2%`<)PbRuF<5fdbArwQib7Dmu?VeJwkzcptQRH&**Frc03 zbr5anONgO>aMb%J#jXW$T=ZKa6P znO172bTZF6`Y^fv(nqrs@t){-e`C_MhIgPL^|@J@bK~Frd&ghf7~etC+JL0A4PRDkiO9rc=Z2?c^a_F=Et7VRRUZloe3LUaE%lv&@SD8Fv2X>Uc(s_ z$z#?JV?q`vI&_q~&Oo1 zl(eF>oWZgLv6sx2AJiVSPAho`IqLeV`K*gH{#^iHh=JJ87FI=AHEtmci!lq^iFsKj zEtF`hB{A7V5KlzaA_A+H?Qtn~TR&BB?w*FCu9ldUHR@7SE-t48)nX&si!IrUI6hV@ z$tIE4l9EKLd(lyl8+r1GZP|#W^o=$sz{nkHsz7iIJ3&pYqRhB$IHf2Ix}r34i-b@? z(jTlKbeIna75!@7VY1_8sl%zRGmvTI=E{zR<_Z9sD9aV_Yg5G@iv1ICxen`-G(U%J)uoNnwuh%U|Yy{!!kBbM0+qBcAZvG+!;Ss1_t$2 z`ZSq20iZP$dpgX{hW_-hYU`6)2H;P8j<}UA;D(OnV-_dIFfa_VxMj6nD}P@KD(nio zA+<8}o7CbU6AA(^B}znR}QKw!_9uszsi_{LB>dgT+hNxhRe(J1tW-5l{g` zMgo(V*Q62fKE zE+RcwP(0=2aj)9u5Hs-`sdG->l%op1GJE#(FQ>X(P)Yucm)ZPIexWPIP$hW~Ehl6W z*{HGdm1v5LBn3n^Cc(C(ICAq!BA?^;db_GqlCW9^FFdZcxe1ooIWwu16T7ovBevxt zR;SP~FKq-FSdfyn;o{nqn%WrM*n2cn*snpd(7Yq?VMIB3fCkXA67%x1HB>Q*#ndG#zXpiSnu%)}@6648sY5T>l$ z@fI6>>V=er=`9!P5o^$R!682Rt;WkqGC(*K3C!7aS**+~DXZKtOGH01OUm#-Tmq6w zz1m>AwX7AbD~7Q|8D3LEptR*%on|VSx{{TQKVT#c4eYbx7y(Ty4zaN+O)JX6HLoZb z$)rSMKocgZlL!$dmweo<^5vzV;F3-{h$bnfqp(^qjPS@Mai6x#6}rK_nfzajuz_Af ztB#8`e@f2t{DQ=G0<^p%VGKdmN*MdlCS)cY;R9|>@G^-HL14Z*mIrtj@mvwF0(z9; zMQ^3wr6P))=l9|v$}&&*uTytmv)mQVh|AZD^3AXJ-R`8+k&Wo=szP)DBL8mo>7oI$FoYRkap_jyS+_FB197xn!dtc?;IIB07h zDRF*oo)@)w;fm-WD*~&QckkZ(v^N-0Dx%Sw0LAm;oea-l8Rt}3PH_yf}X)WIQBCfgC+>YCJwelCrXfTSbBtjQHuFq^k{mE?)bnB8&7b-KR>w*pBSH*X! z_(YMAZZosTK~i#A1A)b}0Gxj5l! zvb3~mMp(UIg}W3z%17yCn&TIflSF`#qV!{Tgt^Q{a@%luQu<_5fJ`?~e=XaZ)sSuk zniMn;9Lb1`pnHOQ#psfxNwFA<#6c{$&2%<^I7Ze%Si>x0?Ege@`XSx0= zRw%<4u@fLFgVb&FwE(kAK`a>1!jcQx!%WTFd^lMO`q3W#k}X*v2uVk!6kUo-0XM*# z!f}Wrbe7GhsJ&cMXK8Xz*2COCLCU3Duv!FmnBMghq zXWTdxM3wIr_F_}VvIvJgdx-RT$>rDY_Nwy3fSxoyGwwsDb!EpxkP7oa{wR4{5(Ryr zee+U?5dBJI%LWt1XkMU^ zL|)GNk=cz4w0EUcqd`yHDcN+Wki-;HG{9+jOYwze}n}R>0DcH-vERAjBli^sj%0CQy?7t_sV2R^HCvUy^ znPX4J(%#rpKl@L6^Tiw6PH5o5SjcOhf zc5gDz1=Nl+hcPp{{H-;AmLekvH)5@+M00z+wqF7L<6>udrsWug1|7G!z-m(nCFPtl z>{P>(0gH$=b(#1w+UNrLM7%-1pBy~YMf4%%& zOXpEizPLunnR(J7jpxnt;;KPK{}?H8bHC&*RtX?WY08ZTI$GCSi2h~47~Db0+N@O} z3qWLT%W=8UHt-d=Aw_i?&ACht+!!A_w3%c8amZ8v6hZ{Ee(fE$30!AftTTDq0AtGn zmznfRC8O&u#qWW-Q+<`rfRAFj4h@Ietd>@F7smqwv!6>$#G ztRpdK@JpZ@W|-&U%K;EKxxQlpZ)N-r0i_Kh4HgJ4hYurna^X}zC4}mjX+Sy$bnby< zJpR5~1;~;gO6bNE!6rQz8=$wf3p$+(c+h5@<(#`67x0{SbD7ky`XnmFEV4djoi_SJ z;#;4yxnMZp+{Sqx0ufdK1+a-ZFI*|+hc3tDfnEu{f&c|A7!;RXGT|+j@}!old#ozuIS!R@y4)sv(7X^Xt6nCX7Q(_yhHKd<`>uz~3^u8%0jq#eV%xO=u8tRQ zBZvba))t}cDjMg^2#^Go%mqgFSp}ou)$6Go+Y4CdSEK5ce_-uNb2AhPS3($6*O(s0 zmOvA~V@fFODhDafS02y#Id)?(vi=W9R>7E6s*0hXmBA221SDX1uQWf==3dDvtO9SC zBN57TnVhO3b)P<8g_H89&oqGW#D4f45|B`~5+LLZ{E2f8o@Qpj7ji+~McZQR&^fG# zu(x;c3w4?Wzwn@06Ez~{g}8M~p!gR=Y+}vDzaagZ_H588V)2@`Gn{lbY40}$!PK1u z=?r-mNwBIG;D4ezO`K;U+C-z+)JJUAF!RxOQk2U*34j1guNJ5rSkwtoBoObsT?zfs zKhthR@kSrkM+f*xUP2k6?K^Lr*JBMzNAkG=g47m!WP?Cskfwwy{p(pSK(>oun}#sZ z00*8%nlJaTHF@mezeuDq$1GR^Fw%FPMM^y6qs2#LHHnyczyy=s1V!vdcyFcdi4Urx zM2XyI38d)F8X-p4@mSKil-zguZtd>sX)^w9%J+T%yLJVWvBzJnY zAFZNxtCw=s4!J39U-NteH4k5`fzP%VNWka}Hi2tDS=yJ}%@axwczqEOOiJx2e10)o zlkQ15y3~-}Ziq*y6T9`UymUpECjtQ{-hA)sOIMu0E&s77N!du!XAPo|Q+cM&V=cMX zY>sjn*HY#JWLkc}VsTO+Zr4PXawmg}U$dkCR86GkOZ%cHt&_;e4M;VfT1_WeYZ92K zr@(peu!>p%xK`fg2enOZoxF2;6Z}D=t#Va_2SLfZv42e1-W8rqFDPhVX(a}bu%{Z0 z(`a~dSLpC9)M{2KsJTeaC{y`IaT?eE?FZ0(GDpFgFp?Dp0T}rvkFq#P7Zn;{{8DZn zyTsAnuS35mQn|O0y99{JLuTDEf`nZq5D}t^lF&K+#_NC>Ni`Gq(RkdpT96wnUfWOv zA(ecG^+;U69+zrte8m0$$q2QAr4TWXn(X#)fEq#!^E@Ra5C)p>5rI3wpP@2=pJ;Tr z){;aV(^~G$O#C$ZponR@X`7^{D=jCX#;zmj3#34?6*1479xDmlKyFFKe@CEu90>tL zA{p6DnAh5>_f8_JcZ7;|TuG+JewujEY}Z6V8Os+Mp%~ae(I6avBjsywv zYVzP#Hbeo9Q^0MxWha;)g~{_Qn(~>9Ci3DxMT=$I#7%ilN@kiv-S~y#yqFS=UI=RR zx@9*}QZCcUR;OI16;@IP(Ndn#*_FH-eOZD9i?RX0&q609P%Q!QiRh|^DPhYn#3Z>N2m-Z|J> z9kh)kq5Zwn=rS8)8f%?~+<>=4u1abzn!~FZm|YvdlH2v9tX`l6!)IL#*GrS2G& zvtf0gnaQUKk3q^$5&3f-7ux4Fw`Cj-)XI8QQX|b+ATMB`RuTP%&~98nm?SP>%pFpQ zATI@69k~HuvyZLno#Q#S-i_1q$rHOATUv9?i_jmUON3r+i@mC3qDQ&h zIE%g}8gAe&#hhY4YT>)b@=_`v$OSoPE$()T-?4G_+c@0Cs3An@hnU?{auu-*q?j-Y zoce6J6$(OAm_TSsy;atLF&1vyJn!nSuBZZ` z%ub4$-*OL2RW|1_;YDl-=U47{Il2Kfuk_#2r7B9^%PlXOw!DFJ zf*p}Nj4WC=L)u%plMI1KbnYj+O~Nba;wyL5KPH%M5A=qxi}-9$ZhFsdFPTpZjG|j* z3qDAN>_4hrm|B-o1!MaR-Bpb3TxkSClYRtCku2RJ{s?b~{WRUch zpzI`lMh^iPa?UnlR9LL#q!~q}I*QFMl3KDX%-jAyEoh}$fWKXkOOiP0avZjx7~0J<(yq{-!1BNQML!di`h9mHiR zN{YF$B`g&QVG>6x8d(-H!7jhKV1m7v33i?3rTe6eWT2a(m{RdGnO9UPSVrnB-9w=v zm`uu8{sm;a3<((;63%4Hq2cMgm?k19;%B@r?m{=X9oR`Dl{6Cjh8&mBg#w7&B0xWMU?e0`%=NTU9QwN1nik6hBxGX{tn>r_rpoa{4T{_^kPD|5S!0eH`Gm@hb z4QbA{OV3nhVTf^ICaRkmZ8g!FXX%Ccr;}c2Junre7`iezMeU?%hOXb(vt&arnu3_I z8Cs+L*BSJ_=!!(F<99|+DP^b&kc{UeaB__3##nl_*y^UB9kX)dq4 z2pzH2A=4UX+bnSG?Xjm7E7`osG-7HxF3MScp!O8*e$psdwJOLKR&Z15$pE;fXH*6!`+y zs#(U!rH1ePzR(Y|u*tp)w7-=B|EV1S>A4jGxhzEsCvrvzrA!Gt-*95#f&&4O!sT9a zkqoVxHscSpYW{P#YU#1Grnto)b=5B4@2YXUB3-FiXZYB2Y%I&AS{Cq&n;;9zi;6l> znCAJ!P;i!E#wI0f8@T*5>|9m^^+k5qQ)Z}ztcpvqYGkNke8O$ct;D%OyiQ6}%f7c( zYt;6!*G2-5`=XScgEm>H0JIXkIQ|`bW*DM2LitL5|5i0aqZojAJUTTkfZv<6T-b&C|Vy&Gw%B*RlM6`-VR_C;9Df_7-~nKN6tIaNYhI|78jEJiVd z7B5gR#%H^quE$FZ{_2^{^&pd;^Q~|`gh(dKo2A=ofafNVx?rC zYd2r(qY==k(u!CQ%3=%TA3MKiWuSOPkUR_o3R&niN&KZqY*|@E1|oMXuF?OGpY#4@ z`DCS6KON;FqM58hQB;BfL0Z0Y3J;ge|nkF(K>_qb@8E6GXcL7L^r>6eHCJ zNC9gc*;ovz7KwZC^DZb@;VK#NG%|ey0%~Ph?xa)nSIyXCR|bxvLA%S>fu{YGp<80P z5cEhOiwIxzPNayn!}-@HKB+$g95ce^Rk97kJlz*A7%x>hF+uYaJoXzDa4Wljn`X-p zz^$nR$_TznMRK-cnN!SY>xopAl!_25iPR!+U?}FxATh$y1vwF(7U2}NdXfN|1Xt)= zA|_`k0+mNO+(LptQW>ohZmI@+0TK1?EM9qPOeswKZQB08rW#G|`uuMDkR~sHc{?J@ zbJ8$mK~rHzFfA-5!%iC&0V)lvNzR4Zfh6lSNRE`Q3+R*)KbLob=;TO6#KYw7Y?wo~ z(OH5E2q2bJ0Tt;zKCH-RBe*of#1R~CE6x^eF>NPcJw)g6{XPq}%QvGBMzmjqUH}s8 z!m}8}P!HUpO@07R?)(cTJI`bD48B$nRqxz1+GxwK>9N#ou+^st5-Dp?31b-NiGu{6 zi+wAcDKTj$CA8P2@DB^D#w8Jmo#`70u_FNI(2*1@R)6i z$0Zb7up(*YGd9FFeQ=|q?LV-D+Kgl@i>)dtMpVs?;QJ+Eb1@H8kqR1#8DC;Xd&~Q? ze9alj3}EeT&1PEneRQ{%{Fq;{r{n=}pmCtS%mcX326e_{R@Po+CJ&1`Q~w5<-)4&a zY)TTP6JEe3^9Q5}PPUR1Hf99vw6YwE(AFo0|6k&Ma03HRUS_MByv*!H+A_!PWx>Ma z1hc+1aDNK1vxPI5wTYLOGl;KvN{Dp`{LE(n`~L`BG$?kPc1G3{RFAW(uk@M#H+MZ0 zSLiHf0fyAE5X%;23ZzdlzvNsfRdP>!Gw~m!VEJ4uQ2KdG_$iR^NX&<43uCHehkB<^ zp5f){Bm}V^HVB1a&WcO16b%%6O>(V>s1=bzg!E{E2GFQICBrQCnxj`LB{raA+plk8 zM&m9c)dn*XZO2X{*HxzX?hox2t&)HdA$tNAT47S`b}zZ^!%nQY7_Gn%10;7+oh)*r z-Kz5CSJ95J{9j9=Pas7lT49sFWh)}trQl1vDV)o`qDdU)r%WO?e!(|NQ$jB;=<61; ztdMv*glh3_p`HyD6ZauEwn_>p>Gfpi1-nWElGWA?Tg(NA>Nr25ZT1n&x;?-B%{hHr zU2+|@oL?VdU0f{(!0F-Ktw>twaHMV#6CTweShZSQO~L4Z1;GVOeA`FMphrqEFebIZ zPxycX9Vz_G#f~B}A4I(@Z_CS*n%Mnu5O)qJMgC(Uxy5u#TX`U8r9h*`o zoG_FLf+Id*f&eM)weS$Q1j$=ibz2FDLwiGJrAm=txPH%%&AyndIT&7=!^!{jxE3Z? z!{_~*Aj=VRd%Vff&gh7}m6zY+y$m3sp}NMr8%rbf`g_(WQSyr8E{iIoFJQ2bQ$Th>zmO*OC2<&7lvD>|XN8oyNxA+;@AXM5(C+m{X1YOEvQ5-z+DtAkm z!qHL+7#iCw0D^t25wov^gO@nmSPL3o2@hC3`${;Vd9vJOhnq<5u(p=0=*EZ6QRPagj<+I*?|m2;=QT|#6gT@vIi3=bSL6F zh7nZvb8m;^jTU6Pi(GOnj+B(Tm$R}H=S0ioCyyfx2xeGcJWE)9F^<@d!NVken&Wmo z-C^aIJms*lw?r8?&|Z7h3}nDUy=W&s1pMS-AeKs+eD~SFWj@JwASz`%VF4tRk{ANf zr>qzPKd2Wu>{cQ+Zs8*nfoV>ReMCzkB4SzO#LQ92a$;gvvYZ$`vgNwfk$rzaE}(rC zUmu-m$_B&KDH`WDk+xmK9M^{gdLpL<_TkecGzMVd?U&X-x@o zYR%ZSeetXodp9JZp*?mjqUAJ1`jc7m4d>h{Fyo8ZV7b493d|3T{tCLa3UV~>F=B-S ztR%Ig#>sSxj7~>X8-dO;rzbGm&~}Va8Jd~C`wp$LX~bLhvC{MnnzDkCbPJA5Wd5Q^ z6ju{g))+eY?I1&EH-v*b2B9nzh!zH-7bSzFLV_>CvRJeAMOfs5LdnEfr;CY@Gpl9+ zkG)~r?@*$1T(rC{b(&d<9;{;+I{V84+L{H}=}1Mro<6SJ%%A>g{&0c;%R}W_C`U5k zyn)p*d`@0Ae?1-1?uA<4jp@JEZB z*-Mgfk_^$e+5M%C#W$BuCU!U=zn7#W%oBu?tpcQ*!*GVF&IBsuyt$(=2qtChXmKb+ zF3}BNUelE93kNaV0l);N>`pogqqjpG3OnJ?+BUIf;x%d!>KIm9P*A0g(s0V}MVAo? zko+EW&3I1Gg(LY^NXhbsvqk3;4zn`)fh1#qCj);duL~ zcO~1kVDr*G+>D5WF7Pb)>Q-Ftk1PE#AMb_!MY95*qa&8GD=wXUctm7ew4>V&LLF)U zfw;{vv_8t2cOT`18hKYSfARy38W~l8dLkzqCdA&6)qns=#Ho9ZvR^t@uTMV)mHYUM zTNB$Bp@qKLxt5IA*(rc@5{d%e#yoFg+X7P;VuqWLl*u=owk+&#%fb$9iW6+hB5dBW zfalXK3++j{EemS&-A67F0Ulb+b6XZTF_PEp7j%WO>dh6NK`Dg&v}GZ_R3I2drXy9{ zHtkAK&UPilniHVguEbvff1KBT1Ux3T44zn&4^lUK;@z^9ptfCK_g&|pi^=7;}tTGGm3;DWbGvsEw zG~l>_)(V!48G%40|Qk>l8~ki)alD-A&zjy{KaW!rP7SKgPJ ze#FlpK|>hqYxanY5EqWk_oKFDS|gVnRf#=VLM#gQ20Dj z1n(u>@yxbdsL^-lZRZzD#F^4EQ}qCIn{Ef-H4NZBw@HaG)P^z_c2BhNs84n(z9;Ew zpF*Q|*vyYEx3C+V$hg%q=9L1LTJ!En8jzcz-WA+TO#&KY-kP_LVv{ojhxi6cs?O5* zoG~-tFipicjD@b{Gm}JT0Z{y21$Sr=l9Lx|uNPyz-6)j|*0EDAYbv(QpTA(vL| zx&uON>P!S-mW8}uomv%DL>EI#ieS4)AodI{ja*R9)=4878}iv%g`7-H$=bA;VF{VO zh=chaXIl>8&BGM&dKvNc$PUF!GF|I>;iq}m< zmK&jCJEYfY&khic=IAmMYoGmS?qNT1VG(?)P;~uEE@5xKJ#jP#i`vk=y+xGf0#gZ#8EaSfDLPgN^^}XUEte zcZ_smNM8&bm77IuOpN6%epC#aB*enjn`8gxG}OcJxGpC9DFzq^y^h<9*UJ_z@GYiv zdphmZ1O!k+!lX7{$TtL0fZCGL$s4OdG ze9_zB?cA|I4gf%1v{1fbKCRr z`)(%5-l;FFI)$Qe{(}{vrmJ1+9SRDqkOG(P@hk%P+5eYV}a zvi)sJ59d?#yW-+5iw%=)n`@Zi-%S^9|Bkn@se)?Y7z()!h%Jt4OJQy!S~ZRAqG5G# zEzzW1(3L`FV4~AtnEk|DVT!i}$#WBH{bf2A)Gn47pb}P3%|Fv@7@1m{V1+8L| z(ZtIRKvDxSxL2;yQ(GKLU^3Lf9qcU_oUftE@SLGeZexeeG$`G$Tu$Fo>4wvc~w~LE1G|mUSytPp5!kCyaPM`T^-bUgZbr zgj01I7@0*YZGaicf7}MQ%DQce%aG)K^DZ6f#JI4{xn%ryTDeb9CATOm?I@DJWW)Oq zFojek!p2ph)K|RGY&h5;>$vJhba}OyQ7-)%dia_PaCv+o-sOUa$=6lI=vE~g+^I*) z7V%E1e9vzLf;@R2$y}Y#kff#jxSf(KwuvktDnW7%02b;*R& zPv>Iuu_J^h{S}{;N-@sXVsst0Ve|&-^d_$p`gJ2q2wocZa|v$W)RL6pO3k zToBulNoOYyM!6wu<+Cj;&7-}VTzVeV%7ni;52{aNYh-M7=m)qIy$jjIQjkh2Dikt` zylPu7q1$?a22EcfH-)xTOFhC;C3BKXE@n-yfj7RE8e7syrh2vQC08Ig!RH&iLIP*m z4`M2y3B&so=A&S$vYw;2YG^XGWjj-vo0XKa&3XRh(VdPic)_+DJM2}Ly{%3x zDZgeql3+I@4r$O#KL0JCJ%V|APY2rD#giGaN<1r)jTAUtTdHoGg(ZOu^}uQrGoAR) zG_=wUV?Ic!vvg=|xpBViELmHi`~nWT$g)5=f>EW+4O;3DVr*6vY5UboJq-@sZ*W!77iA-KEfNut+)F@(D+`NlONz; z@`I(qTL3(D5hZ+yL8jefM_uSlyq6oS&{5QFWC2aeo+I|dpIp*3%pk(@ryp+Box&A# z&g6Nh)*uBLAFW}ctUE00w4a2H0(nL#@|UpHWhmTo(F*z!E-Vo9lN8U+CYYewiIVJF zZ%T_Fgt>g7Sn?n|IlT{IgC|p?Tm4q$J5ljB5SS_~zjDh2-C{>E zDvi^@Qf5tg+8UTvvUSq}S3a3824Xx-Z?XgrX;kfD0=dW_&^l-Fq|j+-?wh<_f?f)= zq@)0dsnbha`|^nw+n7pU(-Zo%m{mabMtbj~qKVT=4Kto7rCESqm8u)(s0wpU>INUi zsT-)))Q#z7Q#T@1R)`C3kB}!_Bh;elxF{P9P$;C~s??Oh3K6kOl?dNT^^sYO)WZqZ z%|Kr>bRS8LD4il!5JB+AUi5MbOO+K=b5%l^vT1ckJv&4IL{myxz5M;SD_lywL@Lc# z?L!$__Y?2yJ?Wd;Iv0R8pnh}&ihSWna{0`E<2BsTwQH_a4Am?$#OiUVE z&PeWb4q4c6-SoG+B)QZcsWc<`rfV_b+@+2hyh>68HcaNJU6-N^nc>S*Qx6h2ww#&p zwV=OFgd<%;j$SBgTn*q2vyNmlX*)paZ8>dz=v~Ayz)H~aP~y=~?%)WI%|E)+Ea+17 zXYyGjJ)2tHu)kJs_Zu0|=y8Gd2S_%vmNlYeo5{Iodex8JJjger9`%)&UULQ68%d28F@fph%0H9 z;KEdQijqRA0F$dO-i@OkeG;_naKLm-Xll*_xs`=V-A;@d2U0uOit?-`G)5X%rfRa% zu)`fjHflj8s+XyJg$J7HFfD=Ya1DuH; zU6OLP5YNUjN6(lLHVGGHxb5dZ?5v7P&u8RN1&sR>NZ zD2)WklzRJC#wx&|;`34>Ska_7$i6xy@LYw=7qf{Id@j|>@nQez7nia?bCN6Gh3dNo zzy58$C(d9FX{wJxcoQt7dH&IuDAYb_O1l?mwJZs&$+X)a!7wif^5v{MJ9J-T`i^EK z?1*PzG%4NIC`#n4_0iT5ho-esESMSj&Pd$bX#4XCH?}b{5;!&1g49@>h$B6Xn2`w# zypl9p)J&hOS=a~>eMqe9M3h{R#_qk=SQSJos{zg$+m{Mlvh%N6;-RV)D^gUAqM|&C z5#$tkfr5okQ^98%VH&uQg0Md$1sHZ$(w+QV*Z80kUz^jZk1b$|6PhjUM z;%$;PRn|wQEN-Yc3HZ(4ov>Q9dSvS5>Kb(;;U>^Vu1I9J*1cG;XNW^_4Lppu*g zp_ZIhQe}5gCkZ0Gg9AF@Tn8&4I!l?8&q06CW!cs6ep8$ajlnUM{<3$W6-V@)YwGBw{O}fI4*uG7mO~+lVO}gc1 z;dsn^Y8@ObJDVSS-tuzz(=^rg;So_vC zpMJPX!|LdagVnw_ZMuTqM2e=RV*UA5S4{lM1({9g;`11XP4W2v%JNxFB(ae%lCTk> zhav=0$YbA`h0<<~2z{_`gx*z27GwA!lN*NL*2xS8irF3Uf)(l-9U%7@!EV_16=P%* zLE%KLhzl^<0W3sJ><O%rX6qJpo_bXX_fh)prDqP*n}9R1E|ITf?xf zZM`Rc^vVG;J3|UsWe!rpm;Um4YyJtd1o!oTZ4oEi ziQ+LUSnkDNWX~fPy`G|85JYsJ%$AD_1%Vs_?_dBE7rpSl6;kLkO$Ri7WH1kap zvsBh+kvoJTfO(%6vCAnT|g*GliY$M6n%(4hK9^?)W`wQj2i#S zR~JqgdkA+klbvb-9gVugh(wW~qhvc2 zROG0LxkAr@N!DjQ+I80*cr+V^EfJ0T+>G|XpLDcc&t|msj!2xA*qi1h-cy>F+E?a^ zmfVrMtl_Lm-!|qUdsLv$2sbj~kTr-ZnmkCFDF?|zj{N7p8K?;h$U(-~91Ezp9(BBc9v}%)c1h?=}(JFTwjtJ~edx(yrh_QpzysA8> zW27I^*?Wv$!?Lc1XD3qNeS9JFP2?R~ zLX)4w98|+4dTwXa^c9jn8pd{CyW7dB$*Z!)tvp&UbK{7AF@5lX9cJ#0dyR5?_LogW z6}jPLj@{dqM>`=g+wzcc*Gy(>_ol38O;!h(K%X1HnISR=k|*Q?7NYxP7c|U)gOH5^z{ooom5dNUo$VAsVLVS7*E&F?+bcU3E|gs$$T zoDHRTkcN7w36w{&=aYweQv+?z6nCLHDJ&L7g40hGmQsUFSdyssq;IM~zgi;?$R$NBR=WjIGePnd8jQeG#f*X)Ega zG&`RE$Le^|AFJb)f2@v|J>!noID<#qbjrV*2n~j*ruo&|p}$5Dggs;Am)4VmUhg9o zg6GCB$Gp0UKCkWFT)NSgucR#NI7&*)w%QU)5DZ1iS%`2tZ zgIP12R5q9;MN&R`RU<^duc(otH(Q2%)RGe_yt%UdqU-T(mwP@l3Cy3+-6To#+6GNK z9p)#yJ^-MleF2pL0ieeIGRzy^!X><54<^I=S`cm$F$?&3hLucthZa=w@(sa$T>SWyOifo6M+mH)B^IJFw@G;t={l zmfSFrhk$(}TKPL=8RVPN4t}T#t;s%Aai-zIHqV7g;>|yITj`cQooXVmBTG=|MY;m5 zv*0BV72uU^XV1B>tZoKbi;abRl7UV1F;(a?QzX^Ezi-jc*mF|N5i1ClRNG%qYoAq5 zugn%)r!DT(7cmmTlrmWKjn>q!z%a4H*D^-}TClFJ1rfE0Hu{LFg7~@0s;tun6)8CH zk_r4qe44=cMyv}cQnPm<*GYEn*^s%Yj-ODIV{~u7wyRRA?D76g+wnk~VnE7A#l~}r zH&s?lUI-DQmqx5gk_)Vhi(h%bmq`iO{X`a(-y@tfH`hGX@m};P-^7Us+Oq4ih*uT^ zi%x42H;Q~!Ue?@$n;N9+G@I!3FGZG;X_@r;mMX#qoi^a|e{WZ}?M?Du%_mzsFfY=g2`d}Z!(7n1X^AL5d?1-+mtx%K-1Snb~JdngO z&e!=un8p4~rR;pUmc&f$4@g#)flQ$@^Clb8nT9xTEG4wa$yw`j(wK>h#6hw$;JoOY zL2?m#AbJ7}aeHSF{fb;g^&nt;Ev!_AVZe`evzKuKQ154SBM{b?$Ta;-Xvs;e{D-{T zY2&(`A@CKh5cR<<%A1umVcbv`MKJUcatrNxl|`NdHhBw4zQP$RoU7WOykY*yd8^4+ z)|R^RAfnv}RiY}3c_PA4d%h873Y9^kS5KAb^P_h)YF;A|NX-X>1HSaieO`K1`qEWF z<%Kq>jQW6C%B4YoE~9@uUda%%To{s~H*1&n2ZPG->C`eRNM$R01Muz(P0i%C#LcQ^ z7d(!=K7J;mY5MY+{13t?l|>FhIZ_kqPj{2lpQw(VTIYCy3LzS_9BHShf))0qljw)e zGT}4u`aHX~gQ03@&gU!ZzTr>&I7333N7>#5>coAH!=jt8!HLVg7Dw5+%3=py`bF3j ze~pjA!r!7|2-|sgMx#MxIWO4)*VsUjRp(`ncz|4oKJI?|ZZA15xr2)ZR!F$I^KF#Z z{~@nBL~4fQ@gM;i)XXjr1+R(4@m|w8N-XiPvc#rm@90;l7PwE?2hj(SoEBaa{kiv5 zVQ($vEe^L&xSr9EX(4Np$8t3vA^PkvlKlnPAi4q8?r_)?{Y|WOgBtzV<9N}YJ;e(- zU?d9kE5|$d#P;sIoY+RE0eEP8@kW}IB>^i>-F(JC+Qrjr&L7XSh=4}2SV@K~)|3yi zBtYW!r5!8#{C(a`?I`a6INkB@xea7ZY%V$DOG2MHTZE5N^jfbn?`b#wYtX6Ho3sv- z7U53Y{FFQHwgy>7TLit8_*GvlWK&5=70yWRx*Ea+re@~QcA8(&GILqYqt2i4zWdV-lL&Pd@?%%!n90qOZ|{esUCS2; zX;RlsXCtm3TUDe?Do`t-0$O0G#)#%^Z1hpjh+||a13U0ZZk);->O4_&jS~}EedS2Um*D|qk((I8QJn23|4z&rl~%@% z^OIlcCLfh6wFA?u5mM26I!)pO^ERScYO(+u4|j7$m2mjvhlgo26Z>{C`6Q7v zE5qdz7(5tsSIX1522FsCKV$MU^n3asGSK_*Ay5bW)uPJ5>C7d0qBf!;sDOhFlas9* zH)r%mDj~tMfH;W$Y!PBCZ2qn>;&dui`Xmf^i@pBgy_+nd$svqw@73&OenD@Q>5aZr zAprTTS`Ta)~@3TeM;9z@>&`YF0$zPO{&yL?gGlUK5w zGn2bM$Z~#{ z=(Au!6LWpVjFQ|$N^COA5(=ky$+va)ea~)N+&d74u;^ZSgnk`S5a43{>EKp2ykS~D zs@N!6sB^bAiiD;#HWY@HHc{MWMP9m=PEz0=V*x;dpIr5EdJI_E5^oZJm|00d`GW7N zZcM9yDGDk@S|!0YTi%tsI7PQxNf6eO0gkli7#Hca-?cBfd;ZV>_Y6i9uOJK^yw4^2 zYe3|g7nST)rjlN>`|R3U$$8O<{9-j*y_FBV@A4-uz4j;HJ%L#@{jDcGy6;OjUVP!l zuKV2VN{HCgPmUvU?oCQ|yVozlr-0++o^34Pdlvs!uDN}D+{1ej!YXfH);>2r#`7Z2 z_dI?go_JoE-j59T%wIRuJ-mMY=Are+50CT?ZtEWCT_4v6$2P|l$LjHx?vauD`ZIg$ zJ@wIg_h!#SpnJLWr@(b&bhtjaadcC$slG({tgU0+!}Xz_p0O?6gQK3;()7G+?{$yX zxmKF$TPe>5wutLF0IYXT>fKf!jC%*y*Uyc6N8-_;p?IKscw>ET+`InVd;I71;UPBx zjoH0r3sV^!9oQb*e0uBa=f>;CM&rRDSHT41bGk?34MSst>*Ec>Lz@NI=#YR~=11O3 z80TEB!q?ugeHK`bpnjFT+dUYM4Q?6e-rl`#0OSkpf^2knyDoiWo43S6+v>w}8-u8- zUT2^i=zmGmIDgN5GY)>uIM3sGhLh((2)aMLX$}tlb2fqSo=x?h{@%fj@#v;{Iv7)G zjOL*)BJWtX{GfhQ>yrd(Eca(fZ1P?wJ38@mTyIo#b>?-?B$-u{~5p}~!6c-C;w8DpboY*;C}AIZ9WX??R_|f0UO5a##H1sehIZQD>kZx7dd#*o6>>XJ0W@p_OkJhYt$-2=n*?)BS`5sj)Qi*hoDd+8|60trJnROrwU#_?%6>J)7clhQE2Lh0eicRLVH;Zy7Rn6jGwLLV#<=;o%}S{cX6LCeY|dnb%PVK`^{sc zkn{FNz24J5;dv=P&p=k#nAy9MmCN}NMG3wW_-XF@h1_R-KOI^6BHGIyP+u?Rr+I$T zi_P~dxEK8Tm&x}`E{<*z3#5k1hVEVobMU*dK3E^dk^s@YTd`MMvv~DOm&faRM@Qhh zdR#wuQ#UxTufMGnnXY{_^h`cv_y5MdbXofHAhHbUxE=jI8utvrM68+-MK7FVM6z!C zXnn-X-k;0l^!`3THw$waQp3iL4*KQs2;5m;gN#}OLzQ8r?B|0wrIa-Z;%(fmrvf5wk!Go#&? zQa+KNRs6_K6+N>wliHlT*ZpelU&hbrV*`fFW?Gkw+#CLV(TU;NUmu=tRNgB!<6VWP ztbVHeynvtHK`3;j7xKmkRdYvHjdt^CBfUBC2-~iEa3k!~tOL9fsdvIl*1z#$1floG&=3=_j(Mv-vL;2l3TgQ4)r-;V-xew4jrtQ-m$zBqI+al9h z**MY@T5J8B#?R^eoWakt)mjaEb;IV-RGN8bGp6X_bO!fFVZvc#7kz8N4rF@OTW6 zwbV(jtTY{Er0$BRjg8t}rZAp{;VPd={psH=X}@RNox{g#DLX!wIWrm`ee~S;A=(L7 zKjVrhH~p3M@p$?yyE;!&_8>}pof)6YP23E~%^Zo%v6J{|xSYs^sg9O9xQfoJFM837 z_7&%A+Xw0!M&o$6cjKnfW7d{qjDQWJ%j30c=ayZi%9`KV^dq^qHSO<0u97L2aTWY) z`8iOVTWO=YX6rVIp4N@^4y>;akFe0fnfesnzK);Q^YaFNV*WiqA2DU|Q&u`_GHdYcIFYJ*NEnH|}>p0tJkH>f<+4!FIcjmb3xaFr3;oV>{z&9;lhQB7A{`6WMSvRu7yh% zE?d;GXu+a|ixw?fylBay&P82|mM&VhxMT5x#S0hX2rgc-xN~vW;-!n1E$LXYV9CNI zigbuyax8;?5jINjQ+A^wG2j-LU{~Ia4iJvw6 z>=zv_j50brR^QM)Fj7Bzn!`&gN<=y)yFZwF>B076_UUD0ptq+!e{+3v&!%CqtM^g* zh-s@e6u;rqY^+Ph4D zF4=SUzI$dP5d(p+74qOEyYUwDj^^+(u5DajfBf;szfopU1{J(CiOU4fT5Jv4S7?83 z`hG^w>*^cPD=&PJMu^*0I0l0no)j>Wd%SxC@5rb4B3G@+m$^z(WPON#rDnRN;)We} z6C*ewmcSeVuo1;~;&!v%=wA?J@H|Ri(x(R<9GT9a$+ghb_dY9y!PzskzCM2ou8&M{ zIqbAQnfIR0waky?Yj!`Aawk8YALjFgLRc)6N-fjMvnz+UPH&5*v`x)L;Xwx-+;XUY zSbj!ucsR2-J2=8W>d-hmE}R?8BR8TWTo5euuMa*I+?e}x>A!;C;%#NSVuddjK4dGh%AFL}co*L>mUyDoj#yWjJv&wcqT-~85hzWWak z|I;2XH|?Nf7A)>se!`1ZzwC{>-o?XPzxzBU!Q#AhOcYgZtKRwnq?ZnmV>*KpVf5+Fp{-gUJ`_~KK zdhvCi{My&Q`R#kY|F?g4@|9ox-nZ`g{_4}uc+G3ywB{Y}y6kgb{LeD*7M{MVs}9eLEMlTJV5?AN{FP3Q0U z!Z+{x(Swiu>wgT7TsAuP{`qTOaQyu1Kl`PxfBXCQ|MWvEK5%8nWk>D)#yxvZKjU?; zFP5f8N6-JoF9(OZUi6ZcCtm*U-|abTsu<>Gms`S8SPX+O3|n*guu|}+ z9FkuiPAeAjQSmj!pm<2znYlj;=Y@W5T48GI^4t;6UlVW6^*w+5uKWeJgfj~l{5E`T z@sP@4Ez?`4xAqmvg_(ud7LUuXD$mWe=KOF$Wo~X}p%RYY#G~pX6{=EwKs z$A8-Ti?(prrD0dg&NoaSzpXU>*T*gm%Y~(-Ri)O#XywT8b-CBJj9)locKOhjQ*-0* zEPVR9*28iOuF38E+ZPmD^ZD^lOxw9RI=B7U0#7f^jejki6;5sQ3ckY192fg2RHt+h*sFD9!Qv!v5fn;0M8dtv_n{ad3a|xBf%1SN_(T{$tP;BXZ(TiXG@Av*7H+@ED*Q;N%X~P~>eZsLwLSF>{Uhg|x8t4H-T2vCcHjG%&u+haaOk~ns=YZM zvLqWqfBx~~7aS2Tm^wQ*r{&1}aru|#rW`wdV_{BiPOiPQxZ;mrzO$?4&~j<~%4K0s zsiou4d^Mbv_g5^aIm?i;BmW$~#~1iqqRm z$G&>@^utp-@bZG6kHY-;#p{kdxl|ti1`0f|3KdbfRmh!3-XPsO+>xgALi>t~&M5oT>Gn?M=c1aabHjr1qBrsa09_5!3{@8nQ@$rarvHe z?^|kl^{SHjNIrDESM|=hXZ!FFko^?4KV`-u*96CjTU4D)u~)UUiPl-hb{>`Sq7v zS@_S9xBtWbC+_;OJ$}Xb72baD zg`Sw65#HWeacKMu85XY`pYUeI)cEI^J|msB{dqG}dpzM^aMOg(`$=(db{`odd|({1 zqaDV0YsT~5K2Ay2Y5TZw?_(`7IVL`O<=FTe#X|?irWU-h39;vZcg#aWGxkfpN%1!C zvJ1};q6v)i^D&3%<@4gL zlVjt|a^m3lgrJV{#F+OEs#K=u<>LW;-8O#Jq?oypYLW3Qw?wqZ?E+4T$Hn-}MQ$~P zxLBM!JwEx-89Rk%+m&Q@?5BkHH;iYBpOJUwYGvZuv@uWD9UM_GwOmade#->kBk3ICr7su{)h`YNwm`AU)k-j6Z{~+mAs9UYxi^Zk+c2Ey%zHQ$WvM5X$NR!8DkVGZj>nPHp%(NdyI!>!<{CLy6tu30? zcAjh7Vp^@1Tb@?SP0G%7-p;R`6jhnUn#tkNXvF|JiIGK?mqkG=Ovgq~JUFsbtah+< zw}kVo9&g%7l9w_mf~<_wR4YZtDhk8W1g60E%Kf;UJT|;zH~wyq^&K?hSz9lHJY-$16!p92l7{pCl~*1~Fg;9bY4FfKD`WDqOkm)UvAz);su zkf)#4^DEM>OJz(dE5#zpI0*gf{O1ldJF`Lzkq<>VqYP3R$he4As4qA&a+?%^tff`m zt~zU{ILIAZg({2+Kh<#_2KvIQ-15|@vt9NT`>84e5MTzrALpr*(X)c#2fDt59mUv! zI1W?+))2(SmxXFYu7TjRT8H* z9^A0Q58C;&!)_gzinLoMlQbyf!e@B0B&>aLG~|Icve}+TK+-4)OqM1^5u|xsC1L*T zYu8QxgbR)|vZMoeqWmh8NtCCF&Zv%3U`f{?rtCgQ9U4#}r;z;=Fin&pZZ78C9CRnaSt4s$`>K9p1?f3g>6M3u%(+&*Qt6nFl|hn~DYE{{@2H2|lP`nTH+mF? zMTanSTR%*Af^jdR_|}#gzc2HwG75l?S1K%@+d)9`fg0I$XUqXYU4==IY|#olH?L#z z?BWvP)!s>HCVlhL!}sV1mYLjXs15CM>0zD}smjsZ>Y~RYq7PQ6QuI>Kp0@I3zU6yBFqN}+R*I6rP9{Z>* zPZBR<3ii?`L8*%hmBTGGm~+?fvc2-lvPkSD$aR$zzW<{BHuPVu+mICvkpVTlb_&{q zYOm^fODf@*b@CumsIfTFeqc{<(3l!qNv{)Yuu=NLE7X2PFu){X46DnSaGRz_YeR>J zuAJqmWsK#T%L*x5MHoxbE|&lWufh2X6GSG70v&(tT(bx0z*eif`1W!Q{(cpzOizd% z=gn%T%U)kad-3K@+;}5dBzv!_is2IKsEtQ-#m>_bP=zUqvd|`iG?N8>ewWh<{kS-y z-I+S*1sfQ5u9{w1VC#-Gzo;YA9F+o>#Q0p@GS^{X;$oLaMR8Yi^eX|SxX6>Nm2N33 ztO?{Cx5irR;D(q~1*svL#0d>@}}p9&uU( zXqGI27K!9Y=5`~4b3$f$qM}&)+*O^uU{K;at80UGYILD1E*Rbmeq5N|Sp9!h%=6mn zp-AKDg+Bfs+C}F6O*d>S2;Cp8v9x{NW3tPix&o4?u%tNc5O2(7A%}f z;YbHajpRsY$QiCVi_bvAX6W;%3{)KZG6}2f=3O2-0-i;VtB-QV?x>1evW;euWsfyh zkv%O9meBDdT9g&C*w<+7;MRK^gRoiIngiKt4Inf93+iO{dP`dQSsLZ0La?KEQ+3<( zdaFF>muSej1`9~xDU!Rq6<9I`UESzJE{ATee0%++2H;y)ibFYF5DHSS7e?+&a9M=-%bc zs_Dip6_fMftm;7yS(+RE87k^_JUc6k?{&Y!rZ{R9Qtz{Na#f{ZQE|;x7AARg-#weI zh0O#&+uwuVYeSsd9vSBn;Qtt-l01vlu@P%k`FUkRG!gC+=cjscx#{t4vFtLdU8C2|^+CYHBjrMOjvAR)V?mxdi3H7SCNg+7ioY>x}J~7(7 zyc;6s%AF)6SPOF@w~w?iP{%+&2vdz$2Vuc4%>$#mdSH2Z%dY%bhao6IROGS5^nJ-) zBaPnmql&`bu+V;3XPMEF((Fz0;OM^A4{M;WEQi?<=9S`BB%w;bavP_$XZG0}WzSn2 zqSQ6^kBk7`s+ZofQMhgC^Q~8hAqE`Cs?1DM;FKwa!3owQ85T4M%)!p6nFsAEaET3g{uPfH72@KD0yG3-KlZl9KpEaiY-u zyIF-wmIfY;1U}4)G|0>I-6WitUR$wgGu57EhfoKq#;pdNZ~MUpii4%26n)4n*HPw& zy1TVBv{%*4)*XRG%wIo5uCCVCq!R&)0)RO}P)mYURwn*H8B1xdE&_+wfq zAgs(!aZBJ71q-)tmPjk=sCsy#9IRRQy$hG7vMh5HT2SJzhWS_D)hOeoWe$Pk=~!P6 zBF`M1IiWsqyVon?9DE@0L0dE^d#klli|CN=ZUlZa5jaUy5D%6Wc0<$tfC0F{M zhuhH}#)`IS+x!KGZRO>v*9KTs^WB7FYCZ@b1#90 zY|;q`14&Ny;+Q}MgmTKvHyLLC+D&!4u2*N>nqE`@y0&9RwINrzqeBNVPAOhX1(X$F zHI=V?!SD|1#!D;k^m@(Hq6)$^F(A+x=$?jtq|h{phE7c$m_Rw{iqtOw!_+dvSY2DEFXR}p@I;zvv_^P^Z6uWD4R+e@3k zw)$#NcnfR}Y{Le~twa2&3K9~%GI)79$i8-T6JU@;q1!>`$|z5w*IZCbhx%W)%Kve2 zDDGJOr{*`-G_`TD)A|w7+6j1H&oxc`D&#(el_WlwXOHftv6Mbohpx)7G7)&m*NLDJ z?RAjn$O_00GQ>qIS7F;)6@eV8!lF!xu?1BcJhqz$vMEuSAy}q)E9bP*GLp zEJ^ka;@19{8cEWmZT7HX*K)l`1<`zEOH^KoIt9)T5_PFU>t*ZEwP6`1qYNs1iR{KB8FzO+?=)vTc1NLehH0#hoGp z>|aPg%qX{!+c)gEB~)APiOQ-X2dJ)sZ`yH76=nex*^nqfPFT8pn4M2J6!8`q9_UbvGAcuzD;b4 z!>kXC5F_t*?u4#Yuv^7Oh#>*&!OJeSDq{H-(O6v8D6<)ZZxz?}?5zHs@5UJkVWQU+ z@IY4T!1&)Tj%~U}jRRTV%Hvkx_J_8`)dUwd1OLe+g?U&lf8I- zr_f%$cI^~m;9;i{O->n7eNmFWB}1)*wZj_GZD_?FqhATBIQa@gxCbe8(=^14fb7 zoGAhuY;h>xDQ?+X%|a#^h_%;BmrO6SU;|qa20}1238y}#6ZsutZ>{>A3H+U6wlVdV zt9OY87;*NFi)v`yw(0!u78liRHoy_zC5A!)*qAk`d^-tCfZib5axD5%rLlQj936Ht zY%cJ&M*>2A3N#eN8dum9<_U4lCUc@WZ} z6DX1of})JRN6ao;!^K+3-z#3RGXRuzIc9^dy9!QXO$0IVD5AewlHTwhu6ggmH45$K zp2sobyblFIDwWEDSci{oiIZ2oSKK+*kM}t4)A6$aM{Xbbe>h_OP8&)@bv5^+Q<^Lx z!7zs+0^X?0?;DgD)~I@)xWFNlwI@%KJ%-r#Z!xRBntr;oQm9a%;MhovsVbH~AXIvEn6>0`P+r1k?W!F=#3~bNWYjW);`OjPP5{&8_(&3Q}$APE%R!ESz+ar3BJ}NphSLR8g3e zKO?q}R#2S4;yG>3Kb0KVW2{ONx%{%q@-z#p=!0SiSml&2d<+{xw%j_aL@n|bY5155 zQ%NR2E5hy2z{UZP5R%{p5jrMcOzWT9VwZL-S%&TshBCYy2^lVij;GXz#C=^Tz85CA zzaOdZYcID2)_rTWZsp&`mt(S!k_u%A(HJss2qpadGwu<7DCRuTNd+Mcw&*WB;~uLD zQwBy_X>hPinS59@SlY6^&(0}bIAzh9O4k~3Fe+Q;n`4IdGsn9hvYOW=*AhmsiMe-B z7f8(=yvD`HJD~(COBBclaspD_FN&khjp$~U!^4BVitTNW4for|zaSH}S358x+5>;< z;IQJAM**Q4o#sLEOV6M$jhldSAxDt2AY=IvacFC+qg|g&B7VlED_XOV0DJXOu??x= zZql_a9ioei=Q1Vg6N7ycrYN&tb}9xN{8z+enQ-^ZG-i45H3v+b9fX4UPYScZ*H}^l?e>HGa?HO#l5IOaU>QgJr*k<x{s1mox1$)5brYd_L2>}PCkDj z&p*5C9xVI7=6A=In!%O+-0pkOMu%A1oJ3@iDgS8KJ&?I=j0ONVabCog|Hn_G2N{89 z5ORTXSXJqt?79aoQ3lEsNpjSqNG5-}>mITIP8=6SMm``?s-N6-4>@EI$U;)bRSdV- ze`?n~kmP_LjbIJSB!#N``Q7(WTDu(55|Ta5W%g&g?g5k+^&5fNrLeKf?9X@I14##2 zEJI{?iMd^bf3fQxP>vyD2Sx_0@K{EFDUNJZQBE3?EwpxuJ5Nr9^*S(ep>8fqOXec* zNV%HiwN4{--@qkRAX0bJ`?rYi>t5YeI41s&FMB=m^Rp;W$C$aX(!4k`;mde zm9V#^R{vex*KgNxx0j65XFVo3vB^qHAcd634NB%8dcgo|^jQLM}*Mg4yOh}AaFU_W>(qq|DUD=4T-$waYmRQ8YJ#=*er=nkNM zC}KGvmnG;2RT$4S!89LYw zYJ>?4bsSWlYA!{o{*So6zkU5z)VP~J)pqF}L53SfY@opL)uc!KUvX~ZxiyCKmxN;< za8zurr8QdqpLkK%7Vh0h%Y*N4WbIvRm&bXl{bBv<`fW!UQiYK9pg6z-LHSR+fvS?M zh$K08;9lH$CI49r79>Pu_`eYRzRug%?1B@Yk9p4;eB0nItSQ#LHU@Ju!$Zznrj=(xU3qF3$e&mq^!wJx( zg(3x@f<5|r&uk}(+tf>|(~pkt804=-a;A`?k(4Q^JtW8$|JjTC=c)gy5rLGssr?ic z1R(72sfYoh@8fUu1~OqcHzP%Z%;H{Sj2<747%&77#6)lKqJES9tLB;ARypvUsVXu_ z0|;bc_)R-Glce5~_6+!%;(&unzR_!vtA_YRmNwb$ST0S6l&654ASl^3Awy^1ynRy& z!u6U4RfzPGkabFfzY>0n*A*_XS#8YXO`hM_2kRsW%&T4`J@%0k3E_KkdaFDu-|Q96 zuyer>8+fLy)%Gg1HYcklkyev@k`T-f z$=VI8Fn#OR$D`+fpSEZw`G#bRV8v3@i@IBZ|LxvxvJez?oHe_a8*)So6~4`jn+@vW zsohd@ZCGY2w$vOCB`p!eAhl`XfINQmcCW$IMnT=QB@9m>(DFnyV!aC9;oVzncy}~` z&JbEQxogmJ95kWpB$gSe)9>`|8F=hY=h3GqgJwn{7$Y1M5~-8mU8B_q=`6Sr zq~OJ*uVtlt_vj`O!5_duV(T{hMpfT6x(WU&CJ;;n_>xp)laG&XV$-;QApz->pOYK- z#ONlW)`)$bVKW6BFa6!#W$SdHc2yc0dH+2-k%6$FvA*a~`=GZ~@V(xqk_V2dZmS)% zZS7b#)yG5$p#TBjGmyA?j~A|wf-)u!Q0dIsE=dr-52F`>302DEp?t6R{Pm5}6mXANHPhv>Glen`fCtBpqj={zWfY zFaK(xSrajw(4?3T>!wTJmJ5}L4}xoD{!3m{Bc-txKeF{Y4!|T$_B`BZwhNjL;d@(# z z6LZ+y$kBA%7eaIZe^3&UEkyw5S4SW7W_yWEA0Of#Szm4)K^4D)l#~?yCfEjVe$@*G znXU2^vHv5d&f-s@!Z|RC*EP6*5JHV zxheVJ6u^M$laOzq!r$Bd8ZL89+g82M9iBR6o}i&o(1rZ<@b`CckW-j+=#U)AK(eq& z|DY>|oBMsY<=(kV?TTkxUm$}m%AGFYDq1Tx{72kLNnC=rdbfm0hpr~2GB)33YUU|8JU zuW)DkOC>ptx+I~U(on$Of8@Pk1TkPpVK2+n0zh`P=eDRBXTh(UwK~9tU;yjib*M>2 zaW>|~`KB0M^2gqbhA!RkhuO3|H@T2hEV$l82RJlE@F!lwSKi54sn^_|kW7LeXCNjO zL_6vK=@50a39Yjw>!^05u;tN)CV0|ost#@Sc$h}r${lz@gOmz}KtTvVUPS@&5YVa0 zpYobKtu1=0*ULcy4#c+$L79^bvP?;p@C+_M{P~?u0Tuv!_LTZ@Bwth}|1-pYbD-8i zRDImF2D`VQk`)GjoH^hyC<1c%pYL=G;5{VmLe`=93qFqi3vXfQnQ+z2oL*fZV`XzD zj;rFew6bXqHiTvu3h1BwvBcMsf4F9U>D6@%nmLn(Ecp_yL64@J14=FsdmI6@5G@6) z_^X~++(M45UM2@6=?Wd+|MR})6M>K z2)G5i=epB#X#+MIOCftn7Qon-_pR9SJ z)uHn2_@p&Msw;xSNq9IoaIp84X9sLG{6l_n$SQ(JtgTM@hlAp { - -"use strict"; -eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__) => {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"init_game\": () => (/* binding */ init_game),\n/* harmony export */ \"Team\": () => (/* binding */ Team),\n/* harmony export */ \"Strength\": () => (/* binding */ Strength),\n/* harmony export */ \"SquareState\": () => (/* binding */ SquareState),\n/* harmony export */ \"Moveable\": () => (/* binding */ Moveable),\n/* harmony export */ \"Board\": () => (/* binding */ Board),\n/* harmony export */ \"BrdIdx\": () => (/* binding */ BrdIdx),\n/* harmony export */ \"Game\": () => (/* binding */ Game),\n/* harmony export */ \"Piece\": () => (/* binding */ Piece),\n/* harmony export */ \"Square\": () => (/* binding */ Square),\n/* harmony export */ \"__wbindgen_string_new\": () => (/* binding */ __wbindgen_string_new),\n/* harmony export */ \"__wbindgen_object_drop_ref\": () => (/* binding */ __wbindgen_object_drop_ref),\n/* harmony export */ \"__wbg_log_9a99fb1af846153b\": () => (/* binding */ __wbg_log_9a99fb1af846153b),\n/* harmony export */ \"__wbg_new_59cb74e423758ede\": () => (/* binding */ __wbg_new_59cb74e423758ede),\n/* harmony export */ \"__wbg_stack_558ba5917b466edd\": () => (/* binding */ __wbg_stack_558ba5917b466edd),\n/* harmony export */ \"__wbg_error_4bb6c2a97407129a\": () => (/* binding */ __wbg_error_4bb6c2a97407129a),\n/* harmony export */ \"__wbindgen_throw\": () => (/* binding */ __wbindgen_throw)\n/* harmony export */ });\n/* harmony import */ var _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./draught_bg.wasm */ \"../pkg/draught_bg.wasm\");\n/* module decorator */ module = __webpack_require__.hmd(module);\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__]);\n_draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? await __webpack_async_dependencies__ : __webpack_async_dependencies__)[0];\n\n\nconst lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder;\n\nlet cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(_draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nlet heap_next = heap.length;\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction getObject(idx) { return heap[idx]; }\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nfunction _assertClass(instance, klass) {\n if (!(instance instanceof klass)) {\n throw new Error(`expected instance of ${klass.name}`);\n }\n return instance.ptr;\n}\n/**\n*/\nfunction init_game() {\n _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.init_game();\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst lTextEncoder = typeof TextEncoder === 'undefined' ? (0, module.require)('util').TextEncoder : TextEncoder;\n\nlet cachedTextEncoder = new lTextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(_draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n/**\n*/\nconst Team = Object.freeze({ Black:0,\"0\":\"Black\",White:1,\"1\":\"White\", });\n/**\n*/\nconst Strength = Object.freeze({ Man:0,\"0\":\"Man\",King:1,\"1\":\"King\", });\n/**\n*/\nconst SquareState = Object.freeze({ Empty:0,\"0\":\"Empty\",Occupied:1,\"1\":\"Occupied\",Unplayable:2,\"2\":\"Unplayable\", });\n/**\n*/\nconst Moveable = Object.freeze({ Allowed:0,\"0\":\"Allowed\",UnoccupiedSrc:1,\"1\":\"UnoccupiedSrc\",OccupiedDest:2,\"2\":\"OccupiedDest\",OutOfBounds:3,\"3\":\"OutOfBounds\",Unplayable:4,\"4\":\"Unplayable\",WrongTeamSrc:5,\"5\":\"WrongTeamSrc\",IllegalTrajectory:6,\"6\":\"IllegalTrajectory\",NoJumpablePiece:7,\"7\":\"NoJumpablePiece\",JumpingSameTeam:8,\"8\":\"JumpingSameTeam\", });\n/**\n* Models a single state for a checkers board\n*/\nclass Board {\n\n static __wrap(ptr) {\n const obj = Object.create(Board.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbg_board_free(ptr);\n }\n /**\n * Get a copy of a board square by 1D array index\n * @param {number} idx\n * @returns {Square}\n */\n cell(idx) {\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_cell(this.ptr, idx);\n return Square.__wrap(ret);\n }\n /**\n * Get a copy of a board square by 2D [`BrdIdx`] index\n * @param {BrdIdx} idx\n * @returns {Square}\n */\n grid_cell(idx) {\n _assertClass(idx, BrdIdx);\n var ptr0 = idx.ptr;\n idx.ptr = 0;\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_grid_cell(this.ptr, ptr0);\n return Square.__wrap(ret);\n }\n /**\n * Transform a 2D row/column board index into a single 1D index for use with [`Board::cells`]\n * @param {number} row\n * @param {number} col\n * @returns {number}\n */\n cell_index(row, col) {\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_cell_index(this.ptr, row, col);\n return ret >>> 0;\n }\n /**\n * Similar to [`Board::cell_index`] but with a [`BrdIdx`] instead of separate indices. Transform a 2D row/column board index into a single 1D index for use with [`Board::cells`]\n * @param {BrdIdx} idx\n * @returns {number}\n */\n cell_idx(idx) {\n _assertClass(idx, BrdIdx);\n var ptr0 = idx.ptr;\n idx.ptr = 0;\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_cell_idx(this.ptr, ptr0);\n return ret >>> 0;\n }\n /**\n * Transform a 1D array index (for [`Board::cells`]) into a 2D game board index (by row/col)\n * @param {number} idx\n * @returns {BrdIdx}\n */\n board_index(idx) {\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_board_index(this.ptr, idx);\n return BrdIdx.__wrap(ret);\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n can_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_can_move(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @param {number} row_diff\n * @param {number} col_diff\n * @param {Piece} from_square_occupant\n * @returns {number}\n */\n validate_man_move(from, to, row_diff, col_diff, from_square_occupant) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n _assertClass(from_square_occupant, Piece);\n var ptr2 = from_square_occupant.ptr;\n from_square_occupant.ptr = 0;\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_validate_man_move(this.ptr, ptr0, ptr1, row_diff, col_diff, ptr2);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @param {number} row_diff\n * @param {number} col_diff\n * @param {Piece} from_square_occupant\n * @returns {number}\n */\n validate_king_move(from, to, row_diff, col_diff, from_square_occupant) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n _assertClass(from_square_occupant, Piece);\n var ptr2 = from_square_occupant.ptr;\n from_square_occupant.ptr = 0;\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_validate_king_move(this.ptr, ptr0, ptr1, row_diff, col_diff, ptr2);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {number} row_diff\n * @param {number} col_diff\n * @returns {Square}\n */\n get_jumpee(from, row_diff, col_diff) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_get_jumpee(this.ptr, ptr0, row_diff, col_diff);\n return Square.__wrap(ret);\n }\n /**\n * @param {Square} jumpee\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @param {Piece} from_occ\n * @returns {number}\n */\n static validate_jumpee(jumpee, from, to, from_occ) {\n _assertClass(jumpee, Square);\n var ptr0 = jumpee.ptr;\n jumpee.ptr = 0;\n _assertClass(from, BrdIdx);\n var ptr1 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr2 = to.ptr;\n to.ptr = 0;\n _assertClass(from_occ, Piece);\n var ptr3 = from_occ.ptr;\n from_occ.ptr = 0;\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_validate_jumpee(ptr0, ptr1, ptr2, ptr3);\n return ret >>> 0;\n }\n /**\n * @param {Piece} from\n * @param {Piece} jumpee\n * @returns {boolean}\n */\n static check_jumpee_team(from, jumpee) {\n _assertClass(from, Piece);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(jumpee, Piece);\n var ptr1 = jumpee.ptr;\n jumpee.ptr = 0;\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_check_jumpee_team(ptr0, ptr1);\n return ret !== 0;\n }\n /**\n * Iniitalise a game board without game pieces\n * @param {number} width\n * @param {number} height\n * @returns {Board}\n */\n static new(width, height) {\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_new(width, height);\n return Board.__wrap(ret);\n }\n /**\n * Reset the given board to a starting layout with 3 rows of opposing pieces\n * @param {Board} board\n * @returns {Board}\n */\n static init_game(board) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_init_game(ptr0);\n return Board.__wrap(ret);\n }\n /**\n * Get the [`Board::current_turn`] parameter\n * @returns {number}\n */\n current_turn() {\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * Get a pointer to the backing array of board squares, [`Board::cells`]\n * @returns {number}\n */\n cells() {\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_cells(this.ptr);\n return ret;\n }\n /**\n * Get the number of board squares\n * @returns {number}\n */\n num_cells() {\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_num_cells(this.ptr);\n return ret >>> 0;\n }\n /**\n * Get the state of a board square by 1D array index\n * @param {number} idx\n * @returns {number}\n */\n cell_state(idx) {\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.board_cell_state(this.ptr, idx);\n return ret >>> 0;\n }\n}\n/**\n* Model a rank 2 tensor index to identify a board square by row and column\n*/\nclass BrdIdx {\n\n static __wrap(ptr) {\n const obj = Object.create(BrdIdx.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbg_brdidx_free(ptr);\n }\n /**\n * @param {number} row\n * @param {number} col\n * @returns {BrdIdx}\n */\n static from(row, col) {\n var ret = _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.brdidx_from(row, col);\n return BrdIdx.__wrap(ret);\n }\n}\n/**\n* Root-level structure for managing the game as a collection of board states\n*/\nclass Game {\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbg_game_free(ptr);\n }\n}\n/**\n* Model a game piece by its team and strength (normal or kinged)\n*/\nclass Piece {\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbg_piece_free(ptr);\n }\n}\n/**\n* Model board squares by a state and a possible occupying game piece\n*/\nclass Square {\n\n static __wrap(ptr) {\n const obj = Object.create(Square.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbg_square_free(ptr);\n }\n}\n\nfunction __wbindgen_string_new(arg0, arg1) {\n var ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n};\n\nfunction __wbindgen_object_drop_ref(arg0) {\n takeObject(arg0);\n};\n\nfunction __wbg_log_9a99fb1af846153b(arg0) {\n console.log(getObject(arg0));\n};\n\nfunction __wbg_new_59cb74e423758ede() {\n var ret = new Error();\n return addHeapObject(ret);\n};\n\nfunction __wbg_stack_558ba5917b466edd(arg0, arg1) {\n var ret = getObject(arg1).stack;\n var ptr0 = passStringToWasm0(ret, _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_malloc, _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nfunction __wbg_error_4bb6c2a97407129a(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n _draught_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_free(arg0, arg1);\n }\n};\n\nfunction __wbindgen_throw(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\n\n});\n\n//# sourceURL=webpack://draught/../pkg/draught_bg.js?"); - -/***/ }), - -/***/ "../pkg/draught_bg.wasm": -/*!******************************!*\ - !*** ../pkg/draught_bg.wasm ***! - \******************************/ -/***/ ((module, exports, __webpack_require__) => { - -"use strict"; -eval("var __webpack_instantiate__ = ([WEBPACK_IMPORTED_MODULE_0]) => {\n\treturn __webpack_require__.v(exports, module.id, \"03257114f6704ea051f4\", {\n\t\t\"./draught_bg.js\": {\n\t\t\t\"__wbindgen_string_new\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_string_new,\n\t\t\t\"__wbindgen_object_drop_ref\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_object_drop_ref,\n\t\t\t\"__wbg_log_9a99fb1af846153b\": WEBPACK_IMPORTED_MODULE_0.__wbg_log_9a99fb1af846153b,\n\t\t\t\"__wbg_new_59cb74e423758ede\": WEBPACK_IMPORTED_MODULE_0.__wbg_new_59cb74e423758ede,\n\t\t\t\"__wbg_stack_558ba5917b466edd\": WEBPACK_IMPORTED_MODULE_0.__wbg_stack_558ba5917b466edd,\n\t\t\t\"__wbg_error_4bb6c2a97407129a\": WEBPACK_IMPORTED_MODULE_0.__wbg_error_4bb6c2a97407129a,\n\t\t\t\"__wbindgen_throw\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_throw\n\t\t}\n\t});\n}\n__webpack_require__.a(module, (__webpack_handle_async_dependencies__) => {\n\t/* harmony import */ var WEBPACK_IMPORTED_MODULE_0 = __webpack_require__(/*! ./draught_bg.js */ \"../pkg/draught_bg.js\");\n\tvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([WEBPACK_IMPORTED_MODULE_0]);\n\treturn __webpack_async_dependencies__.then ? __webpack_async_dependencies__.then(__webpack_instantiate__) : __webpack_instantiate__(__webpack_async_dependencies__);\n}, 1);\n\n//# sourceURL=webpack://draught/../pkg/draught_bg.wasm?"); - -/***/ }), - -/***/ "./index.js": -/*!******************!*\ - !*** ./index.js ***! - \******************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__) => {\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var draught__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! draught */ \"../pkg/draught_bg.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([draught__WEBPACK_IMPORTED_MODULE_0__]);\ndraught__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? await __webpack_async_dependencies__ : __webpack_async_dependencies__)[0];\n\n\n\n// let PLAY = true;\n// let PLAY = false;\n(0,draught__WEBPACK_IMPORTED_MODULE_0__.init_game)();\n\nconst canvas = document.getElementById(\"game-canvas\");\nconst ctx = canvas.getContext('2d');\n\n});\n\n//# sourceURL=webpack://draught/./index.js?"); - -/***/ }) - -}]); \ No newline at end of file