From 1068a447ba944d12586bf09c4c108c7035d7f609 Mon Sep 17 00:00:00 2001 From: Sarsoo Date: Sat, 30 Apr 2022 09:00:49 +0000 Subject: [PATCH] deploy: d775bc9ddcc19aa538d17112ffe03accdcca9858 --- 10.bootstrap.js | 2 +- 10.bootstrap.js.map | 2 +- CNAME | 1 - ac1cc8e64ef878ddfae5.module.wasm | Bin 124192 -> 0 bytes doc/ayu.css | 2 +- doc/dark.css | 2 +- doc/draught/all.html | 9 +- doc/draught/board/constant.STD_HEIGHT.html | 10 +- doc/draught/board/constant.STD_WIDTH.html | 10 +- ...t.__wbg_get_board_current_turn__const.html | 8 +- ...onstant.__wbg_get_board_height__const.html | 8 +- ...constant.__wbg_get_board_width__const.html | 8 +- .../constant.__wbg_get_brdidx_col__const.html | 8 +- .../constant.__wbg_get_brdidx_row__const.html | 8 +- ...stant.__wbg_get_piece_strength__const.html | 8 +- .../constant.__wbg_get_piece_team__const.html | 8 +- ...tant.__wbg_get_square_occupant__const.html | 8 +- ...onstant.__wbg_get_square_state__const.html | 8 +- doc/draught/board/enums/enum.MoveType.html | 66 +++-- doc/draught/board/enums/enum.Moveable.html | 64 +++-- doc/draught/board/enums/enum.SquareState.html | 70 ++--- doc/draught/board/enums/enum.Strength.html | 66 +++-- doc/draught/board/enums/enum.Team.html | 72 ++--- doc/draught/board/enums/index.html | 10 +- doc/draught/board/index.html | 10 +- doc/draught/board/iter/index.html | 10 +- .../board/iter/struct.PieceIterator.html | 260 +++++++++--------- .../board/iter/struct.RowIndexIterator.html | 260 +++++++++--------- .../board/iter/struct.RowSquareIterator.html | 258 ++++++++--------- doc/draught/board/struct.Board.html | 168 +++++------ doc/draught/board/struct.BrdIdx.html | 86 +++--- doc/draught/board/struct.Direction.html | 68 ++--- doc/draught/board/struct.Piece.html | 78 +++--- doc/draught/board/struct.Square.html | 90 +++--- doc/draught/comp/index.html | 10 +- doc/draught/comp/struct.BoardNode.html | 50 ++-- doc/draught/comp/struct.Computer.html | 62 +++-- doc/draught/comp/struct.Move.html | 50 ++-- ...sm_bindgen_generated_init_wasm__const.html | 8 +- doc/draught/fn.init_wasm.html | 8 +- ...__wbg_get_game_last_node_count__const.html | 8 +- ....__wbg_get_game_perfect_chance__const.html | 8 +- doc/draught/game/index.html | 10 +- doc/draught/game/struct.Game.html | 124 +++++---- doc/draught/index.html | 10 +- doc/draught/macro.log.html | 12 +- doc/draught/macro.log_error.html | 12 +- doc/draught/paint/constant.BLACK_PIECE.html | 10 +- .../paint/constant.BLACK_PIECE_OUTLINE.html | 10 +- doc/draught/paint/constant.BLACK_SQUARE.html | 10 +- doc/draught/paint/constant.DRAW_OUTLINE.html | 10 +- .../paint/constant.DRAW_PIECE_OUTLINES.html | 10 +- doc/draught/paint/constant.KING_OUTLINE.html | 10 +- doc/draught/paint/constant.OUTLINE_WIDTH.html | 10 +- .../constant.PIECE_OUTLINE_PROPORTION.html | 10 +- .../paint/constant.PIECE_PROPORTION.html | 10 +- .../paint/constant.SELECTED_PIECE.html | 10 +- .../constant.SELECTED_PIECE_OUTLINE.html | 10 +- .../paint/constant.SQUARE_OUTLINE.html | 10 +- doc/draught/paint/constant.WHITE_PIECE.html | 10 +- .../paint/constant.WHITE_PIECE_OUTLINE.html | 10 +- doc/draught/paint/constant.WHITE_SQUARE.html | 10 +- doc/draught/paint/index.html | 10 +- doc/draught/paint/struct.Painter.html | 98 +++---- doc/draught/utils/fn.set_panic_hook.html | 8 +- doc/draught/utils/index.html | 10 +- doc/favicon-16x16.png | Bin 2214 -> 715 bytes doc/favicon-32x32.png | Bin 2919 -> 1125 bytes doc/implementors/core/clone/trait.Clone.js | 2 +- doc/implementors/core/cmp/trait.Eq.js | 2 +- doc/implementors/core/cmp/trait.PartialEq.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.Copy.js | 2 +- doc/implementors/core/marker/trait.Freeze.js | 2 +- doc/implementors/core/marker/trait.Send.js | 2 +- .../core/marker/trait.StructuralEq.js | 2 +- .../core/marker/trait.StructuralPartialEq.js | 2 +- doc/implementors/core/marker/trait.Sync.js | 2 +- doc/implementors/core/marker/trait.Unpin.js | 2 +- .../panic/unwind_safe/trait.RefUnwindSafe.js | 2 +- .../panic/unwind_safe/trait.UnwindSafe.js | 2 +- doc/light.css | 2 +- doc/main.js | 2 +- doc/rust-logo.png | Bin 5758 -> 0 bytes doc/rust-logo.svg | 61 ++++ doc/rustdoc.css | 2 +- doc/search-index.js | 2 +- doc/search.js | 3 +- doc/settings.css | 2 +- doc/settings.html | 18 +- doc/settings.js | 2 +- doc/source-script.js | 2 +- doc/src/draught/board/enums.rs.html | 11 +- doc/src/draught/board/iter.rs.html | 11 +- doc/src/draught/board/mod.rs.html | 11 +- doc/src/draught/comp/mod.rs.html | 11 +- doc/src/draught/game/mod.rs.html | 11 +- doc/src/draught/lib.rs.html | 11 +- doc/src/draught/paint.rs.html | 11 +- doc/src/draught/utils.rs.html | 11 +- doc/storage.js | 2 +- ed5ad1819e47a070ceaf.module.wasm | Bin 0 -> 124951 bytes 105 files changed, 1494 insertions(+), 1118 deletions(-) delete mode 100644 CNAME delete mode 100644 ac1cc8e64ef878ddfae5.module.wasm delete mode 100644 doc/rust-logo.png create mode 100644 doc/rust-logo.svg create mode 100644 ed5ad1819e47a070ceaf.module.wasm diff --git a/10.bootstrap.js b/10.bootstrap.js index 2b2bf90..c6cf891 100644 --- a/10.bootstrap.js +++ b/10.bootstrap.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkdraught=self.webpackChunkdraught||[]).push([[10],{171:(t,e,r)=>{r.a(t,(async(n,_)=>{try{r.d(e,{CU:()=>pt,CZ:()=>ot,Ck:()=>R,DA:()=>P,EB:()=>vt,GR:()=>ut,Ih:()=>W,K0:()=>L,Mz:()=>xt,N_:()=>_t,Or:()=>Nt,Os:()=>K,Ox:()=>it,Qu:()=>mt,RA:()=>dt,S2:()=>at,SZ:()=>S,Si:()=>gt,Ts:()=>Tt,Tt:()=>N,U5:()=>D,XP:()=>F,Yc:()=>yt,Yl:()=>lt,Z4:()=>ft,Zu:()=>It,_G:()=>Et,ae:()=>J,bf:()=>ht,c7:()=>bt,cF:()=>nt,fY:()=>jt,gk:()=>$,h4:()=>H,i0:()=>j,iY:()=>Y,kC:()=>Ot,kP:()=>st,lA:()=>A,mS:()=>G,m_:()=>St,oH:()=>Bt,on:()=>ct,p$:()=>V,pv:()=>rt,q5:()=>tt,r2:()=>et,rf:()=>kt,rh:()=>U,tL:()=>wt,ug:()=>M,wc:()=>E,xA:()=>X,yX:()=>z,yq:()=>Z,zG:()=>Q});var a=r(657);t=r.hmd(t);var c=n([a]);a=(c.then?(await c)():c)[0];const o=new Array(32).fill(void 0);function i(t){return o[t]}o.push(void 0,null,!0,!1);let s=o.length;function u(t){t<36||(o[t]=s,s=t)}function l(t){const e=i(t);return u(t),e}let p=new("undefined"==typeof TextDecoder?(0,t.require)("util").TextDecoder:TextDecoder)("utf-8",{ignoreBOM:!0,fatal:!0});p.decode();let d=null;function g(){return null!==d&&d.buffer===a.memory.buffer||(d=new Uint8Array(a.memory.buffer)),d}function b(t,e){return p.decode(g().subarray(t,t+e))}function h(t){s===o.length&&o.push(o.length+1);const e=s;return s=o[e],o[e]=t,e}function f(t){const e=typeof t;if("number"==e||"boolean"==e||null==t)return`${t}`;if("string"==e)return`"${t}"`;if("symbol"==e){const e=t.description;return null==e?"Symbol":`Symbol(${e})`}if("function"==e){const e=t.name;return"string"==typeof e&&e.length>0?`Function(${e})`:"Function"}if(Array.isArray(t)){const e=t.length;let r="[";e>0&&(r+=f(t[0]));for(let n=1;n1))return toString.call(t);if(n=r[1],"Object"==n)try{return"Object("+JSON.stringify(t)+")"}catch(t){return"Object"}return t instanceof Error?`${t.name}: ${t.message}\n${t.stack}`:n}let w=0,m=new("undefined"==typeof TextEncoder?(0,t.require)("util").TextEncoder:TextEncoder)("utf-8");const v="function"==typeof m.encodeInto?function(t,e){return m.encodeInto(t,e)}:function(t,e){const r=m.encode(t);return e.set(r),{read:t.length,written:r.length}};function y(t,e,r){if(void 0===r){const r=m.encode(t),n=e(r.length);return g().subarray(n,n+r.length).set(r),w=r.length,n}let n=t.length,_=e(n);const a=g();let c=0;for(;c127)break;a[_+c]=e}if(c!==n){0!==c&&(t=t.slice(c)),_=r(_,n,n=c+3*t.length);const e=g().subarray(_+c,_+n);c+=v(t,e).written}return w=c,_}let k=null;function T(){return null!==k&&k.buffer===a.memory.buffer||(k=new Int32Array(a.memory.buffer)),k}function x(t){return null==t}function I(t,e){if(!(t instanceof e))throw new Error(`expected instance of ${e.name}`);return t.ptr}function E(){a.init_wasm()}function O(t,e){try{return t.apply(this,e)}catch(t){a.__wbindgen_exn_store(h(t))}}Object.freeze({Move:0,0:"Move",Jump:1,1:"Jump"});const S=Object.freeze({Black:0,0:"Black",White:1,1:"White"}),j=(Object.freeze({Man:0,0:"Man",King:1,1:"King"}),Object.freeze({Empty:0,0:"Empty",Occupied:1,1:"Occupied",Unplayable:2,2:"Unplayable"})),N=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"});class B{static __wrap(t){const e=Object.create(B.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();a.__wbg_board_free(t)}get width(){return a.__wbg_get_board_width(this.ptr)>>>0}set width(t){a.__wbg_set_board_width(this.ptr,t)}get height(){return a.__wbg_get_board_height(this.ptr)>>>0}set height(t){a.__wbg_set_board_height(this.ptr,t)}get current_turn(){return a.__wbg_get_board_current_turn(this.ptr)>>>0}set current_turn(t){a.__wbg_set_board_current_turn(this.ptr,t)}cell(t){var e=a.board_cell(this.ptr,t);return q.__wrap(e)}set_cell(t,e){I(e,q);var r=e.ptr;e.ptr=0,a.board_set_cell(this.ptr,t,r)}grid_cell(t){I(t,U);var e=t.ptr;t.ptr=0;var r=a.board_grid_cell(this.ptr,e);return q.__wrap(r)}cell_index(t,e){return a.board_cell_index(this.ptr,t,e)>>>0}cell_idx(t){I(t,U);var e=t.ptr;return t.ptr=0,a.board_cell_idx(this.ptr,e)>>>0}board_index(t){var e=a.board_board_index(this.ptr,t);return U.__wrap(e)}can_move(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;return e.ptr=0,a.board_can_move(this.ptr,r,n)>>>0}validate_man_move(t,e,r){I(t,U);var n=t.ptr;t.ptr=0,I(e,U);var _=e.ptr;e.ptr=0,I(r,C);var c=r.ptr;return r.ptr=0,a.board_validate_man_move(this.ptr,n,_,c)>>>0}validate_king_move(t,e,r){I(t,U);var n=t.ptr;t.ptr=0,I(e,U);var _=e.ptr;e.ptr=0,I(r,C);var c=r.ptr;return r.ptr=0,a.board_validate_king_move(this.ptr,n,_,c)>>>0}jumpee_idx(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;return e.ptr=0,a.board_jumpee_idx(this.ptr,r,n)>>>0}cells(){return a.board_cells(this.ptr)}num_cells(){return a.board_num_cells(this.ptr)>>>0}num_pieces(){return a.board_num_pieces(this.ptr)>>>0}num_player(t){return a.board_num_player(this.ptr,t)>>>0}score(){return a.board_score(this.ptr)}cell_state(t){return a.board_cell_state(this.ptr,t)>>>0}apply_move(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;e.ptr=0;var _=a.board_apply_move(this.ptr,r,n);return B.__wrap(_)}apply_jump(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;e.ptr=0;var _=a.board_apply_jump(this.ptr,r,n);return B.__wrap(_)}king_row_idx(){return a.board_king_row_idx(this.ptr)>>>0}static validate_jumpee(t,e){I(t,q);var r=t.ptr;t.ptr=0,I(e,C);var n=e.ptr;return e.ptr=0,a.board_validate_jumpee(r,n)>>>0}static check_jumpee_team(t,e){I(t,C);var r=t.ptr;t.ptr=0,I(e,C);var n=e.ptr;return e.ptr=0,0!==a.board_check_jumpee_team(r,n)}constructor(t,e,r){var n=a.board_new(t,e,r);return B.__wrap(n)}static init_game(t,e){I(t,B);var r=t.ptr;t.ptr=0;var n=a.board_init_game(r,e);return B.__wrap(n)}}class U{static __wrap(t){const e=Object.create(U.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();a.__wbg_brdidx_free(t)}get row(){return a.__wbg_get_brdidx_row(this.ptr)>>>0}set row(t){a.__wbg_set_brdidx_row(this.ptr,t)}get col(){return a.__wbg_get_brdidx_col(this.ptr)>>>0}set col(t){a.__wbg_set_brdidx_col(this.ptr,t)}constructor(t,e){var r=a.brdidx_from(t,e);return U.__wrap(r)}eq(t){return I(t,U),0!==a.brdidx_eq(this.ptr,t.ptr)}}class A{static __wrap(t){const e=Object.create(A.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();a.__wbg_game_free(t)}get last_node_count(){return a.__wbg_get_game_last_node_count(this.ptr)>>>0}set last_node_count(t){a.__wbg_set_game_last_node_count(this.ptr,t)}get perfect_chance(){return a.__wbg_get_game_perfect_chance(this.ptr)}set perfect_chance(t){a.__wbg_set_game_perfect_chance(this.ptr,t)}current_board_cells(){return a.game_current_board_cells(this.ptr)}current_board_len(){return a.game_current_board_len(this.ptr)>>>0}current_turn(){return a.game_current_turn(this.ptr)>>>0}score(){return a.game_score(this.ptr)}winning(){var t=a.game_winning(this.ptr);return 2===t?void 0:t}has_won(){var t=a.game_has_won(this.ptr);return 2===t?void 0:t}current_cell_state(t){I(t,U);var e=a.game_current_cell_state(this.ptr,t.ptr);return q.__wrap(e)}set_search_depth(t){a.game_set_search_depth(this.ptr,t)}set_selected(t){I(t,U),a.game_set_selected(this.ptr,t.ptr)}set_perfect_chance(t){a.game_set_perfect_chance(this.ptr,t)}clear_selected(){a.game_clear_selected(this.ptr)}make_move(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;return e.ptr=0,a.game_make_move(this.ptr,r,n)>>>0}execute_move(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;e.ptr=0,a.game_execute_move(this.ptr,r,n)}execute_jump(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;e.ptr=0,a.game_execute_jump(this.ptr,r,n)}push_new_board(t){I(t,B);var e=t.ptr;t.ptr=0,a.game_push_new_board(this.ptr,e)}set_current(t){I(t,B);var e=t.ptr;t.ptr=0,a.game_set_current(this.ptr,e)}constructor(t,e,r,n,_){var c=a.game_new(t,e,r,n,_);return A.__wrap(c)}static new_with_canvas(t,e,r,n,_,c,o,i){var s=y(c,a.__wbindgen_malloc,a.__wbindgen_realloc),u=w,l=a.game_new_with_canvas(t,e,r,n,_,s,u,o,i);return A.__wrap(l)}set_painter(t){I(t,R);var e=t.ptr;t.ptr=0,a.game_set_painter(this.ptr,e)}draw(){a.game_draw(this.ptr)}ai_move(){a.game_ai_move(this.ptr)}}class R{static __wrap(t){const e=Object.create(R.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();a.__wbg_painter_free(t)}constructor(t,e,r){var n=y(r,a.__wbindgen_malloc,a.__wbindgen_realloc),_=w,c=a.painter_new(t,e,n,_);return R.__wrap(c)}static new_with_canvas(t,e,r){var n=a.painter_new_with_canvas(t,e,h(r));return R.__wrap(n)}set_square_outline(t){a.painter_set_square_outline(this.ptr,h(t))}set_outline_width(t){a.painter_set_outline_width(this.ptr,t)}set_draw_outline(t){a.painter_set_draw_outline(this.ptr,t)}reset_dimensions(){a.painter_reset_dimensions(this.ptr)}validate_board_dim(t){return I(t,B),0!==a.painter_validate_board_dim(this.ptr,t.ptr)}draw(t){I(t,B),a.painter_draw(this.ptr,t.ptr)}}class C{static __wrap(t){const e=Object.create(C.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();a.__wbg_piece_free(t)}get team(){return a.__wbg_get_piece_team(this.ptr)>>>0}set team(t){a.__wbg_set_piece_team(this.ptr,t)}get strength(){return a.__wbg_get_piece_strength(this.ptr)>>>0}set strength(t){a.__wbg_set_piece_strength(this.ptr,t)}constructor(t,e){var r=a.piece_new(t,e);return C.__wrap(r)}}class q{static __wrap(t){const e=Object.create(q.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();a.__wbg_square_free(t)}get occupant(){var t=a.__wbg_get_square_occupant(this.ptr);return 0===t?void 0:C.__wrap(t)}set occupant(t){let e=0;x(t)||(I(t,C),e=t.ptr,t.ptr=0),a.__wbg_set_square_occupant(this.ptr,e)}get state(){return a.__wbg_get_square_state(this.ptr)>>>0}set state(t){a.__wbg_set_square_state(this.ptr,t)}constructor(t,e){let r=0;x(e)||(I(e,C),r=e.ptr,e.ptr=0);var n=a.square_new(t,r);return q.__wrap(n)}static pc(t,e){var r=a.square_pc(t,e);return q.__wrap(r)}static empty(){var t=a.square_empty();return q.__wrap(t)}static unplay(){var t=a.square_unplay();return q.__wrap(t)}}function M(t){l(t)}function H(t,e){return h(b(t,e))}function W(){return h(new Error)}function Z(t,e){var r=y(i(e).stack,a.__wbindgen_malloc,a.__wbindgen_realloc),n=w;T()[t/4+1]=n,T()[t/4+0]=r}function $(t,e){try{console.error(b(t,e))}finally{a.__wbindgen_free(t,e)}}function D(){return O((function(){return h(self.self)}),arguments)}function Y(t){return h(i(t).crypto)}function G(t){return h(i(t).msCrypto)}function F(t){return void 0===i(t)}function L(t,e,r){return h(i(t).require(b(e,r)))}function z(t){return h(i(t).getRandomValues)}function J(t,e){i(t).getRandomValues(i(e))}function K(t,e,r){var n,_;i(t).randomFillSync((n=e,_=r,g().subarray(n/1,n/1+_)))}function P(){return h(t)}function X(t){return i(t)instanceof Window}function V(t){var e=i(t).document;return x(e)?0:h(e)}function Q(t,e,r){var n=i(t).getElementById(b(e,r));return x(n)?0:h(n)}function tt(t){console.error(i(t))}function et(t){console.log(i(t))}function rt(t){return i(t)instanceof CanvasRenderingContext2D}function nt(t,e){i(t).strokeStyle=i(e)}function _t(t,e){i(t).fillStyle=i(e)}function at(t,e){i(t).lineWidth=e}function ct(t){i(t).beginPath()}function ot(t){i(t).fill()}function it(t){i(t).stroke()}function st(){return O((function(t,e,r,n,_,a){i(t).arc(e,r,n,_,a)}),arguments)}function ut(t,e,r,n,_){i(t).fillRect(e,r,n,_)}function lt(t,e,r,n,_){i(t).strokeRect(e,r,n,_)}function pt(t){return i(t)instanceof HTMLCanvasElement}function dt(t,e){i(t).width=e>>>0}function gt(t,e){i(t).height=e>>>0}function bt(){return O((function(t,e,r){var n=i(t).getContext(b(e,r));return x(n)?0:h(n)}),arguments)}function ht(t,e){return h(new Function(b(t,e)))}function ft(){return O((function(t,e){return h(i(t).call(i(e)))}),arguments)}function wt(){return O((function(){return h(self.self)}),arguments)}function mt(){return O((function(){return h(window.window)}),arguments)}function vt(){return O((function(){return h(globalThis.globalThis)}),arguments)}function yt(){return O((function(){return h(r.g.global)}),arguments)}function kt(t){return h(i(t).buffer)}function Tt(t){return h(new Uint8Array(i(t)))}function xt(t,e,r){i(t).set(i(e),r>>>0)}function It(t){return i(t).length}function Et(t){return h(new Uint8Array(t>>>0))}function Ot(t,e,r){return h(i(t).subarray(e>>>0,r>>>0))}function St(t){return h(i(t))}function jt(t,e){var r=y(f(i(e)),a.__wbindgen_malloc,a.__wbindgen_realloc),n=w;T()[t/4+1]=n,T()[t/4+0]=r}function Nt(t,e){throw new Error(b(t,e))}function Bt(){return h(a.memory)}_()}catch(Ut){_(Ut)}}))},10:(t,e,r)=>{r.a(t,(async(t,n)=>{try{r.r(e);var _=r(171),a=t([_]);_=(a.then?(await a)():a)[0];const l=720,p=720;var c=8,o=8,i=3,s=4,u=.5;const d=3e3,g=3e3,b={HUMAN_TURN:{THINKING:"human_turn.thinking",FROM_SELECTED:"human_turn.from_selected"},AI_TURN:"ai_turn"};(0,_.wc)(),document.getElementById("status-p");const h=document.getElementById("status-d"),f=document.getElementById("team-p"),w=document.getElementById("node-count"),m=document.getElementById("winning-p");document.getElementById("startBtn").onclick=S;let v=null,y=null,k=B,T=b.HUMAN_TURN.THINKING,x=null,I=null,E=[];S();const O=document.getElementById("game-canvas");function S(){x=new _.lA(c,o,i,_.SZ.Black,s),I=new _.Ck(l,p,"game-canvas"),x.set_painter(I),x.draw(),clearInterval(v),U(),A(),E=[],T=b.HUMAN_TURN.THINKING}function j(t){switch(T){case b.HUMAN_TURN.THINKING:if(x.current_cell_state(t).state!=_.i0.Occupied)return;if(x.current_cell_state(t).occupant.team!=x.current_turn())return;E.push(t),T=b.HUMAN_TURN.FROM_SELECTED,x.set_selected(t),x.draw();break;case b.HUMAN_TURN.FROM_SELECTED:if(!E[0].eq(t)){if(x.current_cell_state(t).state!=_.i0.Empty)return;if(E.push(t),2!=E.length)return k(`Error: wrong number of clicks to process ${E.length}`),void console.error(`Error: wrong number of clicks to process ${E.length}`);switch(x.make_move(E[0],E[1])){case _.Tt.Allowed:Y.checked&&void 0===x.has_won()&&(x.ai_move(),w.innerText=`searched ${x.last_node_count.toLocaleString("en-GB")} possible moves`);break;case _.Tt.IllegalTrajectory:k("You can't move like that!");break;case _.Tt.JumpingSameTeam:k("You can't jump your own piece!");break;case _.Tt.NoJumpablePiece:k("There's nothing to jump!");break;case _.Tt.OccupiedDest:k("There's a piece there!");break;case _.Tt.OutOfBounds:k("That square's not on the board! (how have you managed that?)");break;case _.Tt.UnoccupiedSrc:k("There's no piece to move!");break;case _.Tt.Unplayable:k("That's not a playable square!");break;case _.Tt.WrongTeamSrc:k("That's not your piece!")}}x.clear_selected(),x.draw(),E=[],T=b.HUMAN_TURN.THINKING;break;case b.AI_TURN:console.log("It's the AI's turn!")}U(),A(),R()}function N(t,e){var r=t.getBoundingClientRect();return{x:e.clientX-r.left,y:e.clientY-r.top}}function B(t,e="danger",r=!0){null!=y&&clearInterval(y),h.className=`alert alert-${e}`,h.innerText=t,h.hidden=!1,r&&(y=setTimeout((()=>{h.hidden=!0}),d))}function U(){switch(x.current_turn()){case _.SZ.White:f.innerText="⚪ White ⚪";break;case _.SZ.Black:f.innerText="🔴 Black 🔴"}}function A(){switch(x.winning()){case void 0:m.innerText="";break;case _.SZ.White:m.innerText="👑 White 👑";break;case _.SZ.Black:m.innerText="👑 Black 👑"}}function R(){switch(x.has_won()){case void 0:break;case _.SZ.White:k("You Lost!"),v=setInterval((()=>{S()}),g);break;case _.SZ.Black:k("You Won!","success"),v=setInterval((()=>{S()}),g)}}O.addEventListener("click",(t=>{var e=N(O,t);j(new _.rh(Math.floor(e.y/O.clientHeight*o),Math.floor(e.x/O.clientWidth*c)))}));const C=document.getElementById("width"),q=()=>{c=parseInt(C.value),S()};C.onchange=q,C.value=8;const M=document.getElementById("height"),H=()=>{o=parseInt(M.value),W.max=o/2-1,S()};M.onchange=H,M.value=8;const W=document.getElementById("play_rows"),Z=()=>{i=parseInt(W.value),S()};W.onchange=Z,W.value=3;const $=document.getElementById("ai_search_depth"),D=()=>{s=parseInt($.value),x.set_search_depth(s),s>4&&k("This increases thinking time exponentially, be careful (probably don't go past 6)","warning")};$.onchange=D,$.value=4;const Y=document.getElementById("ai-checkbox"),G=()=>{};Y.onchange=G;const F=document.getElementById("ai_difficulty"),L=()=>{u=parseInt(F.value)/100,x.set_perfect_chance(u)};F.onchange=L,F.value=50,n()}catch(z){n(z)}}))},657:(t,e,r)=>{r.a(t,(async(n,_)=>{try{var a,c=n([a=r(171)]),[a]=c.then?(await c)():c;await r.v(e,t.id,"ac1cc8e64ef878ddfae5",{"./draught_bg.js":{__wbindgen_object_drop_ref:a.ug,__wbindgen_string_new:a.h4,__wbg_new_693216e109162396:a.Ih,__wbg_stack_0ddaca5d1abfb52f:a.yq,__wbg_error_09919627ac0992f5:a.gk,__wbg_self_86b4b13392c7af56:a.U5,__wbg_crypto_b8c92eaac23d0d80:a.iY,__wbg_msCrypto_9ad6677321a08dd8:a.mS,__wbindgen_is_undefined:a.XP,__wbg_require_f5521a5b85ad2542:a.K0,__wbg_getRandomValues_dd27e6b0652b3236:a.yX,__wbg_getRandomValues_e57c9b75ddead065:a.ae,__wbg_randomFillSync_d2ba53160aec6aba:a.Os,__wbg_static_accessor_MODULE_452b4680e8614c81:a.DA,__wbg_instanceof_Window_434ce1849eb4e0fc:a.xA,__wbg_document_5edd43643d1060d9:a.p$,__wbg_getElementById_b30e88aff96f66a1:a.zG,__wbg_error_ca520cb687b085a1:a.q5,__wbg_log_fbd13631356d44e4:a.r2,__wbg_instanceof_CanvasRenderingContext2d_e8b3a478a1b32d55:a.pv,__wbg_setstrokeStyle_4c9ff9ea0c0c4092:a.cF,__wbg_setfillStyle_680401a47926faa5:a.N_,__wbg_setlineWidth_4819b1bc5c54719b:a.S2,__wbg_beginPath_5a6fcb370b5b8eb3:a.on,__wbg_fill_0ced47ff22561640:a.CZ,__wbg_stroke_46c6315e5e1f35db:a.Ox,__wbg_arc_b3cb1027882c81bb:a.kP,__wbg_fillRect_7ad775936c1881ce:a.GR,__wbg_strokeRect_a3f2f571f1ad9730:a.Yl,__wbg_instanceof_HtmlCanvasElement_a6157e470d06b638:a.CU,__wbg_setwidth_362e8db8cbadbe96:a.RA,__wbg_setheight_28f53831182cc410:a.Si,__wbg_getContext_bd4e9445094eda84:a.c7,__wbg_newnoargs_f579424187aa1717:a.bf,__wbg_call_89558c3e96703ca1:a.Z4,__wbg_self_e23d74ae45fb17d1:a.tL,__wbg_window_b4be7f48b24ac56e:a.Qu,__wbg_globalThis_d61b1f48a57191ae:a.EB,__wbg_global_e7669da72fd7f239:a.Yc,__wbg_buffer_5e74a88a1424a2e0:a.rf,__wbg_new_e3b800e570795b3c:a.Ts,__wbg_set_5b8081e9d002f0df:a.Mz,__wbg_length_30803400a8f15c59:a.Zu,__wbg_newwithlength_5f4ce114a24dfe1e:a._G,__wbg_subarray_a68f835ca2af506f:a.kC,__wbindgen_object_clone_ref:a.m_,__wbindgen_debug_string:a.fY,__wbindgen_throw:a.Or,__wbindgen_memory:a.oH}}),_()}catch(t){_(t)}}),1)}}]); +"use strict";(self.webpackChunkdraught=self.webpackChunkdraught||[]).push([[10],{171:(t,e,r)=>{r.a(t,(async(n,_)=>{try{r.d(e,{C4:()=>V,Ck:()=>q,DA:()=>G,EF:()=>Tt,HS:()=>Q,Ih:()=>W,In:()=>ot,Ip:()=>xt,KK:()=>pt,KQ:()=>yt,M9:()=>it,OF:()=>wt,Oo:()=>It,Or:()=>Nt,Os:()=>P,SZ:()=>S,T8:()=>_t,TL:()=>ht,Tt:()=>N,U5:()=>F,U7:()=>at,Ws:()=>nt,XP:()=>L,YN:()=>Ot,_3:()=>ft,ae:()=>z,bx:()=>bt,cb:()=>kt,fO:()=>X,fY:()=>jt,fi:()=>gt,gk:()=>K,h4:()=>H,hx:()=>ut,i0:()=>j,iY:()=>$,k4:()=>dt,kq:()=>et,lA:()=>A,mS:()=>Y,m_:()=>St,nf:()=>rt,oH:()=>Bt,pt:()=>tt,pv:()=>ct,r2:()=>J,rC:()=>Et,rh:()=>U,u6:()=>st,ug:()=>M,vm:()=>vt,wc:()=>E,xB:()=>mt,yX:()=>Z,yq:()=>D,z2:()=>lt});var a=r(657);t=r.hmd(t);var c=n([a]);a=(c.then?(await c)():c)[0];const o=new Array(32).fill(void 0);function i(t){return o[t]}o.push(void 0,null,!0,!1);let s=o.length;function u(t){t<36||(o[t]=s,s=t)}function l(t){const e=i(t);return u(t),e}let p=new("undefined"==typeof TextDecoder?(0,t.require)("util").TextDecoder:TextDecoder)("utf-8",{ignoreBOM:!0,fatal:!0});p.decode();let d=null;function b(){return null!==d&&d.buffer===a.memory.buffer||(d=new Uint8Array(a.memory.buffer)),d}function g(t,e){return p.decode(b().subarray(t,t+e))}function h(t){s===o.length&&o.push(o.length+1);const e=s;return s=o[e],o[e]=t,e}function f(t){const e=typeof t;if("number"==e||"boolean"==e||null==t)return`${t}`;if("string"==e)return`"${t}"`;if("symbol"==e){const e=t.description;return null==e?"Symbol":`Symbol(${e})`}if("function"==e){const e=t.name;return"string"==typeof e&&e.length>0?`Function(${e})`:"Function"}if(Array.isArray(t)){const e=t.length;let r="[";e>0&&(r+=f(t[0]));for(let n=1;n1))return toString.call(t);if(n=r[1],"Object"==n)try{return"Object("+JSON.stringify(t)+")"}catch(t){return"Object"}return t instanceof Error?`${t.name}: ${t.message}\n${t.stack}`:n}let w=0,m=new("undefined"==typeof TextEncoder?(0,t.require)("util").TextEncoder:TextEncoder)("utf-8");const y="function"==typeof m.encodeInto?function(t,e){return m.encodeInto(t,e)}:function(t,e){const r=m.encode(t);return e.set(r),{read:t.length,written:r.length}};function v(t,e,r){if(void 0===r){const r=m.encode(t),n=e(r.length);return b().subarray(n,n+r.length).set(r),w=r.length,n}let n=t.length,_=e(n);const a=b();let c=0;for(;c127)break;a[_+c]=e}if(c!==n){0!==c&&(t=t.slice(c)),_=r(_,n,n=c+3*t.length);const e=b().subarray(_+c,_+n);c+=y(t,e).written}return w=c,_}let T=null;function k(){return null!==T&&T.buffer===a.memory.buffer||(T=new Int32Array(a.memory.buffer)),T}function x(t){return null==t}function I(t,e){if(!(t instanceof e))throw new Error(`expected instance of ${e.name}`);return t.ptr}function E(){a.init_wasm()}function O(t,e){try{return t.apply(this,e)}catch(t){a.__wbindgen_exn_store(h(t))}}Object.freeze({Move:0,0:"Move",Jump:1,1:"Jump"});const S=Object.freeze({Black:0,0:"Black",White:1,1:"White"}),j=(Object.freeze({Man:0,0:"Man",King:1,1:"King"}),Object.freeze({Empty:0,0:"Empty",Occupied:1,1:"Occupied",Unplayable:2,2:"Unplayable"})),N=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"});class B{static __wrap(t){const e=Object.create(B.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();a.__wbg_board_free(t)}get width(){return a.__wbg_get_board_width(this.ptr)>>>0}set width(t){a.__wbg_set_board_width(this.ptr,t)}get height(){return a.__wbg_get_board_height(this.ptr)>>>0}set height(t){a.__wbg_set_board_height(this.ptr,t)}get current_turn(){return a.__wbg_get_board_current_turn(this.ptr)>>>0}set current_turn(t){a.__wbg_set_board_current_turn(this.ptr,t)}cell(t){const e=a.board_cell(this.ptr,t);return R.__wrap(e)}set_cell(t,e){I(e,R);var r=e.ptr;e.ptr=0,a.board_set_cell(this.ptr,t,r)}grid_cell(t){I(t,U);var e=t.ptr;t.ptr=0;const r=a.board_grid_cell(this.ptr,e);return R.__wrap(r)}cell_index(t,e){return a.board_cell_index(this.ptr,t,e)>>>0}cell_idx(t){I(t,U);var e=t.ptr;return t.ptr=0,a.board_cell_idx(this.ptr,e)>>>0}board_index(t){const e=a.board_board_index(this.ptr,t);return U.__wrap(e)}can_move(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;return e.ptr=0,a.board_can_move(this.ptr,r,n)>>>0}validate_man_move(t,e,r){I(t,U);var n=t.ptr;t.ptr=0,I(e,U);var _=e.ptr;e.ptr=0,I(r,C);var c=r.ptr;return r.ptr=0,a.board_validate_man_move(this.ptr,n,_,c)>>>0}validate_king_move(t,e,r){I(t,U);var n=t.ptr;t.ptr=0,I(e,U);var _=e.ptr;e.ptr=0,I(r,C);var c=r.ptr;return r.ptr=0,a.board_validate_king_move(this.ptr,n,_,c)>>>0}jumpee_idx(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;return e.ptr=0,a.board_jumpee_idx(this.ptr,r,n)>>>0}cells(){return a.board_cells(this.ptr)}num_cells(){return a.board_num_cells(this.ptr)>>>0}num_pieces(){return a.board_num_pieces(this.ptr)>>>0}num_player(t){return a.board_num_player(this.ptr,t)>>>0}score(){return a.board_score(this.ptr)}cell_state(t){return a.board_cell_state(this.ptr,t)>>>0}apply_move(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;e.ptr=0;const _=a.board_apply_move(this.ptr,r,n);return B.__wrap(_)}apply_jump(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;e.ptr=0;const _=a.board_apply_jump(this.ptr,r,n);return B.__wrap(_)}king_row_idx(){return a.board_king_row_idx(this.ptr)>>>0}static validate_jumpee(t,e){I(t,R);var r=t.ptr;t.ptr=0,I(e,C);var n=e.ptr;return e.ptr=0,a.board_validate_jumpee(r,n)>>>0}static check_jumpee_team(t,e){I(t,C);var r=t.ptr;t.ptr=0,I(e,C);var n=e.ptr;return e.ptr=0,0!==a.board_check_jumpee_team(r,n)}constructor(t,e,r){const n=a.board_new(t,e,r);return B.__wrap(n)}static init_game(t,e){I(t,B);var r=t.ptr;t.ptr=0;const n=a.board_init_game(r,e);return B.__wrap(n)}}class U{static __wrap(t){const e=Object.create(U.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();a.__wbg_brdidx_free(t)}get row(){return a.__wbg_get_brdidx_row(this.ptr)>>>0}set row(t){a.__wbg_set_brdidx_row(this.ptr,t)}get col(){return a.__wbg_get_brdidx_col(this.ptr)>>>0}set col(t){a.__wbg_set_brdidx_col(this.ptr,t)}constructor(t,e){const r=a.brdidx_from(t,e);return U.__wrap(r)}eq(t){return I(t,U),0!==a.brdidx_eq(this.ptr,t.ptr)}}class A{static __wrap(t){const e=Object.create(A.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();a.__wbg_game_free(t)}get last_node_count(){return a.__wbg_get_game_last_node_count(this.ptr)>>>0}set last_node_count(t){a.__wbg_set_game_last_node_count(this.ptr,t)}get perfect_chance(){return a.__wbg_get_game_perfect_chance(this.ptr)}set perfect_chance(t){a.__wbg_set_game_perfect_chance(this.ptr,t)}current_board_cells(){return a.game_current_board_cells(this.ptr)}current_board_len(){return a.game_current_board_len(this.ptr)>>>0}current_turn(){return a.game_current_turn(this.ptr)>>>0}score(){return a.game_score(this.ptr)}winning(){const t=a.game_winning(this.ptr);return 2===t?void 0:t}has_won(){const t=a.game_has_won(this.ptr);return 2===t?void 0:t}current_cell_state(t){I(t,U);const e=a.game_current_cell_state(this.ptr,t.ptr);return R.__wrap(e)}set_search_depth(t){a.game_set_search_depth(this.ptr,t)}set_selected(t){I(t,U),a.game_set_selected(this.ptr,t.ptr)}set_perfect_chance(t){a.game_set_perfect_chance(this.ptr,t)}clear_selected(){a.game_clear_selected(this.ptr)}make_move(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;return e.ptr=0,a.game_make_move(this.ptr,r,n)>>>0}execute_move(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;e.ptr=0,a.game_execute_move(this.ptr,r,n)}execute_jump(t,e){I(t,U);var r=t.ptr;t.ptr=0,I(e,U);var n=e.ptr;e.ptr=0,a.game_execute_jump(this.ptr,r,n)}push_new_board(t){I(t,B);var e=t.ptr;t.ptr=0,a.game_push_new_board(this.ptr,e)}set_current(t){I(t,B);var e=t.ptr;t.ptr=0,a.game_set_current(this.ptr,e)}constructor(t,e,r,n,_){const c=a.game_new(t,e,r,n,_);return A.__wrap(c)}static new_with_canvas(t,e,r,n,_,c,o,i){const s=v(c,a.__wbindgen_malloc,a.__wbindgen_realloc),u=w,l=a.game_new_with_canvas(t,e,r,n,_,s,u,o,i);return A.__wrap(l)}set_painter(t){I(t,q);var e=t.ptr;t.ptr=0,a.game_set_painter(this.ptr,e)}draw(){a.game_draw(this.ptr)}ai_move(){a.game_ai_move(this.ptr)}}class q{static __wrap(t){const e=Object.create(q.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();a.__wbg_painter_free(t)}constructor(t,e,r){const n=v(r,a.__wbindgen_malloc,a.__wbindgen_realloc),_=w,c=a.painter_new(t,e,n,_);return q.__wrap(c)}static new_with_canvas(t,e,r){const n=a.painter_new_with_canvas(t,e,h(r));return q.__wrap(n)}set_square_outline(t){a.painter_set_square_outline(this.ptr,h(t))}set_outline_width(t){a.painter_set_outline_width(this.ptr,t)}set_draw_outline(t){a.painter_set_draw_outline(this.ptr,t)}reset_dimensions(){a.painter_reset_dimensions(this.ptr)}validate_board_dim(t){return I(t,B),0!==a.painter_validate_board_dim(this.ptr,t.ptr)}draw(t){I(t,B),a.painter_draw(this.ptr,t.ptr)}}class C{static __wrap(t){const e=Object.create(C.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();a.__wbg_piece_free(t)}get team(){return a.__wbg_get_piece_team(this.ptr)>>>0}set team(t){a.__wbg_set_piece_team(this.ptr,t)}get strength(){return a.__wbg_get_piece_strength(this.ptr)>>>0}set strength(t){a.__wbg_set_piece_strength(this.ptr,t)}constructor(t,e){const r=a.piece_new(t,e);return C.__wrap(r)}}class R{static __wrap(t){const e=Object.create(R.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();a.__wbg_square_free(t)}get occupant(){const t=a.__wbg_get_square_occupant(this.ptr);return 0===t?void 0:C.__wrap(t)}set occupant(t){let e=0;x(t)||(I(t,C),e=t.ptr,t.ptr=0),a.__wbg_set_square_occupant(this.ptr,e)}get state(){return a.__wbg_get_square_state(this.ptr)>>>0}set state(t){a.__wbg_set_square_state(this.ptr,t)}constructor(t,e){let r=0;x(e)||(I(e,C),r=e.ptr,e.ptr=0);const n=a.square_new(t,r);return R.__wrap(n)}static pc(t,e){const r=a.square_pc(t,e);return R.__wrap(r)}static empty(){const t=a.square_empty();return R.__wrap(t)}static unplay(){const t=a.square_unplay();return R.__wrap(t)}}function M(t){l(t)}function H(t,e){return h(g(t,e))}function W(){return h(new Error)}function D(t,e){const r=v(i(e).stack,a.__wbindgen_malloc,a.__wbindgen_realloc),n=w;k()[t/4+1]=n,k()[t/4+0]=r}function K(t,e){try{console.error(g(t,e))}finally{a.__wbindgen_free(t,e)}}function F(){return O((function(){return h(self.self)}),arguments)}function $(t){return h(i(t).crypto)}function Y(t){return h(i(t).msCrypto)}function L(t){return void 0===i(t)}function J(t,e,r){return h(i(t).require(g(e,r)))}function Z(t){return h(i(t).getRandomValues)}function z(t,e){i(t).getRandomValues(i(e))}function P(t,e,r){var n,_;i(t).randomFillSync((n=e,_=r,b().subarray(n/1,n/1+_)))}function G(){return h(t)}function X(t){return i(t)instanceof Window}function V(t){const e=i(t).document;return x(e)?0:h(e)}function Q(t,e,r){const n=i(t).getElementById(g(e,r));return x(n)?0:h(n)}function tt(t){console.error(i(t))}function et(t){console.log(i(t))}function rt(t){return i(t)instanceof CanvasRenderingContext2D}function nt(t,e){i(t).strokeStyle=i(e)}function _t(t,e){i(t).fillStyle=i(e)}function at(t,e){i(t).lineWidth=e}function ct(t){i(t).beginPath()}function ot(t){i(t).fill()}function it(t){i(t).stroke()}function st(){return O((function(t,e,r,n,_,a){i(t).arc(e,r,n,_,a)}),arguments)}function ut(t,e,r,n,_){i(t).fillRect(e,r,n,_)}function lt(t,e,r,n,_){i(t).strokeRect(e,r,n,_)}function pt(t){return i(t)instanceof HTMLCanvasElement}function dt(t,e){i(t).width=e>>>0}function bt(t,e){i(t).height=e>>>0}function gt(){return O((function(t,e,r){const n=i(t).getContext(g(e,r));return x(n)?0:h(n)}),arguments)}function ht(t,e){return h(new Function(g(t,e)))}function ft(){return O((function(t,e){return h(i(t).call(i(e)))}),arguments)}function wt(){return O((function(){return h(self.self)}),arguments)}function mt(){return O((function(){return h(window.window)}),arguments)}function yt(){return O((function(){return h(globalThis.globalThis)}),arguments)}function vt(){return O((function(){return h(r.g.global)}),arguments)}function Tt(t){return h(i(t).buffer)}function kt(t){return h(new Uint8Array(i(t)))}function xt(t,e,r){i(t).set(i(e),r>>>0)}function It(t){return i(t).length}function Et(t){return h(new Uint8Array(t>>>0))}function Ot(t,e,r){return h(i(t).subarray(e>>>0,r>>>0))}function St(t){return h(i(t))}function jt(t,e){const r=v(f(i(e)),a.__wbindgen_malloc,a.__wbindgen_realloc),n=w;k()[t/4+1]=n,k()[t/4+0]=r}function Nt(t,e){throw new Error(g(t,e))}function Bt(){return h(a.memory)}_()}catch(Ut){_(Ut)}}))},10:(t,e,r)=>{r.a(t,(async(t,n)=>{try{r.r(e);var _=r(171),a=t([_]);_=(a.then?(await a)():a)[0];const l=720,p=720;var c=8,o=8,i=3,s=4,u=.5;const d=3e3,b=3e3,g={HUMAN_TURN:{THINKING:"human_turn.thinking",FROM_SELECTED:"human_turn.from_selected"},AI_TURN:"ai_turn"};(0,_.wc)(),document.getElementById("status-p");const h=document.getElementById("status-d"),f=document.getElementById("team-p"),w=document.getElementById("node-count"),m=document.getElementById("winning-p");document.getElementById("startBtn").onclick=S;let y=null,v=null,T=B,k=g.HUMAN_TURN.THINKING,x=null,I=null,E=[];S();const O=document.getElementById("game-canvas");function S(){x=new _.lA(c,o,i,_.SZ.Black,s),I=new _.Ck(l,p,"game-canvas"),x.set_painter(I),x.draw(),clearInterval(y),U(),A(),E=[],k=g.HUMAN_TURN.THINKING}function j(t){switch(k){case g.HUMAN_TURN.THINKING:if(x.current_cell_state(t).state!=_.i0.Occupied)return;if(x.current_cell_state(t).occupant.team!=x.current_turn())return;E.push(t),k=g.HUMAN_TURN.FROM_SELECTED,x.set_selected(t),x.draw();break;case g.HUMAN_TURN.FROM_SELECTED:if(!E[0].eq(t)){if(x.current_cell_state(t).state!=_.i0.Empty)return;if(E.push(t),2!=E.length)return T(`Error: wrong number of clicks to process ${E.length}`),void console.error(`Error: wrong number of clicks to process ${E.length}`);switch(x.make_move(E[0],E[1])){case _.Tt.Allowed:$.checked&&void 0===x.has_won()&&(x.ai_move(),w.innerText=`searched ${x.last_node_count.toLocaleString("en-GB")} possible moves`);break;case _.Tt.IllegalTrajectory:T("You can't move like that!");break;case _.Tt.JumpingSameTeam:T("You can't jump your own piece!");break;case _.Tt.NoJumpablePiece:T("There's nothing to jump!");break;case _.Tt.OccupiedDest:T("There's a piece there!");break;case _.Tt.OutOfBounds:T("That square's not on the board! (how have you managed that?)");break;case _.Tt.UnoccupiedSrc:T("There's no piece to move!");break;case _.Tt.Unplayable:T("That's not a playable square!");break;case _.Tt.WrongTeamSrc:T("That's not your piece!")}}x.clear_selected(),x.draw(),E=[],k=g.HUMAN_TURN.THINKING;break;case g.AI_TURN:console.log("It's the AI's turn!")}U(),A(),q()}function N(t,e){var r=t.getBoundingClientRect();return{x:e.clientX-r.left,y:e.clientY-r.top}}function B(t,e="danger",r=!0){null!=v&&clearInterval(v),h.className=`alert alert-${e}`,h.innerText=t,h.hidden=!1,r&&(v=setTimeout((()=>{h.hidden=!0}),d))}function U(){switch(x.current_turn()){case _.SZ.White:f.innerText="⚪ White ⚪";break;case _.SZ.Black:f.innerText="🔴 Black 🔴"}}function A(){switch(x.winning()){case void 0:m.innerText="";break;case _.SZ.White:m.innerText="👑 White 👑";break;case _.SZ.Black:m.innerText="👑 Black 👑"}}function q(){switch(x.has_won()){case void 0:break;case _.SZ.White:T("You Lost!"),y=setInterval((()=>{S()}),b);break;case _.SZ.Black:T("You Won!","success"),y=setInterval((()=>{S()}),b)}}O.addEventListener("click",(t=>{var e=N(O,t);j(new _.rh(Math.floor(e.y/O.clientHeight*o),Math.floor(e.x/O.clientWidth*c)))}));const C=document.getElementById("width"),R=()=>{c=parseInt(C.value),S()};C.onchange=R,C.value=8;const M=document.getElementById("height"),H=()=>{o=parseInt(M.value),W.max=o/2-1,S()};M.onchange=H,M.value=8;const W=document.getElementById("play_rows"),D=()=>{i=parseInt(W.value),S()};W.onchange=D,W.value=3;const K=document.getElementById("ai_search_depth"),F=()=>{s=parseInt(K.value),x.set_search_depth(s),s>4&&T("This increases thinking time exponentially, be careful (probably don't go past 6)","warning")};K.onchange=F,K.value=4;const $=document.getElementById("ai-checkbox"),Y=()=>{};$.onchange=Y;const L=document.getElementById("ai_difficulty"),J=()=>{u=parseInt(L.value)/100,x.set_perfect_chance(u)};L.onchange=J,L.value=50,n()}catch(Z){n(Z)}}))},657:(t,e,r)=>{r.a(t,(async(n,_)=>{try{var a,c=n([a=r(171)]),[a]=c.then?(await c)():c;await r.v(e,t.id,"ed5ad1819e47a070ceaf",{"./draught_bg.js":{__wbindgen_object_drop_ref:a.ug,__wbindgen_string_new:a.h4,__wbg_new_693216e109162396:a.Ih,__wbg_stack_0ddaca5d1abfb52f:a.yq,__wbg_error_09919627ac0992f5:a.gk,__wbg_self_86b4b13392c7af56:a.U5,__wbg_crypto_b8c92eaac23d0d80:a.iY,__wbg_msCrypto_9ad6677321a08dd8:a.mS,__wbindgen_is_undefined:a.XP,__wbg_require_f5521a5b85ad2542:a.r2,__wbg_getRandomValues_dd27e6b0652b3236:a.yX,__wbg_getRandomValues_e57c9b75ddead065:a.ae,__wbg_randomFillSync_d2ba53160aec6aba:a.Os,__wbg_static_accessor_MODULE_452b4680e8614c81:a.DA,__wbg_instanceof_Window_0e6c0f1096d66c3c:a.fO,__wbg_document_99eddbbc11ec831e:a.C4,__wbg_getElementById_f83c5de20dc455d6:a.HS,__wbg_error_8ff19d586a987aef:a.pt,__wbg_log_e8ba7b992c7ad0eb:a.kq,__wbg_instanceof_CanvasRenderingContext2d_405495bb0ea92c4f:a.nf,__wbg_setstrokeStyle_32540003cbfe210b:a.Ws,__wbg_setfillStyle_1d391c4891a6ec4d:a.T8,__wbg_setlineWidth_6f1b76036ab98bfc:a.U7,__wbg_beginPath_e040b5521d41f537:a.pv,__wbg_fill_b6e37fbbefb55ae0:a.In,__wbg_stroke_63664360a52ce7d1:a.M9,__wbg_arc_85205a36bd04df0a:a.u6,__wbg_fillRect_59b38b7e6f8d0717:a.hx,__wbg_strokeRect_469c3838c9d01537:a.z2,__wbg_instanceof_HtmlCanvasElement_b94545433bb4d2ef:a.KK,__wbg_setwidth_654d8adcd4979eed:a.k4,__wbg_setheight_2b662384bfacb65c:a.bx,__wbg_getContext_0c19ba5c037e057f:a.fi,__wbg_newnoargs_e23b458e372830de:a.TL,__wbg_call_ae78342adc33730a:a._3,__wbg_self_99737b4dcdf6f0d8:a.OF,__wbg_window_9b61fbbf3564c4fb:a.xB,__wbg_globalThis_8e275ef40caea3a3:a.KQ,__wbg_global_5de1e0f82bddcd27:a.vm,__wbg_buffer_7af23f65f6c64548:a.EF,__wbg_new_cc9018bd6f283b6f:a.cb,__wbg_set_f25e869e4565d2a2:a.Ip,__wbg_length_0acb1cf9bbaf8519:a.Oo,__wbg_newwithlength_8f0657faca9f1422:a.rC,__wbg_subarray_da527dbd24eafb6b:a.YN,__wbindgen_object_clone_ref:a.m_,__wbindgen_debug_string:a.fY,__wbindgen_throw:a.Or,__wbindgen_memory:a.oH}}),_()}catch(t){_(t)}}),1)}}]); //# sourceMappingURL=10.bootstrap.js.map \ No newline at end of file diff --git a/10.bootstrap.js.map b/10.bootstrap.js.map index 51c5ce3..8d0fea9 100644 --- a/10.bootstrap.js.map +++ b/10.bootstrap.js.map @@ -1 +1 @@ -{"version":3,"file":"10.bootstrap.js","mappings":"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","sources":["webpack://draught/../pkg/draught_bg.js","webpack://draught/./index.js"],"sourcesContent":["import * as wasm from './draught_bg.wasm';\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\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\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\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 debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\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\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_wasm() {\n wasm.init_wasm();\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_exn_store(addHeapObject(e));\n }\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n/**\n* Move/Jump, for use in Move\n*/\nexport const MoveType = Object.freeze({ Move:0,\"0\":\"Move\",Jump:1,\"1\":\"Jump\", });\n/**\n* Black/White\n*/\nexport const Team = Object.freeze({ Black:0,\"0\":\"Black\",White:1,\"1\":\"White\", });\n/**\n* Man/King\n*/\nexport const Strength = Object.freeze({ Man:0,\"0\":\"Man\",King:1,\"1\":\"King\", });\n/**\n* Model board square as Empty/Occupied/Unplayable\n*/\nexport const SquareState = Object.freeze({ Empty:0,\"0\":\"Empty\",Occupied:1,\"1\":\"Occupied\",Unplayable:2,\"2\":\"Unplayable\", });\n/**\n* Possible outcomes of trying to move\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 */\n get width() {\n var ret = wasm.__wbg_get_board_width(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set width(arg0) {\n wasm.__wbg_set_board_width(this.ptr, arg0);\n }\n /**\n */\n get height() {\n var ret = wasm.__wbg_get_board_height(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set height(arg0) {\n wasm.__wbg_set_board_height(this.ptr, arg0);\n }\n /**\n */\n get current_turn() {\n var ret = wasm.__wbg_get_board_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set current_turn(arg0) {\n wasm.__wbg_set_board_current_turn(this.ptr, arg0);\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 * Check that given move trajectory is valid for a man piece\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 * Check that given move trajectory is valid for a king piece\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 * Get cell index of jumpee square given from and to locations\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 * 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 * Get new board derived from current with given move applied\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {Board}\n */\n apply_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_apply_move(this.ptr, ptr0, ptr1);\n return Board.__wrap(ret);\n }\n /**\n * Get new board derived from current with given jump applied\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {Board}\n */\n apply_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 var ret = wasm.board_apply_jump(this.ptr, ptr0, ptr1);\n return Board.__wrap(ret);\n }\n /**\n * Get row index for current team, top row for black, bottom row for white\n * @returns {number}\n */\n king_row_idx() {\n var ret = wasm.board_king_row_idx(this.ptr);\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/**\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 */\n get row() {\n var ret = wasm.__wbg_get_brdidx_row(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set row(arg0) {\n wasm.__wbg_set_brdidx_row(this.ptr, arg0);\n }\n /**\n */\n get col() {\n var ret = wasm.__wbg_get_brdidx_col(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set col(arg0) {\n wasm.__wbg_set_brdidx_col(this.ptr, arg0);\n }\n /**\n * @param {number} row\n * @param {number} col\n */\n constructor(row, col) {\n var ret = wasm.brdidx_from(row, col);\n return BrdIdx.__wrap(ret);\n }\n /**\n * @param {BrdIdx} other\n * @returns {boolean}\n */\n eq(other) {\n _assertClass(other, BrdIdx);\n var ret = wasm.brdidx_eq(this.ptr, other.ptr);\n return ret !== 0;\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 */\n get last_node_count() {\n var ret = wasm.__wbg_get_game_last_node_count(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set last_node_count(arg0) {\n wasm.__wbg_set_game_last_node_count(this.ptr, arg0);\n }\n /**\n */\n get perfect_chance() {\n var ret = wasm.__wbg_get_game_perfect_chance(this.ptr);\n return ret;\n }\n /**\n * @param {number} arg0\n */\n set perfect_chance(arg0) {\n wasm.__wbg_set_game_perfect_chance(this.ptr, arg0);\n }\n /**\n * Get pointer to current board's squares\n * @returns {number}\n */\n current_board_cells() {\n var ret = wasm.game_current_board_cells(this.ptr);\n return ret;\n }\n /**\n * Get pointer to current board's squares\n * @returns {number}\n */\n current_board_len() {\n var ret = wasm.game_current_board_len(this.ptr);\n return ret >>> 0;\n }\n /**\n * Current turn's team\n * @returns {number}\n */\n current_turn() {\n var ret = wasm.game_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * Current board's score\n * @returns {number}\n */\n score() {\n var ret = wasm.game_score(this.ptr);\n return ret;\n }\n /**\n * Get currently winning player\n * @returns {number | undefined}\n */\n winning() {\n var ret = wasm.game_winning(this.ptr);\n return ret === 2 ? undefined : ret;\n }\n /**\n * Check if a player has won\n * @returns {number | undefined}\n */\n has_won() {\n var ret = wasm.game_has_won(this.ptr);\n return ret === 2 ? undefined : ret;\n }\n /**\n * Get square on current board for given index\n * @param {BrdIdx} idx\n * @returns {Square}\n */\n current_cell_state(idx) {\n _assertClass(idx, BrdIdx);\n var ret = wasm.game_current_cell_state(this.ptr, idx.ptr);\n return Square.__wrap(ret);\n }\n /**\n * Set tree depth for AI to search to\n * @param {number} search_depth\n */\n set_search_depth(search_depth) {\n wasm.game_set_search_depth(this.ptr, search_depth);\n }\n /**\n * Set given index as selected piece\n * TODO: Check whether valid square?\n * @param {BrdIdx} idx\n */\n set_selected(idx) {\n _assertClass(idx, BrdIdx);\n wasm.game_set_selected(this.ptr, idx.ptr);\n }\n /**\n * Set proportion of perfect moves from AI\n * @param {number} new_chance\n */\n set_perfect_chance(new_chance) {\n wasm.game_set_perfect_chance(this.ptr, new_chance);\n }\n /**\n * Clear currently selected piece\n */\n clear_selected() {\n wasm.game_clear_selected(this.ptr);\n }\n /**\n * Attempt to make a move given a source and destination index\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\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 var ret = wasm.game_make_move(this.ptr, ptr0, ptr1);\n return ret >>> 0;\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 * Get new game without board renderer\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n * @param {number} search_depth\n */\n constructor(width, height, piece_rows, first_turn, search_depth) {\n var ret = wasm.game_new(width, height, piece_rows, first_turn, search_depth);\n return Game.__wrap(ret);\n }\n /**\n * Get a new game with canvas ID and dimensions\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n * @param {number} search_depth\n * @param {string} canvas_id\n * @param {number} canvas_width\n * @param {number} canvas_height\n * @returns {Game}\n */\n static new_with_canvas(width, height, piece_rows, first_turn, search_depth, canvas_id, canvas_width, canvas_height) {\n var ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ret = wasm.game_new_with_canvas(width, height, piece_rows, first_turn, search_depth, ptr0, len0, canvas_width, canvas_height);\n return Game.__wrap(ret);\n }\n /**\n * Set painter for rendering boards\n * @param {Painter} value\n */\n set_painter(value) {\n _assertClass(value, Painter);\n var ptr0 = value.ptr;\n value.ptr = 0;\n wasm.game_set_painter(this.ptr, ptr0);\n }\n /**\n * Draw current board using painter if exists\n */\n draw() {\n wasm.game_draw(this.ptr);\n }\n /**\n * Create computer, get move from current board and update current board\n */\n ai_move() {\n wasm.game_ai_move(this.ptr);\n }\n}\n/**\n* Used to paint boards onto HTML canvases\n*/\nexport class Painter {\n\n static __wrap(ptr) {\n const obj = Object.create(Painter.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_painter_free(ptr);\n }\n /**\n * Default constructor which queries for canvas by ID\n * @param {number} width\n * @param {number} height\n * @param {string} canvas_id\n */\n constructor(width, height, canvas_id) {\n var ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ret = wasm.painter_new(width, height, ptr0, len0);\n return Painter.__wrap(ret);\n }\n /**\n * Constructor with given canvas element\n * @param {number} width\n * @param {number} height\n * @param {HTMLCanvasElement} canvas\n * @returns {Painter}\n */\n static new_with_canvas(width, height, canvas) {\n var ret = wasm.painter_new_with_canvas(width, height, addHeapObject(canvas));\n return Painter.__wrap(ret);\n }\n /**\n * Set new square outline colour value\n * @param {any} value\n */\n set_square_outline(value) {\n wasm.painter_set_square_outline(this.ptr, addHeapObject(value));\n }\n /**\n * Set new line width for outlining squares\n * @param {number} value\n */\n set_outline_width(value) {\n wasm.painter_set_outline_width(this.ptr, value);\n }\n /**\n * Set whether squares are outlined\n * @param {boolean} value\n */\n set_draw_outline(value) {\n wasm.painter_set_draw_outline(this.ptr, value);\n }\n /**\n * Reset the canvas dimensions to the given width and height\n */\n reset_dimensions() {\n wasm.painter_reset_dimensions(this.ptr);\n }\n /**\n * Check whether given canvas dimensions divide evenly by given board dimenions\n * @param {Board} board\n * @returns {boolean}\n */\n validate_board_dim(board) {\n _assertClass(board, Board);\n var ret = wasm.painter_validate_board_dim(this.ptr, board.ptr);\n return ret !== 0;\n }\n /**\n * Draw a board onto the canvas\n * @param {Board} board\n */\n draw(board) {\n _assertClass(board, Board);\n wasm.painter_draw(this.ptr, board.ptr);\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 */\n get team() {\n var ret = wasm.__wbg_get_piece_team(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set team(arg0) {\n wasm.__wbg_set_piece_team(this.ptr, arg0);\n }\n /**\n */\n get strength() {\n var ret = wasm.__wbg_get_piece_strength(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set strength(arg0) {\n wasm.__wbg_set_piece_strength(this.ptr, arg0);\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* 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 * Game piece if square is occupied\n */\n get occupant() {\n var ret = wasm.__wbg_get_square_occupant(this.ptr);\n return ret === 0 ? undefined : Piece.__wrap(ret);\n }\n /**\n * Game piece if square is occupied\n * @param {Piece | undefined} arg0\n */\n set occupant(arg0) {\n let ptr0 = 0;\n if (!isLikeNone(arg0)) {\n _assertClass(arg0, Piece);\n ptr0 = arg0.ptr;\n arg0.ptr = 0;\n }\n wasm.__wbg_set_square_occupant(this.ptr, ptr0);\n }\n /**\n * Description of whether the square is occupied or an unplayable, i.e. off-lattice square\n */\n get state() {\n var ret = wasm.__wbg_get_square_state(this.ptr);\n return ret >>> 0;\n }\n /**\n * Description of whether the square is occupied or an unplayable, i.e. off-lattice square\n * @param {number} arg0\n */\n set state(arg0) {\n wasm.__wbg_set_square_state(this.ptr, arg0);\n }\n /**\n * Standard constructor function to form square from state and occupant\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 * Helper function for a well-formed piece square by team and strength\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 * Helper function for a well-formed empty square\n * @returns {Square}\n */\n static empty() {\n var ret = wasm.square_empty();\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed unplayable square\n * @returns {Square}\n */\n static unplay() {\n var ret = wasm.square_unplay();\n return Square.__wrap(ret);\n }\n}\n\nexport function __wbindgen_object_drop_ref(arg0) {\n takeObject(arg0);\n};\n\nexport function __wbindgen_string_new(arg0, arg1) {\n var ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_693216e109162396() {\n var ret = new Error();\n return addHeapObject(ret);\n};\n\nexport function __wbg_stack_0ddaca5d1abfb52f(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_09919627ac0992f5(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(arg0, arg1);\n }\n};\n\nexport function __wbg_self_86b4b13392c7af56() { return handleError(function () {\n var ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_crypto_b8c92eaac23d0d80(arg0) {\n var ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n};\n\nexport function __wbg_msCrypto_9ad6677321a08dd8(arg0) {\n var ret = getObject(arg0).msCrypto;\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_is_undefined(arg0) {\n var ret = getObject(arg0) === undefined;\n return ret;\n};\n\nexport function __wbg_require_f5521a5b85ad2542(arg0, arg1, arg2) {\n var ret = getObject(arg0).require(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n};\n\nexport function __wbg_getRandomValues_dd27e6b0652b3236(arg0) {\n var ret = getObject(arg0).getRandomValues;\n return addHeapObject(ret);\n};\n\nexport function __wbg_getRandomValues_e57c9b75ddead065(arg0, arg1) {\n getObject(arg0).getRandomValues(getObject(arg1));\n};\n\nexport function __wbg_randomFillSync_d2ba53160aec6aba(arg0, arg1, arg2) {\n getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));\n};\n\nexport function __wbg_static_accessor_MODULE_452b4680e8614c81() {\n var ret = module;\n return addHeapObject(ret);\n};\n\nexport function __wbg_instanceof_Window_434ce1849eb4e0fc(arg0) {\n var ret = getObject(arg0) instanceof Window;\n return ret;\n};\n\nexport function __wbg_document_5edd43643d1060d9(arg0) {\n var ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_getElementById_b30e88aff96f66a1(arg0, arg1, arg2) {\n var ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_error_ca520cb687b085a1(arg0) {\n console.error(getObject(arg0));\n};\n\nexport function __wbg_log_fbd13631356d44e4(arg0) {\n console.log(getObject(arg0));\n};\n\nexport function __wbg_instanceof_CanvasRenderingContext2d_e8b3a478a1b32d55(arg0) {\n var ret = getObject(arg0) instanceof CanvasRenderingContext2D;\n return ret;\n};\n\nexport function __wbg_setstrokeStyle_4c9ff9ea0c0c4092(arg0, arg1) {\n getObject(arg0).strokeStyle = getObject(arg1);\n};\n\nexport function __wbg_setfillStyle_680401a47926faa5(arg0, arg1) {\n getObject(arg0).fillStyle = getObject(arg1);\n};\n\nexport function __wbg_setlineWidth_4819b1bc5c54719b(arg0, arg1) {\n getObject(arg0).lineWidth = arg1;\n};\n\nexport function __wbg_beginPath_5a6fcb370b5b8eb3(arg0) {\n getObject(arg0).beginPath();\n};\n\nexport function __wbg_fill_0ced47ff22561640(arg0) {\n getObject(arg0).fill();\n};\n\nexport function __wbg_stroke_46c6315e5e1f35db(arg0) {\n getObject(arg0).stroke();\n};\n\nexport function __wbg_arc_b3cb1027882c81bb() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {\n getObject(arg0).arc(arg1, arg2, arg3, arg4, arg5);\n}, arguments) };\n\nexport function __wbg_fillRect_7ad775936c1881ce(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).fillRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_strokeRect_a3f2f571f1ad9730(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).strokeRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_instanceof_HtmlCanvasElement_a6157e470d06b638(arg0) {\n var ret = getObject(arg0) instanceof HTMLCanvasElement;\n return ret;\n};\n\nexport function __wbg_setwidth_362e8db8cbadbe96(arg0, arg1) {\n getObject(arg0).width = arg1 >>> 0;\n};\n\nexport function __wbg_setheight_28f53831182cc410(arg0, arg1) {\n getObject(arg0).height = arg1 >>> 0;\n};\n\nexport function __wbg_getContext_bd4e9445094eda84() { return handleError(function (arg0, arg1, arg2) {\n var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_newnoargs_f579424187aa1717(arg0, arg1) {\n var ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nexport function __wbg_call_89558c3e96703ca1() { return handleError(function (arg0, arg1) {\n var ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_self_e23d74ae45fb17d1() { return handleError(function () {\n var ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_window_b4be7f48b24ac56e() { return handleError(function () {\n var ret = window.window;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_globalThis_d61b1f48a57191ae() { return handleError(function () {\n var ret = globalThis.globalThis;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_global_e7669da72fd7f239() { return handleError(function () {\n var ret = global.global;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_buffer_5e74a88a1424a2e0(arg0) {\n var ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_e3b800e570795b3c(arg0) {\n var ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n};\n\nexport function __wbg_set_5b8081e9d002f0df(arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n};\n\nexport function __wbg_length_30803400a8f15c59(arg0) {\n var ret = getObject(arg0).length;\n return ret;\n};\n\nexport function __wbg_newwithlength_5f4ce114a24dfe1e(arg0) {\n var ret = new Uint8Array(arg0 >>> 0);\n return addHeapObject(ret);\n};\n\nexport function __wbg_subarray_a68f835ca2af506f(arg0, arg1, arg2) {\n var ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_object_clone_ref(arg0) {\n var ret = getObject(arg0);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_debug_string(arg0, arg1) {\n var ret = debugString(getObject(arg1));\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 __wbindgen_throw(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\nexport function __wbindgen_memory() {\n var ret = wasm.memory;\n return addHeapObject(ret);\n};\n\n","import { Game, Board, BrdIdx, Painter, Team, init_wasm, Moveable, SquareState, Square } from \"draught\";\n// import { memory } from \"draught/draught_bg.wasm\";\n\n///////////////////\n// CONSTS\n///////////////////\n\nconst CANVAS_WIDTH = 720;\nconst CANVAS_HEIGHT = 720;\n\nvar BOARD_WIDTH = 8;\nvar BOARD_HEIGHT = 8;\n\nvar PIECE_ROWS = 3;\nvar SEARCH_DEPTH = 4;\nvar PERFECT_CHANCE = 0.5;\n\nconst STATUS_TIMEOUT = 3000;\nconst WON_TIMEOUT = 3000;\n\nconst GameState = {\n HUMAN_TURN: {\n THINKING: \"human_turn.thinking\",\n FROM_SELECTED: \"human_turn.from_selected\"\n },\n AI_TURN: \"ai_turn\"\n}\n\n//////////////////\n// GAME STUFF\n//////////////////\n\ninit_wasm();\n\n// let board = new Board(BOARD_WIDTH, BOARD_HEIGHT, Team.Black);\n\nconst statusText = document.getElementById(\"status-p\");\nconst statusAlert = document.getElementById(\"status-d\");\nconst teamText = document.getElementById(\"team-p\");\nconst nodeCountText = document.getElementById(\"node-count\");\nconst winningText = document.getElementById(\"winning-p\");\n\nconst startBtn = document.getElementById(\"startBtn\");\nstartBtn.onclick = start_game;\n\nlet wonTimeout = null;\nlet statusTimeout = null;\nlet setStatus = setStatusAlert;\n\nlet current_state = GameState.HUMAN_TURN.THINKING;\n\nlet game = null;\nlet painter = null;\n\nlet clicks = [];\n\nstart_game();\n\n/////////////////\n// CANVAS\n/////////////////\n\nconst canvas = document.getElementById(\"game-canvas\");\ncanvas.addEventListener(\"click\", (event) => {\n var mousepos = getMousePos(canvas, event);\n // console.log(mousepos);\n var cell = new BrdIdx(\n Math.floor((mousepos.y / canvas.clientHeight) * BOARD_HEIGHT),\n Math.floor((mousepos.x / canvas.clientWidth) * BOARD_WIDTH),\n );\n // console.log(cell);\n process_canvas_click(cell);\n});\n\n////////////////\n// FUNCS\n////////////////\n\nfunction start_game() {\n game = new Game(BOARD_WIDTH, BOARD_HEIGHT, PIECE_ROWS, Team.Black, SEARCH_DEPTH);\n painter = new Painter(CANVAS_WIDTH, CANVAS_HEIGHT, \"game-canvas\");\n game.set_painter(painter);\n game.draw();\n\n clearInterval(wonTimeout);\n updateTeamText();\n updateWinningText();\n clicks = [];\n current_state = GameState.HUMAN_TURN.THINKING;\n}\n\nfunction process_canvas_click(cell_coord) {\n\n switch(current_state) {\n // first click of a move\n case GameState.HUMAN_TURN.THINKING:\n if (game.current_cell_state(cell_coord).state != SquareState.Occupied ) {\n return;\n }\n\n if (game.current_cell_state(cell_coord).occupant.team != game.current_turn() ) {\n return;\n }\n\n // console.log(\"Your turn, first piece picked\");\n\n clicks.push(cell_coord);\n current_state = GameState.HUMAN_TURN.FROM_SELECTED;\n game.set_selected(cell_coord);\n game.draw();\n \n break;\n \n // second click of a move\n case GameState.HUMAN_TURN.FROM_SELECTED:\n\n // second click is different to first, process as move\n // otherwise, will skip straight to clean up (clear selected and clicks) \n if (!clicks[0].eq(cell_coord)) {\n\n if (game.current_cell_state(cell_coord).state != SquareState.Empty ) {\n return;\n }\n \n // console.log(\"Your turn, first piece already picked, picking second\");\n \n clicks.push(cell_coord);\n \n if (clicks.length != 2) {\n setStatus(`Error: wrong number of clicks to process ${clicks.length}`);\n console.error(`Error: wrong number of clicks to process ${clicks.length}`);\n \n return;\n }\n\n let status = game.make_move(clicks[0], clicks[1]);\n\n switch(status) {\n case Moveable.Allowed:\n\n if (aiCheckBox.checked && game.has_won() === undefined) {\n game.ai_move();\n nodeCountText.innerText = `searched ${game.last_node_count.toLocaleString(\"en-GB\")} possible moves`;\n }\n\n break;\n case Moveable.IllegalTrajectory:\n setStatus(\"You can't move like that!\");\n break;\n case Moveable.JumpingSameTeam:\n setStatus(\"You can't jump your own piece!\");\n break;\n case Moveable.NoJumpablePiece:\n setStatus(\"There's nothing to jump!\");\n break;\n case Moveable.OccupiedDest:\n setStatus(\"There's a piece there!\");\n break;\n case Moveable.OutOfBounds:\n setStatus(\"That square's not on the board! (how have you managed that?)\");\n break;\n case Moveable.UnoccupiedSrc:\n setStatus(\"There's no piece to move!\");\n break;\n case Moveable.Unplayable:\n setStatus(\"That's not a playable square!\");\n break;\n case Moveable.WrongTeamSrc:\n setStatus(\"That's not your piece!\");\n break;\n }\n \n }\n\n game.clear_selected();\n game.draw();\n clicks = [];\n current_state = GameState.HUMAN_TURN.THINKING;\n \n break;\n case GameState.AI_TURN:\n console.log(\"It's the AI's turn!\");\n break;\n }\n\n updateTeamText();\n updateWinningText();\n checkWon();\n}\n\nfunction getMousePos(canvas, evt) {\n var rect = canvas.getBoundingClientRect();\n return {\n x: evt.clientX - rect.left,\n y: evt.clientY - rect.top\n };\n}\n\nfunction setStatusText(txt, hide = true) {\n if(statusTimeout != null) {\n clearInterval(statusTimeout);\n }\n\n statusText.innerText = txt;\n\n if(hide) {\n statusTimeout = setTimeout(() => {\n statusText.innerText = \"\";\n }, STATUS_TIMEOUT);\n }\n}\n\nfunction setStatusAlert(txt, alertType = \"danger\", hide = true) {\n if(statusTimeout != null) {\n clearInterval(statusTimeout);\n }\n\n statusAlert.className = `alert alert-${alertType}`;\n statusAlert.innerText = txt;\n statusAlert.hidden = false;\n\n if(hide) {\n statusTimeout = setTimeout(() => {\n statusAlert.hidden = true;\n }, STATUS_TIMEOUT);\n }\n}\n\nfunction updateTeamText(){\n let team = game.current_turn();\n switch(team) {\n case Team.White:\n teamText.innerText = \"⚪ White ⚪\";\n break;\n case Team.Black:\n teamText.innerText = \"🔴 Black 🔴\";\n break;\n }\n}\n\nfunction updateWinningText(){\n \n switch(game.winning()) {\n case undefined:\n winningText.innerText = \"\";\n break;\n case Team.White:\n winningText.innerText = \"👑 White 👑\";\n break;\n case Team.Black:\n winningText.innerText = \"👑 Black 👑\";\n break;\n }\n}\n\nfunction checkWon() {\n\n switch(game.has_won()) {\n case undefined:\n break;\n case Team.White:\n setStatus(\"You Lost!\");\n wonTimeout = setInterval(() => {\n start_game();\n }, WON_TIMEOUT);\n break;\n case Team.Black:\n setStatus(\"You Won!\", \"success\");\n wonTimeout = setInterval(() => {\n start_game();\n }, WON_TIMEOUT);\n break;\n }\n}\n\n////////////////\n// UI\n////////////////\n\nconst widthBox = document.getElementById(\"width\");\n/**\n * Handler for width input box change, start a new game\n */\nconst onWidth = () => {\n\n BOARD_WIDTH = parseInt(widthBox.value);\n start_game();\n}\nwidthBox.onchange = onWidth;\nwidthBox.value = 8;\n\nconst heightBox = document.getElementById(\"height\");\n/**\n * Handler for height input box change, start a new game\n */\nconst onHeight = () => {\n\n BOARD_HEIGHT = parseInt(heightBox.value);\n pieceRowsBox.max = (BOARD_HEIGHT / 2) - 1;\n start_game();\n}\nheightBox.onchange = onHeight;\nheightBox.value = 8;\n\nconst pieceRowsBox = document.getElementById(\"play_rows\");\n/**\n * Handler for piece rows input box change, start a new game\n */\nconst onPieceRows = () => {\n\n PIECE_ROWS = parseInt(pieceRowsBox.value);\n start_game();\n}\npieceRowsBox.onchange = onPieceRows;\npieceRowsBox.value = 3;\n\nconst aiSearchDepthBox = document.getElementById(\"ai_search_depth\");\n/**\n * Handler for AI search depth input box change, start a new game\n */\nconst onAISearchDepth = () => {\n\n SEARCH_DEPTH = parseInt(aiSearchDepthBox.value);\n game.set_search_depth(SEARCH_DEPTH);\n\n if(SEARCH_DEPTH > 4) {\n setStatus(\"This increases thinking time exponentially, be careful (probably don't go past 6)\", \"warning\");\n }\n}\naiSearchDepthBox.onchange = onAISearchDepth;\naiSearchDepthBox.value = 4;\n\nconst aiCheckBox = document.getElementById(\"ai-checkbox\");\n/**\n * Handler for height input box change, get a new universe of given size\n */\nconst onAICheck = () => {\n \n}\naiCheckBox.onchange = onAICheck;\n// aiCheckBox.checked = true;\n\nconst aiPerfectChance = document.getElementById(\"ai_difficulty\");\n/**\n * Handler for piece rows input box change, start a new game\n */\nconst onPerfectChance = () => {\n\n PERFECT_CHANCE = parseInt(aiPerfectChance.value) / 100;\n game.set_perfect_chance(PERFECT_CHANCE);\n}\naiPerfectChance.onchange = onPerfectChance;\naiPerfectChance.value = 50;"],"names":["heap","Array","fill","undefined","getObject","idx","push","heap_next","length","dropObject","takeObject","ret","cachedTextDecoder","TextDecoder","module","require","ignoreBOM","fatal","decode","cachegetUint8Memory0","getUint8Memory0","buffer","Uint8Array","getStringFromWasm0","ptr","len","subarray","addHeapObject","obj","debugString","val","type","description","name","isArray","debug","i","builtInMatches","exec","toString","call","className","JSON","stringify","_","Error","message","stack","WASM_VECTOR_LEN","cachedTextEncoder","TextEncoder","encodeString","encodeInto","arg","view","buf","encode","set","read","written","passStringToWasm0","malloc","realloc","mem","offset","code","charCodeAt","slice","cachegetInt32Memory0","getInt32Memory0","Int32Array","isLikeNone","x","_assertClass","instance","klass","init_wasm","handleError","f","args","apply","this","e","Object","freeze","Move","Jump","Team","Black","White","SquareState","Man","King","Empty","Occupied","Unplayable","Moveable","Allowed","UnoccupiedSrc","OccupiedDest","OutOfBounds","WrongTeamSrc","IllegalTrajectory","NoJumpablePiece","JumpingSameTeam","Board","static","create","prototype","__destroy_into_raw","free","width","arg0","height","current_turn","cell","Square","__wrap","set_cell","square","ptr0","grid_cell","BrdIdx","cell_index","row","col","cell_idx","board_index","can_move","from","to","ptr1","validate_man_move","from_square_occupant","Piece","ptr2","validate_king_move","jumpee_idx","cells","num_cells","num_pieces","num_player","team","score","cell_state","apply_move","apply_jump","king_row_idx","jumpee","from_occ","constructor","board","piece_rows","eq","other","Game","last_node_count","perfect_chance","current_board_cells","current_board_len","winning","has_won","current_cell_state","set_search_depth","search_depth","set_selected","set_perfect_chance","new_chance","clear_selected","make_move","execute_move","execute_jump","push_new_board","set_current","first_turn","canvas_id","canvas_width","canvas_height","len0","set_painter","value","Painter","draw","ai_move","canvas","set_square_outline","set_outline_width","set_draw_outline","reset_dimensions","validate_board_dim","strength","occupant","state","__wbindgen_object_drop_ref","__wbindgen_string_new","arg1","__wbg_new_693216e109162396","__wbg_stack_0ddaca5d1abfb52f","__wbg_error_09919627ac0992f5","console","error","__wbg_self_86b4b13392c7af56","self","arguments","__wbg_crypto_b8c92eaac23d0d80","crypto","__wbg_msCrypto_9ad6677321a08dd8","msCrypto","__wbindgen_is_undefined","__wbg_require_f5521a5b85ad2542","arg2","__wbg_getRandomValues_dd27e6b0652b3236","getRandomValues","__wbg_getRandomValues_e57c9b75ddead065","__wbg_randomFillSync_d2ba53160aec6aba","randomFillSync","__wbg_static_accessor_MODULE_452b4680e8614c81","__wbg_instanceof_Window_434ce1849eb4e0fc","Window","__wbg_document_5edd43643d1060d9","document","__wbg_getElementById_b30e88aff96f66a1","getElementById","__wbg_error_ca520cb687b085a1","__wbg_log_fbd13631356d44e4","log","__wbg_instanceof_CanvasRenderingContext2d_e8b3a478a1b32d55","CanvasRenderingContext2D","__wbg_setstrokeStyle_4c9ff9ea0c0c4092","strokeStyle","__wbg_setfillStyle_680401a47926faa5","fillStyle","__wbg_setlineWidth_4819b1bc5c54719b","lineWidth","__wbg_beginPath_5a6fcb370b5b8eb3","beginPath","__wbg_fill_0ced47ff22561640","__wbg_stroke_46c6315e5e1f35db","stroke","__wbg_arc_b3cb1027882c81bb","arg3","arg4","arg5","arc","__wbg_fillRect_7ad775936c1881ce","fillRect","__wbg_strokeRect_a3f2f571f1ad9730","strokeRect","__wbg_instanceof_HtmlCanvasElement_a6157e470d06b638","HTMLCanvasElement","__wbg_setwidth_362e8db8cbadbe96","__wbg_setheight_28f53831182cc410","__wbg_getContext_bd4e9445094eda84","getContext","__wbg_newnoargs_f579424187aa1717","Function","__wbg_call_89558c3e96703ca1","__wbg_self_e23d74ae45fb17d1","__wbg_window_b4be7f48b24ac56e","window","__wbg_globalThis_d61b1f48a57191ae","globalThis","__wbg_global_e7669da72fd7f239","g","global","__wbg_buffer_5e74a88a1424a2e0","__wbg_new_e3b800e570795b3c","__wbg_set_5b8081e9d002f0df","__wbg_length_30803400a8f15c59","__wbg_newwithlength_5f4ce114a24dfe1e","__wbg_subarray_a68f835ca2af506f","__wbindgen_object_clone_ref","__wbindgen_debug_string","__wbindgen_throw","__wbindgen_memory","CANVAS_WIDTH","CANVAS_HEIGHT","BOARD_WIDTH","BOARD_HEIGHT","PIECE_ROWS","SEARCH_DEPTH","PERFECT_CHANCE","STATUS_TIMEOUT","WON_TIMEOUT","GameState","HUMAN_TURN","THINKING","FROM_SELECTED","AI_TURN","statusAlert","teamText","nodeCountText","winningText","onclick","start_game","wonTimeout","statusTimeout","setStatus","setStatusAlert","current_state","game","painter","clicks","clearInterval","updateTeamText","updateWinningText","process_canvas_click","cell_coord","aiCheckBox","checked","innerText","toLocaleString","checkWon","getMousePos","evt","rect","getBoundingClientRect","clientX","left","y","clientY","top","txt","alertType","hide","hidden","setTimeout","setInterval","addEventListener","event","mousepos","Math","floor","clientHeight","clientWidth","widthBox","onWidth","parseInt","onchange","heightBox","onHeight","pieceRowsBox","max","onPieceRows","aiSearchDepthBox","onAISearchDepth","onAICheck","aiPerfectChance","onPerfectChance"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"10.bootstrap.js","mappings":"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","sources":["webpack://draught/../pkg/draught_bg.js","webpack://draught/./index.js"],"sourcesContent":["import * as wasm from './draught_bg.wasm';\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\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\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\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 debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\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\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_wasm() {\n wasm.init_wasm();\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_exn_store(addHeapObject(e));\n }\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n/**\n* Move/Jump, for use in Move\n*/\nexport const MoveType = Object.freeze({ Move:0,\"0\":\"Move\",Jump:1,\"1\":\"Jump\", });\n/**\n* Black/White\n*/\nexport const Team = Object.freeze({ Black:0,\"0\":\"Black\",White:1,\"1\":\"White\", });\n/**\n* Man/King\n*/\nexport const Strength = Object.freeze({ Man:0,\"0\":\"Man\",King:1,\"1\":\"King\", });\n/**\n* Model board square as Empty/Occupied/Unplayable\n*/\nexport const SquareState = Object.freeze({ Empty:0,\"0\":\"Empty\",Occupied:1,\"1\":\"Occupied\",Unplayable:2,\"2\":\"Unplayable\", });\n/**\n* Possible outcomes of trying to move\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 */\n get width() {\n const ret = wasm.__wbg_get_board_width(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set width(arg0) {\n wasm.__wbg_set_board_width(this.ptr, arg0);\n }\n /**\n */\n get height() {\n const ret = wasm.__wbg_get_board_height(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set height(arg0) {\n wasm.__wbg_set_board_height(this.ptr, arg0);\n }\n /**\n */\n get current_turn() {\n const ret = wasm.__wbg_get_board_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set current_turn(arg0) {\n wasm.__wbg_set_board_current_turn(this.ptr, arg0);\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 const 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 const 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 const 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 const 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 const 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 const ret = wasm.board_can_move(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Check that given move trajectory is valid for a man piece\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 const ret = wasm.board_validate_man_move(this.ptr, ptr0, ptr1, ptr2);\n return ret >>> 0;\n }\n /**\n * Check that given move trajectory is valid for a king piece\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 const ret = wasm.board_validate_king_move(this.ptr, ptr0, ptr1, ptr2);\n return ret >>> 0;\n }\n /**\n * Get cell index of jumpee square given from and to locations\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 const ret = wasm.board_jumpee_idx(this.ptr, ptr0, ptr1);\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 const 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 const 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 const 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 const 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 const 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 const ret = wasm.board_cell_state(this.ptr, idx);\n return ret >>> 0;\n }\n /**\n * Get new board derived from current with given move applied\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {Board}\n */\n apply_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 const ret = wasm.board_apply_move(this.ptr, ptr0, ptr1);\n return Board.__wrap(ret);\n }\n /**\n * Get new board derived from current with given jump applied\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {Board}\n */\n apply_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 const ret = wasm.board_apply_jump(this.ptr, ptr0, ptr1);\n return Board.__wrap(ret);\n }\n /**\n * Get row index for current team, top row for black, bottom row for white\n * @returns {number}\n */\n king_row_idx() {\n const ret = wasm.board_king_row_idx(this.ptr);\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 const 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 const 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 const 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 const ret = wasm.board_init_game(ptr0, piece_rows);\n return Board.__wrap(ret);\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 */\n get row() {\n const ret = wasm.__wbg_get_brdidx_row(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set row(arg0) {\n wasm.__wbg_set_brdidx_row(this.ptr, arg0);\n }\n /**\n */\n get col() {\n const ret = wasm.__wbg_get_brdidx_col(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set col(arg0) {\n wasm.__wbg_set_brdidx_col(this.ptr, arg0);\n }\n /**\n * @param {number} row\n * @param {number} col\n */\n constructor(row, col) {\n const ret = wasm.brdidx_from(row, col);\n return BrdIdx.__wrap(ret);\n }\n /**\n * @param {BrdIdx} other\n * @returns {boolean}\n */\n eq(other) {\n _assertClass(other, BrdIdx);\n const ret = wasm.brdidx_eq(this.ptr, other.ptr);\n return ret !== 0;\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 */\n get last_node_count() {\n const ret = wasm.__wbg_get_game_last_node_count(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set last_node_count(arg0) {\n wasm.__wbg_set_game_last_node_count(this.ptr, arg0);\n }\n /**\n */\n get perfect_chance() {\n const ret = wasm.__wbg_get_game_perfect_chance(this.ptr);\n return ret;\n }\n /**\n * @param {number} arg0\n */\n set perfect_chance(arg0) {\n wasm.__wbg_set_game_perfect_chance(this.ptr, arg0);\n }\n /**\n * Get pointer to current board's squares\n * @returns {number}\n */\n current_board_cells() {\n const ret = wasm.game_current_board_cells(this.ptr);\n return ret;\n }\n /**\n * Get pointer to current board's squares\n * @returns {number}\n */\n current_board_len() {\n const ret = wasm.game_current_board_len(this.ptr);\n return ret >>> 0;\n }\n /**\n * Current turn's team\n * @returns {number}\n */\n current_turn() {\n const ret = wasm.game_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * Current board's score\n * @returns {number}\n */\n score() {\n const ret = wasm.game_score(this.ptr);\n return ret;\n }\n /**\n * Get currently winning player\n * @returns {number | undefined}\n */\n winning() {\n const ret = wasm.game_winning(this.ptr);\n return ret === 2 ? undefined : ret;\n }\n /**\n * Check if a player has won\n * @returns {number | undefined}\n */\n has_won() {\n const ret = wasm.game_has_won(this.ptr);\n return ret === 2 ? undefined : ret;\n }\n /**\n * Get square on current board for given index\n * @param {BrdIdx} idx\n * @returns {Square}\n */\n current_cell_state(idx) {\n _assertClass(idx, BrdIdx);\n const ret = wasm.game_current_cell_state(this.ptr, idx.ptr);\n return Square.__wrap(ret);\n }\n /**\n * Set tree depth for AI to search to\n * @param {number} search_depth\n */\n set_search_depth(search_depth) {\n wasm.game_set_search_depth(this.ptr, search_depth);\n }\n /**\n * Set given index as selected piece\n * TODO: Check whether valid square?\n * @param {BrdIdx} idx\n */\n set_selected(idx) {\n _assertClass(idx, BrdIdx);\n wasm.game_set_selected(this.ptr, idx.ptr);\n }\n /**\n * Set proportion of perfect moves from AI\n * @param {number} new_chance\n */\n set_perfect_chance(new_chance) {\n wasm.game_set_perfect_chance(this.ptr, new_chance);\n }\n /**\n * Clear currently selected piece\n */\n clear_selected() {\n wasm.game_clear_selected(this.ptr);\n }\n /**\n * Attempt to make a move given a source and destination index\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\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 const ret = wasm.game_make_move(this.ptr, ptr0, ptr1);\n return ret >>> 0;\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 * Get new game without board renderer\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n * @param {number} search_depth\n */\n constructor(width, height, piece_rows, first_turn, search_depth) {\n const ret = wasm.game_new(width, height, piece_rows, first_turn, search_depth);\n return Game.__wrap(ret);\n }\n /**\n * Get a new game with canvas ID and dimensions\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n * @param {number} search_depth\n * @param {string} canvas_id\n * @param {number} canvas_width\n * @param {number} canvas_height\n * @returns {Game}\n */\n static new_with_canvas(width, height, piece_rows, first_turn, search_depth, canvas_id, canvas_width, canvas_height) {\n const ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.game_new_with_canvas(width, height, piece_rows, first_turn, search_depth, ptr0, len0, canvas_width, canvas_height);\n return Game.__wrap(ret);\n }\n /**\n * Set painter for rendering boards\n * @param {Painter} value\n */\n set_painter(value) {\n _assertClass(value, Painter);\n var ptr0 = value.ptr;\n value.ptr = 0;\n wasm.game_set_painter(this.ptr, ptr0);\n }\n /**\n * Draw current board using painter if exists\n */\n draw() {\n wasm.game_draw(this.ptr);\n }\n /**\n * Create computer, get move from current board and update current board\n */\n ai_move() {\n wasm.game_ai_move(this.ptr);\n }\n}\n/**\n* Used to paint boards onto HTML canvases\n*/\nexport class Painter {\n\n static __wrap(ptr) {\n const obj = Object.create(Painter.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_painter_free(ptr);\n }\n /**\n * Default constructor which queries for canvas by ID\n * @param {number} width\n * @param {number} height\n * @param {string} canvas_id\n */\n constructor(width, height, canvas_id) {\n const ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.painter_new(width, height, ptr0, len0);\n return Painter.__wrap(ret);\n }\n /**\n * Constructor with given canvas element\n * @param {number} width\n * @param {number} height\n * @param {HTMLCanvasElement} canvas\n * @returns {Painter}\n */\n static new_with_canvas(width, height, canvas) {\n const ret = wasm.painter_new_with_canvas(width, height, addHeapObject(canvas));\n return Painter.__wrap(ret);\n }\n /**\n * Set new square outline colour value\n * @param {any} value\n */\n set_square_outline(value) {\n wasm.painter_set_square_outline(this.ptr, addHeapObject(value));\n }\n /**\n * Set new line width for outlining squares\n * @param {number} value\n */\n set_outline_width(value) {\n wasm.painter_set_outline_width(this.ptr, value);\n }\n /**\n * Set whether squares are outlined\n * @param {boolean} value\n */\n set_draw_outline(value) {\n wasm.painter_set_draw_outline(this.ptr, value);\n }\n /**\n * Reset the canvas dimensions to the given width and height\n */\n reset_dimensions() {\n wasm.painter_reset_dimensions(this.ptr);\n }\n /**\n * Check whether given canvas dimensions divide evenly by given board dimenions\n * @param {Board} board\n * @returns {boolean}\n */\n validate_board_dim(board) {\n _assertClass(board, Board);\n const ret = wasm.painter_validate_board_dim(this.ptr, board.ptr);\n return ret !== 0;\n }\n /**\n * Draw a board onto the canvas\n * @param {Board} board\n */\n draw(board) {\n _assertClass(board, Board);\n wasm.painter_draw(this.ptr, board.ptr);\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 */\n get team() {\n const ret = wasm.__wbg_get_piece_team(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set team(arg0) {\n wasm.__wbg_set_piece_team(this.ptr, arg0);\n }\n /**\n */\n get strength() {\n const ret = wasm.__wbg_get_piece_strength(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set strength(arg0) {\n wasm.__wbg_set_piece_strength(this.ptr, arg0);\n }\n /**\n * @param {number} team\n * @param {number} strength\n */\n constructor(team, strength) {\n const ret = wasm.piece_new(team, strength);\n return Piece.__wrap(ret);\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 * Game piece if square is occupied\n */\n get occupant() {\n const ret = wasm.__wbg_get_square_occupant(this.ptr);\n return ret === 0 ? undefined : Piece.__wrap(ret);\n }\n /**\n * Game piece if square is occupied\n * @param {Piece | undefined} arg0\n */\n set occupant(arg0) {\n let ptr0 = 0;\n if (!isLikeNone(arg0)) {\n _assertClass(arg0, Piece);\n ptr0 = arg0.ptr;\n arg0.ptr = 0;\n }\n wasm.__wbg_set_square_occupant(this.ptr, ptr0);\n }\n /**\n * Description of whether the square is occupied or an unplayable, i.e. off-lattice square\n */\n get state() {\n const ret = wasm.__wbg_get_square_state(this.ptr);\n return ret >>> 0;\n }\n /**\n * Description of whether the square is occupied or an unplayable, i.e. off-lattice square\n * @param {number} arg0\n */\n set state(arg0) {\n wasm.__wbg_set_square_state(this.ptr, arg0);\n }\n /**\n * Standard constructor function to form square from state and occupant\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 const ret = wasm.square_new(state, ptr0);\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed piece square by team and strength\n * @param {number} team\n * @param {number} strength\n * @returns {Square}\n */\n static pc(team, strength) {\n const ret = wasm.square_pc(team, strength);\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed empty square\n * @returns {Square}\n */\n static empty() {\n const ret = wasm.square_empty();\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed unplayable square\n * @returns {Square}\n */\n static unplay() {\n const ret = wasm.square_unplay();\n return Square.__wrap(ret);\n }\n}\n\nexport function __wbindgen_object_drop_ref(arg0) {\n takeObject(arg0);\n};\n\nexport function __wbindgen_string_new(arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_693216e109162396() {\n const ret = new Error();\n return addHeapObject(ret);\n};\n\nexport function __wbg_stack_0ddaca5d1abfb52f(arg0, arg1) {\n const ret = getObject(arg1).stack;\n const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nexport function __wbg_error_09919627ac0992f5(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(arg0, arg1);\n }\n};\n\nexport function __wbg_self_86b4b13392c7af56() { return handleError(function () {\n const ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_crypto_b8c92eaac23d0d80(arg0) {\n const ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n};\n\nexport function __wbg_msCrypto_9ad6677321a08dd8(arg0) {\n const ret = getObject(arg0).msCrypto;\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_is_undefined(arg0) {\n const ret = getObject(arg0) === undefined;\n return ret;\n};\n\nexport function __wbg_require_f5521a5b85ad2542(arg0, arg1, arg2) {\n const ret = getObject(arg0).require(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n};\n\nexport function __wbg_getRandomValues_dd27e6b0652b3236(arg0) {\n const ret = getObject(arg0).getRandomValues;\n return addHeapObject(ret);\n};\n\nexport function __wbg_getRandomValues_e57c9b75ddead065(arg0, arg1) {\n getObject(arg0).getRandomValues(getObject(arg1));\n};\n\nexport function __wbg_randomFillSync_d2ba53160aec6aba(arg0, arg1, arg2) {\n getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));\n};\n\nexport function __wbg_static_accessor_MODULE_452b4680e8614c81() {\n const ret = module;\n return addHeapObject(ret);\n};\n\nexport function __wbg_instanceof_Window_0e6c0f1096d66c3c(arg0) {\n const ret = getObject(arg0) instanceof Window;\n return ret;\n};\n\nexport function __wbg_document_99eddbbc11ec831e(arg0) {\n const ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_getElementById_f83c5de20dc455d6(arg0, arg1, arg2) {\n const ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_error_8ff19d586a987aef(arg0) {\n console.error(getObject(arg0));\n};\n\nexport function __wbg_log_e8ba7b992c7ad0eb(arg0) {\n console.log(getObject(arg0));\n};\n\nexport function __wbg_instanceof_CanvasRenderingContext2d_405495bb0ea92c4f(arg0) {\n const ret = getObject(arg0) instanceof CanvasRenderingContext2D;\n return ret;\n};\n\nexport function __wbg_setstrokeStyle_32540003cbfe210b(arg0, arg1) {\n getObject(arg0).strokeStyle = getObject(arg1);\n};\n\nexport function __wbg_setfillStyle_1d391c4891a6ec4d(arg0, arg1) {\n getObject(arg0).fillStyle = getObject(arg1);\n};\n\nexport function __wbg_setlineWidth_6f1b76036ab98bfc(arg0, arg1) {\n getObject(arg0).lineWidth = arg1;\n};\n\nexport function __wbg_beginPath_e040b5521d41f537(arg0) {\n getObject(arg0).beginPath();\n};\n\nexport function __wbg_fill_b6e37fbbefb55ae0(arg0) {\n getObject(arg0).fill();\n};\n\nexport function __wbg_stroke_63664360a52ce7d1(arg0) {\n getObject(arg0).stroke();\n};\n\nexport function __wbg_arc_85205a36bd04df0a() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {\n getObject(arg0).arc(arg1, arg2, arg3, arg4, arg5);\n}, arguments) };\n\nexport function __wbg_fillRect_59b38b7e6f8d0717(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).fillRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_strokeRect_469c3838c9d01537(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).strokeRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_instanceof_HtmlCanvasElement_b94545433bb4d2ef(arg0) {\n const ret = getObject(arg0) instanceof HTMLCanvasElement;\n return ret;\n};\n\nexport function __wbg_setwidth_654d8adcd4979eed(arg0, arg1) {\n getObject(arg0).width = arg1 >>> 0;\n};\n\nexport function __wbg_setheight_2b662384bfacb65c(arg0, arg1) {\n getObject(arg0).height = arg1 >>> 0;\n};\n\nexport function __wbg_getContext_0c19ba5c037e057f() { return handleError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_newnoargs_e23b458e372830de(arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nexport function __wbg_call_ae78342adc33730a() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_self_99737b4dcdf6f0d8() { return handleError(function () {\n const ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_window_9b61fbbf3564c4fb() { return handleError(function () {\n const ret = window.window;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_globalThis_8e275ef40caea3a3() { return handleError(function () {\n const ret = globalThis.globalThis;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_global_5de1e0f82bddcd27() { return handleError(function () {\n const ret = global.global;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_buffer_7af23f65f6c64548(arg0) {\n const ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_cc9018bd6f283b6f(arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n};\n\nexport function __wbg_set_f25e869e4565d2a2(arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n};\n\nexport function __wbg_length_0acb1cf9bbaf8519(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n};\n\nexport function __wbg_newwithlength_8f0657faca9f1422(arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return addHeapObject(ret);\n};\n\nexport function __wbg_subarray_da527dbd24eafb6b(arg0, arg1, arg2) {\n const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_object_clone_ref(arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_debug_string(arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nexport function __wbindgen_throw(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\nexport function __wbindgen_memory() {\n const ret = wasm.memory;\n return addHeapObject(ret);\n};\n\n","import { Game, Board, BrdIdx, Painter, Team, init_wasm, Moveable, SquareState, Square } from \"draught\";\n// import { memory } from \"draught/draught_bg.wasm\";\n\n///////////////////\n// CONSTS\n///////////////////\n\nconst CANVAS_WIDTH = 720;\nconst CANVAS_HEIGHT = 720;\n\nvar BOARD_WIDTH = 8;\nvar BOARD_HEIGHT = 8;\n\nvar PIECE_ROWS = 3;\nvar SEARCH_DEPTH = 4;\nvar PERFECT_CHANCE = 0.5;\n\nconst STATUS_TIMEOUT = 3000;\nconst WON_TIMEOUT = 3000;\n\nconst GameState = {\n HUMAN_TURN: {\n THINKING: \"human_turn.thinking\",\n FROM_SELECTED: \"human_turn.from_selected\"\n },\n AI_TURN: \"ai_turn\"\n}\n\n//////////////////\n// GAME STUFF\n//////////////////\n\ninit_wasm();\n\n// let board = new Board(BOARD_WIDTH, BOARD_HEIGHT, Team.Black);\n\nconst statusText = document.getElementById(\"status-p\");\nconst statusAlert = document.getElementById(\"status-d\");\nconst teamText = document.getElementById(\"team-p\");\nconst nodeCountText = document.getElementById(\"node-count\");\nconst winningText = document.getElementById(\"winning-p\");\n\nconst startBtn = document.getElementById(\"startBtn\");\nstartBtn.onclick = start_game;\n\nlet wonTimeout = null;\nlet statusTimeout = null;\nlet setStatus = setStatusAlert;\n\nlet current_state = GameState.HUMAN_TURN.THINKING;\n\nlet game = null;\nlet painter = null;\n\nlet clicks = [];\n\nstart_game();\n\n/////////////////\n// CANVAS\n/////////////////\n\nconst canvas = document.getElementById(\"game-canvas\");\ncanvas.addEventListener(\"click\", (event) => {\n var mousepos = getMousePos(canvas, event);\n // console.log(mousepos);\n var cell = new BrdIdx(\n Math.floor((mousepos.y / canvas.clientHeight) * BOARD_HEIGHT),\n Math.floor((mousepos.x / canvas.clientWidth) * BOARD_WIDTH),\n );\n // console.log(cell);\n process_canvas_click(cell);\n});\n\n////////////////\n// FUNCS\n////////////////\n\nfunction start_game() {\n game = new Game(BOARD_WIDTH, BOARD_HEIGHT, PIECE_ROWS, Team.Black, SEARCH_DEPTH);\n painter = new Painter(CANVAS_WIDTH, CANVAS_HEIGHT, \"game-canvas\");\n game.set_painter(painter);\n game.draw();\n\n clearInterval(wonTimeout);\n updateTeamText();\n updateWinningText();\n clicks = [];\n current_state = GameState.HUMAN_TURN.THINKING;\n}\n\nfunction process_canvas_click(cell_coord) {\n\n switch(current_state) {\n // first click of a move\n case GameState.HUMAN_TURN.THINKING:\n if (game.current_cell_state(cell_coord).state != SquareState.Occupied ) {\n return;\n }\n\n if (game.current_cell_state(cell_coord).occupant.team != game.current_turn() ) {\n return;\n }\n\n // console.log(\"Your turn, first piece picked\");\n\n clicks.push(cell_coord);\n current_state = GameState.HUMAN_TURN.FROM_SELECTED;\n game.set_selected(cell_coord);\n game.draw();\n \n break;\n \n // second click of a move\n case GameState.HUMAN_TURN.FROM_SELECTED:\n\n // second click is different to first, process as move\n // otherwise, will skip straight to clean up (clear selected and clicks) \n if (!clicks[0].eq(cell_coord)) {\n\n if (game.current_cell_state(cell_coord).state != SquareState.Empty ) {\n return;\n }\n \n // console.log(\"Your turn, first piece already picked, picking second\");\n \n clicks.push(cell_coord);\n \n if (clicks.length != 2) {\n setStatus(`Error: wrong number of clicks to process ${clicks.length}`);\n console.error(`Error: wrong number of clicks to process ${clicks.length}`);\n \n return;\n }\n\n let status = game.make_move(clicks[0], clicks[1]);\n\n switch(status) {\n case Moveable.Allowed:\n\n if (aiCheckBox.checked && game.has_won() === undefined) {\n game.ai_move();\n nodeCountText.innerText = `searched ${game.last_node_count.toLocaleString(\"en-GB\")} possible moves`;\n }\n\n break;\n case Moveable.IllegalTrajectory:\n setStatus(\"You can't move like that!\");\n break;\n case Moveable.JumpingSameTeam:\n setStatus(\"You can't jump your own piece!\");\n break;\n case Moveable.NoJumpablePiece:\n setStatus(\"There's nothing to jump!\");\n break;\n case Moveable.OccupiedDest:\n setStatus(\"There's a piece there!\");\n break;\n case Moveable.OutOfBounds:\n setStatus(\"That square's not on the board! (how have you managed that?)\");\n break;\n case Moveable.UnoccupiedSrc:\n setStatus(\"There's no piece to move!\");\n break;\n case Moveable.Unplayable:\n setStatus(\"That's not a playable square!\");\n break;\n case Moveable.WrongTeamSrc:\n setStatus(\"That's not your piece!\");\n break;\n }\n \n }\n\n game.clear_selected();\n game.draw();\n clicks = [];\n current_state = GameState.HUMAN_TURN.THINKING;\n \n break;\n case GameState.AI_TURN:\n console.log(\"It's the AI's turn!\");\n break;\n }\n\n updateTeamText();\n updateWinningText();\n checkWon();\n}\n\nfunction getMousePos(canvas, evt) {\n var rect = canvas.getBoundingClientRect();\n return {\n x: evt.clientX - rect.left,\n y: evt.clientY - rect.top\n };\n}\n\nfunction setStatusText(txt, hide = true) {\n if(statusTimeout != null) {\n clearInterval(statusTimeout);\n }\n\n statusText.innerText = txt;\n\n if(hide) {\n statusTimeout = setTimeout(() => {\n statusText.innerText = \"\";\n }, STATUS_TIMEOUT);\n }\n}\n\nfunction setStatusAlert(txt, alertType = \"danger\", hide = true) {\n if(statusTimeout != null) {\n clearInterval(statusTimeout);\n }\n\n statusAlert.className = `alert alert-${alertType}`;\n statusAlert.innerText = txt;\n statusAlert.hidden = false;\n\n if(hide) {\n statusTimeout = setTimeout(() => {\n statusAlert.hidden = true;\n }, STATUS_TIMEOUT);\n }\n}\n\nfunction updateTeamText(){\n let team = game.current_turn();\n switch(team) {\n case Team.White:\n teamText.innerText = \"⚪ White ⚪\";\n break;\n case Team.Black:\n teamText.innerText = \"🔴 Black 🔴\";\n break;\n }\n}\n\nfunction updateWinningText(){\n \n switch(game.winning()) {\n case undefined:\n winningText.innerText = \"\";\n break;\n case Team.White:\n winningText.innerText = \"👑 White 👑\";\n break;\n case Team.Black:\n winningText.innerText = \"👑 Black 👑\";\n break;\n }\n}\n\nfunction checkWon() {\n\n switch(game.has_won()) {\n case undefined:\n break;\n case Team.White:\n setStatus(\"You Lost!\");\n wonTimeout = setInterval(() => {\n start_game();\n }, WON_TIMEOUT);\n break;\n case Team.Black:\n setStatus(\"You Won!\", \"success\");\n wonTimeout = setInterval(() => {\n start_game();\n }, WON_TIMEOUT);\n break;\n }\n}\n\n////////////////\n// UI\n////////////////\n\nconst widthBox = document.getElementById(\"width\");\n/**\n * Handler for width input box change, start a new game\n */\nconst onWidth = () => {\n\n BOARD_WIDTH = parseInt(widthBox.value);\n start_game();\n}\nwidthBox.onchange = onWidth;\nwidthBox.value = 8;\n\nconst heightBox = document.getElementById(\"height\");\n/**\n * Handler for height input box change, start a new game\n */\nconst onHeight = () => {\n\n BOARD_HEIGHT = parseInt(heightBox.value);\n pieceRowsBox.max = (BOARD_HEIGHT / 2) - 1;\n start_game();\n}\nheightBox.onchange = onHeight;\nheightBox.value = 8;\n\nconst pieceRowsBox = document.getElementById(\"play_rows\");\n/**\n * Handler for piece rows input box change, start a new game\n */\nconst onPieceRows = () => {\n\n PIECE_ROWS = parseInt(pieceRowsBox.value);\n start_game();\n}\npieceRowsBox.onchange = onPieceRows;\npieceRowsBox.value = 3;\n\nconst aiSearchDepthBox = document.getElementById(\"ai_search_depth\");\n/**\n * Handler for AI search depth input box change, start a new game\n */\nconst onAISearchDepth = () => {\n\n SEARCH_DEPTH = parseInt(aiSearchDepthBox.value);\n game.set_search_depth(SEARCH_DEPTH);\n\n if(SEARCH_DEPTH > 4) {\n setStatus(\"This increases thinking time exponentially, be careful (probably don't go past 6)\", \"warning\");\n }\n}\naiSearchDepthBox.onchange = onAISearchDepth;\naiSearchDepthBox.value = 4;\n\nconst aiCheckBox = document.getElementById(\"ai-checkbox\");\n/**\n * Handler for height input box change, get a new universe of given size\n */\nconst onAICheck = () => {\n \n}\naiCheckBox.onchange = onAICheck;\n// aiCheckBox.checked = true;\n\nconst aiPerfectChance = document.getElementById(\"ai_difficulty\");\n/**\n * Handler for piece rows input box change, start a new game\n */\nconst onPerfectChance = () => {\n\n PERFECT_CHANCE = parseInt(aiPerfectChance.value) / 100;\n game.set_perfect_chance(PERFECT_CHANCE);\n}\naiPerfectChance.onchange = onPerfectChance;\naiPerfectChance.value = 50;"],"names":["heap","Array","fill","undefined","getObject","idx","push","heap_next","length","dropObject","takeObject","ret","cachedTextDecoder","TextDecoder","module","require","ignoreBOM","fatal","decode","cachegetUint8Memory0","getUint8Memory0","buffer","Uint8Array","getStringFromWasm0","ptr","len","subarray","addHeapObject","obj","debugString","val","type","description","name","isArray","debug","i","builtInMatches","exec","toString","call","className","JSON","stringify","_","Error","message","stack","WASM_VECTOR_LEN","cachedTextEncoder","TextEncoder","encodeString","encodeInto","arg","view","buf","encode","set","read","written","passStringToWasm0","malloc","realloc","mem","offset","code","charCodeAt","slice","cachegetInt32Memory0","getInt32Memory0","Int32Array","isLikeNone","x","_assertClass","instance","klass","init_wasm","handleError","f","args","apply","this","e","Object","freeze","Move","Jump","Team","Black","White","SquareState","Man","King","Empty","Occupied","Unplayable","Moveable","Allowed","UnoccupiedSrc","OccupiedDest","OutOfBounds","WrongTeamSrc","IllegalTrajectory","NoJumpablePiece","JumpingSameTeam","Board","static","create","prototype","__destroy_into_raw","free","width","arg0","height","current_turn","cell","Square","__wrap","set_cell","square","ptr0","grid_cell","BrdIdx","cell_index","row","col","cell_idx","board_index","can_move","from","to","ptr1","validate_man_move","from_square_occupant","Piece","ptr2","validate_king_move","jumpee_idx","cells","num_cells","num_pieces","num_player","team","score","cell_state","apply_move","apply_jump","king_row_idx","jumpee","from_occ","constructor","board","piece_rows","eq","other","Game","last_node_count","perfect_chance","current_board_cells","current_board_len","winning","has_won","current_cell_state","set_search_depth","search_depth","set_selected","set_perfect_chance","new_chance","clear_selected","make_move","execute_move","execute_jump","push_new_board","set_current","first_turn","canvas_id","canvas_width","canvas_height","len0","set_painter","value","Painter","draw","ai_move","canvas","set_square_outline","set_outline_width","set_draw_outline","reset_dimensions","validate_board_dim","strength","occupant","state","__wbindgen_object_drop_ref","__wbindgen_string_new","arg1","__wbg_new_693216e109162396","__wbg_stack_0ddaca5d1abfb52f","__wbg_error_09919627ac0992f5","console","error","__wbg_self_86b4b13392c7af56","self","arguments","__wbg_crypto_b8c92eaac23d0d80","crypto","__wbg_msCrypto_9ad6677321a08dd8","msCrypto","__wbindgen_is_undefined","__wbg_require_f5521a5b85ad2542","arg2","__wbg_getRandomValues_dd27e6b0652b3236","getRandomValues","__wbg_getRandomValues_e57c9b75ddead065","__wbg_randomFillSync_d2ba53160aec6aba","randomFillSync","__wbg_static_accessor_MODULE_452b4680e8614c81","__wbg_instanceof_Window_0e6c0f1096d66c3c","Window","__wbg_document_99eddbbc11ec831e","document","__wbg_getElementById_f83c5de20dc455d6","getElementById","__wbg_error_8ff19d586a987aef","__wbg_log_e8ba7b992c7ad0eb","log","__wbg_instanceof_CanvasRenderingContext2d_405495bb0ea92c4f","CanvasRenderingContext2D","__wbg_setstrokeStyle_32540003cbfe210b","strokeStyle","__wbg_setfillStyle_1d391c4891a6ec4d","fillStyle","__wbg_setlineWidth_6f1b76036ab98bfc","lineWidth","__wbg_beginPath_e040b5521d41f537","beginPath","__wbg_fill_b6e37fbbefb55ae0","__wbg_stroke_63664360a52ce7d1","stroke","__wbg_arc_85205a36bd04df0a","arg3","arg4","arg5","arc","__wbg_fillRect_59b38b7e6f8d0717","fillRect","__wbg_strokeRect_469c3838c9d01537","strokeRect","__wbg_instanceof_HtmlCanvasElement_b94545433bb4d2ef","HTMLCanvasElement","__wbg_setwidth_654d8adcd4979eed","__wbg_setheight_2b662384bfacb65c","__wbg_getContext_0c19ba5c037e057f","getContext","__wbg_newnoargs_e23b458e372830de","Function","__wbg_call_ae78342adc33730a","__wbg_self_99737b4dcdf6f0d8","__wbg_window_9b61fbbf3564c4fb","window","__wbg_globalThis_8e275ef40caea3a3","globalThis","__wbg_global_5de1e0f82bddcd27","g","global","__wbg_buffer_7af23f65f6c64548","__wbg_new_cc9018bd6f283b6f","__wbg_set_f25e869e4565d2a2","__wbg_length_0acb1cf9bbaf8519","__wbg_newwithlength_8f0657faca9f1422","__wbg_subarray_da527dbd24eafb6b","__wbindgen_object_clone_ref","__wbindgen_debug_string","__wbindgen_throw","__wbindgen_memory","CANVAS_WIDTH","CANVAS_HEIGHT","BOARD_WIDTH","BOARD_HEIGHT","PIECE_ROWS","SEARCH_DEPTH","PERFECT_CHANCE","STATUS_TIMEOUT","WON_TIMEOUT","GameState","HUMAN_TURN","THINKING","FROM_SELECTED","AI_TURN","statusAlert","teamText","nodeCountText","winningText","onclick","start_game","wonTimeout","statusTimeout","setStatus","setStatusAlert","current_state","game","painter","clicks","clearInterval","updateTeamText","updateWinningText","process_canvas_click","cell_coord","aiCheckBox","checked","innerText","toLocaleString","checkWon","getMousePos","evt","rect","getBoundingClientRect","clientX","left","y","clientY","top","txt","alertType","hide","hidden","setTimeout","setInterval","addEventListener","event","mousepos","Math","floor","clientHeight","clientWidth","widthBox","onWidth","parseInt","onchange","heightBox","onHeight","pieceRowsBox","max","onPieceRows","aiSearchDepthBox","onAISearchDepth","onAICheck","aiPerfectChance","onPerfectChance"],"sourceRoot":""} \ No newline at end of file diff --git a/CNAME b/CNAME deleted file mode 100644 index 6c85a1a..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -draught.sarsoo.xyz \ No newline at end of file diff --git a/ac1cc8e64ef878ddfae5.module.wasm b/ac1cc8e64ef878ddfae5.module.wasm deleted file mode 100644 index f85e9710fd8474072dee50c9dec0002a6e10fee1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124192 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

O{MtN)#49D;$pK;NfW1^`m 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 diff --git a/doc/ayu.css b/doc/ayu.css index 5122904..50d893e 100644 --- a/doc/ayu.css +++ b/doc/ayu.css @@ -1 +1 @@ - body{background-color:#0f1419;color:#c5c5c5;}h1,h2,h3,h4{color:white;}h1.fqn{border-bottom-color:#5c6773;}h1.fqn a{color:#fff;}h2,h3,h4{border-bottom-color:#5c6773;}h4{border:none;}.in-band{background-color:#0f1419;}.invisible{background:rgba(0,0,0,0);}.docblock code{color:#ffb454;}.code-header{color:#e6e1cf;}.docblock pre>code,pre>code{color:#e6e1cf;}span code{color:#e6e1cf;}.docblock a>code{color:#39AFD7 !important;}.docblock code,.docblock-short code{background-color:#191f26;}pre,.rustdoc.source .example-wrap{color:#e6e1cf;background-color:#191f26;}.sidebar{background-color:#14191f;}.rust-logo{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);}*{scrollbar-color:#5c6773 #24292f;}.sidebar{scrollbar-color:#5c6773 #24292f;}::-webkit-scrollbar-track{background-color:transparent;}::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar::-webkit-scrollbar-track{background-color:transparent;}.sidebar::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar .current{background-color:transparent;color:#ffb44c;}.source .sidebar{background-color:#14191f;}.sidebar .location{border-color:#000;background-color:#0f1419;color:#fff;}.sidebar-elems .location{color:#ff7733;}.sidebar-elems .location a{color:#fff;}.sidebar .version{border-bottom-color:#424c57;}.sidebar-title{border-top-color:#5c6773;border-bottom-color:#5c6773;}.block a:hover{background:transparent;color:#ffb44c;}.line-numbers span{color:#5c6773;}.line-numbers .line-highlighted{color:#708090;background-color:rgba(255,236,164,0.06);padding-right:4px;border-right:1px solid #ffb44c;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#5c6773;}.docblock table td,.docblock table th{border-color:#5c6773;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#c5c5c5;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#000 !important;background-color:#c6afb3;}.search-results a{color:#0096cf;}.search-results a div.desc{color:#c5c5c5;}.content .item-info::before{color:#ccc;}.content span.foreigntype,.content a.foreigntype{color:#ffa0a5;}.content span.union,.content a.union{color:#ffa0a5;}.content span.constant,.content a.constant,.content span.static,.content a.static{color:#39AFD7;}.content span.primitive,.content a.primitive{color:#ffa0a5;}.content span.traitalias,.content a.traitalias{color:#39AFD7;}.content span.keyword,.content a.keyword{color:#39AFD7;}.content span.externcrate,.content span.mod,.content a.mod{color:#39AFD7;}.content span.struct,.content a.struct{color:#ffa0a5;}.content span.enum,.content a.enum{color:#ffa0a5;}.content span.trait,.content a.trait{color:#39AFD7;}.content span.type,.content a.type{color:#39AFD7;}.content span.type,.content a.type,.block a.current.type{color:#39AFD7;}.content span.associatedtype,.content a.associatedtype,.block a.current.associatedtype{color:#39AFD7;}.content span.fn,.content a.fn,.content span.method,.content a.method,.content span.tymethod,.content a.tymethod,.content .fnname{color:#fdd687;}.content span.attr,.content a.attr,.content span.derive,.content a.derive,.content span.macro,.content a.macro{color:#a37acc;}pre.rust .comment{color:#788797;}pre.rust .doccomment{color:#a1ac88;}nav:not(.sidebar){border-bottom-color:#424c57;}nav.main .current{border-top-color:#5c6773;border-bottom-color:#5c6773;}nav.main .separator{border:1px solid #5c6773;}a{color:#39AFD7;}a.srclink,a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar a,.in-band a{color:#c5c5c5;}.search-results a{color:#0096cf;}body.source .example-wrap pre.rust a{background:#333;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search{color:#c5c5c5;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;border-color:#424c57;}.search-input{color:#ffffff;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;transition:box-shadow 150ms ease-in-out;}#crate-search+.search-input:focus{box-shadow:0 0 0 1px #148099,0 0 0 2px transparent;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable,.stab.deprecated,.stab.portability{color:#c5c5c5;background:#314559 !important;border-style:none !important;border-radius:4px;padding:3px 6px 3px 6px;}.stab.portability>code{color:#e6e1cf;background:none;}#help>div{background:#14191f;box-shadow:0px 6px 20px 0px black;border:none;border-radius:4px;}#help span.bottom,#help span.top{border-color:#5c6773;}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#788797;}.line-numbers :target{background-color:transparent;}pre.rust .number,pre.rust .string{color:#b8cc52;}pre.rust .kw,pre.rust .kw-2,pre.rust .prelude-ty,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .op,pre.rust .lifetime{color:#ff7733;}pre.rust .macro,pre.rust .macro-nonterminal{color:#a37acc;}pre.rust .question-mark{color:#ff9011;}pre.rust .self{color:#36a3d9;font-style:italic;}pre.rust .attribute{color:#e6e1cf;}pre.rust .attribute .ident,pre.rust .attribute .op{color:#e6e1cf;}.example-wrap>pre.line-number{color:#5c67736e;border:none;}a.test-arrow{font-size:100%;color:#788797;border-radius:4px;background-color:rgba(57,175,215,0.09);}a.test-arrow:hover{background-color:rgba(57,175,215,0.368);color:#c5c5c5;}.toggle-label,.code-attribute{color:#999;}:target{background:rgba(255,236,164,0.06);border-right:3px solid rgba(255,180,76,0.85);}pre.compile_fail{border-left:2px solid rgba(255,0,0,.4);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.4);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#39AFD7;}.tooltip::after{background-color:#314559;color:#c5c5c5;border:1px solid #5c6773;}.tooltip::before{border-color:transparent #314559 transparent transparent;}.notable-traits-tooltiptext{background-color:#314559;border-color:#5c6773;}.notable-traits-tooltiptext .notable{border-bottom-color:#5c6773;}#titles>button.selected{background-color:#141920 !important;border-bottom:1px solid #ffb44c !important;border-top:none;}#titles>button:not(.selected){background-color:transparent !important;border:none;}#titles>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#titles>button>div.count{color:#888;}.search-input:focus{}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{}.content span.struct,.content a.struct,.block a.current.struct{}#titles>button:hover,#titles>button.selected{}.content span.typedef,.content a.typedef,.block a.current.typedef{}.content span.union,.content a.union,.block a.current.union{}pre.rust .lifetime{}.stab.unstable{}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){}.content span.enum,.content a.enum,.block a.current.enum{}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{}.content span.keyword,.content a.keyword,.block a.current.keyword{}pre.rust .comment{}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{}pre.rust .kw{}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{}pre.rust .doccomment{}.stab.deprecated{}.content a.attr,.content a.derive,.content a.macro{}.stab.portability{}.content span.primitive,.content a.primitive,.block a.current.primitive{}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{}pre.rust .kw-2,pre.rust .prelude-ty{}.content span.trait,.content a.trait,.block a.current.trait{}.search-results a:focus span{}a.result-trait:focus{}a.result-traitalias:focus{}a.result-mod:focus,a.result-externcrate:focus{}a.result-mod:focus{}a.result-externcrate:focus{}a.result-enum:focus{}a.result-struct:focus{}a.result-union:focus{}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{}a.result-type:focus{}a.result-associatedtype:focus{}a.result-foreigntype:focus{}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{}a.result-constant:focus,a.result-static:focus{}a.result-primitive:focus{}a.result-keyword:focus{}@media (max-width:700px){.sidebar-menu{background-color:#14191f;border-bottom-color:#5c6773;border-right-color:#5c6773;}.sidebar-elems{background-color:#14191f;border-right-color:#5c6773;}#sidebar-filler{background-color:#14191f;border-bottom-color:#5c6773;}}kbd{color:#c5c5c5;background-color:#314559;border-color:#5c6773;border-bottom-color:#5c6773;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#5c6773;background-color:#0f1419;color:#fff;}#theme-picker>img,#settings-menu>img{filter:invert(100);}#copy-path{color:#fff;}#copy-path>img{filter:invert(70%);}#copy-path:hover>img{filter:invert(100%);}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#e0e0e0;}#theme-choices{border-color:#5c6773;background-color:#0f1419;}#theme-choices>button:not(:first-child){border-top-color:#5c6773;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:rgba(110,110,110,0.33);}@media (max-width:700px){#theme-picker{background:#0f1419;}}#all-types{background-color:#14191f;}#all-types:hover{background-color:rgba(70,70,70,0.33);}.search-results .result-name span.alias{color:#c5c5c5;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#14191f;}#sidebar-toggle:hover{background-color:rgba(70,70,70,0.33);}#source-sidebar{background-color:#14191f;}#source-sidebar>.title{color:#fff;border-bottom-color:#5c6773;}div.files>a:hover,div.name:hover{background-color:#14191f;color:#ffb44c;}div.files>.selected{background-color:#14191f;color:#ffb44c;}.setting-line>.title{border-bottom-color:#5c6773;}input:checked+.slider{background-color:#ffb454 !important;}.scraped-example .example-wrap .rust span.highlight{background:rgb(91,59,1);}.scraped-example .example-wrap .rust span.highlight.focus{background:rgb(124,75,15);}.scraped-example:not(.expanded) .code-wrapper:before{background:linear-gradient(to bottom,rgba(15,20,25,1),rgba(15,20,25,0));}.scraped-example:not(.expanded) .code-wrapper:after{background:linear-gradient(to top,rgba(15,20,25,1),rgba(15,20,25,0));}.toggle-line-inner{background:#616161;}.toggle-line:hover .toggle-line-inner{background:##898989;} \ No newline at end of file + body{background-color:#0f1419;color:#c5c5c5;}h1,h2,h3,h4{color:white;}h1.fqn{border-bottom-color:#5c6773;}h1.fqn a{color:#fff;}h2,h3,h4{border-bottom-color:#5c6773;}h4{border:none;}.in-band{background-color:#0f1419;}.invisible{background:rgba(0,0,0,0);}.docblock code{color:#ffb454;}.code-header{color:#e6e1cf;}.docblock pre>code,pre>code{color:#e6e1cf;}span code{color:#e6e1cf;}.docblock a>code{color:#39AFD7 !important;}.docblock code,.docblock-short code{background-color:#191f26;}pre,.rustdoc.source .example-wrap{color:#e6e1cf;background-color:#191f26;}.sidebar,.mobile-topbar,.sidebar-menu-toggle{background-color:#14191f;}.rust-logo{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);}*{scrollbar-color:#5c6773 #24292f;}.sidebar{scrollbar-color:#5c6773 #24292f;}::-webkit-scrollbar-track{background-color:transparent;}::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar::-webkit-scrollbar-track{background-color:transparent;}.sidebar::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar .current,.sidebar a:hover{background-color:transparent;color:#ffb44c;}.source .sidebar{background-color:#14191f;}.sidebar-elems .location{color:#ff7733;}.line-numbers span{color:#5c6773;}.line-numbers .line-highlighted{color:#708090;background-color:rgba(255,236,164,0.06);padding-right:4px;border-right:1px solid #ffb44c;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#5c6773;}.docblock table td,.docblock table th{border-color:#5c6773;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#c5c5c5;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#000 !important;background-color:#c6afb3;}.search-results a{color:#0096cf;}.search-results a div.desc{color:#c5c5c5;}.content .item-info::before{color:#ccc;}.content span.foreigntype,.content a.foreigntype{color:#ffa0a5;}.content span.union,.content a.union{color:#ffa0a5;}.content span.constant,.content a.constant,.content span.static,.content a.static{color:#39AFD7;}.content span.primitive,.content a.primitive{color:#ffa0a5;}.content span.traitalias,.content a.traitalias{color:#39AFD7;}.content span.keyword,.content a.keyword{color:#39AFD7;}.content span.externcrate,.content span.mod,.content a.mod{color:#39AFD7;}.content span.struct,.content a.struct{color:#ffa0a5;}.content span.enum,.content a.enum{color:#ffa0a5;}.content span.trait,.content a.trait{color:#39AFD7;}.content span.type,.content a.type{color:#39AFD7;}.content span.type,.content a.type,.block a.current.type{color:#39AFD7;}.content span.associatedtype,.content a.associatedtype,.block a.current.associatedtype{color:#39AFD7;}.content span.fn,.content a.fn,.content span.method,.content a.method,.content span.tymethod,.content a.tymethod,.content .fnname{color:#fdd687;}.content span.attr,.content a.attr,.content span.derive,.content a.derive,.content span.macro,.content a.macro{color:#a37acc;}.sidebar a{color:#53b1db;}.sidebar a.current.type{color:#53b1db;}.sidebar a.current.associatedtype{color:#53b1db;}pre.rust .comment{color:#788797;}pre.rust .doccomment{color:#a1ac88;}nav.main .current{border-top-color:#5c6773;border-bottom-color:#5c6773;}nav.main .separator{border:1px solid #5c6773;}a{color:#39AFD7;}a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,.in-band a{color:#c5c5c5;}.sidebar h2 a,.sidebar h3 a{color:white;}.search-results a{color:#0096cf;}body.source .example-wrap pre.rust a{background:#333;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search,.search-input{background-color:#141920;border-color:#424c57;color:#c5c5c5;}.search-input{color:#ffffff;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable,.stab.deprecated,.stab.portability{color:#c5c5c5;background:#314559 !important;border-style:none !important;border-radius:4px;padding:3px 6px 3px 6px;}.stab.portability>code{color:#e6e1cf;background:none;}#help>div{background:#14191f;box-shadow:0px 6px 20px 0px black;border:none;border-radius:4px;}#help span.bottom,#help span.top{border-color:#5c6773;}.rightside,.out-of-band{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#788797;}.line-numbers :target{background-color:transparent;}pre.rust .number,pre.rust .string{color:#b8cc52;}pre.rust .kw,pre.rust .kw-2,pre.rust .prelude-ty,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .op,pre.rust .lifetime{color:#ff7733;}pre.rust .macro,pre.rust .macro-nonterminal{color:#a37acc;}pre.rust .question-mark{color:#ff9011;}pre.rust .self{color:#36a3d9;font-style:italic;}pre.rust .attribute{color:#e6e1cf;}pre.rust .attribute .ident,pre.rust .attribute .op{color:#e6e1cf;}.example-wrap>pre.line-number{color:#5c67736e;border:none;}a.test-arrow{font-size:100%;color:#788797;border-radius:4px;background-color:rgba(57,175,215,0.09);}a.test-arrow:hover{background-color:rgba(57,175,215,0.368);color:#c5c5c5;}.toggle-label,.code-attribute{color:#999;}:target{background:rgba(255,236,164,0.06);border-right:3px solid rgba(255,180,76,0.85);}pre.compile_fail{border-left:2px solid rgba(255,0,0,.4);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.4);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#39AFD7;}.tooltip::after{background-color:#314559;color:#c5c5c5;border:1px solid #5c6773;}.tooltip::before{border-color:transparent #314559 transparent transparent;}.notable-traits-tooltiptext{background-color:#314559;border-color:#5c6773;}.notable-traits-tooltiptext .notable{border-bottom-color:#5c6773;}#titles>button.selected{background-color:#141920 !important;border-bottom:1px solid #ffb44c !important;border-top:none;}#titles>button:not(.selected){background-color:transparent !important;border:none;}#titles>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#titles>button>div.count{color:#888;}.search-input:focus{}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{}.content span.struct,.content a.struct,.block a.current.struct{}#titles>button:hover,#titles>button.selected{}.content span.typedef,.content a.typedef,.block a.current.typedef{}.content span.union,.content a.union,.block a.current.union{}pre.rust .lifetime{}.stab.unstable{}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){}.content span.enum,.content a.enum,.block a.current.enum{}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{}.content span.keyword,.content a.keyword,.block a.current.keyword{}pre.rust .comment{}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{}pre.rust .kw{}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{}pre.rust .doccomment{}.stab.deprecated{}.content a.attr,.content a.derive,.content a.macro{}.stab.portability{}.content span.primitive,.content a.primitive,.block a.current.primitive{}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{}pre.rust .kw-2,pre.rust .prelude-ty{}.content span.trait,.content a.trait,.block a.current.trait{}.search-results a:focus span{}a.result-trait:focus{}a.result-traitalias:focus{}a.result-mod:focus,a.result-externcrate:focus{}a.result-mod:focus{}a.result-externcrate:focus{}a.result-enum:focus{}a.result-struct:focus{}a.result-union:focus{}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{}a.result-type:focus{}a.result-associatedtype:focus{}a.result-foreigntype:focus{}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{}a.result-constant:focus,a.result-static:focus{}a.result-primitive:focus{}a.result-keyword:focus{}.sidebar a.current.enum{}.sidebar a.current.struct{}.sidebar a.current.foreigntype{}.sidebar a.current.attr,.sidebar a.current.derive,.sidebar a.current.macro{}.sidebar a.current.union{}.sidebar a.current.constant .sidebar a.current.static{}.sidebar a.current.primitive{}.sidebar a.current.externcrate .sidebar a.current.mod{}.sidebar a.current.trait{}.sidebar a.current.traitalias{}.sidebar a.current.fn,.sidebar a.current.method,.sidebar a.current.tymethod{}.sidebar a.current.keyword{}@media (max-width:700px){.sidebar-menu{background-color:#14191f;border-bottom-color:#5c6773;border-right-color:#5c6773;}.sidebar-elems{background-color:#14191f;border-right-color:#5c6773;}#sidebar-filler{background-color:#14191f;border-bottom-color:#5c6773;}}kbd{color:#c5c5c5;background-color:#314559;border-color:#5c6773;border-bottom-color:#5c6773;box-shadow:inset 0 -1px 0 #5c6773;}#theme-picker,#settings-menu,#help-button{border-color:#5c6773;background-color:#0f1419;color:#fff;}#theme-picker>img,#settings-menu>img{filter:invert(100);}#copy-path{color:#fff;}#copy-path>img{filter:invert(70%);}#copy-path:hover>img{filter:invert(100%);}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#e0e0e0;}#theme-choices{border-color:#5c6773;background-color:#0f1419;}#theme-choices>button:not(:first-child){border-top-color:#5c6773;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:rgba(110,110,110,0.33);}@media (max-width:700px){#theme-picker{background:#0f1419;}}.search-results .result-name span.alias{color:#c5c5c5;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#14191f;}#sidebar-toggle:hover{background-color:rgba(70,70,70,0.33);}#source-sidebar{background-color:#14191f;}#source-sidebar>.title{color:#fff;border-bottom-color:#5c6773;}div.files>a:hover,div.name:hover{background-color:#14191f;color:#ffb44c;}div.files>.selected{background-color:#14191f;color:#ffb44c;}.setting-line>.title{border-bottom-color:#5c6773;}input:checked+.slider{background-color:#ffb454 !important;}.scraped-example .example-wrap .rust span.highlight{background:rgb(91,59,1);}.scraped-example .example-wrap .rust span.highlight.focus{background:rgb(124,75,15);}.scraped-example:not(.expanded) .code-wrapper:before{background:linear-gradient(to bottom,rgba(15,20,25,1),rgba(15,20,25,0));}.scraped-example:not(.expanded) .code-wrapper:after{background:linear-gradient(to top,rgba(15,20,25,1),rgba(15,20,25,0));}.toggle-line-inner{background:#616161;}.toggle-line:hover .toggle-line-inner{background:#898989;} \ No newline at end of file diff --git a/doc/dark.css b/doc/dark.css index 159f551..a31f453 100644 --- a/doc/dark.css +++ b/doc/dark.css @@ -1 +1 @@ -body{background-color:#353535;color:#ddd;}h1,h2,h3,h4{color:#ddd;}h1.fqn{border-bottom-color:#d2d2d2;}h2,h3,h4{border-bottom-color:#d2d2d2;}.in-band{background-color:#353535;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#2A2A2A;}pre,.rustdoc.source .example-wrap{background-color:#2A2A2A;}.sidebar{background-color:#505050;}.rust-logo{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff)}*{scrollbar-color:rgb(64,65,67) #717171;}.sidebar{scrollbar-color:rgba(32,34,37,.6) #5a5a5a;}::-webkit-scrollbar-track{background-color:#717171;}::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar::-webkit-scrollbar-track{background-color:#717171;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar .current{background-color:#333;}.source .sidebar{background-color:#565656;}.sidebar .location{border-color:#fff;background:#575757;color:#DDD;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#444;}.line-numbers span{color:#3B91E2;}.line-numbers .line-highlighted{background-color:#0a042f !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#DDD;}.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#ddd;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#eee !important;background-color:#616161;}.search-results a:focus span{color:#eee !important;}a.result-trait:focus{background-color:#013191;}a.result-traitalias:focus{background-color:#013191;}a.result-mod:focus,a.result-externcrate:focus{background-color:#884719;}a.result-enum:focus{background-color:#194e9f;}a.result-struct:focus{background-color:#194e9f;}a.result-union:focus{background-color:#194e9f;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#4950ed;}a.result-type:focus{background-color:#194e9f;}a.result-associatedtype:focus{background-color:#884719;}a.result-foreigntype:focus{background-color:#194e9f;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#217d1c;}a.result-constant:focus,a.result-static:focus{background-color:#884719;}a.result-primitive:focus{background-color:#194e9f;}a.result-keyword:focus{background-color:#884719;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#2dbfb8;}.content span.struct,.content a.struct,.block a.current.struct{color:#2dbfb8;}.content span.type,.content a.type,.block a.current.type{color:#2dbfb8;}.content span.associatedtype,.content a.associatedtype,.block a.current.associatedtype{color:#D2991D;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#2dbfb8;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#09bd00;}.content span.union,.content a.union,.block a.current.union{color:#2dbfb8;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#D2991D;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#2dbfb8;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#D2991D;}.content span.trait,.content a.trait,.block a.current.trait{color:#b78cf2;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#b78cf2;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#2BAB63;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#D2991D;}pre.rust .comment{color:#8d8d8b;}pre.rust .doccomment{color:#8ca375;}nav:not(.sidebar){border-bottom-color:#4e4e4e;}nav.main .current{border-top-color:#eee;border-bottom-color:#eee;}nav.main .separator{border-color:#eee;}a{color:#D2991D;}a.srclink,a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar a,.in-band a{color:#ddd;}.search-results a{color:#ddd;}a.test-arrow{color:#dedede;}body.source .example-wrap pre.rust a{background:#333;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search{color:#111;background-color:#f0f0f0;border-color:#000;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input{color:#111;background-color:#f0f0f0;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input:focus{border-color:#008dfd;}#crate-search+.search-input:focus{box-shadow:0 0 8px 4px #078dd8;}.module-item .stab,.import-item .stab{color:#ddd;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;color:#2f2f2f;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;color:#2f2f2f;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;color:#2f2f2f;}.stab.portability>code{background:none;}#help>div{background:#4d4d4d;border-color:#bfbfbf;}#help span.bottom,#help span.top{border-color:#bfbfbf;}#help dt{border-color:#bfbfbf;background:rgba(0,0,0,0);}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#ddd;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#ab8ac1;}pre.rust .kw-2,pre.rust .prelude-ty{color:#769acb;}pre.rust .number,pre.rust .string{color:#83a300;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#ee6868;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#d97f26;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#4a4949;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target{background-color:#494a3d;border-right:3px solid #bb7410;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.8);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.8);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.8);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.8);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#0089ff;}.tooltip::after{background-color:#000;color:#fff;border-color:#000;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#111;border-color:#777;}.notable-traits-tooltiptext .notable{border-bottom-color:#d2d2d2;}#titles>button:not(.selected){background-color:#252525;border-top-color:#252525;}#titles>button:hover,#titles>button.selected{border-top-color:#0089ff;background-color:#353535;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#505050;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#505050;border-right-color:#000;}#sidebar-filler{background-color:#505050;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background:#f0f0f0;color:#000;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#ffb900;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(65%);}#theme-choices{border-color:#e0e0e0;background-color:#353535;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#4e4e4e;}@media (max-width:700px){#theme-picker{background:#f0f0f0;}}#all-types{background-color:#505050;}#all-types:hover{background-color:#606060;}.search-results .result-name span.alias{color:#fff;}.search-results .result-name span.grey{color:#ccc;}#sidebar-toggle{background-color:#565656;}#sidebar-toggle:hover{background-color:#676767;}#source-sidebar{background-color:#565656;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#444;}div.files>.selected{background-color:#333;}.setting-line>.title{border-bottom-color:#ddd;}.scraped-example .example-wrap .rust span.highlight{background:rgb(91,59,1);}.scraped-example .example-wrap .rust span.highlight.focus{background:rgb(124,75,15);}.scraped-example:not(.expanded) .code-wrapper:before{background:linear-gradient(to bottom,rgba(53,53,53,1),rgba(53,53,53,0));}.scraped-example:not(.expanded) .code-wrapper:after{background:linear-gradient(to top,rgba(53,53,53,1),rgba(53,53,53,0));}.toggle-line-inner{background:#616161;}.toggle-line:hover .toggle-line-inner{background:##898989;} \ No newline at end of file +body{background-color:#353535;color:#ddd;}h1,h2,h3,h4{color:#ddd;}h1.fqn{border-bottom-color:#d2d2d2;}h2,h3,h4{border-bottom-color:#d2d2d2;}.in-band{background-color:#353535;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#2A2A2A;}pre,.rustdoc.source .example-wrap{background-color:#2A2A2A;}.sidebar,.mobile-topbar,.sidebar-menu-toggle{background-color:#505050;}.rust-logo{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff)}*{scrollbar-color:rgb(64,65,67) #717171;}.sidebar{scrollbar-color:rgba(32,34,37,.6) #5a5a5a;}::-webkit-scrollbar-track{background-color:#717171;}::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar::-webkit-scrollbar-track{background-color:#717171;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar .current,.sidebar a:hover{background:#444;}.source .sidebar{background-color:#565656;}.line-numbers span{color:#3B91E2;}.line-numbers .line-highlighted{background-color:#0a042f !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#DDD;}.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#ddd;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#eee !important;background-color:#616161;}.search-results a:focus span{color:#eee !important;}a.result-trait:focus{background-color:#013191;}a.result-traitalias:focus{background-color:#013191;}a.result-mod:focus,a.result-externcrate:focus{background-color:#884719;}a.result-enum:focus{background-color:#194e9f;}a.result-struct:focus{background-color:#194e9f;}a.result-union:focus{background-color:#194e9f;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#4950ed;}a.result-type:focus{background-color:#194e9f;}a.result-associatedtype:focus{background-color:#884719;}a.result-foreigntype:focus{background-color:#194e9f;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#217d1c;}a.result-constant:focus,a.result-static:focus{background-color:#884719;}a.result-primitive:focus{background-color:#194e9f;}a.result-keyword:focus{background-color:#884719;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#2dbfb8;}.content span.struct,.content a.struct,.block a.current.struct{color:#2dbfb8;}.content span.type,.content a.type,.block a.current.type{color:#2dbfb8;}.content span.associatedtype,.content a.associatedtype,.block a.current.associatedtype{color:#D2991D;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#2dbfb8;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#09bd00;}.content span.union,.content a.union,.block a.current.union{color:#2dbfb8;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#D2991D;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#2dbfb8;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#D2991D;}.content span.trait,.content a.trait,.block a.current.trait{color:#b78cf2;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#b78cf2;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#2BAB63;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#D2991D;}.sidebar a{color:#fdbf35;}.sidebar a.current.enum{color:#12ece2;}.sidebar a.current.struct{color:#12ece2;}.sidebar a.current.type{color:#12ece2;}.sidebar a.current.associatedtype{color:#fdbf35;}.sidebar a.current.foreigntype{color:#12ece2;}.sidebar a.current.attr,.sidebar a.current.derive,.sidebar a.current.macro{color:#0be900;}.sidebar a.current.union{color:#12ece2;}.sidebar a.current.constant .sidebar a.current.static{color:#fdbf35;}.sidebar a.current.primitive{color:#12ece2;}.sidebar a.current.externcrate .sidebar a.current.mod{color:#fdbf35;}.sidebar a.current.trait{color:#cca7ff;}.sidebar a.current.traitalias{color:#cca7ff;}.sidebar a.current.fn,.sidebar a.current.method,.sidebar a.current.tymethod{color:#32d479;}.sidebar a.current.keyword{color:#fdbf35;}pre.rust .comment{color:#8d8d8b;}pre.rust .doccomment{color:#8ca375;}nav.main .current{border-top-color:#eee;border-bottom-color:#eee;}nav.main .separator{border-color:#eee;}a{color:#D2991D;}a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,.in-band a{color:#ddd;}.search-results a{color:#ddd;}a.test-arrow{color:#dedede;}body.source .example-wrap pre.rust a{background:#333;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search,.search-input{color:#111;background-color:#f0f0f0;border-color:#000;}.search-input{border-color:#e0e0e0;}.search-input:focus{border-color:#008dfd;}.module-item .stab,.import-item .stab{color:#ddd;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;color:#2f2f2f;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;color:#2f2f2f;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;color:#2f2f2f;}.stab.portability>code{background:none;}#help>div{background:#4d4d4d;border-color:#bfbfbf;}#help span.bottom,#help span.top{border-color:#bfbfbf;}#help dt{border-color:#bfbfbf;background:rgba(0,0,0,0);}.rightside,.out-of-band{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#ddd;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#ab8ac1;}pre.rust .kw-2,pre.rust .prelude-ty{color:#769acb;}pre.rust .number,pre.rust .string{color:#83a300;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#ee6868;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#d97f26;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#4a4949;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target{background-color:#494a3d;border-right:3px solid #bb7410;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.8);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.8);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.8);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.8);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#0089ff;}.tooltip::after{background-color:#000;color:#fff;border-color:#000;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#111;border-color:#777;}.notable-traits-tooltiptext .notable{border-bottom-color:#d2d2d2;}#titles>button:not(.selected){background-color:#252525;border-top-color:#252525;}#titles>button:hover,#titles>button.selected{border-top-color:#0089ff;background-color:#353535;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#505050;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#505050;border-right-color:#000;}#sidebar-filler{background-color:#505050;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow:inset 0 -1px 0 #c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background:#f0f0f0;color:#000;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#ffb900;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(65%);}#theme-choices{border-color:#e0e0e0;background-color:#353535;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#4e4e4e;}@media (max-width:700px){#theme-picker{background:#f0f0f0;}}.search-results .result-name span.alias{color:#fff;}.search-results .result-name span.grey{color:#ccc;}#sidebar-toggle{background-color:#565656;}#sidebar-toggle:hover{background-color:#676767;}#source-sidebar{background-color:#565656;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#444;}div.files>.selected{background-color:#333;}.setting-line>.title{border-bottom-color:#ddd;}.scraped-example .example-wrap .rust span.highlight{background:rgb(91,59,1);}.scraped-example .example-wrap .rust span.highlight.focus{background:rgb(124,75,15);}.scraped-example:not(.expanded) .code-wrapper:before{background:linear-gradient(to bottom,rgba(53,53,53,1),rgba(53,53,53,0));}.scraped-example:not(.expanded) .code-wrapper:after{background:linear-gradient(to top,rgba(53,53,53,1),rgba(53,53,53,0));}.toggle-line-inner{background:#616161;}.toggle-line:hover .toggle-line-inner{background:#898989;} \ No newline at end of file diff --git a/doc/draught/all.html b/doc/draught/all.html index 69e93ad..d571bda 100644 --- a/doc/draught/all.html +++ b/doc/draught/all.html @@ -1,6 +1,7 @@ List of all items in this crate -

+ +
\ 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 ccab696..d7d85a2 100644 --- a/doc/draught/board/constant.STD_HEIGHT.html +++ b/doc/draught/board/constant.STD_HEIGHT.html @@ -1,5 +1,9 @@ STD_HEIGHT in draught::board - Rust -

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

pub const STD_HEIGHT: usize = 8;
Expand description

Standard height of a checkers board is 8 squares

-
+ +
pub const STD_HEIGHT: usize = 8;
Expand description

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 ceece7b..8e762b2 100644 --- a/doc/draught/board/constant.STD_WIDTH.html +++ b/doc/draught/board/constant.STD_WIDTH.html @@ -1,5 +1,9 @@ STD_WIDTH in draught::board - Rust -

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

pub const STD_WIDTH: usize = 8;
Expand description

Standard width of a checkers board is 8 squares

-
+ +
pub const STD_WIDTH: usize = 8;
Expand description

Standard width of a checkers board is 8 squares

+
\ No newline at end of file diff --git a/doc/draught/board/constant.__wbg_get_board_current_turn__const.html b/doc/draught/board/constant.__wbg_get_board_current_turn__const.html index 7c5d9dd..c6402a1 100644 --- a/doc/draught/board/constant.__wbg_get_board_current_turn__const.html +++ b/doc/draught/board/constant.__wbg_get_board_current_turn__const.html @@ -1,4 +1,8 @@ __wbg_get_board_current_turn__const in draught::board - Rust -

Constant draught::board::__wbg_get_board_current_turn__const[][src]

const __wbg_get_board_current_turn__const: ();
+ +
const __wbg_get_board_current_turn__const: ();
\ No newline at end of file diff --git a/doc/draught/board/constant.__wbg_get_board_height__const.html b/doc/draught/board/constant.__wbg_get_board_height__const.html index 855d5ca..323a0ee 100644 --- a/doc/draught/board/constant.__wbg_get_board_height__const.html +++ b/doc/draught/board/constant.__wbg_get_board_height__const.html @@ -1,4 +1,8 @@ __wbg_get_board_height__const in draught::board - Rust -

Constant draught::board::__wbg_get_board_height__const[][src]

const __wbg_get_board_height__const: ();
+ +
const __wbg_get_board_height__const: ();
\ No newline at end of file diff --git a/doc/draught/board/constant.__wbg_get_board_width__const.html b/doc/draught/board/constant.__wbg_get_board_width__const.html index 4644668..e5ba0cb 100644 --- a/doc/draught/board/constant.__wbg_get_board_width__const.html +++ b/doc/draught/board/constant.__wbg_get_board_width__const.html @@ -1,4 +1,8 @@ __wbg_get_board_width__const in draught::board - Rust -

Constant draught::board::__wbg_get_board_width__const[][src]

const __wbg_get_board_width__const: ();
+ +
const __wbg_get_board_width__const: ();
\ No newline at end of file diff --git a/doc/draught/board/constant.__wbg_get_brdidx_col__const.html b/doc/draught/board/constant.__wbg_get_brdidx_col__const.html index 534825b..c78766b 100644 --- a/doc/draught/board/constant.__wbg_get_brdidx_col__const.html +++ b/doc/draught/board/constant.__wbg_get_brdidx_col__const.html @@ -1,4 +1,8 @@ __wbg_get_brdidx_col__const in draught::board - Rust -

Constant draught::board::__wbg_get_brdidx_col__const[][src]

const __wbg_get_brdidx_col__const: ();
+ +
const __wbg_get_brdidx_col__const: ();
\ No newline at end of file diff --git a/doc/draught/board/constant.__wbg_get_brdidx_row__const.html b/doc/draught/board/constant.__wbg_get_brdidx_row__const.html index 9805f3c..6c3cc57 100644 --- a/doc/draught/board/constant.__wbg_get_brdidx_row__const.html +++ b/doc/draught/board/constant.__wbg_get_brdidx_row__const.html @@ -1,4 +1,8 @@ __wbg_get_brdidx_row__const in draught::board - Rust -

Constant draught::board::__wbg_get_brdidx_row__const[][src]

const __wbg_get_brdidx_row__const: ();
+ +
const __wbg_get_brdidx_row__const: ();
\ No newline at end of file diff --git a/doc/draught/board/constant.__wbg_get_piece_strength__const.html b/doc/draught/board/constant.__wbg_get_piece_strength__const.html index 3e62db4..1c33575 100644 --- a/doc/draught/board/constant.__wbg_get_piece_strength__const.html +++ b/doc/draught/board/constant.__wbg_get_piece_strength__const.html @@ -1,4 +1,8 @@ __wbg_get_piece_strength__const in draught::board - Rust -

Constant draught::board::__wbg_get_piece_strength__const[][src]

const __wbg_get_piece_strength__const: ();
+ +
const __wbg_get_piece_strength__const: ();
\ No newline at end of file diff --git a/doc/draught/board/constant.__wbg_get_piece_team__const.html b/doc/draught/board/constant.__wbg_get_piece_team__const.html index cb1ecb2..40616cc 100644 --- a/doc/draught/board/constant.__wbg_get_piece_team__const.html +++ b/doc/draught/board/constant.__wbg_get_piece_team__const.html @@ -1,4 +1,8 @@ __wbg_get_piece_team__const in draught::board - Rust -

Constant draught::board::__wbg_get_piece_team__const[][src]

const __wbg_get_piece_team__const: ();
+ +
const __wbg_get_piece_team__const: ();
\ No newline at end of file diff --git a/doc/draught/board/constant.__wbg_get_square_occupant__const.html b/doc/draught/board/constant.__wbg_get_square_occupant__const.html index ac1617e..752ca0b 100644 --- a/doc/draught/board/constant.__wbg_get_square_occupant__const.html +++ b/doc/draught/board/constant.__wbg_get_square_occupant__const.html @@ -1,4 +1,8 @@ __wbg_get_square_occupant__const in draught::board - Rust -

Constant draught::board::__wbg_get_square_occupant__const[][src]

const __wbg_get_square_occupant__const: ();
+ +
const __wbg_get_square_occupant__const: ();
\ No newline at end of file diff --git a/doc/draught/board/constant.__wbg_get_square_state__const.html b/doc/draught/board/constant.__wbg_get_square_state__const.html index 8afbf33..37b64f8 100644 --- a/doc/draught/board/constant.__wbg_get_square_state__const.html +++ b/doc/draught/board/constant.__wbg_get_square_state__const.html @@ -1,4 +1,8 @@ __wbg_get_square_state__const in draught::board - Rust -

Constant draught::board::__wbg_get_square_state__const[][src]

const __wbg_get_square_state__const: ();
+ +
const __wbg_get_square_state__const: ();
\ No newline at end of file diff --git a/doc/draught/board/enums/enum.MoveType.html b/doc/draught/board/enums/enum.MoveType.html index 008fc2c..6783ed4 100644 --- a/doc/draught/board/enums/enum.MoveType.html +++ b/doc/draught/board/enums/enum.MoveType.html @@ -1,42 +1,48 @@ -MoveType in draught::board::enums - Rust -

Enum draught::board::enums::MoveType[][src]

#[repr(u8)]
+MoveType in draught::board::enums - Rust
+    
+    
#[repr(u8)]
 pub enum MoveType {
     Move,
     Jump,
 }
Expand description

Move/Jump, for use in Move

-

Variants

Move

Jump

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

The wasm ABI type that this converts from when coming back out from the +

Variants

Move

Jump

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

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

-

Recover a Self from Self::Abi. Read more

-

The wasm ABI type that this converts into when crossing the ABI +

Recover a Self from Self::Abi. Read more

+

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

-

Convert self into Self::Abi so that it can be sent across the wasm +

Convert self into Self::Abi so that it can be sent across the wasm ABI boundary. Read more

-

Tests whether the argument is a “none” instance. If so it will be +

Tests whether the argument is a “none” instance. If so it will be deserialized as None, and otherwise it will be passed to FromWasmAbi. Read more

-

Returns an ABI instance indicating “none”, which JS will interpret as +

Returns an ABI instance indicating “none”, which JS will interpret as the None branch of this option. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Same as IntoWasmAbi::Abi

-

Same as IntoWasmAbi::into_abi, except that it may throw and never +

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Same as IntoWasmAbi::Abi

+

Same as IntoWasmAbi::into_abi, except that it may throw and never return in the case of Err. Read more

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/board/enums/enum.Moveable.html b/doc/draught/board/enums/enum.Moveable.html index 149f79c..0abf845 100644 --- a/doc/draught/board/enums/enum.Moveable.html +++ b/doc/draught/board/enums/enum.Moveable.html @@ -1,6 +1,10 @@ Moveable in draught::board::enums - Rust -

Enum draught::board::enums::Moveable[][src]

#[repr(u8)]
+    
+    
#[repr(u8)]
 pub enum Moveable {
     Allowed,
     UnoccupiedSrc,
@@ -12,38 +16,40 @@ pub enum Moveable {
     NoJumpablePiece,
     JumpingSameTeam,
 }
Expand description

Possible outcomes of trying to move

-

Variants

Allowed

UnoccupiedSrc

OccupiedDest

OutOfBounds

Unplayable

WrongTeamSrc

IllegalTrajectory

NoJumpablePiece

JumpingSameTeam

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

The wasm ABI type that this converts from when coming back out from the +

Variants

Allowed

UnoccupiedSrc

OccupiedDest

OutOfBounds

Unplayable

WrongTeamSrc

IllegalTrajectory

NoJumpablePiece

JumpingSameTeam

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

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

-

Recover a Self from Self::Abi. Read more

-

The wasm ABI type that this converts into when crossing the ABI +

Recover a Self from Self::Abi. Read more

+

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

-

Convert self into Self::Abi so that it can be sent across the wasm +

Convert self into Self::Abi so that it can be sent across the wasm ABI boundary. Read more

-

Tests whether the argument is a “none” instance. If so it will be +

Tests whether the argument is a “none” instance. If so it will be deserialized as None, and otherwise it will be passed to FromWasmAbi. Read more

-

Returns an ABI instance indicating “none”, which JS will interpret as +

Returns an ABI instance indicating “none”, which JS will interpret as the None branch of this option. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Same as IntoWasmAbi::Abi

-

Same as IntoWasmAbi::into_abi, except that it may throw and never +

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Same as IntoWasmAbi::Abi

+

Same as IntoWasmAbi::into_abi, except that it may throw and never return in the case of Err. Read more

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/board/enums/enum.SquareState.html b/doc/draught/board/enums/enum.SquareState.html index f6c972c..bee2a41 100644 --- a/doc/draught/board/enums/enum.SquareState.html +++ b/doc/draught/board/enums/enum.SquareState.html @@ -1,45 +1,51 @@ -SquareState in draught::board::enums - Rust -

Enum draught::board::enums::SquareState[][src]

#[repr(u8)]
+SquareState in draught::board::enums - Rust
+    
+    
#[repr(u8)]
 pub enum SquareState {
     Empty,
     Occupied,
     Unplayable,
 }
Expand description

Model board square as Empty/Occupied/Unplayable

-

Variants

Empty

Occupied

Unplayable

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The wasm ABI type that this converts from when coming back out from the +

Variants

Empty

Occupied

Unplayable

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

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

-

Recover a Self from Self::Abi. Read more

-

The wasm ABI type that this converts into when crossing the ABI +

Recover a Self from Self::Abi. Read more

+

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

-

Convert self into Self::Abi so that it can be sent across the wasm +

Convert self into Self::Abi so that it can be sent across the wasm ABI boundary. Read more

-

Tests whether the argument is a “none” instance. If so it will be +

Tests whether the argument is a “none” instance. If so it will be deserialized as None, and otherwise it will be passed to FromWasmAbi. Read more

-

Returns an ABI instance indicating “none”, which JS will interpret as +

Returns an ABI instance indicating “none”, which JS will interpret as the None branch of this option. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Same as IntoWasmAbi::Abi

-

Same as IntoWasmAbi::into_abi, except that it may throw and never +

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Same as IntoWasmAbi::Abi

+

Same as IntoWasmAbi::into_abi, except that it may throw and never return in the case of Err. Read more

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/board/enums/enum.Strength.html b/doc/draught/board/enums/enum.Strength.html index 98b12a2..5345ba3 100644 --- a/doc/draught/board/enums/enum.Strength.html +++ b/doc/draught/board/enums/enum.Strength.html @@ -1,42 +1,48 @@ -Strength in draught::board::enums - Rust -

Enum draught::board::enums::Strength[][src]

#[repr(u8)]
+Strength in draught::board::enums - Rust
+    
+    
#[repr(u8)]
 pub enum Strength {
     Man,
     King,
 }
Expand description

Man/King

-

Variants

Man

King

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

The wasm ABI type that this converts from when coming back out from the +

Variants

Man

King

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

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

-

Recover a Self from Self::Abi. Read more

-

The wasm ABI type that this converts into when crossing the ABI +

Recover a Self from Self::Abi. Read more

+

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

-

Convert self into Self::Abi so that it can be sent across the wasm +

Convert self into Self::Abi so that it can be sent across the wasm ABI boundary. Read more

-

Tests whether the argument is a “none” instance. If so it will be +

Tests whether the argument is a “none” instance. If so it will be deserialized as None, and otherwise it will be passed to FromWasmAbi. Read more

-

Returns an ABI instance indicating “none”, which JS will interpret as +

Returns an ABI instance indicating “none”, which JS will interpret as the None branch of this option. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Same as IntoWasmAbi::Abi

-

Same as IntoWasmAbi::into_abi, except that it may throw and never +

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Same as IntoWasmAbi::Abi

+

Same as IntoWasmAbi::into_abi, except that it may throw and never return in the case of Err. Read more

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/board/enums/enum.Team.html b/doc/draught/board/enums/enum.Team.html index d4f96f7..e463d90 100644 --- a/doc/draught/board/enums/enum.Team.html +++ b/doc/draught/board/enums/enum.Team.html @@ -1,45 +1,51 @@ -Team in draught::board::enums - Rust -

Enum draught::board::enums::Team[][src]

#[repr(u8)]
+Team in draught::board::enums - Rust
+    
+    
#[repr(u8)]
 pub enum Team {
     Black,
     White,
 }
Expand description

Black/White

-

Variants

Black

White

Implementations

Get opposing team

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The wasm ABI type that this converts from when coming back out from the +

Variants

Black

White

Implementations

Get opposing team

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

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

-

Recover a Self from Self::Abi. Read more

-

The wasm ABI type that this converts into when crossing the ABI +

Recover a Self from Self::Abi. Read more

+

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

-

Convert self into Self::Abi so that it can be sent across the wasm +

Convert self into Self::Abi so that it can be sent across the wasm ABI boundary. Read more

-

Tests whether the argument is a “none” instance. If so it will be +

Tests whether the argument is a “none” instance. If so it will be deserialized as None, and otherwise it will be passed to FromWasmAbi. Read more

-

Returns an ABI instance indicating “none”, which JS will interpret as +

Returns an ABI instance indicating “none”, which JS will interpret as the None branch of this option. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Same as IntoWasmAbi::Abi

-

Same as IntoWasmAbi::into_abi, except that it may throw and never +

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Same as IntoWasmAbi::Abi

+

Same as IntoWasmAbi::into_abi, except that it may throw and never return in the case of Err. Read more

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/board/enums/index.html b/doc/draught/board/enums/index.html index 7962e7f..e47dc59 100644 --- a/doc/draught/board/enums/index.html +++ b/doc/draught/board/enums/index.html @@ -1,10 +1,14 @@ draught::board::enums - Rust -

Module draught::board::enums[][src]

Enums

+ +

Enums

Move/Jump, for use in Move

Possible outcomes of trying to move

Model board square as Empty/Occupied/Unplayable

Man/King

Black/White

-
+
\ No newline at end of file diff --git a/doc/draught/board/index.html b/doc/draught/board/index.html index 7a6b5ed..03016a5 100644 --- a/doc/draught/board/index.html +++ b/doc/draught/board/index.html @@ -1,6 +1,10 @@ draught::board - Rust -

Module draught::board[][src]

Expand description

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

+ +
+

Module draught::board

source · []
Expand description

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

Modules

Structs

Single state of a checkers board

@@ -11,5 +15,5 @@

Constants

+
\ No newline at end of file diff --git a/doc/draught/board/iter/index.html b/doc/draught/board/iter/index.html index 40f6b5a..842282f 100644 --- a/doc/draught/board/iter/index.html +++ b/doc/draught/board/iter/index.html @@ -1,5 +1,9 @@ draught::board::iter - Rust -
+ +
\ No newline at end of file diff --git a/doc/draught/board/iter/struct.PieceIterator.html b/doc/draught/board/iter/struct.PieceIterator.html index f48b622..0d3c5ea 100644 --- a/doc/draught/board/iter/struct.PieceIterator.html +++ b/doc/draught/board/iter/struct.PieceIterator.html @@ -1,132 +1,140 @@ PieceIterator in draught::board::iter - Rust -

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

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

Fields

board: &'a Boardindex_cursor: usize

Implementations

Trait Implementations

Get next item from the iterator

-

The type of the elements being iterated over.

-

Returns the bounds on the remaining length of the iterator. Read more

-

Consumes the iterator, counting the number of iterations and returning it. Read more

-

Consumes the iterator, returning the last element. Read more

-
🔬 This is a nightly-only experimental API. (iter_advance_by)

Advances the iterator by n elements. Read more

-

Returns the nth element of the iterator. Read more

-

Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more

-

Takes two iterators and creates a new iterator over both in sequence. Read more

-

‘Zips up’ two iterators into a single iterator of pairs. Read more

-
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places a copy of separator between adjacent -items of the original iterator. Read more

-
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more

-

Takes a closure and creates an iterator which calls that closure on each -element. Read more

-

Calls a closure on each element of an iterator. Read more

-

Creates an iterator which uses a closure to determine if an element -should be yielded. Read more

-

Creates an iterator that both filters and maps. Read more

-

Creates an iterator which gives the current iteration count as well as -the next value. Read more

-

Creates an iterator which can use the peek and peek_mut methods + index_cursor: usize, +}

Fields

board: &'a Boardindex_cursor: usize

Implementations

Trait Implementations

Get next item from the iterator

+

The type of the elements being iterated over.

+

Returns the bounds on the remaining length of the iterator. Read more

+

Consumes the iterator, counting the number of iterations and returning it. Read more

+

Consumes the iterator, returning the last element. Read more

+
🔬 This is a nightly-only experimental API. (iter_advance_by)

Advances the iterator by n elements. Read more

+

Returns the nth element of the iterator. Read more

+

Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more

+

Takes two iterators and creates a new iterator over both in sequence. Read more

+

‘Zips up’ two iterators into a single iterator of pairs. Read more

+
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more

+
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more

+

Takes a closure and creates an iterator which calls that closure on each +element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Creates an iterator which uses a closure to determine if an element +should be yielded. Read more

+

Creates an iterator that both filters and maps. Read more

+

Creates an iterator which gives the current iteration count as well as +the next value. Read more

+

Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more

-

Creates an iterator that skips elements based on a predicate. Read more

-

Creates an iterator that yields elements based on a predicate. Read more

-

Creates an iterator that both yields elements based on a predicate and maps. Read more

-

Creates an iterator that skips the first n elements. Read more

-

Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more

-

An iterator adapter similar to fold that holds internal state and -produces a new iterator. Read more

-

Creates an iterator that works like map, but flattens nested structure. Read more

-

Creates an iterator that flattens nested structure. Read more

-

Creates an iterator which ends after the first None. Read more

-

Does something with each element of an iterator, passing the value on. Read more

-

Borrows an iterator, rather than consuming it. Read more

-

Transforms an iterator into a collection. Read more

-

Consumes an iterator, creating two collections from it. Read more

-
🔬 This is a nightly-only experimental API. (iter_partition_in_place)

Reorders the elements of this iterator in-place according to the given predicate, +their documentation for more information. Read more

+

Creates an iterator that skips elements based on a predicate. Read more

+

Creates an iterator that yields elements based on a predicate. Read more

+

Creates an iterator that both yields elements based on a predicate and maps. Read more

+

Creates an iterator that skips the first n elements. Read more

+

Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more

+

An iterator adapter similar to fold that holds internal state and +produces a new iterator. Read more

+

Creates an iterator that works like map, but flattens nested structure. Read more

+

Creates an iterator that flattens nested structure. Read more

+

Creates an iterator which ends after the first None. Read more

+

Does something with each element of an iterator, passing the value on. Read more

+

Borrows an iterator, rather than consuming it. Read more

+

Transforms an iterator into a collection. Read more

+
🔬 This is a nightly-only experimental API. (iterator_try_collect)

Fallibly transforms an iterator into a collection, short circuiting if +a failure is encountered. Read more

+

Consumes an iterator, creating two collections from it. Read more

+
🔬 This is a nightly-only experimental API. (iter_partition_in_place)

Reorders the elements of this iterator in-place according to the given predicate, such that all those that return true precede all those that return false. -Returns the number of true elements found. Read more

-
🔬 This is a nightly-only experimental API. (iter_is_partitioned)

Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more

-

An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more

-

An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more

-

Folds every element into an accumulator by applying an operation, -returning the final result. Read more

-

Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more

-
🔬 This is a nightly-only experimental API. (iterator_try_reduce)

Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more

-

Tests if every element of the iterator matches a predicate. Read more

-

Tests if any element of the iterator matches a predicate. Read more

-

Searches for an element of an iterator that satisfies a predicate. Read more

-

Applies function to the elements of iterator and returns -the first non-none result. Read more

-
🔬 This is a nightly-only experimental API. (try_find)

Applies function to the elements of iterator and returns -the first true result or the first error. Read more

-

Searches for an element in an iterator, returning its index. Read more

-

Searches for an element in an iterator from the right, returning its -index. Read more

-

Returns the maximum element of an iterator. Read more

-

Returns the minimum element of an iterator. Read more

-

Returns the element that gives the maximum value from the -specified function. Read more

-

Returns the element that gives the maximum value with respect to the -specified comparison function. Read more

-

Returns the element that gives the minimum value from the -specified function. Read more

-

Returns the element that gives the minimum value with respect to the -specified comparison function. Read more

-

Reverses an iterator’s direction. Read more

-

Converts an iterator of pairs into a pair of containers. Read more

-

Creates an iterator which copies all of its elements. Read more

-

Creates an iterator which clones all of its elements. Read more

-

Repeats an iterator endlessly. Read more

-

Sums the elements of an iterator. Read more

-

Iterates over the entire iterator, multiplying all the elements Read more

-

Lexicographically compares the elements of this Iterator with those -of another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

-

Lexicographically compares the elements of this Iterator with those -of another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

-

Determines if the elements of this Iterator are equal to those of -another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more

-

Determines if the elements of this Iterator are unequal to those of -another. Read more

-

Determines if the elements of this Iterator are lexicographically -less than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given comparator function. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type of the elements being iterated over.

-

Which kind of iterator are we turning this into?

-

Creates an iterator from a value. Read more

-

Choose one element at random from the iterator. Read more

-

Collects values at random from the iterator into a supplied buffer +Returns the number of true elements found. Read more

+
🔬 This is a nightly-only experimental API. (iter_is_partitioned)

Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more

+

An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more

+

Folds every element into an accumulator by applying an operation, +returning the final result. Read more

+

Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more

+
🔬 This is a nightly-only experimental API. (iterator_try_reduce)

Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

Applies function to the elements of iterator and returns +the first non-none result. Read more

+
🔬 This is a nightly-only experimental API. (try_find)

Applies function to the elements of iterator and returns +the first true result or the first error. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its +index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the +specified function. Read more

+

Returns the element that gives the maximum value with respect to the +specified comparison function. Read more

+

Returns the element that gives the minimum value from the +specified function. Read more

+

Returns the element that gives the minimum value with respect to the +specified comparison function. Read more

+

Reverses an iterator’s direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Creates an iterator which copies all of its elements. Read more

+

Creates an iterator which clones all of its elements. Read more

+

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those +of another. Read more

+
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more

+

Lexicographically compares the elements of this Iterator with those +of another. Read more

+
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more

+

Determines if the elements of this Iterator are equal to those of +another. Read more

+
🔬 This is a nightly-only experimental API. (iter_order_by)

Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more

+

Determines if the elements of this Iterator are unequal to those of +another. Read more

+

Determines if the elements of this Iterator are lexicographically +less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more

+
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted. Read more

+
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given comparator function. Read more

+
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

The type of the elements being iterated over.

+

Which kind of iterator are we turning this into?

+

Creates an iterator from a value. Read more

+

Choose one element at random from the iterator. Read more

+

Collects values at random from the iterator into a supplied buffer until that buffer is filled. Read more

-

Collects amount values at random from the iterator into a vector. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

Collects amount values at random from the iterator into a vector. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ 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 74a74d5..fbfddc4 100644 --- a/doc/draught/board/iter/struct.RowIndexIterator.html +++ b/doc/draught/board/iter/struct.RowIndexIterator.html @@ -1,132 +1,140 @@ RowIndexIterator in draught::board::iter - Rust -

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

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

Fields

board: &'a Boardrow_cursor: usize

Implementations

Trait Implementations

Get next item from the iterator

-

The type of the elements being iterated over.

-

Returns the bounds on the remaining length of the iterator. Read more

-

Consumes the iterator, counting the number of iterations and returning it. Read more

-

Consumes the iterator, returning the last element. Read more

-
🔬 This is a nightly-only experimental API. (iter_advance_by)

Advances the iterator by n elements. Read more

-

Returns the nth element of the iterator. Read more

-

Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more

-

Takes two iterators and creates a new iterator over both in sequence. Read more

-

‘Zips up’ two iterators into a single iterator of pairs. Read more

-
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places a copy of separator between adjacent -items of the original iterator. Read more

-
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more

-

Takes a closure and creates an iterator which calls that closure on each -element. Read more

-

Calls a closure on each element of an iterator. Read more

-

Creates an iterator which uses a closure to determine if an element -should be yielded. Read more

-

Creates an iterator that both filters and maps. Read more

-

Creates an iterator which gives the current iteration count as well as -the next value. Read more

-

Creates an iterator which can use the peek and peek_mut methods + row_cursor: usize, +}

Fields

board: &'a Boardrow_cursor: usize

Implementations

Trait Implementations

Get next item from the iterator

+

The type of the elements being iterated over.

+

Returns the bounds on the remaining length of the iterator. Read more

+

Consumes the iterator, counting the number of iterations and returning it. Read more

+

Consumes the iterator, returning the last element. Read more

+
🔬 This is a nightly-only experimental API. (iter_advance_by)

Advances the iterator by n elements. Read more

+

Returns the nth element of the iterator. Read more

+

Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more

+

Takes two iterators and creates a new iterator over both in sequence. Read more

+

‘Zips up’ two iterators into a single iterator of pairs. Read more

+
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more

+
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more

+

Takes a closure and creates an iterator which calls that closure on each +element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Creates an iterator which uses a closure to determine if an element +should be yielded. Read more

+

Creates an iterator that both filters and maps. Read more

+

Creates an iterator which gives the current iteration count as well as +the next value. Read more

+

Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more

-

Creates an iterator that skips elements based on a predicate. Read more

-

Creates an iterator that yields elements based on a predicate. Read more

-

Creates an iterator that both yields elements based on a predicate and maps. Read more

-

Creates an iterator that skips the first n elements. Read more

-

Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more

-

An iterator adapter similar to fold that holds internal state and -produces a new iterator. Read more

-

Creates an iterator that works like map, but flattens nested structure. Read more

-

Creates an iterator that flattens nested structure. Read more

-

Creates an iterator which ends after the first None. Read more

-

Does something with each element of an iterator, passing the value on. Read more

-

Borrows an iterator, rather than consuming it. Read more

-

Transforms an iterator into a collection. Read more

-

Consumes an iterator, creating two collections from it. Read more

-
🔬 This is a nightly-only experimental API. (iter_partition_in_place)

Reorders the elements of this iterator in-place according to the given predicate, +their documentation for more information. Read more

+

Creates an iterator that skips elements based on a predicate. Read more

+

Creates an iterator that yields elements based on a predicate. Read more

+

Creates an iterator that both yields elements based on a predicate and maps. Read more

+

Creates an iterator that skips the first n elements. Read more

+

Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more

+

An iterator adapter similar to fold that holds internal state and +produces a new iterator. Read more

+

Creates an iterator that works like map, but flattens nested structure. Read more

+

Creates an iterator that flattens nested structure. Read more

+

Creates an iterator which ends after the first None. Read more

+

Does something with each element of an iterator, passing the value on. Read more

+

Borrows an iterator, rather than consuming it. Read more

+

Transforms an iterator into a collection. Read more

+
🔬 This is a nightly-only experimental API. (iterator_try_collect)

Fallibly transforms an iterator into a collection, short circuiting if +a failure is encountered. Read more

+

Consumes an iterator, creating two collections from it. Read more

+
🔬 This is a nightly-only experimental API. (iter_partition_in_place)

Reorders the elements of this iterator in-place according to the given predicate, such that all those that return true precede all those that return false. -Returns the number of true elements found. Read more

-
🔬 This is a nightly-only experimental API. (iter_is_partitioned)

Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more

-

An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more

-

An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more

-

Folds every element into an accumulator by applying an operation, -returning the final result. Read more

-

Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more

-
🔬 This is a nightly-only experimental API. (iterator_try_reduce)

Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more

-

Tests if every element of the iterator matches a predicate. Read more

-

Tests if any element of the iterator matches a predicate. Read more

-

Searches for an element of an iterator that satisfies a predicate. Read more

-

Applies function to the elements of iterator and returns -the first non-none result. Read more

-
🔬 This is a nightly-only experimental API. (try_find)

Applies function to the elements of iterator and returns -the first true result or the first error. Read more

-

Searches for an element in an iterator, returning its index. Read more

-

Searches for an element in an iterator from the right, returning its -index. Read more

-

Returns the maximum element of an iterator. Read more

-

Returns the minimum element of an iterator. Read more

-

Returns the element that gives the maximum value from the -specified function. Read more

-

Returns the element that gives the maximum value with respect to the -specified comparison function. Read more

-

Returns the element that gives the minimum value from the -specified function. Read more

-

Returns the element that gives the minimum value with respect to the -specified comparison function. Read more

-

Reverses an iterator’s direction. Read more

-

Converts an iterator of pairs into a pair of containers. Read more

-

Creates an iterator which copies all of its elements. Read more

-

Creates an iterator which clones all of its elements. Read more

-

Repeats an iterator endlessly. Read more

-

Sums the elements of an iterator. Read more

-

Iterates over the entire iterator, multiplying all the elements Read more

-

Lexicographically compares the elements of this Iterator with those -of another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

-

Lexicographically compares the elements of this Iterator with those -of another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

-

Determines if the elements of this Iterator are equal to those of -another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more

-

Determines if the elements of this Iterator are unequal to those of -another. Read more

-

Determines if the elements of this Iterator are lexicographically -less than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given comparator function. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type of the elements being iterated over.

-

Which kind of iterator are we turning this into?

-

Creates an iterator from a value. Read more

-

Choose one element at random from the iterator. Read more

-

Collects values at random from the iterator into a supplied buffer +Returns the number of true elements found. Read more

+
🔬 This is a nightly-only experimental API. (iter_is_partitioned)

Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more

+

An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more

+

Folds every element into an accumulator by applying an operation, +returning the final result. Read more

+

Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more

+
🔬 This is a nightly-only experimental API. (iterator_try_reduce)

Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

Applies function to the elements of iterator and returns +the first non-none result. Read more

+
🔬 This is a nightly-only experimental API. (try_find)

Applies function to the elements of iterator and returns +the first true result or the first error. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its +index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the +specified function. Read more

+

Returns the element that gives the maximum value with respect to the +specified comparison function. Read more

+

Returns the element that gives the minimum value from the +specified function. Read more

+

Returns the element that gives the minimum value with respect to the +specified comparison function. Read more

+

Reverses an iterator’s direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Creates an iterator which copies all of its elements. Read more

+

Creates an iterator which clones all of its elements. Read more

+

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those +of another. Read more

+
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more

+

Lexicographically compares the elements of this Iterator with those +of another. Read more

+
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more

+

Determines if the elements of this Iterator are equal to those of +another. Read more

+
🔬 This is a nightly-only experimental API. (iter_order_by)

Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more

+

Determines if the elements of this Iterator are unequal to those of +another. Read more

+

Determines if the elements of this Iterator are lexicographically +less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more

+
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted. Read more

+
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given comparator function. Read more

+
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

The type of the elements being iterated over.

+

Which kind of iterator are we turning this into?

+

Creates an iterator from a value. Read more

+

Choose one element at random from the iterator. Read more

+

Collects values at random from the iterator into a supplied buffer until that buffer is filled. Read more

-

Collects amount values at random from the iterator into a vector. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

Collects amount values at random from the iterator into a vector. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/board/iter/struct.RowSquareIterator.html b/doc/draught/board/iter/struct.RowSquareIterator.html index b2c71f7..c028881 100644 --- a/doc/draught/board/iter/struct.RowSquareIterator.html +++ b/doc/draught/board/iter/struct.RowSquareIterator.html @@ -1,132 +1,140 @@ RowSquareIterator in draught::board::iter - Rust -

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

pub struct RowSquareIterator<'a> {
+    
+    
pub struct RowSquareIterator<'a> {
     board: &'a Board,
     index_iter: RowIndexIterator<'a>,
-}

Fields

board: &'a Boardindex_iter: RowIndexIterator<'a>

Implementations

Trait Implementations

Get next item from the iterator

-

The type of the elements being iterated over.

-

Returns the bounds on the remaining length of the iterator. Read more

-

Consumes the iterator, counting the number of iterations and returning it. Read more

-

Consumes the iterator, returning the last element. Read more

-
🔬 This is a nightly-only experimental API. (iter_advance_by)

Advances the iterator by n elements. Read more

-

Returns the nth element of the iterator. Read more

-

Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more

-

Takes two iterators and creates a new iterator over both in sequence. Read more

-

‘Zips up’ two iterators into a single iterator of pairs. Read more

-
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places a copy of separator between adjacent -items of the original iterator. Read more

-
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more

-

Takes a closure and creates an iterator which calls that closure on each -element. Read more

-

Calls a closure on each element of an iterator. Read more

-

Creates an iterator which uses a closure to determine if an element -should be yielded. Read more

-

Creates an iterator that both filters and maps. Read more

-

Creates an iterator which gives the current iteration count as well as -the next value. Read more

-

Creates an iterator which can use the peek and peek_mut methods +}

Fields

board: &'a Boardindex_iter: RowIndexIterator<'a>

Implementations

Trait Implementations

Get next item from the iterator

+

The type of the elements being iterated over.

+

Returns the bounds on the remaining length of the iterator. Read more

+

Consumes the iterator, counting the number of iterations and returning it. Read more

+

Consumes the iterator, returning the last element. Read more

+
🔬 This is a nightly-only experimental API. (iter_advance_by)

Advances the iterator by n elements. Read more

+

Returns the nth element of the iterator. Read more

+

Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more

+

Takes two iterators and creates a new iterator over both in sequence. Read more

+

‘Zips up’ two iterators into a single iterator of pairs. Read more

+
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more

+
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more

+

Takes a closure and creates an iterator which calls that closure on each +element. Read more

+

Calls a closure on each element of an iterator. Read more

+

Creates an iterator which uses a closure to determine if an element +should be yielded. Read more

+

Creates an iterator that both filters and maps. Read more

+

Creates an iterator which gives the current iteration count as well as +the next value. Read more

+

Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more

-

Creates an iterator that skips elements based on a predicate. Read more

-

Creates an iterator that yields elements based on a predicate. Read more

-

Creates an iterator that both yields elements based on a predicate and maps. Read more

-

Creates an iterator that skips the first n elements. Read more

-

Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more

-

An iterator adapter similar to fold that holds internal state and -produces a new iterator. Read more

-

Creates an iterator that works like map, but flattens nested structure. Read more

-

Creates an iterator that flattens nested structure. Read more

-

Creates an iterator which ends after the first None. Read more

-

Does something with each element of an iterator, passing the value on. Read more

-

Borrows an iterator, rather than consuming it. Read more

-

Transforms an iterator into a collection. Read more

-

Consumes an iterator, creating two collections from it. Read more

-
🔬 This is a nightly-only experimental API. (iter_partition_in_place)

Reorders the elements of this iterator in-place according to the given predicate, +their documentation for more information. Read more

+

Creates an iterator that skips elements based on a predicate. Read more

+

Creates an iterator that yields elements based on a predicate. Read more

+

Creates an iterator that both yields elements based on a predicate and maps. Read more

+

Creates an iterator that skips the first n elements. Read more

+

Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more

+

An iterator adapter similar to fold that holds internal state and +produces a new iterator. Read more

+

Creates an iterator that works like map, but flattens nested structure. Read more

+

Creates an iterator that flattens nested structure. Read more

+

Creates an iterator which ends after the first None. Read more

+

Does something with each element of an iterator, passing the value on. Read more

+

Borrows an iterator, rather than consuming it. Read more

+

Transforms an iterator into a collection. Read more

+
🔬 This is a nightly-only experimental API. (iterator_try_collect)

Fallibly transforms an iterator into a collection, short circuiting if +a failure is encountered. Read more

+

Consumes an iterator, creating two collections from it. Read more

+
🔬 This is a nightly-only experimental API. (iter_partition_in_place)

Reorders the elements of this iterator in-place according to the given predicate, such that all those that return true precede all those that return false. -Returns the number of true elements found. Read more

-
🔬 This is a nightly-only experimental API. (iter_is_partitioned)

Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more

-

An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more

-

An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more

-

Folds every element into an accumulator by applying an operation, -returning the final result. Read more

-

Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more

-
🔬 This is a nightly-only experimental API. (iterator_try_reduce)

Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more

-

Tests if every element of the iterator matches a predicate. Read more

-

Tests if any element of the iterator matches a predicate. Read more

-

Searches for an element of an iterator that satisfies a predicate. Read more

-

Applies function to the elements of iterator and returns -the first non-none result. Read more

-
🔬 This is a nightly-only experimental API. (try_find)

Applies function to the elements of iterator and returns -the first true result or the first error. Read more

-

Searches for an element in an iterator, returning its index. Read more

-

Searches for an element in an iterator from the right, returning its -index. Read more

-

Returns the maximum element of an iterator. Read more

-

Returns the minimum element of an iterator. Read more

-

Returns the element that gives the maximum value from the -specified function. Read more

-

Returns the element that gives the maximum value with respect to the -specified comparison function. Read more

-

Returns the element that gives the minimum value from the -specified function. Read more

-

Returns the element that gives the minimum value with respect to the -specified comparison function. Read more

-

Reverses an iterator’s direction. Read more

-

Converts an iterator of pairs into a pair of containers. Read more

-

Creates an iterator which copies all of its elements. Read more

-

Creates an iterator which clones all of its elements. Read more

-

Repeats an iterator endlessly. Read more

-

Sums the elements of an iterator. Read more

-

Iterates over the entire iterator, multiplying all the elements Read more

-

Lexicographically compares the elements of this Iterator with those -of another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

-

Lexicographically compares the elements of this Iterator with those -of another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

-

Determines if the elements of this Iterator are equal to those of -another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more

-

Determines if the elements of this Iterator are unequal to those of -another. Read more

-

Determines if the elements of this Iterator are lexicographically -less than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given comparator function. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type of the elements being iterated over.

-

Which kind of iterator are we turning this into?

-

Creates an iterator from a value. Read more

-

Choose one element at random from the iterator. Read more

-

Collects values at random from the iterator into a supplied buffer +Returns the number of true elements found. Read more

+
🔬 This is a nightly-only experimental API. (iter_is_partitioned)

Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more

+

An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more

+

An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more

+

Folds every element into an accumulator by applying an operation, +returning the final result. Read more

+

Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more

+
🔬 This is a nightly-only experimental API. (iterator_try_reduce)

Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more

+

Tests if every element of the iterator matches a predicate. Read more

+

Tests if any element of the iterator matches a predicate. Read more

+

Searches for an element of an iterator that satisfies a predicate. Read more

+

Applies function to the elements of iterator and returns +the first non-none result. Read more

+
🔬 This is a nightly-only experimental API. (try_find)

Applies function to the elements of iterator and returns +the first true result or the first error. Read more

+

Searches for an element in an iterator, returning its index. Read more

+

Searches for an element in an iterator from the right, returning its +index. Read more

+

Returns the maximum element of an iterator. Read more

+

Returns the minimum element of an iterator. Read more

+

Returns the element that gives the maximum value from the +specified function. Read more

+

Returns the element that gives the maximum value with respect to the +specified comparison function. Read more

+

Returns the element that gives the minimum value from the +specified function. Read more

+

Returns the element that gives the minimum value with respect to the +specified comparison function. Read more

+

Reverses an iterator’s direction. Read more

+

Converts an iterator of pairs into a pair of containers. Read more

+

Creates an iterator which copies all of its elements. Read more

+

Creates an iterator which clones all of its elements. Read more

+

Repeats an iterator endlessly. Read more

+

Sums the elements of an iterator. Read more

+

Iterates over the entire iterator, multiplying all the elements Read more

+

Lexicographically compares the elements of this Iterator with those +of another. Read more

+
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more

+

Lexicographically compares the elements of this Iterator with those +of another. Read more

+
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more

+

Determines if the elements of this Iterator are equal to those of +another. Read more

+
🔬 This is a nightly-only experimental API. (iter_order_by)

Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more

+

Determines if the elements of this Iterator are unequal to those of +another. Read more

+

Determines if the elements of this Iterator are lexicographically +less than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more

+

Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more

+

Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more

+
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted. Read more

+
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given comparator function. Read more

+
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

The type of the elements being iterated over.

+

Which kind of iterator are we turning this into?

+

Creates an iterator from a value. Read more

+

Choose one element at random from the iterator. Read more

+

Collects values at random from the iterator into a supplied buffer until that buffer is filled. Read more

-

Collects amount values at random from the iterator into a vector. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

Collects amount values at random from the iterator into a vector. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/board/struct.Board.html b/doc/draught/board/struct.Board.html index f2fd4c6..fc70801 100644 --- a/doc/draught/board/struct.Board.html +++ b/doc/draught/board/struct.Board.html @@ -1,103 +1,109 @@ Board in draught::board - Rust -

Struct draught::board::Board[][src]

pub struct Board {
-    cells: Vec<Square>,
-    pub width: usize,
-    pub height: usize,
+    
+    
pub struct Board {
+    cells: Vec<Square>,
+    pub width: usize,
+    pub height: usize,
     pub current_turn: Team,
 }
Expand description

Single state of a checkers board

-

Fields

cells: Vec<Square>

1D backing array of board squares for the 2D game board

-
width: usizeheight: usizecurrent_turn: Team

Implementations

Get a mutable reference to a board square by 1D array index

-

Get the 1D array indices for the diagonally adjacent squares of a given board square

-
Returns
-

None: If the given square is unplayable

+

Fields

cells: Vec<Square>

1D backing array of board squares for the 2D game board

+
width: usizeheight: usizecurrent_turn: Team

Implementations

Get a mutable reference to a board square by 1D array index

+

Get the 1D array indices for the diagonally adjacent squares of a given board square

+
Returns
+

None: If the given square is unplayable

Some(Vec): 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

-

Get a Direction structure for the diagonally adjacent squares of a given board square

+

Get a Direction structure for the diagonally adjacent squares of a given board square

Similar to the Board::adjacent_indices function with differently formatted results

-
Returns
-

None: If the given square is unplayable

+
Returns
+

None: If the given square is unplayable

Some(Direction): A Direction structure for the diagonally adjacent squares.

-

Filter an array of diagonal indices (Like those from Board::adjacent_indices, Board::jumpable_indices) for those that are legal for a team’s man, i.e. solely up or down the board

-

Get the 1D array indices for the diagonally jumpable squares of a given board square

-
Returns
-

None: If the given square is unplayable

+

Filter an array of diagonal indices (Like those from Board::adjacent_indices, Board::jumpable_indices) for those that are legal for a team’s man, i.e. solely up or down the board

+

Get the 1D array indices for the diagonally jumpable squares of a given board square

+
Returns
+

None: If the given square is unplayable

Some(Vec): 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

-

Get a Direction structure for the diagonally jumpable squares of a given board square

+

Get a Direction structure for the diagonally jumpable squares of a given board square

Similar to the Board::jumpable_indices function with differently formatted results

-
Returns
-

None: If the given square is unplayable

+
Returns
+

None: If the given square is unplayable

Some(Direction): A Direction structure for the diagonally jumpable squares.

-

Get the difference between two BrdIdx objects

-

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 index for use with Board::cells

-

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

-

Transform a 1D array index (for Board::cells) into a 2D game board index (by row/col)

-

Check whether a move given by source and destination indices is legal

-

Check that given move trajectory is valid for a man piece

-

Check that given move trajectory is valid for a king piece

-

Get cell index of jumpee square given from and to locations

-

Get a pointer to the backing array of board squares, Board::cells

-

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

-

Get new board derived from current with given move applied

-

Get new board derived from current with given jump applied

-

Get row index for current team, top row for black, bottom row for white

-

Unwrap the jumpee piece from the square and Board::check_jumpee_team with Moveable response

-

Check that the source piece and the jumpee are of opposing teams

-

Check and apply king strength

-

Initialise a game board without game pieces

-

Reset the given board to a starting layout with 3 rows of opposing pieces

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

Performs the conversion.

-

The wasm ABI type that this converts from when coming back out from the +

Get the difference between two BrdIdx objects

+

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 index for use with Board::cells

+

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

+

Transform a 1D array index (for Board::cells) into a 2D game board index (by row/col)

+

Check whether a move given by source and destination indices is legal

+

Check that given move trajectory is valid for a man piece

+

Check that given move trajectory is valid for a king piece

+

Get cell index of jumpee square given from and to locations

+

Get a pointer to the backing array of board squares, Board::cells

+

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

+

Get new board derived from current with given move applied

+

Get new board derived from current with given jump applied

+

Get row index for current team, top row for black, bottom row for white

+

Unwrap the jumpee piece from the square and Board::check_jumpee_team with Moveable response

+

Check that the source piece and the jumpee are of opposing teams

+

Check and apply king strength

+

Initialise a game board without game pieces

+

Reset the given board to a starting layout with 3 rows of opposing pieces

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

Performs the conversion.

+

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

-

Recover a Self from Self::Abi. Read more

-

The wasm ABI type that this converts into when crossing the ABI +

Recover a Self from Self::Abi. Read more

+

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

-

Convert self into Self::Abi so that it can be sent across the wasm +

Convert self into Self::Abi so that it can be sent across the wasm ABI boundary. Read more

-

Tests whether the argument is a “none” instance. If so it will be +

Tests whether the argument is a “none” instance. If so it will be deserialized as None, and otherwise it will be passed to FromWasmAbi. Read more

-

Returns an ABI instance indicating “none”, which JS will interpret as +

Returns an ABI instance indicating “none”, which JS will interpret as the None branch of this option. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

The wasm ABI type references to Self are recovered from.

-

The type that holds the reference to Self for the duration of the +

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

The wasm ABI type references to Self are recovered from.

+

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

-

Recover a Self::Anchor from Self::Abi. Read more

-

Same as RefFromWasmAbi::Abi

-

Same as RefFromWasmAbi::Anchor

-

Same as RefFromWasmAbi::ref_from_abi

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Same as IntoWasmAbi::Abi

-

Same as IntoWasmAbi::into_abi, except that it may throw and never +

Recover a Self::Anchor from Self::Abi. Read more

+

Same as RefFromWasmAbi::Abi

+

Same as RefFromWasmAbi::Anchor

+

Same as RefFromWasmAbi::ref_from_abi

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Same as IntoWasmAbi::Abi

+

Same as IntoWasmAbi::into_abi, except that it may throw and never return in the case of Err. Read more

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/board/struct.BrdIdx.html b/doc/draught/board/struct.BrdIdx.html index 1efeabb..182a8c5 100644 --- a/doc/draught/board/struct.BrdIdx.html +++ b/doc/draught/board/struct.BrdIdx.html @@ -1,53 +1,59 @@ BrdIdx in draught::board - Rust -

Struct draught::board::BrdIdx[][src]

pub struct BrdIdx {
-    pub row: usize,
-    pub col: usize,
+    
+    
pub struct BrdIdx {
+    pub row: usize,
+    pub col: usize,
 }
Expand description

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

-

Fields

row: usizecol: usize

Implementations

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

Performs the conversion.

-

The wasm ABI type that this converts from when coming back out from the +

Fields

row: usizecol: usize

Implementations

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

Performs the conversion.

+

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

-

Recover a Self from Self::Abi. Read more

-

The wasm ABI type that this converts into when crossing the ABI +

Recover a Self from Self::Abi. Read more

+

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

-

Convert self into Self::Abi so that it can be sent across the wasm +

Convert self into Self::Abi so that it can be sent across the wasm ABI boundary. Read more

-

Tests whether the argument is a “none” instance. If so it will be +

Tests whether the argument is a “none” instance. If so it will be deserialized as None, and otherwise it will be passed to FromWasmAbi. Read more

-

Returns an ABI instance indicating “none”, which JS will interpret as +

Returns an ABI instance indicating “none”, which JS will interpret as the None branch of this option. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

The wasm ABI type references to Self are recovered from.

-

The type that holds the reference to Self for the duration of the +

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

The wasm ABI type references to Self are recovered from.

+

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

-

Recover a Self::Anchor from Self::Abi. Read more

-

Same as RefFromWasmAbi::Abi

-

Same as RefFromWasmAbi::Anchor

-

Same as RefFromWasmAbi::ref_from_abi

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Same as IntoWasmAbi::Abi

-

Same as IntoWasmAbi::into_abi, except that it may throw and never +

Recover a Self::Anchor from Self::Abi. Read more

+

Same as RefFromWasmAbi::Abi

+

Same as RefFromWasmAbi::Anchor

+

Same as RefFromWasmAbi::ref_from_abi

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Same as IntoWasmAbi::Abi

+

Same as IntoWasmAbi::into_abi, except that it may throw and never return in the case of Err. Read more

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/board/struct.Direction.html b/doc/draught/board/struct.Direction.html index 94b10ff..aadd18a 100644 --- a/doc/draught/board/struct.Direction.html +++ b/doc/draught/board/struct.Direction.html @@ -1,35 +1,41 @@ -Direction in draught::board - Rust -

Struct draught::board::Direction[][src]

pub struct Direction<T: Clone + Copy> {
-    nw: Option<T>,
-    ne: Option<T>,
-    se: Option<T>,
-    sw: Option<T>,
+Direction in draught::board - Rust
+    
+    
pub struct Direction<T: Clone + Copy> {
+    nw: Option<T>,
+    ne: Option<T>,
+    se: Option<T>,
+    sw: Option<T>,
 }
Expand description

Standard diagonal movements given by north west/east etc

Used as an absolute measure, i.e. not relative to the team making a move

Use options for when movements are blocked/unallowed contextually

-

Fields

nw: Option<T>

North West

-
ne: Option<T>

North East

-
se: Option<T>

South East

-
sw: Option<T>

South West

-

Implementations

Create an empty direction full of Option::None

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

Fields

nw: Option<T>

North West

+
ne: Option<T>

North East

+
se: Option<T>

South East

+
sw: Option<T>

South West

+

Implementations

Create an empty direction full of Option::None

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/board/struct.Piece.html b/doc/draught/board/struct.Piece.html index 242046a..c1c4d03 100644 --- a/doc/draught/board/struct.Piece.html +++ b/doc/draught/board/struct.Piece.html @@ -1,51 +1,57 @@ Piece in draught::board - Rust -

Struct draught::board::Piece[][src]

pub struct Piece {
+    
+    
pub struct Piece {
     pub team: Team,
     pub strength: Strength,
 }
Expand description

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

-

Fields

team: Teamstrength: Strength

Implementations

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Performs the conversion.

-

The wasm ABI type that this converts from when coming back out from the +

Fields

team: Teamstrength: Strength

Implementations

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Performs the conversion.

+

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

-

Recover a Self from Self::Abi. Read more

-

The wasm ABI type that this converts into when crossing the ABI +

Recover a Self from Self::Abi. Read more

+

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

-

Convert self into Self::Abi so that it can be sent across the wasm +

Convert self into Self::Abi so that it can be sent across the wasm ABI boundary. Read more

-

Tests whether the argument is a “none” instance. If so it will be +

Tests whether the argument is a “none” instance. If so it will be deserialized as None, and otherwise it will be passed to FromWasmAbi. Read more

-

Returns an ABI instance indicating “none”, which JS will interpret as +

Returns an ABI instance indicating “none”, which JS will interpret as the None branch of this option. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

The wasm ABI type references to Self are recovered from.

-

The type that holds the reference to Self for the duration of the +

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

The wasm ABI type references to Self are recovered from.

+

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

-

Recover a Self::Anchor from Self::Abi. Read more

-

Same as RefFromWasmAbi::Abi

-

Same as RefFromWasmAbi::Anchor

-

Same as RefFromWasmAbi::ref_from_abi

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Same as IntoWasmAbi::Abi

-

Same as IntoWasmAbi::into_abi, except that it may throw and never +

Recover a Self::Anchor from Self::Abi. Read more

+

Same as RefFromWasmAbi::Abi

+

Same as RefFromWasmAbi::Anchor

+

Same as RefFromWasmAbi::ref_from_abi

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Same as IntoWasmAbi::Abi

+

Same as IntoWasmAbi::into_abi, except that it may throw and never return in the case of Err. Read more

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/board/struct.Square.html b/doc/draught/board/struct.Square.html index 4605190..8fe7e61 100644 --- a/doc/draught/board/struct.Square.html +++ b/doc/draught/board/struct.Square.html @@ -1,57 +1,63 @@ Square in draught::board - Rust -

Struct draught::board::Square[][src]

pub struct Square {
-    pub occupant: Option<Piece>,
+    
+    
pub struct Square {
+    pub occupant: Option<Piece>,
     pub state: SquareState,
 }
Expand description

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

-

Fields

occupant: Option<Piece>

Game piece if square is occupied

+

Fields

occupant: Option<Piece>

Game piece if square is occupied

state: SquareState

Description of whether the square is occupied or an unplayable, i.e. off-lattice square

-

Implementations

Standard constructor function to form square from state and occupant

-

Helper function for a well-formed piece square by team and strength

-

Helper function for a well-formed empty square

-

Helper function for a well-formed unplayable square

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Performs the conversion.

-

The wasm ABI type that this converts from when coming back out from the +

Implementations

Standard constructor function to form square from state and occupant

+

Helper function for a well-formed piece square by team and strength

+

Helper function for a well-formed empty square

+

Helper function for a well-formed unplayable square

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Performs the conversion.

+

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

-

Recover a Self from Self::Abi. Read more

-

The wasm ABI type that this converts into when crossing the ABI +

Recover a Self from Self::Abi. Read more

+

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

-

Convert self into Self::Abi so that it can be sent across the wasm +

Convert self into Self::Abi so that it can be sent across the wasm ABI boundary. Read more

-

Tests whether the argument is a “none” instance. If so it will be +

Tests whether the argument is a “none” instance. If so it will be deserialized as None, and otherwise it will be passed to FromWasmAbi. Read more

-

Returns an ABI instance indicating “none”, which JS will interpret as +

Returns an ABI instance indicating “none”, which JS will interpret as the None branch of this option. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

The wasm ABI type references to Self are recovered from.

-

The type that holds the reference to Self for the duration of the +

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

The wasm ABI type references to Self are recovered from.

+

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

-

Recover a Self::Anchor from Self::Abi. Read more

-

Same as RefFromWasmAbi::Abi

-

Same as RefFromWasmAbi::Anchor

-

Same as RefFromWasmAbi::ref_from_abi

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Same as IntoWasmAbi::Abi

-

Same as IntoWasmAbi::into_abi, except that it may throw and never +

Recover a Self::Anchor from Self::Abi. Read more

+

Same as RefFromWasmAbi::Abi

+

Same as RefFromWasmAbi::Anchor

+

Same as RefFromWasmAbi::ref_from_abi

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Same as IntoWasmAbi::Abi

+

Same as IntoWasmAbi::into_abi, except that it may throw and never return in the case of Err. Read more

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/comp/index.html b/doc/draught/comp/index.html index ca414b6..7be96ea 100644 --- a/doc/draught/comp/index.html +++ b/doc/draught/comp/index.html @@ -1,9 +1,13 @@ draught::comp - Rust -

Module draught::comp[][src]

Expand description

AI player logic

+ +
+

Module draught::comp

source · []
Expand description

AI player logic

Structs

For storing boards in the AI tree, stores board with score for comparisons

Root-level structure for managing the game as a collection of board states

Represents a move by source/destination indices and the move type

-
+
\ No newline at end of file diff --git a/doc/draught/comp/struct.BoardNode.html b/doc/draught/comp/struct.BoardNode.html index e0731f9..c705c5c 100644 --- a/doc/draught/comp/struct.BoardNode.html +++ b/doc/draught/comp/struct.BoardNode.html @@ -1,26 +1,32 @@ BoardNode in draught::comp - Rust -

Struct draught::comp::BoardNode[][src]

pub struct BoardNode {
+    
+    
pub struct BoardNode {
     pub board: Board,
-    pub score: isize,
+    pub score: isize,
 }
Expand description

For storing boards in the AI tree, stores board with score for comparisons

-

Fields

board: Boardscore: isize

Implementations

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

Fields

board: Boardscore: isize

Implementations

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/comp/struct.Computer.html b/doc/draught/comp/struct.Computer.html index 6f6a815..92f553b 100644 --- a/doc/draught/comp/struct.Computer.html +++ b/doc/draught/comp/struct.Computer.html @@ -1,33 +1,39 @@ Computer in draught::comp - Rust -

Struct draught::comp::Computer[][src]

pub struct Computer {
-    pub search_depth: usize,
+    
+    
pub struct Computer {
+    pub search_depth: usize,
     pub team: Team,
-    pub last_node_count: usize,
-    pub perfect_chance: f64,
+    pub last_node_count: usize,
+    pub perfect_chance: f64,
 }
Expand description

Root-level structure for managing the game as a collection of board states

-

Fields

search_depth: usizeteam: Teamlast_node_count: usizeperfect_chance: f64

Implementations

Get vector of available moves for a given board

-

Generate tree of boards to given search depth, return root node

-

Propagate scores up the tree employing MiniMax algorithm

-

Get best of given scores for given team

-

For given NodeIDs, insert score of board into tree +

Fields

search_depth: usizeteam: Teamlast_node_count: usizeperfect_chance: f64

Implementations

Get vector of available moves for a given board

+

Generate tree of boards to given search depth, return root node

+

Propagate scores up the tree employing MiniMax algorithm

+

Get best of given scores for given team

+

For given NodeIDs, insert score of board into tree Used for leaf nodes ready for propagating up tree

-

Traverse tree from given root ID and get NodeIDs of leaf nodes (those without children)

-

Expand all given nodes and return newly inserted layer of nodes

-

Insert all possible next boards as children of given board node

-

Insert given boards into tree

-

Get all possible next boards from given board

-

Get a new board based on the given using MiniMax to make decisions

-

Get a random board from possible node IDs and associated tree

-

Trait Implementations

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

Traverse tree from given root ID and get NodeIDs of leaf nodes (those without children)

+

Expand all given nodes and return newly inserted layer of nodes

+

Insert all possible next boards as children of given board node

+

Insert given boards into tree

+

Get all possible next boards from given board

+

Get a new board based on the given using MiniMax to make decisions

+

Get a random board from possible node IDs and associated tree

+

Trait Implementations

Formats the value using the given formatter. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/comp/struct.Move.html b/doc/draught/comp/struct.Move.html index 910c877..d169b85 100644 --- a/doc/draught/comp/struct.Move.html +++ b/doc/draught/comp/struct.Move.html @@ -1,27 +1,33 @@ -Move in draught::comp - Rust -

Struct draught::comp::Move[][src]

pub struct Move {
+Move in draught::comp - Rust
+    
+    
+

Struct draught::comp::Move

source · []
pub struct Move {
     from: BrdIdx,
     to: BrdIdx,
     mv_type: MoveType,
 }
Expand description

Represents a move by source/destination indices and the move type

-

Fields

from: BrdIdxto: BrdIdxmv_type: MoveType

Implementations

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

Fields

from: BrdIdxto: BrdIdxmv_type: MoveType

Implementations

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/constant.__wasm_bindgen_generated_init_wasm__const.html b/doc/draught/constant.__wasm_bindgen_generated_init_wasm__const.html index b2508c8..f7aaa17 100644 --- a/doc/draught/constant.__wasm_bindgen_generated_init_wasm__const.html +++ b/doc/draught/constant.__wasm_bindgen_generated_init_wasm__const.html @@ -1,4 +1,8 @@ __wasm_bindgen_generated_init_wasm__const in draught - Rust -

Constant draught::__wasm_bindgen_generated_init_wasm__const[][src]

pub(crate) const __wasm_bindgen_generated_init_wasm__const: ();
+ +
pub(crate) const __wasm_bindgen_generated_init_wasm__const: ();
\ No newline at end of file diff --git a/doc/draught/fn.init_wasm.html b/doc/draught/fn.init_wasm.html index 44ada49..089ef84 100644 --- a/doc/draught/fn.init_wasm.html +++ b/doc/draught/fn.init_wasm.html @@ -1,4 +1,8 @@ init_wasm in draught - Rust -

Function draught::init_wasm[][src]

pub fn init_wasm()
+ +
+

Function draught::init_wasm

source · []
pub fn init_wasm()
\ No newline at end of file diff --git a/doc/draught/game/constant.__wbg_get_game_last_node_count__const.html b/doc/draught/game/constant.__wbg_get_game_last_node_count__const.html index 21cb770..3a308aa 100644 --- a/doc/draught/game/constant.__wbg_get_game_last_node_count__const.html +++ b/doc/draught/game/constant.__wbg_get_game_last_node_count__const.html @@ -1,4 +1,8 @@ __wbg_get_game_last_node_count__const in draught::game - Rust -

Constant draught::game::__wbg_get_game_last_node_count__const[][src]

const __wbg_get_game_last_node_count__const: ();
+ +
const __wbg_get_game_last_node_count__const: ();
\ No newline at end of file diff --git a/doc/draught/game/constant.__wbg_get_game_perfect_chance__const.html b/doc/draught/game/constant.__wbg_get_game_perfect_chance__const.html index a94253c..d4df204 100644 --- a/doc/draught/game/constant.__wbg_get_game_perfect_chance__const.html +++ b/doc/draught/game/constant.__wbg_get_game_perfect_chance__const.html @@ -1,4 +1,8 @@ __wbg_get_game_perfect_chance__const in draught::game - Rust -

Constant draught::game::__wbg_get_game_perfect_chance__const[][src]

const __wbg_get_game_perfect_chance__const: ();
+ +
const __wbg_get_game_perfect_chance__const: ();
\ No newline at end of file diff --git a/doc/draught/game/index.html b/doc/draught/game/index.html index 2c5d37a..a7a0c1f 100644 --- a/doc/draught/game/index.html +++ b/doc/draught/game/index.html @@ -1,8 +1,12 @@ draught::game - Rust -

Module draught::game[][src]

Expand description

Top-level object for managing Boards, applying and managing turns

+ +
+

Module draught::game

source · []
Expand description

Top-level object for managing Boards, applying and managing turns

Structs

Root-level structure for managing the game as a collection of board states

Constants

-
+
\ No newline at end of file diff --git a/doc/draught/game/struct.Game.html b/doc/draught/game/struct.Game.html index ed5dc14..866140b 100644 --- a/doc/draught/game/struct.Game.html +++ b/doc/draught/game/struct.Game.html @@ -1,74 +1,80 @@ Game in draught::game - Rust -

Struct draught::game::Game[][src]

pub struct Game {
+    
+    
+

Struct draught::game::Game

source · []
pub struct Game {
     current: Board,
-    selected_piece: Option<BrdIdx>,
-    previous_boards: Vec<Board>,
-    painter: Option<Painter>,
-    search_depth: usize,
-    pub last_node_count: usize,
-    pub perfect_chance: f64,
+    selected_piece: Option<BrdIdx>,
+    previous_boards: Vec<Board>,
+    painter: Option<Painter>,
+    search_depth: usize,
+    pub last_node_count: usize,
+    pub perfect_chance: f64,
 }
Expand description

Root-level structure for managing the game as a collection of board states

-

Fields

current: Boardselected_piece: Option<BrdIdx>previous_boards: Vec<Board>painter: Option<Painter>search_depth: usizelast_node_count: usizeperfect_chance: f64

Implementations

Get a read-only copy of a previous turn’s board

-

Set current board to given

-

Get pointer to current board’s squares

-

Get pointer to current board’s squares

-

Current turn’s team

-

Current board’s score

-

Get currently winning player

-

Check if a player has won

-

Get square on current board for given index

-

Set tree depth for AI to search to

-

Set given index as selected piece +

Fields

current: Boardselected_piece: Option<BrdIdx>previous_boards: Vec<Board>painter: Option<Painter>search_depth: usizelast_node_count: usizeperfect_chance: f64

Implementations

Get a read-only copy of a previous turn’s board

+

Set current board to given

+

Get pointer to current board’s squares

+

Get pointer to current board’s squares

+

Current turn’s team

+

Current board’s score

+

Get currently winning player

+

Check if a player has won

+

Get square on current board for given index

+

Set tree depth for AI to search to

+

Set given index as selected piece TODO: Check whether valid square?

-

Set proportion of perfect moves from AI

-

Clear currently selected piece

-

Attempt to make a move given a source and destination index

-

Update board state with given move and push new board into current state

-

Update board state with given jump move and push new board into current state

-

Push current board into the previous turns and set given board to current

-

Set current board to given

-

Get new game without board renderer

-

Get a new game with canvas ID and dimensions

-

Set painter for rendering boards

-

Draw current board using painter if exists

-

Create computer, get move from current board and update current board

-

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

Performs the conversion.

-

The wasm ABI type that this converts from when coming back out from the +

Set proportion of perfect moves from AI

+

Clear currently selected piece

+

Attempt to make a move given a source and destination index

+

Update board state with given move and push new board into current state

+

Update board state with given jump move and push new board into current state

+

Push current board into the previous turns and set given board to current

+

Set current board to given

+

Get new game without board renderer

+

Get a new game with canvas ID and dimensions

+

Set painter for rendering boards

+

Draw current board using painter if exists

+

Create computer, get move from current board and update current board

+

Trait Implementations

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

Performs the conversion.

+

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

-

Recover a Self from Self::Abi. Read more

-

The wasm ABI type that this converts into when crossing the ABI +

Recover a Self from Self::Abi. Read more

+

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

-

Convert self into Self::Abi so that it can be sent across the wasm +

Convert self into Self::Abi so that it can be sent across the wasm ABI boundary. Read more

-

Tests whether the argument is a “none” instance. If so it will be +

Tests whether the argument is a “none” instance. If so it will be deserialized as None, and otherwise it will be passed to FromWasmAbi. Read more

-

Returns an ABI instance indicating “none”, which JS will interpret as +

Returns an ABI instance indicating “none”, which JS will interpret as the None branch of this option. Read more

-

The wasm ABI type references to Self are recovered from.

-

The type that holds the reference to Self for the duration of the +

The wasm ABI type references to Self are recovered from.

+

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

-

Recover a Self::Anchor from Self::Abi. Read more

-

Same as RefFromWasmAbi::Abi

-

Same as RefFromWasmAbi::Anchor

-

Same as RefFromWasmAbi::ref_from_abi

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Same as IntoWasmAbi::Abi

-

Same as IntoWasmAbi::into_abi, except that it may throw and never +

Recover a Self::Anchor from Self::Abi. Read more

+

Same as RefFromWasmAbi::Abi

+

Same as RefFromWasmAbi::Anchor

+

Same as RefFromWasmAbi::ref_from_abi

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Same as IntoWasmAbi::Abi

+

Same as IntoWasmAbi::into_abi, except that it may throw and never return in the case of Err. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/index.html b/doc/draught/index.html index 9f2d29b..5a11615 100644 --- a/doc/draught/index.html +++ b/doc/draught/index.html @@ -1,6 +1,10 @@ draught - Rust -

Crate draught[][src]

Expand description

Draught

+ +
+

Crate draught

source · []
Expand description

Draught

An implementation of checkers/draughts in Rust WebAssembly with a minimax AI player

Re-exports

pub use board::Board;
pub use game::Game;
pub use comp::Computer;
pub use paint::Painter;

Modules

@@ -12,5 +16,5 @@

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

Constants

Functions

-
+
\ No newline at end of file diff --git a/doc/draught/macro.log.html b/doc/draught/macro.log.html index 5370e1c..080651b 100644 --- a/doc/draught/macro.log.html +++ b/doc/draught/macro.log.html @@ -1,8 +1,12 @@ log in draught - Rust -

Macro draught::log[][src]

macro_rules! log {
-    ($($t : tt) *) => { ... };
+    
+    
+

Macro draught::log

source · []
macro_rules! log {
+    ( $( $t:tt )* ) => { ... };
 }
Expand description

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

-
+
\ No newline at end of file diff --git a/doc/draught/macro.log_error.html b/doc/draught/macro.log_error.html index 02f815e..c7cc39d 100644 --- a/doc/draught/macro.log_error.html +++ b/doc/draught/macro.log_error.html @@ -1,7 +1,11 @@ log_error in draught - Rust -

Macro draught::log_error[][src]

macro_rules! log_error {
-    ($($t : tt) *) => { ... };
+    
+    
macro_rules! log_error {
+    ( $( $t:tt )* ) => { ... };
 }
-
+
\ No newline at end of file diff --git a/doc/draught/paint/constant.BLACK_PIECE.html b/doc/draught/paint/constant.BLACK_PIECE.html index b14a7f9..bc58d4d 100644 --- a/doc/draught/paint/constant.BLACK_PIECE.html +++ b/doc/draught/paint/constant.BLACK_PIECE.html @@ -1,5 +1,9 @@ BLACK_PIECE in draught::paint - Rust -

Constant draught::paint::BLACK_PIECE[][src]

const BLACK_PIECE: &str = "#ed0000";
Expand description

Default hex colour value for black pieces

-
+ +
const BLACK_PIECE: &str = "#ed0000";
Expand description

Default hex colour value for black pieces

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.BLACK_PIECE_OUTLINE.html b/doc/draught/paint/constant.BLACK_PIECE_OUTLINE.html index 6b8a58c..5a0a735 100644 --- a/doc/draught/paint/constant.BLACK_PIECE_OUTLINE.html +++ b/doc/draught/paint/constant.BLACK_PIECE_OUTLINE.html @@ -1,5 +1,9 @@ BLACK_PIECE_OUTLINE in draught::paint - Rust -

Constant draught::paint::BLACK_PIECE_OUTLINE[][src]

const BLACK_PIECE_OUTLINE: &str = "#a60000";
Expand description

Default hex colour value for black piece outline

-
+ +
const BLACK_PIECE_OUTLINE: &str = "#a60000";
Expand description

Default hex colour value for black piece outline

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.BLACK_SQUARE.html b/doc/draught/paint/constant.BLACK_SQUARE.html index 17cca69..2d51f9e 100644 --- a/doc/draught/paint/constant.BLACK_SQUARE.html +++ b/doc/draught/paint/constant.BLACK_SQUARE.html @@ -1,5 +1,9 @@ BLACK_SQUARE in draught::paint - Rust -

Constant draught::paint::BLACK_SQUARE[][src]

const BLACK_SQUARE: &str = "#000000";
Expand description

Default hex colour value for black square background

-
+ +
const BLACK_SQUARE: &str = "#000000";
Expand description

Default hex colour value for black square background

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.DRAW_OUTLINE.html b/doc/draught/paint/constant.DRAW_OUTLINE.html index ec6abc2..fdb8afd 100644 --- a/doc/draught/paint/constant.DRAW_OUTLINE.html +++ b/doc/draught/paint/constant.DRAW_OUTLINE.html @@ -1,5 +1,9 @@ DRAW_OUTLINE in draught::paint - Rust -

Constant draught::paint::DRAW_OUTLINE[][src]

const DRAW_OUTLINE: bool = true;
Expand description

Whether to outline black squares

-
+ +
const DRAW_OUTLINE: bool = true;
Expand description

Whether to outline black squares

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.DRAW_PIECE_OUTLINES.html b/doc/draught/paint/constant.DRAW_PIECE_OUTLINES.html index 004fe86..d1b1452 100644 --- a/doc/draught/paint/constant.DRAW_PIECE_OUTLINES.html +++ b/doc/draught/paint/constant.DRAW_PIECE_OUTLINES.html @@ -1,5 +1,9 @@ DRAW_PIECE_OUTLINES in draught::paint - Rust -

Constant draught::paint::DRAW_PIECE_OUTLINES[][src]

const DRAW_PIECE_OUTLINES: bool = true;
Expand description

Whether to outline pieces

-
+ +
const DRAW_PIECE_OUTLINES: bool = true;
Expand description

Whether to outline pieces

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.KING_OUTLINE.html b/doc/draught/paint/constant.KING_OUTLINE.html index 150545f..bb9bba0 100644 --- a/doc/draught/paint/constant.KING_OUTLINE.html +++ b/doc/draught/paint/constant.KING_OUTLINE.html @@ -1,5 +1,9 @@ KING_OUTLINE in draught::paint - Rust -

Constant draught::paint::KING_OUTLINE[][src]

const KING_OUTLINE: &str = "#ffea00";
Expand description

Default hex colour value for black piece outline

-
+ +
const KING_OUTLINE: &str = "#ffea00";
Expand description

Default hex colour value for black piece outline

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.OUTLINE_WIDTH.html b/doc/draught/paint/constant.OUTLINE_WIDTH.html index baf37f7..098b54e 100644 --- a/doc/draught/paint/constant.OUTLINE_WIDTH.html +++ b/doc/draught/paint/constant.OUTLINE_WIDTH.html @@ -1,5 +1,9 @@ OUTLINE_WIDTH in draught::paint - Rust -

Constant draught::paint::OUTLINE_WIDTH[][src]

const OUTLINE_WIDTH: f64 = 0.05;
Expand description

Line width when outlining black squares as proportion of min cell dimension

-
+ +
const OUTLINE_WIDTH: f64 = 0.05;
Expand description

Line width when outlining black squares as proportion of min cell dimension

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.PIECE_OUTLINE_PROPORTION.html b/doc/draught/paint/constant.PIECE_OUTLINE_PROPORTION.html index ee9a4d3..bf034e2 100644 --- a/doc/draught/paint/constant.PIECE_OUTLINE_PROPORTION.html +++ b/doc/draught/paint/constant.PIECE_OUTLINE_PROPORTION.html @@ -1,5 +1,9 @@ PIECE_OUTLINE_PROPORTION in draught::paint - Rust -

Constant draught::paint::PIECE_OUTLINE_PROPORTION[][src]

const PIECE_OUTLINE_PROPORTION: f64 = 0.25;
Expand description

Line width for outlining pieces as proportion of piece radius

-
+ +
const PIECE_OUTLINE_PROPORTION: f64 = 0.25;
Expand description

Line width for outlining pieces as proportion of piece radius

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.PIECE_PROPORTION.html b/doc/draught/paint/constant.PIECE_PROPORTION.html index 9ba76b0..485ac23 100644 --- a/doc/draught/paint/constant.PIECE_PROPORTION.html +++ b/doc/draught/paint/constant.PIECE_PROPORTION.html @@ -1,5 +1,9 @@ PIECE_PROPORTION in draught::paint - Rust -

Constant draught::paint::PIECE_PROPORTION[][src]

const PIECE_PROPORTION: f64 = 0.6;
Expand description

Proportion of square that piece fills as proportion of min cell dimension

-
+ +
const PIECE_PROPORTION: f64 = 0.6;
Expand description

Proportion of square that piece fills as proportion of min cell dimension

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.SELECTED_PIECE.html b/doc/draught/paint/constant.SELECTED_PIECE.html index e72eb3a..34209ef 100644 --- a/doc/draught/paint/constant.SELECTED_PIECE.html +++ b/doc/draught/paint/constant.SELECTED_PIECE.html @@ -1,5 +1,9 @@ SELECTED_PIECE in draught::paint - Rust -

Constant draught::paint::SELECTED_PIECE[][src]

const SELECTED_PIECE: &str = "#fffd78";
Expand description

Default hex colour value for selected piece

-
+ +
const SELECTED_PIECE: &str = "#fffd78";
Expand description

Default hex colour value for selected piece

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.SELECTED_PIECE_OUTLINE.html b/doc/draught/paint/constant.SELECTED_PIECE_OUTLINE.html index af6ce21..91e77c2 100644 --- a/doc/draught/paint/constant.SELECTED_PIECE_OUTLINE.html +++ b/doc/draught/paint/constant.SELECTED_PIECE_OUTLINE.html @@ -1,5 +1,9 @@ SELECTED_PIECE_OUTLINE in draught::paint - Rust -

Constant draught::paint::SELECTED_PIECE_OUTLINE[][src]

const SELECTED_PIECE_OUTLINE: &str = "#d1cf45";
Expand description

Default hex colour value for selected piece outline

-
+ +
const SELECTED_PIECE_OUTLINE: &str = "#d1cf45";
Expand description

Default hex colour value for selected piece outline

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.SQUARE_OUTLINE.html b/doc/draught/paint/constant.SQUARE_OUTLINE.html index 3f3f15e..bda320a 100644 --- a/doc/draught/paint/constant.SQUARE_OUTLINE.html +++ b/doc/draught/paint/constant.SQUARE_OUTLINE.html @@ -1,5 +1,9 @@ SQUARE_OUTLINE in draught::paint - Rust -

Constant draught::paint::SQUARE_OUTLINE[][src]

const SQUARE_OUTLINE: &str = "#9c9c9c";
Expand description

Default hex colour value for outline of black squares

-
+ +
const SQUARE_OUTLINE: &str = "#9c9c9c";
Expand description

Default hex colour value for outline of black squares

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.WHITE_PIECE.html b/doc/draught/paint/constant.WHITE_PIECE.html index 6916117..d64be92 100644 --- a/doc/draught/paint/constant.WHITE_PIECE.html +++ b/doc/draught/paint/constant.WHITE_PIECE.html @@ -1,5 +1,9 @@ WHITE_PIECE in draught::paint - Rust -

Constant draught::paint::WHITE_PIECE[][src]

const WHITE_PIECE: &str = "#dbdbdb";
Expand description

Default hex colour value for white pieces

-
+ +
const WHITE_PIECE: &str = "#dbdbdb";
Expand description

Default hex colour value for white pieces

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.WHITE_PIECE_OUTLINE.html b/doc/draught/paint/constant.WHITE_PIECE_OUTLINE.html index 3989e42..53754e8 100644 --- a/doc/draught/paint/constant.WHITE_PIECE_OUTLINE.html +++ b/doc/draught/paint/constant.WHITE_PIECE_OUTLINE.html @@ -1,5 +1,9 @@ WHITE_PIECE_OUTLINE in draught::paint - Rust -

Constant draught::paint::WHITE_PIECE_OUTLINE[][src]

const WHITE_PIECE_OUTLINE: &str = "#9c9c9c";
Expand description

Default hex colour value for white piece outline

-
+ +
const WHITE_PIECE_OUTLINE: &str = "#9c9c9c";
Expand description

Default hex colour value for white piece outline

+
\ No newline at end of file diff --git a/doc/draught/paint/constant.WHITE_SQUARE.html b/doc/draught/paint/constant.WHITE_SQUARE.html index ff620d1..47c6969 100644 --- a/doc/draught/paint/constant.WHITE_SQUARE.html +++ b/doc/draught/paint/constant.WHITE_SQUARE.html @@ -1,5 +1,9 @@ WHITE_SQUARE in draught::paint - Rust -

Constant draught::paint::WHITE_SQUARE[][src]

const WHITE_SQUARE: &str = "#FFFFFF";
Expand description

Default hex colour value for white square background

-
+ +
const WHITE_SQUARE: &str = "#FFFFFF";
Expand description

Default hex colour value for white square background

+
\ No newline at end of file diff --git a/doc/draught/paint/index.html b/doc/draught/paint/index.html index 7e2829e..a0cc81c 100644 --- a/doc/draught/paint/index.html +++ b/doc/draught/paint/index.html @@ -1,6 +1,10 @@ draught::paint - Rust -

Module draught::paint[][src]

Expand description

Components for painting board states onto HTML canvases

+ +
+

Module draught::paint

source · []
Expand description

Components for painting board states onto HTML canvases

Structs

Used to paint boards onto HTML canvases

Constants

@@ -19,5 +23,5 @@

Default hex colour value for white pieces

Default hex colour value for white piece outline

Default hex colour value for white square background

-
+
\ No newline at end of file diff --git a/doc/draught/paint/struct.Painter.html b/doc/draught/paint/struct.Painter.html index 2c5478b..5f964be 100644 --- a/doc/draught/paint/struct.Painter.html +++ b/doc/draught/paint/struct.Painter.html @@ -1,9 +1,13 @@ Painter in draught::paint - Rust -

Struct draught::paint::Painter[][src]

pub struct Painter {
Show 19 fields + +
pub struct Painter {
Show 19 fields canvas: HtmlCanvasElement, context: CanvasRenderingContext2d, - selected_idx: Option<BrdIdx>, + selected_idx: Option<BrdIdx>, white_square: JsValue, black_square: JsValue, white_piece: JsValue, @@ -13,59 +17,61 @@ black_piece_line: JsValue, selected_piece_line: JsValue, king_line: JsValue, - piece_lines: bool, - piece_line_proportion: f64, + piece_lines: bool, + piece_line_proportion: f64, square_outline: JsValue, - outline_width: f64, - draw_outline: bool, - width: u32, - height: u32, + outline_width: f64, + draw_outline: bool, + width: u32, + height: u32,
}
Expand description

Used to paint boards onto HTML canvases

-

Fields

canvas: HtmlCanvasElementcontext: CanvasRenderingContext2dselected_idx: Option<BrdIdx>white_square: JsValueblack_square: JsValuewhite_piece: JsValueblack_piece: JsValueselected_piece: JsValuewhite_piece_line: JsValueblack_piece_line: JsValueselected_piece_line: JsValueking_line: JsValuepiece_lines: boolpiece_line_proportion: f64square_outline: JsValueoutline_width: f64draw_outline: boolwidth: u32height: u32

Implementations

Set selected piece by board index

-

Get a canvas by element ID

-

Get a 2D canvas context for a given canvas

-

Default constructor which queries for canvas by ID

-

Constructor with given canvas element

-

Set new square outline colour value

-

Set new line width for outlining squares

-

Set whether squares are outlined

-

Reset the canvas dimensions to the given width and height

-

Check whether given canvas dimensions divide evenly by given board dimenions

-

Draw a board onto the canvas

-

Trait Implementations

Formats the value using the given formatter. Read more

-

Performs the conversion.

-

The wasm ABI type that this converts from when coming back out from the +

Fields

canvas: HtmlCanvasElementcontext: CanvasRenderingContext2dselected_idx: Option<BrdIdx>white_square: JsValueblack_square: JsValuewhite_piece: JsValueblack_piece: JsValueselected_piece: JsValuewhite_piece_line: JsValueblack_piece_line: JsValueselected_piece_line: JsValueking_line: JsValuepiece_lines: boolpiece_line_proportion: f64square_outline: JsValueoutline_width: f64draw_outline: boolwidth: u32height: u32

Implementations

Set selected piece by board index

+

Get a canvas by element ID

+

Get a 2D canvas context for a given canvas

+

Default constructor which queries for canvas by ID

+

Constructor with given canvas element

+

Set new square outline colour value

+

Set new line width for outlining squares

+

Set whether squares are outlined

+

Reset the canvas dimensions to the given width and height

+

Check whether given canvas dimensions divide evenly by given board dimenions

+

Draw a board onto the canvas

+

Trait Implementations

Formats the value using the given formatter. Read more

+

Performs the conversion.

+

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

-

Recover a Self from Self::Abi. Read more

-

The wasm ABI type that this converts into when crossing the ABI +

Recover a Self from Self::Abi. Read more

+

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

-

Convert self into Self::Abi so that it can be sent across the wasm +

Convert self into Self::Abi so that it can be sent across the wasm ABI boundary. Read more

-

Tests whether the argument is a “none” instance. If so it will be +

Tests whether the argument is a “none” instance. If so it will be deserialized as None, and otherwise it will be passed to FromWasmAbi. Read more

-

Returns an ABI instance indicating “none”, which JS will interpret as +

Returns an ABI instance indicating “none”, which JS will interpret as the None branch of this option. Read more

-

The wasm ABI type references to Self are recovered from.

-

The type that holds the reference to Self for the duration of the +

The wasm ABI type references to Self are recovered from.

+

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

-

Recover a Self::Anchor from Self::Abi. Read more

-

Same as RefFromWasmAbi::Abi

-

Same as RefFromWasmAbi::Anchor

-

Same as RefFromWasmAbi::ref_from_abi

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Same as IntoWasmAbi::Abi

-

Same as IntoWasmAbi::into_abi, except that it may throw and never +

Recover a Self::Anchor from Self::Abi. Read more

+

Same as RefFromWasmAbi::Abi

+

Same as RefFromWasmAbi::Anchor

+

Same as RefFromWasmAbi::ref_from_abi

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Same as IntoWasmAbi::Abi

+

Same as IntoWasmAbi::into_abi, except that it may throw and never return in the case of Err. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+
\ No newline at end of file diff --git a/doc/draught/utils/fn.set_panic_hook.html b/doc/draught/utils/fn.set_panic_hook.html index c718a95..4bbca14 100644 --- a/doc/draught/utils/fn.set_panic_hook.html +++ b/doc/draught/utils/fn.set_panic_hook.html @@ -1,4 +1,8 @@ set_panic_hook in draught::utils - Rust -

Function draught::utils::set_panic_hook[][src]

pub fn set_panic_hook()
+ +
pub fn set_panic_hook()
\ No newline at end of file diff --git a/doc/draught/utils/index.html b/doc/draught/utils/index.html index f4e9ff2..d70f2fa 100644 --- a/doc/draught/utils/index.html +++ b/doc/draught/utils/index.html @@ -1,5 +1,9 @@ draught::utils - Rust -
+ +
\ No newline at end of file diff --git a/doc/favicon-16x16.png b/doc/favicon-16x16.png index 7cfe6c13550d31bc31355616bbb9cb77fd1b25ef..ea4b45cae1618e6e20e6d61897da953f34b66b30 100644 GIT binary patch literal 715 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L9P|ym58ULAS1_A}yOFVsD*`G1;@(QxEEoEaloaX$3oUhmn3B1b>^ zXS8u>Ub4$r*u2F1FEiJ>rQJ&x%nC}Q!>*kacg*^JAVaGgCxj?;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1UT zt3o15f)dLW3X1a6GILTDN-7Id6*3D-k{K8(<~;ty!%-Nfp>fLp^cl~mK@7~w+4yl)LyARcIVNxmKrUYOD%pfJyWON=)B<95>De^Rm5G6M}j3YLqKtM+@IBeEw z^+wbz;o5ak@SEL6xUikVXe8WJEFP9pGywO3uTmwxha}|Wr z9u|-rLXDJ)G2t{3kpl`W;YO%bBuJ+P21kd?(GxW6gW)vnCxqExX54RUQWHS;@lhhf zJ|gVd``1Y^@=zFJJK>(g3hajVzz_h_1Q{78U@+bBlQht;p6z!frXHv{LPhwYz<<`72lXv!(d1nyYeRki} zG-TB$r};*eD+wIao;8*Q1z1lX*pMIAo8KMMp3kpQSfT>9<7X{yl)7mmZ&HHTmt$V^;c~|?Lwt01Kia(Ww7QAk1 z37VI_XzHZ4&TD(hrV_xFzrp5h zIDA-gJMuv0N4O`)y}GEDLzI5DRqcQGw4eZ{gx8^nswsmyuR8`H8qrt&We_mQ?E71KoB@x@ws?}G)`?crAQn;UN4 z6pH^kmG!J);&{3;dAl$;_(V^Szpt%NFJJz= zy0-T8z<~J6?w>4P{r&x!3m1l6=;+9(f6gXZaCUdB?(m(=>C3y+SzUDzf4JRP!@oM< Yn%3fxa@a2CEqi4B`cIb_Lo1C76=D-CY>|xA&jf59DzcctjQh4J-j+#zTiQ z{eXh(C7!;n?9Ui^c?CJ9NzPUVYP#TA@8THZaeV4k{|uQ@5%v%Mo3bzGZF!c^x^=C` zhHKv@HF0_^l>YYM;# zdv;6xszp;GkH33cBf+{*v~k5#&NUpON!?;Ev$+GdYkdeQs*|0sy8Ja$=}*%pk0;wUI6kj8>pab;RB|?r|9btON43%O zg14}%`sb~76S;FEa7#bgUrp`GgzmIx+C8fo4R{Xg^b!cDajo7vM`lG~6)lI5;Srs=b6um6iKJ!SX)NEp9#PN+|}%e}V_2KxH>htxeA znb$YwKi;zJflJKQpM4BxwPL*9?Q=O6|8b?(^suk1AOG_G;nc8PczfXd`s8!vb$_F?dYQ^q2@TfY?;Y>EddKE{*Pd`JoN0OL#de$96F43E33?AWWO6#K5N-MHoSw=C__HQR!|U%lo#>vXA?@7XKO zI@g!od0zEj{=9aZqgejDm%v1?TH+c}l9E`GYL#4+3Zxi}42+C)4GeV+jYABLtqkkU ztqd%*4GgRd46-f4|Dx!~%}>cpt3=m<&>)ri9++JjBtcdL=ckpFCl;kLl$V$5W#(lU zCnpx9>g5-u&wghk1ymGX6%tVrlvu7%P?VpRnUkteQdy9ykXaB?lFYzRG3W6o9*)8= z4UJR&r_Xpk4Pszc=GIH*7FHJao-D#Ftl-jMayW%qd2@)u=^Iy09657D<_P=g29E_^ adJM0`1xr3TnN9`T!QkoY=d#Wzp$PyWN8Zf< literal 2919 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 IIpoLx0#^I3DgXcg diff --git a/doc/implementors/core/clone/trait.Clone.js b/doc/implementors/core/clone/trait.Clone.js index 1581d8e..5049d16 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 MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"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 + 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 Move","synthetic":false,"types":["draught::comp::Move"]},{"text":"impl Clone for BoardNode","synthetic":false,"types":["draught::comp::BoardNode"]}]; +implementors["draught"] = [{"text":"impl Clone for MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"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 + 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 Move","synthetic":false,"types":["draught::comp::Move"]},{"text":"impl Clone for BoardNode","synthetic":false,"types":["draught::comp::BoardNode"]}]; 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/cmp/trait.Eq.js b/doc/implementors/core/cmp/trait.Eq.js index 88e654f..f8db6ff 100644 --- a/doc/implementors/core/cmp/trait.Eq.js +++ b/doc/implementors/core/cmp/trait.Eq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl Eq for MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"text":"impl Eq for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl Eq for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl Eq for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl Eq for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl Eq for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: Eq + Clone + Copy> Eq for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl Eq for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl Eq for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl Eq for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl Eq for Move","synthetic":false,"types":["draught::comp::Move"]},{"text":"impl Eq for BoardNode","synthetic":false,"types":["draught::comp::BoardNode"]}]; +implementors["draught"] = [{"text":"impl Eq for MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"text":"impl Eq for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl Eq for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl Eq for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl Eq for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl Eq for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: Eq + Clone + Copy> Eq for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl Eq for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl Eq for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl Eq for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl Eq for Move","synthetic":false,"types":["draught::comp::Move"]},{"text":"impl Eq for BoardNode","synthetic":false,"types":["draught::comp::BoardNode"]}]; 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/cmp/trait.PartialEq.js b/doc/implementors/core/cmp/trait.PartialEq.js index d1c4136..4af179d 100644 --- a/doc/implementors/core/cmp/trait.PartialEq.js +++ b/doc/implementors/core/cmp/trait.PartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl PartialEq<MoveType> for MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"text":"impl PartialEq<Team> for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl PartialEq<Strength> for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl PartialEq<SquareState> for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl PartialEq<Moveable> for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl PartialEq<Piece> for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: PartialEq + Clone + Copy> PartialEq<Direction<T>> for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl PartialEq<Square> for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl PartialEq<BrdIdx> for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl PartialEq<Board> for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl PartialEq<Move> for Move","synthetic":false,"types":["draught::comp::Move"]},{"text":"impl PartialEq<BoardNode> for BoardNode","synthetic":false,"types":["draught::comp::BoardNode"]}]; +implementors["draught"] = [{"text":"impl PartialEq<MoveType> for MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"text":"impl PartialEq<Team> for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl PartialEq<Strength> for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl PartialEq<SquareState> for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl PartialEq<Moveable> for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl PartialEq<Piece> for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: PartialEq + Clone + Copy> PartialEq<Direction<T>> for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl PartialEq<Square> for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl PartialEq<BrdIdx> for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl PartialEq<Board> for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl PartialEq<Move> for Move","synthetic":false,"types":["draught::comp::Move"]},{"text":"impl PartialEq<BoardNode> for BoardNode","synthetic":false,"types":["draught::comp::BoardNode"]}]; 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 de6bf55..5111548 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"]},{"text":"impl From<Painter> 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<Painter> 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 456b7dd..a9898fb 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 MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"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"]},{"text":"impl Debug for Painter","synthetic":false,"types":["draught::paint::Painter"]},{"text":"impl Debug for Move","synthetic":false,"types":["draught::comp::Move"]},{"text":"impl Debug for BoardNode","synthetic":false,"types":["draught::comp::BoardNode"]},{"text":"impl Debug for Computer","synthetic":false,"types":["draught::comp::Computer"]}]; +implementors["draught"] = [{"text":"impl Debug for MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"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"]},{"text":"impl Debug for Painter","synthetic":false,"types":["draught::paint::Painter"]},{"text":"impl Debug for Move","synthetic":false,"types":["draught::comp::Move"]},{"text":"impl Debug for BoardNode","synthetic":false,"types":["draught::comp::BoardNode"]},{"text":"impl Debug for Computer","synthetic":false,"types":["draught::comp::Computer"]}]; 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 a05e094..a323414 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"]},{"text":"impl Display for Game","synthetic":false,"types":["draught::game::Game"]}]; +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 c500b6f..a44a6aa 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"]},{"text":"impl<'a> Iterator for PieceIterator<'a>","synthetic":false,"types":["draught::board::iter::PieceIterator"]}]; +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.Copy.js b/doc/implementors/core/marker/trait.Copy.js index f3000f9..c9dff0d 100644 --- a/doc/implementors/core/marker/trait.Copy.js +++ b/doc/implementors/core/marker/trait.Copy.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl Copy for MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"text":"impl Copy for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl Copy for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl Copy for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl Copy for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl Copy for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: Copy + Clone + Copy> Copy for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl Copy for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl Copy for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl Copy for Move","synthetic":false,"types":["draught::comp::Move"]}]; +implementors["draught"] = [{"text":"impl Copy for MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"text":"impl Copy for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl Copy for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl Copy for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl Copy for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl Copy for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: Copy + Clone + Copy> Copy for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl Copy for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl Copy for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl Copy for Move","synthetic":false,"types":["draught::comp::Move"]}]; 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 58edcef..f438056 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 MoveType","synthetic":true,"types":["draught::board::enums::MoveType"]},{"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 Painter","synthetic":true,"types":["draught::paint::Painter"]},{"text":"impl Freeze for Move","synthetic":true,"types":["draught::comp::Move"]},{"text":"impl Freeze for BoardNode","synthetic":true,"types":["draught::comp::BoardNode"]},{"text":"impl Freeze for Computer","synthetic":true,"types":["draught::comp::Computer"]}]; +implementors["draught"] = [{"text":"impl Freeze for MoveType","synthetic":true,"types":["draught::board::enums::MoveType"]},{"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 Painter","synthetic":true,"types":["draught::paint::Painter"]},{"text":"impl Freeze for Move","synthetic":true,"types":["draught::comp::Move"]},{"text":"impl Freeze for BoardNode","synthetic":true,"types":["draught::comp::BoardNode"]},{"text":"impl Freeze for Computer","synthetic":true,"types":["draught::comp::Computer"]}]; 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 e00f34f..1bbda53 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 MoveType","synthetic":true,"types":["draught::board::enums::MoveType"]},{"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 Painter","synthetic":true,"types":["draught::paint::Painter"]},{"text":"impl Send for Move","synthetic":true,"types":["draught::comp::Move"]},{"text":"impl Send for BoardNode","synthetic":true,"types":["draught::comp::BoardNode"]},{"text":"impl Send for Computer","synthetic":true,"types":["draught::comp::Computer"]}]; +implementors["draught"] = [{"text":"impl Send for MoveType","synthetic":true,"types":["draught::board::enums::MoveType"]},{"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 Painter","synthetic":true,"types":["draught::paint::Painter"]},{"text":"impl Send for Move","synthetic":true,"types":["draught::comp::Move"]},{"text":"impl Send for BoardNode","synthetic":true,"types":["draught::comp::BoardNode"]},{"text":"impl Send for Computer","synthetic":true,"types":["draught::comp::Computer"]}]; 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.StructuralEq.js b/doc/implementors/core/marker/trait.StructuralEq.js index 4be1085..01581ce 100644 --- a/doc/implementors/core/marker/trait.StructuralEq.js +++ b/doc/implementors/core/marker/trait.StructuralEq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl StructuralEq for MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"text":"impl StructuralEq for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl StructuralEq for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl StructuralEq for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl StructuralEq for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl StructuralEq for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: Clone + Copy> StructuralEq for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl StructuralEq for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl StructuralEq for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl StructuralEq for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl StructuralEq for Move","synthetic":false,"types":["draught::comp::Move"]},{"text":"impl StructuralEq for BoardNode","synthetic":false,"types":["draught::comp::BoardNode"]}]; +implementors["draught"] = [{"text":"impl StructuralEq for MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"text":"impl StructuralEq for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl StructuralEq for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl StructuralEq for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl StructuralEq for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl StructuralEq for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: Clone + Copy> StructuralEq for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl StructuralEq for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl StructuralEq for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl StructuralEq for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl StructuralEq for Move","synthetic":false,"types":["draught::comp::Move"]},{"text":"impl StructuralEq for BoardNode","synthetic":false,"types":["draught::comp::BoardNode"]}]; 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.StructuralPartialEq.js b/doc/implementors/core/marker/trait.StructuralPartialEq.js index e2f91e9..38753df 100644 --- a/doc/implementors/core/marker/trait.StructuralPartialEq.js +++ b/doc/implementors/core/marker/trait.StructuralPartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl StructuralPartialEq for MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"text":"impl StructuralPartialEq for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl StructuralPartialEq for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl StructuralPartialEq for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl StructuralPartialEq for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl StructuralPartialEq for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: Clone + Copy> StructuralPartialEq for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl StructuralPartialEq for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl StructuralPartialEq for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl StructuralPartialEq for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl StructuralPartialEq for Move","synthetic":false,"types":["draught::comp::Move"]},{"text":"impl StructuralPartialEq for BoardNode","synthetic":false,"types":["draught::comp::BoardNode"]}]; +implementors["draught"] = [{"text":"impl StructuralPartialEq for MoveType","synthetic":false,"types":["draught::board::enums::MoveType"]},{"text":"impl StructuralPartialEq for Team","synthetic":false,"types":["draught::board::enums::Team"]},{"text":"impl StructuralPartialEq for Strength","synthetic":false,"types":["draught::board::enums::Strength"]},{"text":"impl StructuralPartialEq for SquareState","synthetic":false,"types":["draught::board::enums::SquareState"]},{"text":"impl StructuralPartialEq for Moveable","synthetic":false,"types":["draught::board::enums::Moveable"]},{"text":"impl StructuralPartialEq for Piece","synthetic":false,"types":["draught::board::Piece"]},{"text":"impl<T: Clone + Copy> StructuralPartialEq for Direction<T>","synthetic":false,"types":["draught::board::Direction"]},{"text":"impl StructuralPartialEq for Square","synthetic":false,"types":["draught::board::Square"]},{"text":"impl StructuralPartialEq for BrdIdx","synthetic":false,"types":["draught::board::BrdIdx"]},{"text":"impl StructuralPartialEq for Board","synthetic":false,"types":["draught::board::Board"]},{"text":"impl StructuralPartialEq for Move","synthetic":false,"types":["draught::comp::Move"]},{"text":"impl StructuralPartialEq for BoardNode","synthetic":false,"types":["draught::comp::BoardNode"]}]; 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 e714bf1..60f253c 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 MoveType","synthetic":true,"types":["draught::board::enums::MoveType"]},{"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 Painter","synthetic":true,"types":["draught::paint::Painter"]},{"text":"impl Sync for Move","synthetic":true,"types":["draught::comp::Move"]},{"text":"impl Sync for BoardNode","synthetic":true,"types":["draught::comp::BoardNode"]},{"text":"impl Sync for Computer","synthetic":true,"types":["draught::comp::Computer"]}]; +implementors["draught"] = [{"text":"impl Sync for MoveType","synthetic":true,"types":["draught::board::enums::MoveType"]},{"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 Painter","synthetic":true,"types":["draught::paint::Painter"]},{"text":"impl Sync for Move","synthetic":true,"types":["draught::comp::Move"]},{"text":"impl Sync for BoardNode","synthetic":true,"types":["draught::comp::BoardNode"]},{"text":"impl Sync for Computer","synthetic":true,"types":["draught::comp::Computer"]}]; 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 c282d6e..0f6c8d3 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 MoveType","synthetic":true,"types":["draught::board::enums::MoveType"]},{"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 Painter","synthetic":true,"types":["draught::paint::Painter"]},{"text":"impl Unpin for Move","synthetic":true,"types":["draught::comp::Move"]},{"text":"impl Unpin for BoardNode","synthetic":true,"types":["draught::comp::BoardNode"]},{"text":"impl Unpin for Computer","synthetic":true,"types":["draught::comp::Computer"]}]; +implementors["draught"] = [{"text":"impl Unpin for MoveType","synthetic":true,"types":["draught::board::enums::MoveType"]},{"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 Painter","synthetic":true,"types":["draught::paint::Painter"]},{"text":"impl Unpin for Move","synthetic":true,"types":["draught::comp::Move"]},{"text":"impl Unpin for BoardNode","synthetic":true,"types":["draught::comp::BoardNode"]},{"text":"impl Unpin for Computer","synthetic":true,"types":["draught::comp::Computer"]}]; 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/panic/unwind_safe/trait.RefUnwindSafe.js b/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js index 924ef91..a1fb2bd 100644 --- a/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl RefUnwindSafe for MoveType","synthetic":true,"types":["draught::board::enums::MoveType"]},{"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 Painter","synthetic":true,"types":["draught::paint::Painter"]},{"text":"impl RefUnwindSafe for Move","synthetic":true,"types":["draught::comp::Move"]},{"text":"impl RefUnwindSafe for BoardNode","synthetic":true,"types":["draught::comp::BoardNode"]},{"text":"impl RefUnwindSafe for Computer","synthetic":true,"types":["draught::comp::Computer"]}]; +implementors["draught"] = [{"text":"impl RefUnwindSafe for MoveType","synthetic":true,"types":["draught::board::enums::MoveType"]},{"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 Painter","synthetic":true,"types":["draught::paint::Painter"]},{"text":"impl RefUnwindSafe for Move","synthetic":true,"types":["draught::comp::Move"]},{"text":"impl RefUnwindSafe for BoardNode","synthetic":true,"types":["draught::comp::BoardNode"]},{"text":"impl RefUnwindSafe for Computer","synthetic":true,"types":["draught::comp::Computer"]}]; 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/panic/unwind_safe/trait.UnwindSafe.js b/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js index ba479be..438b38b 100644 --- a/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["draught"] = [{"text":"impl UnwindSafe for MoveType","synthetic":true,"types":["draught::board::enums::MoveType"]},{"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 Painter","synthetic":true,"types":["draught::paint::Painter"]},{"text":"impl UnwindSafe for Move","synthetic":true,"types":["draught::comp::Move"]},{"text":"impl UnwindSafe for BoardNode","synthetic":true,"types":["draught::comp::BoardNode"]},{"text":"impl UnwindSafe for Computer","synthetic":true,"types":["draught::comp::Computer"]}]; +implementors["draught"] = [{"text":"impl UnwindSafe for MoveType","synthetic":true,"types":["draught::board::enums::MoveType"]},{"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 Painter","synthetic":true,"types":["draught::paint::Painter"]},{"text":"impl UnwindSafe for Move","synthetic":true,"types":["draught::comp::Move"]},{"text":"impl UnwindSafe for BoardNode","synthetic":true,"types":["draught::comp::BoardNode"]},{"text":"impl UnwindSafe for Computer","synthetic":true,"types":["draught::comp::Computer"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/light.css b/doc/light.css index f9ee910..289f10c 100644 --- a/doc/light.css +++ b/doc/light.css @@ -1 +1 @@ - body{background-color:white;color:black;}h1,h2,h3,h4{color:black;}h1.fqn{border-bottom-color:#DDDDDD;}h2,h3,h4{border-bottom-color:#DDDDDD;}.in-band{background-color:white;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#F5F5F5;}pre,.rustdoc.source .example-wrap{background-color:#F5F5F5;}.sidebar{background-color:#F5F5F5;}*{scrollbar-color:rgba(36,37,39,0.6) #e6e6e6;}.sidebar{scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;}.rust-logo{}::-webkit-scrollbar-track{background-color:#ecebeb;}::-webkit-scrollbar-thumb{background-color:rgba(36,37,39,0.6);}.sidebar::-webkit-scrollbar-track{background-color:#dcdcdc;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(36,37,39,0.6);}.sidebar .current{background-color:#fff;}.source .sidebar{background-color:#f1f1f1;}.sidebar .location{border-color:#000;background-color:#fff;color:#333;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#F5F5F5;}.line-numbers span{color:#c67e2d;}.line-numbers .line-highlighted{background-color:#FDFFD3 !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#ddd;}.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#4E4C4C;}.search-results a:hover{background-color:#ddd;}.search-results a:focus{color:#000 !important;background-color:#ccc;}.search-results a:focus span{color:#000 !important;}a.result-trait:focus{background-color:#c7b6ff;}a.result-traitalias:focus{background-color:#c7b6ff;}a.result-mod:focus,a.result-externcrate:focus{background-color:#afc6e4;}a.result-enum:focus{background-color:#e7b1a0;}a.result-struct:focus{background-color:#e7b1a0;}a.result-union:focus{background-color:#e7b1a0;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#c6afb3;}a.result-type:focus{background-color:#e7b1a0;}a.result-associatedtype:focus{background-color:#afc6e4;}a.result-foreigntype:focus{background-color:#e7b1a0;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#8ce488;}a.result-constant:focus,a.result-static:focus{background-color:#afc6e4;}a.result-primitive:focus{background-color:#e7b1a0;}a.result-keyword:focus{background-color:#afc6e4;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#AD378A;}.content span.struct,.content a.struct,.block a.current.struct{color:#AD378A;}.content span.type,.content a.type,.block a.current.type{color:#AD378A;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#3873AD;}.content span.associatedtype,.content a.associatedtype,.block a.current.associatedtype{color:#3873AD;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#068000;}.content span.union,.content a.union,.block a.current.union{color:#AD378A;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#3873AD;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#AD378A;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#3873AD;}.content span.trait,.content a.trait,.block a.current.trait{color:#6E4FC9;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#5137AD;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#AD7C37;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#3873AD;}nav:not(.sidebar){border-bottom-color:#e0e0e0;}nav.main .current{border-top-color:#000;border-bottom-color:#000;}nav.main .separator{border:1px solid #000;}a{color:#3873AD;}a.srclink,a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar a,.in-band a{color:#000;}.search-results a{color:initial;}a.test-arrow{color:#f5f5f5;}body.source .example-wrap pre.rust a{background:#eee;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}#crate-search{color:#555;background-color:white;border-color:#e0e0e0;box-shadow:0 0 0 1px #e0e0e0,0 0 0 2px transparent;}.search-input{color:#555;background-color:white;box-shadow:0 0 0 1px #e0e0e0,0 0 0 2px transparent;}.search-input:focus{border-color:#66afe9;}#crate-search+.search-input:focus{box-shadow:0 0 8px #078dd8;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;}.stab.portability>code{background:none;}#help>div{background:#e9e9e9;border-color:#bfbfbf;}#help span.bottom,#help span.top{border-color:#bfbfbf;}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:black;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#8959A8;}pre.rust .kw-2,pre.rust .prelude-ty{color:#4271AE;}pre.rust .number,pre.rust .string{color:#718C00;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#C82829;}pre.rust .comment{color:#8E908C;}pre.rust .doccomment{color:#4D4D4C;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#B76514;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#c7c7c7;}a.test-arrow{background-color:rgb(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target{background:#FDFFD3;border-right:3px solid #AD7C37;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.5);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.5);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#3873AD;}.tooltip::after{background-color:#000;color:#fff;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#eee;border-color:#999;}.notable-traits-tooltiptext .notable{border-bottom-color:#DDDDDD;}#titles>button:not(.selected){background-color:#e6e6e6;border-top-color:#e6e6e6;}#titles>button:hover,#titles>button.selected{background-color:#ffffff;border-top-color:#0089ff;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#F5F5F5;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#F5F5F5;border-right-color:#000;}#sidebar-filler{background-color:#F5F5F5;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background-color:#fff;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#717171;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(35%);}#theme-choices{border-color:#ccc;background-color:#fff;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#eee;}@media (max-width:700px){#theme-picker{background:#fff;}}#all-types{background-color:#fff;}#all-types:hover{background-color:#f9f9f9;}.search-results .result-name span.alias{color:#000;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#F5F5F5;}#sidebar-toggle:hover{background-color:#E0E0E0;}#source-sidebar{background-color:#F5F5F5;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#E0E0E0;}div.files>.selected{background-color:#fff;}.setting-line>.title{border-bottom-color:#D5D5D5;} \ No newline at end of file + body{background-color:white;color:black;}h1,h2,h3,h4{color:black;}h1.fqn{border-bottom-color:#DDDDDD;}h2,h3,h4{border-bottom-color:#DDDDDD;}.in-band{background-color:white;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#F5F5F5;}pre,.rustdoc.source .example-wrap{background-color:#F5F5F5;}.sidebar,.mobile-topbar,.sidebar-menu-toggle{background-color:#F5F5F5;}*{scrollbar-color:rgba(36,37,39,0.6) #e6e6e6;}.sidebar{scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;}.rust-logo{}::-webkit-scrollbar-track{background-color:#ecebeb;}::-webkit-scrollbar-thumb{background-color:rgba(36,37,39,0.6);}.sidebar::-webkit-scrollbar-track{background-color:#dcdcdc;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(36,37,39,0.6);}.sidebar .current,.sidebar a:hover{background-color:#fff;}.source .sidebar{background-color:#f1f1f1;}.line-numbers span{color:#c67e2d;}.line-numbers .line-highlighted{background-color:#FDFFD3 !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#ddd;}.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#4E4C4C;}.search-results a:hover{background-color:#ddd;}.search-results a:focus{color:#000 !important;background-color:#ccc;}.search-results a:focus span{color:#000 !important;}a.result-trait:focus{background-color:#c7b6ff;}a.result-traitalias:focus{background-color:#c7b6ff;}a.result-mod:focus,a.result-externcrate:focus{background-color:#afc6e4;}a.result-enum:focus{background-color:#e7b1a0;}a.result-struct:focus{background-color:#e7b1a0;}a.result-union:focus{background-color:#e7b1a0;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#c6afb3;}a.result-type:focus{background-color:#e7b1a0;}a.result-associatedtype:focus{background-color:#afc6e4;}a.result-foreigntype:focus{background-color:#e7b1a0;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#8ce488;}a.result-constant:focus,a.result-static:focus{background-color:#afc6e4;}a.result-primitive:focus{background-color:#e7b1a0;}a.result-keyword:focus{background-color:#afc6e4;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#AD378A;}.content span.struct,.content a.struct,.block a.current.struct{color:#AD378A;}.content span.type,.content a.type,.block a.current.type{color:#AD378A;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#3873AD;}.content span.associatedtype,.content a.associatedtype,.block a.current.associatedtype{color:#3873AD;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#068000;}.content span.union,.content a.union,.block a.current.union{color:#AD378A;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#3873AD;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#AD378A;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#3873AD;}.content span.trait,.content a.trait,.block a.current.trait{color:#6E4FC9;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#5137AD;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#AD7C37;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#3873AD;}.sidebar a{color:#356da4;}.sidebar a.current.enum{color:#a63283;}.sidebar a.current.struct{color:#a63283;}.sidebar a.current.type{color:#a63283;}.sidebar a.current.associatedtype{color:#356da4;}.sidebar a.current.foreigntype{color:#356da4;}.sidebar a.current.attr,.sidebar a.current.derive,.sidebar a.current.macro{color:#067901;}.sidebar a.current.union{color:#a63283;}.sidebar a.current.constant .sidebar a.current.static{color:#356da4;}.sidebar a.current.primitive{color:#a63283;}.sidebar a.current.externcrate .sidebar a.current.mod{color:#356da4;}.sidebar a.current.trait{color:#6849c3;}.sidebar a.current.traitalias{color:#4b349e;}.sidebar a.current.fn,.sidebar a.current.method,.sidebar a.current.tymethod{color:#a67736;}.sidebar a.current.keyword{color:#356da4;}nav.main .current{border-top-color:#000;border-bottom-color:#000;}nav.main .separator{border:1px solid #000;}a{color:#3873AD;}a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,.in-band a{color:#000;}.search-results a{color:initial;}a.test-arrow{color:#f5f5f5;}body.source .example-wrap pre.rust a{background:#eee;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}#crate-search,.search-input{color:#555;background-color:white;border-color:#e0e0e0;}.search-input:focus{border-color:#66afe9;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;}.stab.portability>code{background:none;}#help>div{background:#e9e9e9;border-color:#bfbfbf;}#help span.bottom,#help span.top{border-color:#bfbfbf;}.rightside,.out-of-band{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:black;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#8959A8;}pre.rust .kw-2,pre.rust .prelude-ty{color:#4271AE;}pre.rust .number,pre.rust .string{color:#718C00;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#C82829;}pre.rust .comment{color:#8E908C;}pre.rust .doccomment{color:#4D4D4C;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#B76514;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#c7c7c7;}a.test-arrow{background-color:rgb(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target{background:#FDFFD3;border-right:3px solid #AD7C37;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.5);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.5);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#3873AD;}.tooltip::after{background-color:#000;color:#fff;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#eee;border-color:#999;}.notable-traits-tooltiptext .notable{border-bottom-color:#DDDDDD;}#titles>button:not(.selected){background-color:#e6e6e6;border-top-color:#e6e6e6;}#titles>button:hover,#titles>button.selected{background-color:#ffffff;border-top-color:#0089ff;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#F5F5F5;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#F5F5F5;border-right-color:#000;}#sidebar-filler{background-color:#F5F5F5;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow:inset 0 -1px 0 #c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background-color:#fff;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#717171;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(35%);}#theme-choices{border-color:#ccc;background-color:#fff;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#eee;}@media (max-width:700px){#theme-picker{background:#fff;}}.search-results .result-name span.alias{color:#000;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#F5F5F5;}#sidebar-toggle:hover{background-color:#E0E0E0;}#source-sidebar{background-color:#F5F5F5;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#E0E0E0;}div.files>.selected{background-color:#fff;}.setting-line>.title{border-bottom-color:#D5D5D5;} \ No newline at end of file diff --git a/doc/main.js b/doc/main.js index 02d5935..44f37e5 100644 --- a/doc/main.js +++ b/doc/main.js @@ -1,4 +1,4 @@ -if(!String.prototype.startsWith){String.prototype.startsWith=function(searchString,position){position=position||0;return this.indexOf(searchString,position)===position}}if(!String.prototype.endsWith){String.prototype.endsWith=function(suffix,length){var l=length||this.length;return this.indexOf(suffix,l-suffix.length)!==-1}}if(!DOMTokenList.prototype.add){DOMTokenList.prototype.add=function(className){if(className&&!hasClass(this,className)){if(this.className&&this.className.length>0){this.className+=" "+className}else{this.className=className}}}}if(!DOMTokenList.prototype.remove){DOMTokenList.prototype.remove=function(className){if(className&&this.className){this.className=(" "+this.className+" ").replace(" "+className+" "," ").trim()}}}function getVar(name){var el=document.getElementById("rustdoc-vars");if(el){return el.attributes["data-"+name].value}else{return null}}function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}(function(){window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");window.searchJS=resourcePath("search",".js");window.searchIndexJS=resourcePath("search-index",".js");var sidebarVars=document.getElementById("sidebar-vars");if(sidebarVars){window.sidebarCurrent={name:sidebarVars.attributes["data-name"].value,ty:sidebarVars.attributes["data-ty"].value,relpath:sidebarVars.attributes["data-relpath"].value,}}}());function getVirtualKey(ev){if("key"in ev&&typeof ev.key!="undefined"){return ev.key}var c=ev.charCode||ev.keyCode;if(c==27){return"Escape"}return String.fromCharCode(c)}var THEME_PICKER_ELEMENT_ID="theme-picker";var THEMES_ELEMENT_ID="theme-choices";var MAIN_ID="main-content";function getThemesElement(){return document.getElementById(THEMES_ELEMENT_ID)}function getThemePickerElement(){return document.getElementById(THEME_PICKER_ELEMENT_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function showThemeButtonState(){var themePicker=getThemePickerElement();var themeChoices=getThemesElement();themeChoices.style.display="block";themePicker.style.borderBottomRightRadius="0";themePicker.style.borderBottomLeftRadius="0"}function hideThemeButtonState(){var themePicker=getThemePickerElement();var themeChoices=getThemesElement();themeChoices.style.display="none";themePicker.style.borderBottomRightRadius="3px";themePicker.style.borderBottomLeftRadius="3px"}(function(){var themeChoices=getThemesElement();var themePicker=getThemePickerElement();var availableThemes=getVar("themes").split(",");function switchThemeButtonState(){if(themeChoices.style.display==="block"){hideThemeButtonState()}else{showThemeButtonState()}}function handleThemeButtonsBlur(e){var active=document.activeElement;var related=e.relatedTarget;if(active.id!==THEME_PICKER_ELEMENT_ID&&(!active.parentNode||active.parentNode.id!==THEMES_ELEMENT_ID)&&(!related||(related.id!==THEME_PICKER_ELEMENT_ID&&(!related.parentNode||related.parentNode.id!==THEMES_ELEMENT_ID)))){hideThemeButtonState()}}themePicker.onclick=switchThemeButtonState;themePicker.onblur=handleThemeButtonsBlur;availableThemes.forEach(function(item){var but=document.createElement("button");but.textContent=item;but.onclick=function(){switchTheme(window.currentTheme,window.mainTheme,item,true);useSystemTheme(false)};but.onblur=handleThemeButtonsBlur;themeChoices.appendChild(but)})}());(function(){"use strict";window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:function(){return document.getElementById("search")},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:function(){if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},focus:function(){searchState.input.focus()},defocus:function(){searchState.input.blur()},showResults:function(search){if(search===null||typeof search==='undefined'){search=searchState.outputElement()}addClass(main,"hidden");removeClass(search,"hidden");searchState.mouseMovedAfterSearch=false;document.title=searchState.title},hideResults:function(search){if(search===null||typeof search==='undefined'){search=searchState.outputElement()}addClass(search,"hidden");removeClass(main,"hidden");document.title=searchState.titleBeforeSearch;if(searchState.browserSupportsHistoryApi()){history.replaceState("",window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}},getQueryStringParams:function(){var params={};window.location.search.substring(1).split("&").map(function(s){var pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},putBackSearch:function(search_input){var search=searchState.outputElement();if(search_input.value!==""&&hasClass(search,"hidden")){searchState.showResults(search);if(searchState.browserSupportsHistoryApi()){var extra="?search="+encodeURIComponent(search_input.value);history.replaceState(search_input.value,"",getNakedUrl()+extra+window.location.hash)}document.title=searchState.title}},browserSupportsHistoryApi:function(){return window.history&&typeof window.history.pushState==="function"},setup:function(){var search_input=searchState.input;if(!searchState.input){return}function loadScript(url){var script=document.createElement('script');script.src=url;document.head.append(script)}var searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(window.searchJS);loadScript(window.searchIndexJS)}}search_input.addEventListener("focus",function(){searchState.putBackSearch(this);search_input.origPlaceholder=searchState.input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});search_input.addEventListener("blur",function(){search_input.placeholder=searchState.input.origPlaceholder});if(search_input.value!=''){loadSearch()}searchState.addCrateDropdown(window.ALL_CRATES);var params=searchState.getQueryStringParams();if(params.search!==undefined){var search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search);loadSearch()}},addCrateDropdown:function(crates){var elem=document.getElementById("crate-search");if(!elem){return}var savedCrate=getSettingValue("saved-filter-crate");for(var i=0,len=crates.length;i0){return tmp}}return null}function showSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){addClass(elems,"show-it")}var sidebar=document.getElementsByClassName("sidebar")[0];if(sidebar){addClass(sidebar,"mobile");var filler=document.getElementById("sidebar-filler");if(!filler){var div=document.createElement("div");div.id="sidebar-filler";sidebar.appendChild(div)}}}function hideSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){removeClass(elems,"show-it")}var sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"mobile");var filler=document.getElementById("sidebar-filler");if(filler){filler.remove()}document.getElementsByTagName("body")[0].style.marginTop=""}var toggleAllDocsId="toggle-all-docs";var main=document.getElementById(MAIN_ID);var savedHash="";function handleHashes(ev){var elem;var search=searchState.outputElement();if(ev!==null&&search&&!hasClass(search,"hidden")&&ev.newURL){searchState.hideResults(search);var hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(searchState.browserSupportsHistoryApi()){history.replaceState(hash,"",getNakedUrl()+window.location.search+"#"+hash)}elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}if(savedHash!==window.location.hash){savedHash=window.location.hash;if(savedHash.length===0){return}expandSection(savedHash.slice(1))}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function getHelpElement(build){if(build){buildHelperPopup()}return document.getElementById("help")}function displayHelp(display,ev,help){if(display){help=help?help:getHelpElement(true);if(hasClass(help,"hidden")){ev.preventDefault();removeClass(help,"hidden");addClass(document.body,"blur")}}else{help=help?help:getHelpElement(false);if(help&&!hasClass(help,"hidden")){ev.preventDefault();addClass(help,"hidden");removeClass(document.body,"blur")}}}function handleEscape(ev){var help=getHelpElement(false);var search=searchState.outputElement();if(help&&!hasClass(help,"hidden")){displayHelp(false,ev,help)}else if(search&&!hasClass(search,"hidden")){searchState.clearInputTimeout();ev.preventDefault();searchState.hideResults(search)}searchState.defocus();hideThemeButtonState()}var disableShortcuts=getSettingValue("disable-shortcuts")==="true";function handleShortcut(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":displayHelp(false,ev);ev.preventDefault();searchState.focus();break;case"+":case"-":ev.preventDefault();toggleAllDocs();break;case"?":displayHelp(true,ev);break;case"t":case"T":displayHelp(false,ev);ev.preventDefault();var themePicker=getThemePickerElement();themePicker.click();themePicker.focus();break;default:if(getThemePickerElement().parentNode.contains(ev.target)){handleThemeKeyDown(ev)}}}}function handleThemeKeyDown(ev){var active=document.activeElement;var themes=getThemesElement();switch(getVirtualKey(ev)){case"ArrowUp":ev.preventDefault();if(active.previousElementSibling&&ev.target.id!==THEME_PICKER_ELEMENT_ID){active.previousElementSibling.focus()}else{showThemeButtonState();themes.lastElementChild.focus()}break;case"ArrowDown":ev.preventDefault();if(active.nextElementSibling&&ev.target.id!==THEME_PICKER_ELEMENT_ID){active.nextElementSibling.focus()}else{showThemeButtonState();themes.firstElementChild.focus()}break;case"Enter":case"Return":case"Space":if(ev.target.id===THEME_PICKER_ELEMENT_ID&&themes.style.display==="none"){ev.preventDefault();showThemeButtonState();themes.firstElementChild.focus()}break;case"Home":ev.preventDefault();themes.firstElementChild.focus();break;case"End":ev.preventDefault();themes.lastElementChild.focus();break}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);(function(){var x=document.getElementsByClassName("version-selector");if(x.length>0){x[0].onchange=function(){var i,match,url=document.location.href,stripped="",len=window.rootPath.match(/\.\.\//g).length+1;for(i=0;i .in-band > .trait").textContent;var baseIdName="impl-"+traitName+"-";var libs=Object.getOwnPropertyNames(imp);for(var i=0,llength=libs.length;i summary:not(.hideme)"),function(el){el.addEventListener("click",function(e){if(e.target.tagName!="SUMMARY"&&e.target.tagName!="A"){e.preventDefault()}})});onEachLazy(document.getElementsByClassName("notable-traits"),function(e){e.onclick=function(){this.getElementsByClassName('notable-traits-tooltiptext')[0].classList.toggle("force-tooltip")}});var sidebar_menu=document.getElementsByClassName("sidebar-menu")[0];if(sidebar_menu){sidebar_menu.onclick=function(){var sidebar=document.getElementsByClassName("sidebar")[0];if(hasClass(sidebar,"mobile")){hideSidebar()}else{showSidebar()}}}var buildHelperPopup=function(){var popup=document.createElement("aside");addClass(popup,"hidden");popup.id="help";popup.addEventListener("click",function(ev){if(ev.target===popup){displayHelp(false,ev)}});var book_info=document.createElement("span");book_info.className="top";book_info.innerHTML="You can find more information in \ +if(!String.prototype.startsWith){String.prototype.startsWith=function(searchString,position){position=position||0;return this.indexOf(searchString,position)===position}}if(!String.prototype.endsWith){String.prototype.endsWith=function(suffix,length){var l=length||this.length;return this.indexOf(suffix,l-suffix.length)!==-1}}if(!DOMTokenList.prototype.add){DOMTokenList.prototype.add=function(className){if(className&&!hasClass(this,className)){if(this.className&&this.className.length>0){this.className+=" "+className}else{this.className=className}}}}if(!DOMTokenList.prototype.remove){DOMTokenList.prototype.remove=function(className){if(className&&this.className){this.className=(" "+this.className+" ").replace(" "+className+" "," ").trim()}}}function getVar(name){var el=document.getElementById("rustdoc-vars");if(el){return el.attributes["data-"+name].value}else{return null}}function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}(function(){window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");window.searchJS=resourcePath("search",".js");window.searchIndexJS=resourcePath("search-index",".js");var sidebarVars=document.getElementById("sidebar-vars");if(sidebarVars){window.sidebarCurrent={name:sidebarVars.attributes["data-name"].value,ty:sidebarVars.attributes["data-ty"].value,relpath:sidebarVars.attributes["data-relpath"].value,};var mobileLocationTitle=document.querySelector(".mobile-topbar h2.location");var locationTitle=document.querySelector(".sidebar h2.location");if(mobileLocationTitle&&locationTitle){mobileLocationTitle.innerHTML=locationTitle.innerHTML}}}());function getVirtualKey(ev){if("key"in ev&&typeof ev.key!="undefined"){return ev.key}var c=ev.charCode||ev.keyCode;if(c==27){return"Escape"}return String.fromCharCode(c)}var THEME_PICKER_ELEMENT_ID="theme-picker";var THEMES_ELEMENT_ID="theme-choices";var MAIN_ID="main-content";function getThemesElement(){return document.getElementById(THEMES_ELEMENT_ID)}function getThemePickerElement(){return document.getElementById(THEME_PICKER_ELEMENT_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function showThemeButtonState(){var themePicker=getThemePickerElement();var themeChoices=getThemesElement();themeChoices.style.display="block";themePicker.style.borderBottomRightRadius="0";themePicker.style.borderBottomLeftRadius="0"}function hideThemeButtonState(){var themePicker=getThemePickerElement();var themeChoices=getThemesElement();themeChoices.style.display="none";themePicker.style.borderBottomRightRadius="3px";themePicker.style.borderBottomLeftRadius="3px"}(function(){if(!document.location.href.startsWith("file:///")){return}var themeChoices=getThemesElement();var themePicker=getThemePickerElement();var availableThemes=getVar("themes").split(",");removeClass(themeChoices.parentElement,"hidden");function switchThemeButtonState(){if(themeChoices.style.display==="block"){hideThemeButtonState()}else{showThemeButtonState()}}function handleThemeButtonsBlur(e){var active=document.activeElement;var related=e.relatedTarget;if(active.id!==THEME_PICKER_ELEMENT_ID&&(!active.parentNode||active.parentNode.id!==THEMES_ELEMENT_ID)&&(!related||(related.id!==THEME_PICKER_ELEMENT_ID&&(!related.parentNode||related.parentNode.id!==THEMES_ELEMENT_ID)))){hideThemeButtonState()}}themePicker.onclick=switchThemeButtonState;themePicker.onblur=handleThemeButtonsBlur;availableThemes.forEach(function(item){var but=document.createElement("button");but.textContent=item;but.onclick=function(){switchTheme(window.currentTheme,window.mainTheme,item,true);useSystemTheme(false)};but.onblur=handleThemeButtonsBlur;themeChoices.appendChild(but)})}());(function(){"use strict";window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:function(){return document.getElementById("search")},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:function(){if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},focus:function(){searchState.input.focus()},defocus:function(){searchState.input.blur()},showResults:function(search){if(search===null||typeof search==='undefined'){search=searchState.outputElement()}addClass(main,"hidden");removeClass(search,"hidden");searchState.mouseMovedAfterSearch=false;document.title=searchState.title},hideResults:function(search){if(search===null||typeof search==='undefined'){search=searchState.outputElement()}addClass(search,"hidden");removeClass(main,"hidden");document.title=searchState.titleBeforeSearch;if(searchState.browserSupportsHistoryApi()){history.replaceState(null,window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}},getQueryStringParams:function(){var params={};window.location.search.substring(1).split("&").map(function(s){var pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},browserSupportsHistoryApi:function(){return window.history&&typeof window.history.pushState==="function"},setup:function(){var search_input=searchState.input;if(!searchState.input){return}function loadScript(url){var script=document.createElement('script');script.src=url;document.head.append(script)}var searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(window.searchJS);loadScript(window.searchIndexJS)}}search_input.addEventListener("focus",function(){search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!=''){loadSearch()}var params=searchState.getQueryStringParams();if(params.search!==undefined){var search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search);loadSearch()}},};function getPageId(){if(window.location.hash){var tmp=window.location.hash.replace(/^#/,"");if(tmp.length>0){return tmp}}return null}var toggleAllDocsId="toggle-all-docs";var main=document.getElementById(MAIN_ID);var savedHash="";function handleHashes(ev){var elem;var search=searchState.outputElement();if(ev!==null&&search&&!hasClass(search,"hidden")&&ev.newURL){searchState.hideResults(search);var hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(searchState.browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}if(savedHash!==window.location.hash){savedHash=window.location.hash;if(savedHash.length===0){return}expandSection(savedHash.slice(1))}}function onHashChange(ev){var sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown");handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function getHelpElement(build){if(build){buildHelperPopup()}return document.getElementById("help")}function displayHelp(display,ev,help){if(display){help=help?help:getHelpElement(true);if(hasClass(help,"hidden")){ev.preventDefault();removeClass(help,"hidden");addClass(document.body,"blur")}}else{help=help?help:getHelpElement(false);if(help&&!hasClass(help,"hidden")){ev.preventDefault();addClass(help,"hidden");removeClass(document.body,"blur")}}}function handleEscape(ev){var help=getHelpElement(false);var search=searchState.outputElement();if(help&&!hasClass(help,"hidden")){displayHelp(false,ev,help)}else if(search&&!hasClass(search,"hidden")){searchState.clearInputTimeout();ev.preventDefault();searchState.hideResults(search)}searchState.defocus();hideThemeButtonState()}var disableShortcuts=getSettingValue("disable-shortcuts")==="true";function handleShortcut(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":displayHelp(false,ev);ev.preventDefault();searchState.focus();break;case"+":case"-":ev.preventDefault();toggleAllDocs();break;case"?":displayHelp(true,ev);break;case"t":case"T":displayHelp(false,ev);ev.preventDefault();var themePicker=getThemePickerElement();themePicker.click();themePicker.focus();break;default:if(getThemePickerElement().parentNode.contains(ev.target)){handleThemeKeyDown(ev)}}}}function handleThemeKeyDown(ev){var active=document.activeElement;var themes=getThemesElement();switch(getVirtualKey(ev)){case"ArrowUp":ev.preventDefault();if(active.previousElementSibling&&ev.target.id!==THEME_PICKER_ELEMENT_ID){active.previousElementSibling.focus()}else{showThemeButtonState();themes.lastElementChild.focus()}break;case"ArrowDown":ev.preventDefault();if(active.nextElementSibling&&ev.target.id!==THEME_PICKER_ELEMENT_ID){active.nextElementSibling.focus()}else{showThemeButtonState();themes.firstElementChild.focus()}break;case"Enter":case"Return":case"Space":if(ev.target.id===THEME_PICKER_ELEMENT_ID&&themes.style.display==="none"){ev.preventDefault();showThemeButtonState();themes.firstElementChild.focus()}break;case"Home":ev.preventDefault();themes.firstElementChild.focus();break;case"End":ev.preventDefault();themes.lastElementChild.focus();break}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);(function(){var x=document.getElementsByClassName("version-selector");if(x.length>0){x[0].onchange=function(){var i,match,url=document.location.href,stripped="",len=window.rootPath.match(/\.\.\//g).length+1;for(i=0;i${longty}`;div.appendChild(h3);var ul=document.createElement("ul");for(var i=0,len=filtered.length;i .in-band > .trait").textContent;var baseIdName="impl-"+traitName+"-";var libs=Object.getOwnPropertyNames(imp);for(var i=0,llength=libs.length;i summary:not(.hideme)"),function(el){el.addEventListener("click",function(e){if(e.target.tagName!="SUMMARY"&&e.target.tagName!="A"){e.preventDefault()}})});onEachLazy(document.getElementsByClassName("notable-traits"),function(e){e.onclick=function(){this.getElementsByClassName('notable-traits-tooltiptext')[0].classList.toggle("force-tooltip")}});var sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",function(){var sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){addClass(sidebar,"shown")}else{removeClass(sidebar,"shown")}})}var buildHelperPopup=function(){var popup=document.createElement("aside");addClass(popup,"hidden");popup.id="help";popup.addEventListener("click",function(ev){if(ev.target===popup){displayHelp(false,ev)}});var book_info=document.createElement("span");book_info.className="top";book_info.innerHTML="You can find more information in \ the rustdoc book.";var container=document.createElement("div");var shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["T","Focus the theme picker menu"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(function(x){return"
"+x[0].split(" ").map(function(y,index){return(index&1)===0?""+y+"":" "+y+" "}).join("")+"
"+x[1]+"
"}).join("");var div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";var infos=["Prefix searches with a type followed by a colon (e.g., fn:) to \ restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ enum, trait, type, macro, \ diff --git a/doc/rust-logo.png b/doc/rust-logo.png deleted file mode 100644 index 74b4bd695045ebc52c21af95301adc9311ca881c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5758 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 diff --git a/doc/rust-logo.svg b/doc/rust-logo.svg new file mode 100644 index 0000000..62424d8 --- /dev/null +++ b/doc/rust-logo.svg @@ -0,0 +1,61 @@ + + + diff --git a/doc/rustdoc.css b/doc/rustdoc.css index 4d3b1e9..07de4cb 100644 --- a/doc/rustdoc.css +++ b/doc/rustdoc.css @@ -1 +1 @@ - @font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff2") format("woff2"),url("FiraSans-Regular.woff") format('woff');font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff2") format("woff2"),url("FiraSans-Medium.woff") format('woff');font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular.ttf.woff2") format("woff2"),url("SourceSerif4-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It.ttf.woff2") format("woff2"),url("SourceSerif4-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold.ttf.woff2") format("woff2"),url("SourceSerif4-Bold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2"),url("SourceCodePro-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2"),url("SourceCodePro-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2"),url("SourceCodePro-Semibold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic.ttf.woff2") format("woff2"),url("NanumBarunGothic.ttf.woff") format("woff");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html{content:"";}@media (prefers-color-scheme:light){html{content:"light";}}@media (prefers-color-scheme:dark){html{content:"dark";}}body{font:1rem/1.4 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5rem;}h2{font-size:1.4rem;}h3{font-size:1.3rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:20px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}h1.fqn{display:flex;border-bottom:1px dashed;margin-top:0;padding-left:1px;}h1.fqn>.in-band>a:hover{text-decoration:underline;}h2,.top-doc h3,.top-doc h4,.sidebar .others h3{border-bottom:1px solid;}h3.code-header{font-size:1.1rem;}h4.code-header{font-size:1rem;}h3.code-header,h4.code-header{font-weight:600;border-bottom-style:none;padding:0;margin:0;}.impl,.impl-items .method,.methods .method,.impl-items .type,.methods .type,.impl-items .associatedconstant,.methods .associatedconstant,.impl-items .associatedtype,.methods .associatedtype{flex-basis:100%;font-weight:600;margin-top:16px;margin-bottom:10px;position:relative;}div.impl-items>div{padding-left:0;}h1,h2,h3,h4,h5,h6,.sidebar,a.source,.search-input,.search-results .result-name,.content table td:first-child>a,.item-left>a,div.item-list .out-of-band,span.since,#source-sidebar,#sidebar-toggle,details.rustdoc-toggle>summary::before,div.impl-items>div:not(.docblock):not(.item-info),.content ul.crate a.crate,a.srclink,#main-content>ul.docblock>li>a{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}.content ul.crate a.crate{font-size:1rem/1.6;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.6em;}p{margin:0 0 .6em 0;}summary{outline:none;}td,th{padding:0;}table{border-collapse:collapse;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.source main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}.source .width-limiter{max-width:unset;}details:not(.rustdoc-toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.1em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;}.docblock.item-decl{margin-left:0;}.item-decl pre{overflow-x:auto;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{max-width:none;overflow:visible;margin-left:0px;}nav.sub{position:relative;font-size:1rem;text-transform:uppercase;}.sub-container{display:flex;flex-direction:row;flex-wrap:nowrap;}.sub-logo-container{display:none;margin-right:20px;}.source .sub-logo-container{display:block;}.source .sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.sidebar{width:200px;overflow-y:scroll;position:sticky;min-width:200px;height:100vh;top:0;left:0;}.rustdoc.source .sidebar{width:50px;min-width:0px;max-width:300px;flex-grow:0;flex-shrink:0;flex-basis:auto;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.source .sidebar>*:not(:first-child){transition:opacity 0.5s,visibility 0.2s;opacity:0;visibility:hidden;}.source .sidebar.expanded{overflow-y:auto;}.source .sidebar.expanded>*{opacity:1;visibility:visible;}*{scrollbar-width:initial;}.sidebar{scrollbar-width:thin;}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;}.sidebar .block>ul>li{margin-right:-10px;}.hidden{display:none !important;}.logo-container{display:flex;margin-top:10px;margin-bottom:10px;justify-content:center;}.logo-container>img{height:100px;width:100px;}.sidebar .location{border:1px solid;font-size:1.0625rem;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;font-weight:inherit;padding:0;}.sidebar .version{font-size:0.9375rem;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-of-type{font-weight:500;}.location a:hover{text-decoration:underline;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{text-align:center;}.block ul,.block li{margin:0 10px;padding:0;list-style:none;}.block a{display:block;text-overflow:ellipsis;overflow:hidden;line-height:15px;padding:7px 5px;font-size:0.875rem;font-weight:300;transition:border 500ms ease-out;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:1.0625rem;margin-bottom:5px;font-weight:inherit;padding:0;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{position:relative;width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;padding:13px 8px;text-align:right;border-top-left-radius:5px;border-bottom-left-radius:5px;}.example-wrap>pre.rust a:hover{text-decoration:underline;}.rustdoc:not(.source) .example-wrap>pre:not(.line-number){width:100%;overflow-x:auto;}.rustdoc:not(.source) .example-wrap>pre.line-numbers{width:auto;overflow-x:visible;}.rustdoc .example-wrap>pre{margin:0;}#search{position:relative;}.search-loading{text-align:center;}#results>table{width:100%;table-layout:fixed;}.content>.example-wrap pre.line-numbers{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short{overflow-wrap:anywhere;}.docblock-short p{display:inline;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock>:not(pre)>code,.docblock-short>:not(pre)>code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.3rem;}.top-doc .docblock h3{font-size:1.15rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.1rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.95rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.information){max-width:100%;overflow-x:auto;}.content .out-of-band{flex-grow:0;text-align:right;font-size:1.4375rem;margin:0px;padding:0 0 0 12px;font-weight:normal;}.method>.code-header,.trait-impl>.code-header,.invisible>.code-header{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{flex-grow:1;margin:0px;padding:0px;overflow-wrap:anywhere;}.in-band>code,.in-band>.code-header{display:inline-block;}#main-content{position:relative;}#main-content>.since{top:inherit;font-family:"Fira Sans",Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.1rem;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);overflow-x:auto;display:block;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content>.methods>.method{font-size:1rem;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8rem;}.content .methods>div:not(.notable-traits):not(.method){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .item-info code{font-size:0.81rem;}.content .item-info{position:relative;margin-left:33px;}.sub-variant>div>.item-info{margin-top:initial;}.content .item-info::before{content:'⬑';font-size:1.5625rem;position:absolute;top:-6px;left:-19px;}.content .impl-items .docblock,.content .impl-items .item-info{margin-bottom:.6em;}.content .impl-items>.item-info{margin-left:40px;}.methods>.item-info,.content .impl-items>.item-info{margin-top:-8px;}.impl-items{flex-basis:100%;}#main-content>.item-info{margin-top:0;}nav:not(.sidebar){flex-grow:1;border-bottom:1px solid;padding-bottom:10px;margin-bottom:25px;}.source nav:not(.sidebar).sub{margin-left:32px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}a{text-decoration:none;background:transparent;}.small-section-header{display:flex;justify-content:space-between;position:relative;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor,.impl:hover>.anchor,.method.trait-impl:hover>.anchor,.type.trait-impl:hover>.anchor,.associatedconstant.trait-impl:hover>.anchor,.associatedtype.trait-impl:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.anchor::before{content:'§';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.item-info a{text-decoration:underline;}.invisible>.srclink,.method>.code-header+.srclink{position:absolute;top:0;right:0;font-size:1.0625rem;font-weight:normal;}.block a.current.crate{font-weight:500;}.item-table{display:table;}.item-row{display:table-row;}.item-left,.item-right{display:table-cell;}.item-left{padding-right:1.2rem;}.search-container{position:relative;max-width:960px;}.search-container>div{display:inline-flex;width:calc(100% - 63px);}#crate-search{min-width:115px;margin-top:5px;padding:6px;padding-right:19px;flex:none;border:0;border-right:0;border-radius:4px 0 0 4px;outline:none;cursor:pointer;border-right:1px solid;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;background-image:url("down-arrow.svg");}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{-webkit-appearance:none;-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:none;border-radius:1px;margin-top:5px;padding:10px 16px;font-size:1.0625rem;transition:border-color 300ms ease;transition:border-radius 300ms ease-in-out;transition:box-shadow 300ms ease-in-out;width:100%;}#crate-search+.search-input{border-radius:0 1px 1px 0;width:calc(100% - 32px);}.search-input:focus{border-radius:2px;border:0;outline:0;}.search-results{display:none;padding-bottom:2em;}.search-results.active{display:block;clear:both;}.search-results .desc>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results>a{display:block;width:100%;margin-left:2px;margin-right:2px;border-bottom:1px solid #aaa3;}.search-results>a>div{display:flex;flex-flow:row wrap;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:50%;}.search-results .result-name{padding-right:1em;}.search-results .result-name>span{display:inline-block;margin:0;font-weight:normal;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{text-align:center;display:block;margin:10px 0;border-bottom:1px solid;padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:0 20px 20px 17px;;}.item-info .stab{display:table;}.stab{padding:3px;margin-bottom:5px;font-size:0.9rem;font-weight:normal;}.stab p{display:inline;}.stab .emoji{font-size:1.2rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.module-item .stab,.import-item .stab{border-radius:3px;display:inline-block;font-size:0.8rem;line-height:1.2;margin-bottom:0;margin-left:.3em;padding:2px;vertical-align:text-bottom;}.module-item.unstable,.import-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;}.impl-items .since,.impl .since,.methods .since{padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink,.methods .srclink{font-weight:normal;font-size:1rem;}.impl .srclink{font-size:1.0625rem;}.rightside{float:right;}.has-srclink{font-size:1rem;margin-bottom:12px;justify-content:space-between;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.3rem;top:5px;right:5px;z-index:1;}.example-wrap:hover .test-arrow{visibility:visible;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;padding-right:10px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.code-attribute{font-weight:300;}.since+.srclink{padding-left:10px;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:1.25rem;margin-right:5px;}h3.variant{font-weight:600;font-size:1.1rem;margin-bottom:10px;border-bottom:none;}.sub-variant h4{font-size:1rem;font-weight:400;border-bottom:none;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.top-doc .docblock>.section-header:first-child{margin-left:15px;}.top-doc .docblock>.section-header:first-child:hover>a:before{left:-10px;}.docblock>.section-header:first-child{margin-top:0;}:target>code,:target>.code-header{opacity:1;}:target{padding-right:3px;}.information{position:absolute;left:-25px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip::after{display:none;text-align:center;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;font-size:1rem;}.tooltip.ignore::after{content:"This example is not tested";}.tooltip.compile_fail::after{content:"This example deliberately fails to compile";}.tooltip.should_panic::after{content:"This example panics";}.tooltip.edition::after{content:"This code runs with edition " attr(data-edition);}.tooltip::before{content:" ";position:absolute;top:50%;left:16px;margin-top:-5px;border-width:5px;border-style:solid;display:none;}.tooltip:hover::before,.tooltip:hover::after{display:inline;}.tooltip.compile_fail,.tooltip.should_panic,.tooltip.ignore{font-weight:bold;font-size:1.25rem;}.notable-traits-tooltip{display:inline-block;cursor:pointer;}.notable-traits:hover .notable-traits-tooltiptext,.notable-traits .notable-traits-tooltiptext.force-tooltip{display:inline-block;}.notable-traits .notable-traits-tooltiptext{display:none;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;z-index:10;font-size:1rem;cursor:default;position:absolute;border:1px solid;}.notable-traits-tooltip::after{content:"\00a0\00a0\00a0";}.notable-traits .notable,.notable-traits .docblock{margin:0;}.notable-traits .notable{margin:0;margin-bottom:13px;font-size:1.1875rem;font-weight:600;}.notable-traits .docblock code.content{margin:0;padding:0;font-size:1.25rem;}pre.rust.rust-example-rendered{position:relative;}pre.rust{tab-size:4;-moz-tab-size:4;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>button{float:left;width:33.3%;text-align:center;font-size:1.125rem;cursor:pointer;border:0;border-top:2px solid;}#titles>button:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>button>div.count{display:inline-block;font-size:1rem;}.notable-traits{cursor:pointer;z-index:2;margin-left:5px;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;}#sidebar-toggle{position:sticky;top:0;left:0;cursor:pointer;font-weight:bold;font-size:1.2rem;border-bottom:1px solid;display:flex;height:40px;justify-content:center;align-items:center;z-index:10;}#source-sidebar{width:100%;z-index:1;overflow:auto;}#source-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:-34px;top:9px;}.theme-picker button{outline:none;}#settings-menu,#help-button{position:absolute;top:10px;}#settings-menu{right:0;outline:none;}#theme-picker,#settings-menu,#help-button,#copy-path{padding:4px;font-size:16px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#help-button{right:30px;font-family:"Fira Sans",Arial,sans-serif;text-align:center;font-size:16px;padding-top:2px;}#copy-path{background:initial;margin-left:10px;padding:0;padding-left:2px;border:0;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px 8px;text-align:center;background:rgba(0,0,0,0);}#theme-choices>button:not(:first-child){border-top:1px solid;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:1rem;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:1.1875rem;display:block;}#implementors-list>.impl-items .table-display .out-of-band{font-size:1.0625rem;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main-content>ul{padding-left:10px;}#main-content>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.7rem;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}details.rustdoc-toggle>summary.hideme{cursor:pointer;}details.rustdoc-toggle>summary{list-style:none;}details.rustdoc-toggle>summary::-webkit-details-marker,details.rustdoc-toggle>summary::marker{display:none;}details.rustdoc-toggle>summary.hideme>span{margin-left:9px;}details.rustdoc-toggle>summary::before{content:"";cursor:pointer;width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;vertical-align:middle;opacity:.5;}details.rustdoc-toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.rustdoc-toggle>summary.hideme::after{content:"";}details.rustdoc-toggle>summary:focus::before,details.rustdoc-toggle>summary:hover::before{opacity:1;}details.rustdoc-toggle.top-doc>summary,details.rustdoc-toggle.top-doc>summary::before,details.rustdoc-toggle.non-exhaustive>summary,details.rustdoc-toggle.non-exhaustive>summary::before{font-family:'Fira Sans';font-size:1rem;}details.non-exhaustive{margin-bottom:8px;}details.rustdoc-toggle>summary.hideme::before{position:relative;}details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:3px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.rustdoc-toggle[open] >summary.hideme{position:absolute;}details.rustdoc-toggle{position:relative;}details.rustdoc-toggle[open] >summary.hideme>span{display:none;}details.undocumented[open] >summary::before,details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{background-image:url("toggle-minus.svg");}details.undocumented>summary::before,details.rustdoc-toggle>summary::before{background-image:url("toggle-plus.svg");}details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;content:"";}details.rustdoc-toggle[open] >summary::after,details.rustdoc-toggle[open] >summary.hideme::after{content:"Collapse";}@media (min-width:701px){.docblock>.information:first-child>.tooltip{margin-top:16px;}.sidebar.expanded+main .width-limiter .sub-logo-container.rust-logo{display:none;}.rustdoc.source .sidebar{transition:width .5s;}.source .sidebar.expanded{width:300px;}}@media (max-width:700px){body{padding-top:0px;}main{padding-left:15px;padding-top:0px;}.rustdoc{flex-direction:column;}.rustdoc:not(.source)>.sidebar{width:100%;height:45px;min-height:40px;max-height:45px;margin:0;padding:0 15px;position:static;z-index:11;overflow-y:hidden;}.rustdoc.source>.sidebar{position:fixed;top:0;left:0;margin:0;z-index:11;width:0;}.sidebar.mobile{position:sticky !important;top:0;left:0;width:100%;margin-left:0;background-color:rgba(0,0,0,0);}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:1.5rem;}.sidebar .location:empty{padding:0;}.rustdoc:not(.source) .sidebar .logo-container{width:35px;height:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar .logo-container>img{max-width:35px;max-height:35px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;top:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.rustdoc.source>.sidebar>.sidebar-menu{display:none;}.sidebar-elems{position:fixed;z-index:1;top:45px;bottom:0;width:246px;left:-246px;overflow-y:auto;border-right:1px solid;}.sidebar>.block.version{overflow:hidden;border-bottom:none;margin-bottom:0;height:100%;padding-left:12px;}.sidebar>.block.version>div.narrow-helper{float:left;width:1px;height:100%;}.sidebar>.block.version>p{margin:0;min-width:55px;display:flex;align-items:center;height:100%;}nav.sub{width:calc(100% - 32px);margin-left:32px;margin-bottom:10px;}.source nav:not(.sidebar).sub{margin-left:32px;}.content{margin-left:0px;}.source .content{margin-top:10px;}#search{margin-left:0;padding:0;}.anchor{display:none !important;}.theme-picker{z-index:1;}.notable-traits{position:absolute;left:-22px;top:24px;}#titles>button>div.count{float:left;width:100%;}#titles{height:50px;}.show-it,.sidebar-elems:focus-within{z-index:2;left:0;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:1.3125rem;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}#main-content>details.rustdoc-toggle>summary::before,#main-content>div>details.rustdoc-toggle>summary::before{left:-11px;}#all-types{margin:10px;}.sidebar.expanded #sidebar-toggle{font-size:1.5rem;}.sidebar:not(.expanded) #sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;border:1px solid;border-left:0;}#source-sidebar{z-index:11;}#main-content>.line-numbers{margin-top:0;}.notable-traits .notable-traits-tooltiptext{left:0;top:100%;}#help-button{display:none;}.item-table{display:block;}.item-row{display:flex;flex-flow:column wrap;}.item-left,.item-right{width:100%;}.search-container>div{width:calc(100% - 32px);}.search-results>a{border-bottom:1px solid #aaa9;padding:5px 0px;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:100%;}.search-results div.desc,.search-results .result-description,.item-right{padding-left:2em;}.source .sidebar.expanded{max-width:100vw;width:100vw;}details.rustdoc-toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before,#main-content>details.rustdoc-toggle:not(.top-doc)>summary::before,#main-content>div>details.rustdoc-toggle>summary::before{left:-11px;}}@media print{nav.sub,.content .out-of-band{display:none;}}@media (max-width:464px){#titles,#titles>button{height:73px;}#main-content>table:not(.table-display) td{word-break:break-word;width:50%;}.search-container>div{display:block;width:calc(100% - 37px);}#crate-search{width:100%;border-radius:4px;border:0;}#crate-search+.search-input{width:calc(100% + 71px);margin-left:-36px;}#theme-picker,#settings-menu{padding:5px;width:31px;height:31px;}#theme-picker{margin-top:-2px;}#settings-menu{top:7px;}.docblock{margin-left:12px;}.docblock code{overflow-wrap:anywhere;}.sub-container{flex-direction:column;}.sub-logo-container{align-self:center;}.source .sub-logo-container>img{height:35px;width:35px;}.sidebar:not(.expanded) #sidebar-toggle{top:10px;}}.scraped-example-title{font-family:'Fira Sans';}.scraped-example:not(.expanded) .code-wrapper pre.line-numbers{overflow:hidden;max-height:240px;}.scraped-example:not(.expanded) .code-wrapper .example-wrap pre.rust{overflow-y:hidden;max-height:240px;padding-bottom:0;}.scraped-example .code-wrapper .prev{position:absolute;top:0.25em;right:2.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .next{position:absolute;top:0.25em;right:1.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .expand{position:absolute;top:0.25em;right:0.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper:before{content:" ";width:100%;height:5px;position:absolute;z-index:100;top:0;background:linear-gradient(to bottom,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper:after{content:" ";width:100%;height:5px;position:absolute;z-index:100;bottom:0;background:linear-gradient(to top,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper{overflow:hidden;max-height:240px;}.scraped-example .code-wrapper .line-numbers{margin:0;padding:14px 0;}.scraped-example .code-wrapper .line-numbers span{padding:0 14px;}.scraped-example .code-wrapper .example-wrap{flex:1;overflow-x:auto;overflow-y:hidden;margin-bottom:0;}.scraped-example .code-wrapper .example-wrap pre.rust{overflow-x:inherit;width:inherit;overflow-y:hidden;}.scraped-example .example-wrap .rust span.highlight{background:#fcffd6;}.scraped-example .example-wrap .rust span.highlight.focus{background:#f6fdb0;}.more-examples-toggle{margin-top:10px;}.more-examples-toggle summary{color:#999;font-family:'Fira Sans';}.more-scraped-examples{margin-left:25px;display:flex;flex-direction:row;width:calc(100% - 25px);}.more-scraped-examples-inner{width:calc(100% - 20px);}.toggle-line{align-self:stretch;margin-right:10px;margin-top:5px;padding:0 4px;cursor:pointer;}.toggle-line:hover .toggle-line-inner{background:#aaa;}.toggle-line-inner{min-width:2px;background:#ddd;height:100%;}.more-scraped-examples .scraped-example{margin-bottom:20px;}.more-scraped-examples .scraped-example:last-child{margin-bottom:0;}.example-links a{margin-top:20px;font-family:'Fira Sans';}.example-links ul{margin-bottom:0;} \ No newline at end of file + @font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff2") format("woff2"),url("FiraSans-Regular.woff") format('woff');font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff2") format("woff2"),url("FiraSans-Medium.woff") format('woff');font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular.ttf.woff2") format("woff2"),url("SourceSerif4-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It.ttf.woff2") format("woff2"),url("SourceSerif4-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold.ttf.woff2") format("woff2"),url("SourceSerif4-Bold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2"),url("SourceCodePro-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2"),url("SourceCodePro-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2"),url("SourceCodePro-Semibold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic.ttf.woff2") format("woff2"),url("NanumBarunGothic.ttf.woff") format("woff");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html{content:"";}@media (prefers-color-scheme:light){html{content:"light";}}@media (prefers-color-scheme:dark){html{content:"dark";}}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:20px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}h1.fqn{margin:0;padding:0;}.main-heading{display:flex;flex-wrap:wrap;justify-content:space-between;padding-bottom:6px;margin-bottom:15px;}.main-heading a:hover{text-decoration:underline;}#toggle-all-docs{text-decoration:none;}h2,.top-doc h3,.top-doc h4{border-bottom:1px solid;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;border-bottom-style:none;margin:0;padding:0;margin-top:0.6em;margin-bottom:0.4em;}.impl,.impl-items .method,.methods .method,.impl-items .type,.methods .type,.impl-items .associatedconstant,.methods .associatedconstant,.impl-items .associatedtype,.methods .associatedtype{flex-basis:100%;font-weight:600;position:relative;}div.impl-items>div{padding-left:0;}h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,a.source,.search-input,.search-results .result-name,.content table td:first-child>a,.item-left>a,.out-of-band,span.since,#source-sidebar,#sidebar-toggle,details.rustdoc-toggle>summary::before,div.impl-items>div:not(.docblock):not(.item-info),.content ul.crate a.crate,a.srclink,#main-content>ul.docblock>li>a{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p{margin:0 0 .75em 0;}summary{outline:none;}td,th{padding:0;}table{border-collapse:collapse;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}button{padding:1px 6px;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.source main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}.source .width-limiter{max-width:unset;}details:not(.rustdoc-toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;}.docblock.item-decl{margin-left:0;}.item-decl pre{overflow-x:auto;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{max-width:none;overflow:visible;margin-left:0px;}nav.sub{position:relative;font-size:1rem;text-transform:uppercase;}.sub-container{display:flex;flex-direction:row;flex-wrap:nowrap;}.sub-logo-container{display:none;margin-right:20px;}.source .sub-logo-container{display:block;}.source .sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.sidebar{font-size:0.875rem;width:250px;min-width:200px;overflow-y:scroll;position:sticky;height:100vh;top:0;left:0;}.sidebar-elems,.sidebar>.location{padding-left:24px;}.sidebar .location{overflow-wrap:anywhere;}.rustdoc.source .sidebar{width:50px;min-width:0px;max-width:300px;flex-grow:0;flex-shrink:0;flex-basis:auto;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.source .sidebar>*:not(:first-child){transition:opacity 0.5s;opacity:0;visibility:hidden;}.source .sidebar.expanded{overflow-y:auto;}.source .sidebar.expanded>*{opacity:1;visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;}.sidebar{scrollbar-width:thin;}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;}.hidden{display:none !important;}.sidebar .logo-container{display:flex;margin-top:10px;margin-bottom:10px;justify-content:center;}.version{overflow-wrap:break-word;}.logo-container>img{height:100px;width:100px;}.location:empty{border:none;}.location a:first-of-type{font-weight:500;}.block{padding:0;}.block ul,.block li{padding:0;margin:0;list-style:none;}.block a,h2.location a{display:block;padding:0.25rem;margin-left:-0.25rem;text-overflow:ellipsis;overflow:hidden;}.sidebar h2{border-bottom:none;font-weight:500;padding:0;margin:0;margin-top:0.7rem;margin-bottom:0.7rem;}.sidebar h3{font-size:1.125rem;font-weight:500;padding:0;margin:0;}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;}.mobile-topbar{display:none;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{position:relative;width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;padding:13px 8px;text-align:right;border-top-left-radius:5px;border-bottom-left-radius:5px;}.example-wrap>pre.rust a:hover{text-decoration:underline;}.rustdoc:not(.source) .example-wrap>pre:not(.line-number){width:100%;overflow-x:auto;}.rustdoc:not(.source) .example-wrap>pre.line-numbers{width:auto;overflow-x:visible;}.rustdoc .example-wrap>pre{margin:0;}#search{position:relative;}.search-loading{text-align:center;}#results>table{width:100%;table-layout:fixed;}.content>.example-wrap pre.line-numbers{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock-short p{display:inline;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock>:not(pre)>code,.docblock-short>:not(pre)>code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.information){max-width:100%;overflow-x:auto;}.content .out-of-band{flex-grow:0;font-size:1.125rem;font-weight:normal;float:right;}.method>.code-header,.trait-impl>.code-header{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{flex-grow:1;margin:0px;padding:0px;overflow-wrap:break-word;overflow-wrap:anywhere;}.in-band>code,.in-band>.code-header{display:inline-block;}#main-content{position:relative;}#main-content>.since{top:inherit;font-family:"Fira Sans",Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.125rem;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);overflow-x:auto;display:block;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content>.methods>.method{font-size:1rem;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.875rem;}.content .methods>div:not(.notable-traits):not(.method){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .item-info code{font-size:0.875rem;}.content .item-info{position:relative;margin-left:24px;}.sub-variant>div>.item-info{margin-top:initial;}.content .impl-items .docblock,.content .impl-items .item-info{margin-bottom:.6em;}.content .impl-items>.item-info{margin-left:40px;}.methods>.item-info,.content .impl-items>.item-info{margin-top:-8px;}.impl-items{flex-basis:100%;}#main-content>.item-info{margin-top:0;margin-left:0;}nav.sub{flex-grow:1;margin-bottom:25px;}.source nav.sub{margin-left:32px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}a{text-decoration:none;background:transparent;}.small-section-header{display:flex;justify-content:space-between;position:relative;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor,.impl:hover>.anchor,.method.trait-impl:hover>.anchor,.type.trait-impl:hover>.anchor,.associatedconstant.trait-impl:hover>.anchor,.associatedtype.trait-impl:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.anchor::before{content:'§';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.item-info a{text-decoration:underline;}.block a.current.crate{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;}.item-row{display:table-row;}.item-left,.item-right{display:table-cell;}.item-left{padding-right:1.25rem;}.search-container{position:relative;display:flex;height:34px;}.search-container>*{height:100%;}.search-results-title{display:inline;}#search-settings{font-size:1.5rem;font-weight:500;margin-bottom:20px;}#crate-search{min-width:115px;margin-top:5px;margin-left:0.25em;padding-left:0.3125em;padding-right:23px;border:0;border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;background-image:url("down-arrow.svg");}.search-container{margin-top:4px;}.search-input{-webkit-appearance:none;-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:1px solid;border-radius:2px;padding:8px;font-size:1rem;transition:border-color 300ms ease;width:100%;}.search-results{display:none;padding-bottom:2em;}.search-results.active{display:block;clear:both;}.search-results .desc>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results>a{display:block;width:100%;margin-left:2px;margin-right:2px;border-bottom:1px solid #aaa3;}.search-results>a>div{display:flex;flex-flow:row wrap;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:50%;}.search-results .result-name{padding-right:1em;}.search-results .result-name>span{display:inline-block;margin:0;font-weight:normal;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{text-align:center;display:block;margin:10px 0;border-bottom:1px solid;padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:0 20px 20px 17px;;}.item-info .stab{display:inline-block;}.stab{padding:3px;margin-bottom:5px;font-size:0.875rem;font-weight:normal;}.stab p{display:inline;}.stab .emoji{font-size:1.25rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.module-item .stab,.import-item .stab{border-radius:3px;display:inline-block;font-size:0.875rem;line-height:1.2;margin-bottom:0;margin-left:0.3125em;padding:2px;vertical-align:text-bottom;}.module-item.unstable,.import-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink,.methods .srclink{font-weight:normal;font-size:1rem;}.rightside{float:right;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.375rem;top:5px;right:5px;z-index:1;}.example-wrap:hover .test-arrow{visibility:visible;}a.test-arrow:hover{text-decoration:none;}.code-attribute{font-weight:300;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:1.25rem;}h3.variant{font-weight:600;font-size:1.125rem;margin-bottom:10px;border-bottom:none;}.sub-variant h4{font-size:1rem;font-weight:400;border-bottom:none;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}:target>code,:target>.code-header{opacity:1;}:target{padding-right:3px;}.information{position:absolute;left:-25px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip::after{display:none;text-align:center;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;font-size:1rem;}.tooltip.ignore::after{content:"This example is not tested";}.tooltip.compile_fail::after{content:"This example deliberately fails to compile";}.tooltip.should_panic::after{content:"This example panics";}.tooltip.edition::after{content:"This code runs with edition " attr(data-edition);}.tooltip::before{content:" ";position:absolute;top:50%;left:16px;margin-top:-5px;border-width:5px;border-style:solid;display:none;}.tooltip:hover::before,.tooltip:hover::after{display:inline;}.tooltip.compile_fail,.tooltip.should_panic,.tooltip.ignore{font-weight:bold;font-size:1.25rem;}.notable-traits-tooltip{display:inline-block;cursor:pointer;}.notable-traits:hover .notable-traits-tooltiptext,.notable-traits .notable-traits-tooltiptext.force-tooltip{display:inline-block;}.notable-traits .notable-traits-tooltiptext{display:none;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;z-index:10;font-size:1rem;cursor:default;position:absolute;border:1px solid;}.notable-traits-tooltip::after{content:"\00a0\00a0\00a0";}.notable-traits .notable,.notable-traits .docblock{margin:0;}.notable-traits .notable{margin:0;margin-bottom:13px;font-size:1.1875rem;font-weight:600;display:block;}.notable-traits .docblock code.content{margin:0;padding:0;font-size:1.25rem;}pre.rust.rust-example-rendered{position:relative;}pre.rust{tab-size:4;-moz-tab-size:4;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>button{float:left;width:33.3%;text-align:center;font-size:1.125rem;cursor:pointer;border:0;border-top:2px solid;}#titles>button:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>button>div.count{display:inline-block;font-size:1rem;}.notable-traits{cursor:pointer;z-index:2;margin-left:5px;}#sidebar-toggle{position:sticky;top:0;left:0;cursor:pointer;font-weight:bold;font-size:1.25rem;border-bottom:1px solid;display:flex;height:40px;justify-content:center;align-items:center;z-index:10;}#source-sidebar{width:100%;z-index:1;overflow:auto;}#source-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:-38px;top:4px;}.theme-picker button{outline:none;}#settings-menu,#help-button{margin-left:4px;outline:none;}#theme-picker,#copy-path{height:34px;}#theme-picker,#settings-menu,#help-button,#copy-path{padding:5px;width:33px;border:1px solid;border-radius:2px;cursor:pointer;}#help-button{font-family:"Fira Sans",Arial,sans-serif;text-align:center;font-size:20px;padding-top:2px;}#copy-path{background:initial;margin-left:10px;padding:0;padding-left:2px;border:0;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px 8px;text-align:center;background:rgba(0,0,0,0);overflow-wrap:normal;}#theme-choices>button:not(:first-child){border-top:1px solid;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:1rem;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:1.125rem;display:block;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main-content>ul{padding-left:10px;}#main-content>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.625rem;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}details.rustdoc-toggle>summary.hideme{cursor:pointer;}details.rustdoc-toggle>summary{list-style:none;}details.rustdoc-toggle>summary::-webkit-details-marker,details.rustdoc-toggle>summary::marker{display:none;}details.rustdoc-toggle>summary.hideme>span{margin-left:9px;}details.rustdoc-toggle>summary::before{content:"";cursor:pointer;width:16px;height:16px;background-repeat:no-repeat;background-position:top left;display:inline-block;vertical-align:middle;opacity:.5;}details.rustdoc-toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.rustdoc-toggle>summary.hideme::after{content:"";}details.rustdoc-toggle>summary:focus::before,details.rustdoc-toggle>summary:hover::before{opacity:1;}details.rustdoc-toggle.top-doc>summary,details.rustdoc-toggle.top-doc>summary::before,details.rustdoc-toggle.non-exhaustive>summary,details.rustdoc-toggle.non-exhaustive>summary::before{font-family:'Fira Sans';font-size:1rem;}details.non-exhaustive{margin-bottom:8px;}details.rustdoc-toggle>summary.hideme::before{position:relative;}details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.rustdoc-toggle[open] >summary.hideme{position:absolute;}details.rustdoc-toggle{position:relative;}details.rustdoc-toggle[open] >summary.hideme>span{display:none;}details.undocumented[open] >summary::before,details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{background-image:url("toggle-minus.svg");}details.undocumented>summary::before,details.rustdoc-toggle>summary::before{background-image:url("toggle-plus.svg");}details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{width:16px;height:16px;background-repeat:no-repeat;background-position:top left;display:inline-block;content:"";}details.rustdoc-toggle[open] >summary::after,details.rustdoc-toggle[open] >summary.hideme::after{content:"Collapse";}@media (min-width:701px){.docblock>.information:first-child>.tooltip{margin-top:16px;}.sidebar.expanded+main .width-limiter .sub-logo-container.rust-logo{display:none;}.rustdoc.source .sidebar{transition:width .5s;}.source .sidebar.expanded{width:300px;}}@media (max-width:700px){*[id]{scroll-margin-top:45px;}.rustdoc{padding-top:0px;display:block;}main{padding-left:15px;padding-top:0px;}.rustdoc,.main-heading{flex-direction:column;}.content .out-of-band{text-align:left;margin-left:initial;padding:initial;}.content .out-of-band .since::before{content:"Since ";}#copy-path{display:none;}.sidebar .sidebar-logo,.sidebar .location{display:none;}.sidebar-elems{margin-top:1em;}.sidebar{position:fixed;top:45px;left:-1000px;margin-left:0;background-color:rgba(0,0,0,0);margin:0;padding:0;z-index:11;height:calc(100vh - 45px);}.source main,.source .sidebar{top:0;padding:0;}.sidebar.shown,.sidebar.expanded,.sidebar:focus-within{left:0;}.rustdoc.source>.sidebar{position:fixed;margin:0;z-index:11;width:0;}.mobile-topbar .location a{padding:0;margin:0;}.mobile-topbar .location{border:none;padding:0;margin:auto 0.5em auto auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:24px;}.mobile-topbar .logo-container{max-height:45px;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin-left:20px;margin-top:5px;margin-bottom:5px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.source .mobile-topbar{display:none;}.sidebar-menu-toggle{width:45px;font-size:32px;border:none;}.source nav:not(.sidebar).sub{margin-left:32px;}#theme-picker{display:none;width:0;}.content{margin-left:0px;}.source .content{margin-top:10px;}#search{margin-left:0;padding:0;}.anchor{display:none !important;}.notable-traits{position:absolute;left:-22px;top:24px;}#titles>button>div.count{float:left;width:100%;}#titles{height:50px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}#main-content>details.rustdoc-toggle>summary::before,#main-content>div>details.rustdoc-toggle>summary::before{left:-11px;}.sidebar.expanded #sidebar-toggle{font-size:1.5rem;}.sidebar:not(.expanded) #sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;border:1px solid;border-left:0;}#source-sidebar{z-index:11;}#main-content>.line-numbers{margin-top:0;}.notable-traits .notable-traits-tooltiptext{left:0;top:100%;}#help-button{display:none;}.item-table{display:block;}.item-row{display:flex;flex-flow:column wrap;}.item-left,.item-right{width:100%;}.search-results>a{border-bottom:1px solid #aaa9;padding:5px 0px;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:100%;}.search-results div.desc,.search-results .result-description,.item-right{padding-left:2em;}.source .sidebar.expanded{max-width:100vw;width:100vw;}details.rustdoc-toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before,#main-content>details.rustdoc-toggle:not(.top-doc)>summary::before,#main-content>div>details.rustdoc-toggle>summary::before{left:-11px;}}@media print{nav.sub,.content .out-of-band{display:none;}}@media (max-width:464px){#titles,#titles>button{height:73px;}#main-content>table:not(.table-display) td{word-break:break-word;width:50%;}#crate-search{border-radius:4px;border:0;}.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}.sub-container{flex-direction:column;}.sub-logo-container{align-self:center;}.source .sub-logo-container>img{height:35px;width:35px;}.sidebar:not(.expanded) #sidebar-toggle{top:10px;}}.method-toggle summary,.implementors-toggle summary,.impl{margin-bottom:0.75em;}.method-toggle[open]{margin-bottom:2em;}.implementors-toggle[open]{margin-bottom:2em;}#trait-implementations-list .method-toggle,#synthetic-implementations-list .method-toggle,#blanket-implementations-list .method-toggle{margin-bottom:1em;}.scraped-example-title{font-family:'Fira Sans';}.scraped-example:not(.expanded) .code-wrapper pre.line-numbers{overflow:hidden;max-height:240px;}.scraped-example:not(.expanded) .code-wrapper .example-wrap pre.rust{overflow-y:hidden;max-height:240px;padding-bottom:0;}.scraped-example .code-wrapper .prev{position:absolute;top:0.25em;right:2.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .next{position:absolute;top:0.25em;right:1.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .expand{position:absolute;top:0.25em;right:0.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper:before{content:" ";width:100%;height:5px;position:absolute;z-index:100;top:0;background:linear-gradient(to bottom,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper:after{content:" ";width:100%;height:5px;position:absolute;z-index:100;bottom:0;background:linear-gradient(to top,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper{overflow:hidden;max-height:240px;}.scraped-example .code-wrapper .line-numbers{margin:0;padding:14px 0;}.scraped-example .code-wrapper .line-numbers span{padding:0 14px;}.scraped-example .code-wrapper .example-wrap{flex:1;overflow-x:auto;overflow-y:hidden;margin-bottom:0;}.scraped-example .code-wrapper .example-wrap pre.rust{overflow-x:inherit;width:inherit;overflow-y:hidden;}.scraped-example .example-wrap .rust span.highlight{background:#fcffd6;}.scraped-example .example-wrap .rust span.highlight.focus{background:#f6fdb0;}.more-examples-toggle{margin-top:10px;}.more-examples-toggle summary{color:#999;font-family:'Fira Sans';}.more-scraped-examples{margin-left:25px;display:flex;flex-direction:row;width:calc(100% - 25px);}.more-scraped-examples-inner{width:calc(100% - 20px);}.toggle-line{align-self:stretch;margin-right:10px;margin-top:5px;padding:0 4px;cursor:pointer;}.toggle-line:hover .toggle-line-inner{background:#aaa;}.toggle-line-inner{min-width:2px;background:#ddd;height:100%;}.more-scraped-examples .scraped-example{margin-bottom:20px;}.more-scraped-examples .scraped-example:last-child{margin-bottom:0;}.example-links a{margin-top:20px;font-family:'Fira Sans';}.example-links ul{margin-bottom:0;} \ No newline at end of file diff --git a/doc/search-index.js b/doc/search-index.js index 76eb541..3f31f89 100644 --- a/doc/search-index.js +++ b/doc/search-index.js @@ -1,4 +1,4 @@ var searchIndex = JSON.parse('{\ -"draught":{"doc":"Draught","t":[17,0,0,0,5,14,14,0,0,3,3,3,3,17,17,3,17,17,17,17,17,17,17,17,17,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,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,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,11,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,12,13,13,13,13,13,13,13,13,13,4,4,13,13,13,13,4,4,4,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,3,3,12,12,12,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,3,3,3,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,12,11,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,17,17,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,12,12,11,12,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,17,17,17,17,17,17,17,17,17,3,17,17,17,17,17,17,12,12,12,11,11,12,12,11,11,12,11,11,11,11,11,12,11,11,11,12,11,11,11,12,12,12,11,11,11,11,12,12,12,11,11,11,11,12,11,11,11,11,11,12,12,12,12,5],"n":["__wasm_bindgen_generated_init_wasm__const","board","comp","game","init_wasm","log","log_error","paint","utils","Board","BrdIdx","Direction","Piece","STD_HEIGHT","STD_WIDTH","Square","__wbg_get_board_current_turn__const","__wbg_get_board_height__const","__wbg_get_board_width__const","__wbg_get_brdidx_col__const","__wbg_get_brdidx_row__const","__wbg_get_piece_strength__const","__wbg_get_piece_team__const","__wbg_get_square_occupant__const","__wbg_get_square_state__const","adjacent_dir","adjacent_indices","apply_jump","apply_move","board_index","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","can_move","cell","cell_idx","cell_index","cell_mut","cell_state","cells","cells","check_jumpee_team","check_kinged","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","col","current_turn","describe","describe","describe","describe","empty","empty","enums","eq","eq","eq","eq","eq","eq","filter_indices","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_abi","from_abi","from_abi","from_abi","grid_cell","height","idx_diffs","init_game","into","into","into","into","into","into_abi","into_abi","into_abi","into_abi","is_none","is_none","is_none","is_none","iter","jumpable_dir","jumpable_indices","jumpee_idx","king_row_idx","ne","ne","ne","ne","ne","ne","new","new","new","none","none","none","none","num_cells","num_pieces","num_player","nw","occupant","pc","player_adjacent_indices","player_jumpable_indices","ref_from_abi","ref_from_abi","ref_from_abi","ref_from_abi","ref_mut_from_abi","ref_mut_from_abi","ref_mut_from_abi","ref_mut_from_abi","return_abi","return_abi","return_abi","return_abi","row","score","se","set_cell","state","strength","sw","team","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unplay","validate_jumpee","validate_king_move","validate_man_move","vzip","vzip","vzip","vzip","vzip","width","Allowed","Black","Empty","IllegalTrajectory","Jump","JumpingSameTeam","King","Man","Move","MoveType","Moveable","NoJumpablePiece","Occupied","OccupiedDest","OutOfBounds","SquareState","Strength","Team","UnoccupiedSrc","Unplayable","Unplayable","White","WrongTeamSrc","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","describe","describe","describe","describe","describe","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from_abi","from_abi","from_abi","from_abi","from_abi","into","into","into","into","into","into_abi","into_abi","into_abi","into_abi","into_abi","is_none","is_none","is_none","is_none","is_none","none","none","none","none","none","opponent","return_abi","return_abi","return_abi","return_abi","return_abi","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","PieceIterator","RowIndexIterator","RowSquareIterator","board","board","board","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","from","from","from","index_cursor","index_iter","into","into","into","into_iter","into_iter","into_iter","new","new","new","next","next","next","row_cursor","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","BoardNode","Computer","Move","available_turns","best_score","board","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","brd","clone","clone","clone_into","clone_into","eq","eq","expand_layer","expand_node","fmt","fmt","fmt","from","from","from","from","gen_tree","get_leaf_nodes","get_move","get_move_boards","insert_board_scores","insert_boards","into","into","into","last_node_count","mv_type","ne","ne","new","new","new","perfect_chance","propagate_scores","random_choice","score","search_depth","team","to","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","Game","__wbg_get_game_last_node_count__const","__wbg_get_game_perfect_chance__const","ai_move","borrow","borrow_mut","clear_selected","current","current_board","current_board_cells","current_board_len","current_cell_state","current_turn","describe","draw","execute_jump","execute_move","fmt","fmt","from","from_abi","has_won","into","into_abi","is_none","last_node_count","make_move","new","new_with_canvas","none","painter","perfect_chance","previous_board","previous_boards","push_new_board","ref_from_abi","ref_mut_from_abi","return_abi","score","search_depth","selected_piece","set_current","set_painter","set_perfect_chance","set_search_depth","set_selected","to_string","try_from","try_into","type_id","vzip","winning","BLACK_PIECE","BLACK_PIECE_OUTLINE","BLACK_SQUARE","DRAW_OUTLINE","DRAW_PIECE_OUTLINES","KING_OUTLINE","OUTLINE_WIDTH","PIECE_OUTLINE_PROPORTION","PIECE_PROPORTION","Painter","SELECTED_PIECE","SELECTED_PIECE_OUTLINE","SQUARE_OUTLINE","WHITE_PIECE","WHITE_PIECE_OUTLINE","WHITE_SQUARE","black_piece","black_piece_line","black_square","borrow","borrow_mut","canvas","context","describe","draw","draw_outline","fmt","from","from_abi","get_canvas","get_canvas_context","height","into","into_abi","is_none","king_line","new","new_with_canvas","none","outline_width","piece_line_proportion","piece_lines","ref_from_abi","ref_mut_from_abi","reset_dimensions","return_abi","selected_idx","selected_piece","selected_piece_line","set_draw_outline","set_outline_width","set_selected","set_square_outline","square_outline","try_from","try_into","type_id","validate_board_dim","vzip","white_piece","white_piece_line","white_square","width","set_panic_hook"],"q":["draught","","","","","","","","","draught::board","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::board::enums","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::board::iter","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::comp","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::game","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::paint","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::utils"],"d":["","Board module for components related to the checkers board …","AI player logic","Top-level object for managing Boards, applying and …","","Wrap the web_sys access to the browser console in a macro …","","Components for painting board states onto HTML canvases","","Single state of a checkers board","Rank 2 tensor index to identify a board square by row and …","Standard diagonal movements given by north west/east etc","Game piece given by its team and strength (normal or …","Standard height of a checkers board is 8 squares","Standard width of a checkers board is 8 squares","Board squares given by a state and a possible occupying …","","","","","","","","","","Get a Direction structure for the diagonally adjacent …","Get the 1D array indices for the diagonally adjacent …","Get new board derived from current with given jump applied","Get new board derived from current with given move applied","Transform a 1D array index (for Board::cells) into a 2D …","","","","","","","","","","","Check whether a move given by source and destination …","Get a copy of a board square by 1D array index","Similar to Board::cell_index but with a BrdIdx instead of …","Transform a 2D row/column board index into a single 1D …","Get a mutable reference to a board square by 1D array index","Get the state of a board square by 1D array index","Get a pointer to the backing array of board squares, …","1D backing array of board squares for the 2D game board","Check that the source piece and the jumpee are of opposing …","Check and apply king strength","","","","","","","","","","","","","","","","","Create an empty direction full of Option::None","Helper function for a well-formed empty square","","","","","","","","Filter an array of diagonal indices (Like those from …","","","","","","","","","","","","","","","","","","Get a copy of a board square by 2D BrdIdx index","","Get the difference between two BrdIdx objects","Reset the given board to a starting layout with 3 rows of …","","","","","","","","","","","","","","","Get a Direction structure for the diagonally jumpable …","Get the 1D array indices for the diagonally jumpable …","Get cell index of jumpee square given from and to locations","Get row index for current team, top row for black, bottom …","","","","","","North East","","Standard constructor function to form square from state …","Initialise a game board without game pieces","","","","","Get the number of board squares","Get the number of remaining pieces","Get the number of remaining pieces for a player","North West ","Game piece if square is occupied","Helper function for a well-formed piece square by team and …","","","","","","","","","","","","","","","","Get the score value, Black - White pieces","South East","Get a copy of a board square by 1D array index","Description of whether the square is occupied or an …","","South West","","","","","","","","","","","","","","","","","","","","","","","","Helper function for a well-formed unplayable square","Unwrap the jumpee piece from the square and …","Check that given move trajectory is valid for a king piece ","Check that given move trajectory is valid for a man piece ","","","","","","","","","","","","","","","","Move/Jump, for use in Move","Possible outcomes of trying to move","","","","","Model board square as Empty/Occupied/Unplayable","Man/King","Black/White","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get opposing team","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get next item from the iterator","Get next item from the iterator","Get next item from the iterator","","","","","","","","","","","","","","For storing boards in the AI tree, stores board with score …","Root-level structure for managing the game as a collection …","Represents a move by source/destination indices and the …","Get vector of available moves for a given board","Get best of given scores for given team","","","","","","","","","","","","","","","Expand all given nodes and return newly inserted layer of …","Insert all possible next boards as children of given board …","","","","","","","","Generate tree of boards to given search depth, return root …","Traverse tree from given root ID and get NodeIDs of leaf …","Get a new board based on the given using MiniMax to make …","Get all possible next boards from given board","For given NodeIDs, insert score of board into tree Used …","Insert given boards into tree","","","","","","","","","","","","Propagate scores up the tree employing MiniMax algorithm","Get a random board from possible node IDs and associated …","","","","","","","","","","","","","","","","","","","Root-level structure for managing the game as a collection …","","","Create computer, get move from current board and update …","","","Clear currently selected piece","","Set current board to given","Get pointer to current board’s squares","Get pointer to current board’s squares","Get square on current board for given index","Current turn’s team","","Draw current board using painter if exists","Update board state with given jump move and push new board …","Update board state with given move and push new board into …","","","","","Check if a player has won","","","","","Attempt to make a move given a source and destination index","Get new game without board renderer","Get a new game with canvas ID and dimensions","","","","Get a read-only copy of a previous turn’s board","","Push current board into the previous turns and set given …","","","","Current board’s score","","","Set current board to given","Set painter for rendering boards","Set proportion of perfect moves from AI","Set tree depth for AI to search to","Set given index as selected piece TODO: Check whether …","","","","","","Get currently winning player","Default hex colour value for black pieces","Default hex colour value for black piece outline","Default hex colour value for black square background","Whether to outline black squares","Whether to outline pieces","Default hex colour value for black piece outline","Line width when outlining black squares as proportion of …","Line width for outlining pieces as proportion of piece …","Proportion of square that piece fills as proportion of min …","Used to paint boards onto HTML canvases","Default hex colour value for selected piece","Default hex colour value for selected piece outline","Default hex colour value for outline of black squares","Default hex colour value for white pieces","Default hex colour value for white piece outline","Default hex colour value for white square background","","","","","","","","","Draw a board onto the canvas","","","","","Get a canvas by element ID","Get a 2D canvas context for a given canvas","","","","","","Default constructor which queries for canvas by ID","Constructor with given canvas element","","","","","","","Reset the canvas dimensions to the given width and height","","","","","Set whether squares are outlined","Set new line width for outlining squares","Set selected piece by board index","Set new square outline colour value","","","","","Check whether given canvas dimensions divide evenly by …","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,1,2,3,4,5,1,1,1,1,1,1,1,1,1,1,1,2,3,4,5,1,2,3,4,5,1,5,1,2,4,5,1,3,4,0,2,3,4,5,5,1,1,2,3,4,5,5,1,1,2,3,4,5,5,1,2,4,5,1,1,1,1,1,2,3,4,5,1,2,4,5,1,2,4,5,1,0,1,1,1,1,2,3,4,5,1,3,2,4,1,2,4,5,1,1,1,1,3,4,4,1,1,2,4,5,1,2,4,5,1,2,4,5,1,5,1,3,1,4,2,3,2,2,3,4,5,1,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,4,1,1,1,2,3,4,5,1,1,6,7,8,6,9,6,10,10,9,0,0,6,8,6,6,0,0,0,6,8,6,7,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,7,10,8,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,7,9,7,10,8,6,9,7,10,8,6,7,8,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,0,0,0,11,12,13,11,12,13,11,12,13,11,12,13,13,12,11,12,13,11,12,13,11,12,13,11,12,13,11,11,12,13,11,12,13,11,12,13,11,12,13,0,0,0,14,14,15,16,15,14,16,15,14,15,16,15,16,15,16,15,14,14,16,15,14,16,15,14,16,14,14,14,14,14,14,16,15,14,14,16,16,15,16,15,14,14,14,14,15,14,14,16,16,15,16,15,14,16,15,14,16,15,14,16,15,14,0,0,0,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,0],"f":[null,null,null,null,[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["brdidx",3]],["option",4,[["direction",3,[["square",3]]]]]],[[["brdidx",3]],["option",4,[["vec",3,[["usize",15]]]]]],[[["brdidx",3],["brdidx",3]],["board",3]],[[["brdidx",3],["brdidx",3]],["board",3]],[[["usize",15]],["brdidx",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["brdidx",3],["brdidx",3]],["moveable",4]],[[["usize",15]],["square",3]],[[["brdidx",3]],["usize",15]],[[["usize",15],["usize",15]],["usize",15]],[[["usize",15]],["square",3]],[[["usize",15]],["squarestate",4]],[[]],null,[[["piece",3],["piece",3]],["bool",15]],[[["board",3],["brdidx",3]]],[[],["piece",3]],[[],["direction",3]],[[],["square",3]],[[],["brdidx",3]],[[],["board",3]],[[]],[[]],[[]],[[]],[[]],null,null,[[]],[[]],[[]],[[]],[[],["direction",3]],[[],["square",3]],null,[[["piece",3]],["bool",15]],[[["direction",3]],["bool",15]],[[["square",3]],["bool",15]],[[["brdidx",3]],["bool",15]],[[["brdidx",3]],["bool",15]],[[["board",3]],["bool",15]],[[["brdidx",3],["team",4],["vec",3,[["usize",15]]]],["vec",3,[["usize",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]],[[]],[[]],[[]],[[]],[[["usize",15],["usize",15]],["brdidx",3]],[[]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["u32",15]]],[[["brdidx",3]],["square",3]],null,[[["brdidx",3],["brdidx",3]]],[[["board",3],["usize",15]],["board",3]],[[]],[[]],[[]],[[]],[[]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["u32",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,[[["brdidx",3]],["option",4,[["direction",3,[["square",3]]]]]],[[["brdidx",3]],["option",4,[["vec",3,[["usize",15]]]]]],[[["brdidx",3],["brdidx",3]],["usize",15]],[[],["usize",15]],[[["piece",3]],["bool",15]],[[["direction",3]],["bool",15]],[[["square",3]],["bool",15]],[[["brdidx",3]],["bool",15]],[[["board",3]],["bool",15]],null,[[["team",4],["strength",4]],["piece",3]],[[["squarestate",4],["option",4,[["piece",3]]]],["square",3]],[[["usize",15],["usize",15],["team",4]],["board",3]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[["team",4]],["usize",15]],null,null,[[["team",4],["strength",4]],["square",3]],[[["brdidx",3],["team",4]],["option",4,[["vec",3,[["usize",15]]]]]],[[["brdidx",3],["team",4]],["option",4,[["vec",3,[["usize",15]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["isize",15]],null,[[["usize",15],["square",3]]],null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["square",3]],[[["square",3],["piece",3]],["moveable",4]],[[["brdidx",3],["brdidx",3],["piece",3]],["moveable",4]],[[["brdidx",3],["brdidx",3],["piece",3]],["moveable",4]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["movetype",4]],[[],["team",4]],[[],["strength",4]],[[],["squarestate",4]],[[],["moveable",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["movetype",4]],["bool",15]],[[["team",4]],["bool",15]],[[["strength",4]],["bool",15]],[[["squarestate",4]],["bool",15]],[[["moveable",4]],["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]],[[]],[[]],[[]],[[]],[[]],[[["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]],[[["u32",15]],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[],["team",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["board",3]]],[[["board",3]]],[[["board",3]]],[[],["option",4,[["vec",3,[["usize",15]]]]]],[[],["option",4,[["vec",3,[["square",3]]]]]],[[],["option",4]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],null,null,null,[[["board",3]],["vec",3,[["move",3]]]],[[["board",3],["vec",3,[["isize",15]]]],["isize",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[["board",3]],["boardnode",3]],[[],["move",3]],[[],["boardnode",3]],[[]],[[]],[[["move",3]],["bool",15]],[[["boardnode",3]],["bool",15]],[[["arena",3],["vec",3,[["nodeid",3]]]],["vec",3,[["nodeid",3]]]],[[["arena",3],["nodeid",3]],["vec",3,[["nodeid",3]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],null,[[["arena",3],["board",3]],["nodeid",3]],[[["arena",3],["nodeid",3]],["vec",3,[["nodeid",3]]]],[[["board",3]],["option",4,[["board",3]]]],[[["boardnode",3]],["vec",3,[["boardnode",3]]]],[[["arena",3],["vec",3,[["nodeid",3]]]]],[[["arena",3],["vec",3,[["boardnode",3]]]],["vec",3,[["nodeid",3]]]],[[]],[[]],[[]],null,null,[[["move",3]],["bool",15]],[[["boardnode",3]],["bool",15]],[[["brdidx",3],["brdidx",3],["movetype",4]],["move",3]],[[["board",3],["isize",15]],["boardnode",3]],[[["usize",15],["team",4],["f64",15]],["computer",3]],null,[[["arena",3,[["boardnode",3]]],["nodeid",3]],["arena",3,[["boardnode",3]]]],[[["arena",3],["vec",3,[["nodeid",3]]],["threadrng",3]],["board",3]],null,null,null,null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],null,null,null,[[]],[[]],[[]],[[]],null,[[],["board",3]],[[]],[[],["usize",15]],[[["brdidx",3]],["square",3]],[[],["team",4]],[[]],[[]],[[["brdidx",3],["brdidx",3]]],[[["brdidx",3],["brdidx",3]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[["u32",15]]],[[],["option",4,[["team",4]]]],[[]],[[],["u32",15]],[[],["bool",15]],null,[[["brdidx",3],["brdidx",3]],["moveable",4]],[[["usize",15],["usize",15],["usize",15],["team",4],["usize",15]],["game",3]],[[["usize",15],["usize",15],["usize",15],["team",4],["usize",15],["str",15],["u32",15],["u32",15]],["game",3]],[[]],null,null,[[["usize",15]],["board",3]],null,[[["board",3]]],[[]],[[]],[[]],[[],["isize",15]],null,null,[[["board",3]]],[[["painter",3]]],[[["f64",15]]],[[["usize",15]]],[[["brdidx",3]]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],[[],["option",4,[["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,[[["formatter",3]],["result",6]],[[]],[[["u32",15]]],[[["str",15]],["htmlcanvaselement",3]],[[["htmlcanvaselement",3]],["canvasrenderingcontext2d",3]],null,[[]],[[],["u32",15]],[[],["bool",15]],null,[[["u32",15],["u32",15],["str",15]],["painter",3]],[[["u32",15],["u32",15],["htmlcanvaselement",3]],["painter",3]],[[]],null,null,null,[[]],[[]],[[]],[[]],null,null,null,[[["bool",15]]],[[["f64",15]]],[[["option",4]]],[[["jsvalue",3]]],null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["board",3]],["bool",15]],[[]],null,null,null,null,[[]]],"p":[[3,"Board"],[3,"Piece"],[3,"Direction"],[3,"Square"],[3,"BrdIdx"],[4,"Moveable"],[4,"Team"],[4,"SquareState"],[4,"MoveType"],[4,"Strength"],[3,"RowIndexIterator"],[3,"RowSquareIterator"],[3,"PieceIterator"],[3,"Computer"],[3,"BoardNode"],[3,"Move"],[3,"Game"],[3,"Painter"]]}\ +"draught":{"doc":"Draught","t":[17,0,0,0,5,14,14,0,0,3,3,3,3,17,17,3,17,17,17,17,17,17,17,17,17,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,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,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,11,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,12,13,13,13,13,13,13,13,13,13,4,4,13,13,13,13,4,4,4,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,3,3,12,12,12,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,3,3,3,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,12,11,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,17,17,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,12,12,11,12,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,17,17,17,17,17,17,17,17,17,3,17,17,17,17,17,17,12,12,12,11,11,12,12,11,11,12,11,11,11,11,11,12,11,11,11,12,11,11,11,12,12,12,11,11,11,11,12,12,12,11,11,11,11,12,11,11,11,11,11,12,12,12,12,5],"n":["__wasm_bindgen_generated_init_wasm__const","board","comp","game","init_wasm","log","log_error","paint","utils","Board","BrdIdx","Direction","Piece","STD_HEIGHT","STD_WIDTH","Square","__wbg_get_board_current_turn__const","__wbg_get_board_height__const","__wbg_get_board_width__const","__wbg_get_brdidx_col__const","__wbg_get_brdidx_row__const","__wbg_get_piece_strength__const","__wbg_get_piece_team__const","__wbg_get_square_occupant__const","__wbg_get_square_state__const","adjacent_dir","adjacent_indices","apply_jump","apply_move","board_index","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","can_move","cell","cell_idx","cell_index","cell_mut","cell_state","cells","cells","check_jumpee_team","check_kinged","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","col","current_turn","describe","describe","describe","describe","empty","empty","enums","eq","eq","eq","eq","eq","eq","filter_indices","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_abi","from_abi","from_abi","from_abi","grid_cell","height","idx_diffs","init_game","into","into","into","into","into","into_abi","into_abi","into_abi","into_abi","is_none","is_none","is_none","is_none","iter","jumpable_dir","jumpable_indices","jumpee_idx","king_row_idx","ne","ne","ne","ne","ne","ne","new","new","new","none","none","none","none","num_cells","num_pieces","num_player","nw","occupant","pc","player_adjacent_indices","player_jumpable_indices","ref_from_abi","ref_from_abi","ref_from_abi","ref_from_abi","ref_mut_from_abi","ref_mut_from_abi","ref_mut_from_abi","ref_mut_from_abi","return_abi","return_abi","return_abi","return_abi","row","score","se","set_cell","state","strength","sw","team","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unplay","validate_jumpee","validate_king_move","validate_man_move","vzip","vzip","vzip","vzip","vzip","width","Allowed","Black","Empty","IllegalTrajectory","Jump","JumpingSameTeam","King","Man","Move","MoveType","Moveable","NoJumpablePiece","Occupied","OccupiedDest","OutOfBounds","SquareState","Strength","Team","UnoccupiedSrc","Unplayable","Unplayable","White","WrongTeamSrc","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","describe","describe","describe","describe","describe","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from_abi","from_abi","from_abi","from_abi","from_abi","into","into","into","into","into","into_abi","into_abi","into_abi","into_abi","into_abi","is_none","is_none","is_none","is_none","is_none","none","none","none","none","none","opponent","return_abi","return_abi","return_abi","return_abi","return_abi","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","PieceIterator","RowIndexIterator","RowSquareIterator","board","board","board","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","from","from","from","index_cursor","index_iter","into","into","into","into_iter","into_iter","into_iter","new","new","new","next","next","next","row_cursor","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","BoardNode","Computer","Move","available_turns","best_score","board","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","brd","clone","clone","clone_into","clone_into","eq","eq","expand_layer","expand_node","fmt","fmt","fmt","from","from","from","from","gen_tree","get_leaf_nodes","get_move","get_move_boards","insert_board_scores","insert_boards","into","into","into","last_node_count","mv_type","ne","ne","new","new","new","perfect_chance","propagate_scores","random_choice","score","search_depth","team","to","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","Game","__wbg_get_game_last_node_count__const","__wbg_get_game_perfect_chance__const","ai_move","borrow","borrow_mut","clear_selected","current","current_board","current_board_cells","current_board_len","current_cell_state","current_turn","describe","draw","execute_jump","execute_move","fmt","fmt","from","from_abi","has_won","into","into_abi","is_none","last_node_count","make_move","new","new_with_canvas","none","painter","perfect_chance","previous_board","previous_boards","push_new_board","ref_from_abi","ref_mut_from_abi","return_abi","score","search_depth","selected_piece","set_current","set_painter","set_perfect_chance","set_search_depth","set_selected","to_string","try_from","try_into","type_id","vzip","winning","BLACK_PIECE","BLACK_PIECE_OUTLINE","BLACK_SQUARE","DRAW_OUTLINE","DRAW_PIECE_OUTLINES","KING_OUTLINE","OUTLINE_WIDTH","PIECE_OUTLINE_PROPORTION","PIECE_PROPORTION","Painter","SELECTED_PIECE","SELECTED_PIECE_OUTLINE","SQUARE_OUTLINE","WHITE_PIECE","WHITE_PIECE_OUTLINE","WHITE_SQUARE","black_piece","black_piece_line","black_square","borrow","borrow_mut","canvas","context","describe","draw","draw_outline","fmt","from","from_abi","get_canvas","get_canvas_context","height","into","into_abi","is_none","king_line","new","new_with_canvas","none","outline_width","piece_line_proportion","piece_lines","ref_from_abi","ref_mut_from_abi","reset_dimensions","return_abi","selected_idx","selected_piece","selected_piece_line","set_draw_outline","set_outline_width","set_selected","set_square_outline","square_outline","try_from","try_into","type_id","validate_board_dim","vzip","white_piece","white_piece_line","white_square","width","set_panic_hook"],"q":["draught","","","","","","","","","draught::board","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::board::enums","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::board::iter","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::comp","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::game","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::paint","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","draught::utils"],"d":["","Board module for components related to the checkers board …","AI player logic","Top-level object for managing Boards, applying and …","","Wrap the web_sys access to the browser console in a macro …","","Components for painting board states onto HTML canvases","","Single state of a checkers board","Rank 2 tensor index to identify a board square by row and …","Standard diagonal movements given by north west/east etc","Game piece given by its team and strength (normal or …","Standard height of a checkers board is 8 squares","Standard width of a checkers board is 8 squares","Board squares given by a state and a possible occupying …","","","","","","","","","","Get a Direction structure for the diagonally adjacent …","Get the 1D array indices for the diagonally adjacent …","Get new board derived from current with given jump applied","Get new board derived from current with given move applied","Transform a 1D array index (for Board::cells) into a 2D …","","","","","","","","","","","Check whether a move given by source and destination …","Get a copy of a board square by 1D array index","Similar to Board::cell_index but with a BrdIdx instead of …","Transform a 2D row/column board index into a single 1D …","Get a mutable reference to a board square by 1D array index","Get the state of a board square by 1D array index","Get a pointer to the backing array of board squares, …","1D backing array of board squares for the 2D game board","Check that the source piece and the jumpee are of opposing …","Check and apply king strength","","","","","","","","","","","","","","","","","Create an empty direction full of Option::None","Helper function for a well-formed empty square","","","","","","","","Filter an array of diagonal indices (Like those from …","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","Get a copy of a board square by 2D BrdIdx index","","Get the difference between two BrdIdx objects","Reset the given board to a starting layout with 3 rows of …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","Get a Direction structure for the diagonally jumpable …","Get the 1D array indices for the diagonally jumpable …","Get cell index of jumpee square given from and to locations","Get row index for current team, top row for black, bottom …","","","","","","North East","","Standard constructor function to form square from state …","Initialise a game board without game pieces","","","","","Get the number of board squares","Get the number of remaining pieces","Get the number of remaining pieces for a player","North West ","Game piece if square is occupied","Helper function for a well-formed piece square by team and …","","","","","","","","","","","","","","","","Get the score value, Black - White pieces","South East","Get a copy of a board square by 1D array index","Description of whether the square is occupied or an …","","South West","","","","","","","","","","","","","","","","","","","","","","","","Helper function for a well-formed unplayable square","Unwrap the jumpee piece from the square and …","Check that given move trajectory is valid for a king piece ","Check that given move trajectory is valid for a man piece ","","","","","","","","","","","","","","","","Move/Jump, for use in Move","Possible outcomes of trying to move","","","","","Model board square as Empty/Occupied/Unplayable","Man/King","Black/White","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","Get opposing team","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","Get next item from the iterator","Get next item from the iterator","Get next item from the iterator","","","","","","","","","","","","","","For storing boards in the AI tree, stores board with score …","Root-level structure for managing the game as a collection …","Represents a move by source/destination indices and the …","Get vector of available moves for a given board","Get best of given scores for given team","","","","","","","","","","","","","","","Expand all given nodes and return newly inserted layer of …","Insert all possible next boards as children of given board …","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Generate tree of boards to given search depth, return root …","Traverse tree from given root ID and get NodeIDs of leaf …","Get a new board based on the given using MiniMax to make …","Get all possible next boards from given board","For given NodeIDs, insert score of board into tree Used …","Insert given boards into tree","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","Propagate scores up the tree employing MiniMax algorithm","Get a random board from possible node IDs and associated …","","","","","","","","","","","","","","","","","","","Root-level structure for managing the game as a collection …","","","Create computer, get move from current board and update …","","","Clear currently selected piece","","Set current board to given","Get pointer to current board’s squares","Get pointer to current board’s squares","Get square on current board for given index","Current turn’s team","","Draw current board using painter if exists","Update board state with given jump move and push new board …","Update board state with given move and push new board into …","","","Returns the argument unchanged.","","Check if a player has won","Calls U::from(self).","","","","Attempt to make a move given a source and destination index","Get new game without board renderer","Get a new game with canvas ID and dimensions","","","","Get a read-only copy of a previous turn’s board","","Push current board into the previous turns and set given …","","","","Current board’s score","","","Set current board to given","Set painter for rendering boards","Set proportion of perfect moves from AI","Set tree depth for AI to search to","Set given index as selected piece TODO: Check whether …","","","","","","Get currently winning player","Default hex colour value for black pieces","Default hex colour value for black piece outline","Default hex colour value for black square background","Whether to outline black squares","Whether to outline pieces","Default hex colour value for black piece outline","Line width when outlining black squares as proportion of …","Line width for outlining pieces as proportion of piece …","Proportion of square that piece fills as proportion of min …","Used to paint boards onto HTML canvases","Default hex colour value for selected piece","Default hex colour value for selected piece outline","Default hex colour value for outline of black squares","Default hex colour value for white pieces","Default hex colour value for white piece outline","Default hex colour value for white square background","","","","","","","","","Draw a board onto the canvas","","","Returns the argument unchanged.","","Get a canvas by element ID","Get a 2D canvas context for a given canvas","","Calls U::from(self).","","","","Default constructor which queries for canvas by ID","Constructor with given canvas element","","","","","","","Reset the canvas dimensions to the given width and height","","","","","Set whether squares are outlined","Set new line width for outlining squares","Set selected piece by board index","Set new square outline colour value","","","","","Check whether given canvas dimensions divide evenly by …","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,1,2,3,4,5,1,1,1,1,1,1,1,1,1,1,1,2,3,4,5,1,2,3,4,5,1,5,1,2,4,5,1,3,4,0,2,3,4,5,5,1,1,2,3,4,5,5,1,1,2,3,4,5,5,1,2,4,5,1,1,1,1,1,2,3,4,5,1,2,4,5,1,2,4,5,1,0,1,1,1,1,2,3,4,5,1,3,2,4,1,2,4,5,1,1,1,1,3,4,4,1,1,2,4,5,1,2,4,5,1,2,4,5,1,5,1,3,1,4,2,3,2,2,3,4,5,1,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,4,1,1,1,2,3,4,5,1,1,6,7,8,6,9,6,10,10,9,0,0,6,8,6,6,0,0,0,6,8,6,7,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,7,10,8,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,7,9,7,10,8,6,9,7,10,8,6,7,8,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,9,7,10,8,6,0,0,0,11,12,13,11,12,13,11,12,13,11,12,13,13,12,11,12,13,11,12,13,11,12,13,11,12,13,11,11,12,13,11,12,13,11,12,13,11,12,13,0,0,0,14,14,15,16,15,14,16,15,14,15,16,15,16,15,16,15,14,14,16,15,14,16,15,14,16,14,14,14,14,14,14,16,15,14,14,16,16,15,16,15,14,14,14,14,15,14,14,16,16,15,16,15,14,16,15,14,16,15,14,16,15,14,0,0,0,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,0],"f":[null,null,null,null,[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0],["brdidx",3]],["option",4,[["direction",3,[["square",3]]]]]],[[["",0],["brdidx",3]],["option",4,[["vec",3,[["usize",0]]]]]],[[["",0],["brdidx",3],["brdidx",3]],["board",3]],[[["",0],["brdidx",3],["brdidx",3]],["board",3]],[[["",0],["usize",0]],["brdidx",3]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0],["brdidx",3],["brdidx",3]],["moveable",4]],[[["",0],["usize",0]],["square",3]],[[["",0],["brdidx",3]],["usize",0]],[[["",0],["usize",0],["usize",0]],["usize",0]],[[["",0],["usize",0]],["square",3]],[[["",0],["usize",0]],["squarestate",4]],[[["",0]]],null,[[["piece",3],["piece",3]],["bool",0]],[[["board",3],["brdidx",3]]],[[["",0]],["piece",3]],[[["",0]],["direction",3]],[[["",0]],["square",3]],[[["",0]],["brdidx",3]],[[["",0]],["board",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,null,[[]],[[]],[[]],[[]],[[],["direction",3]],[[],["square",3]],null,[[["",0],["piece",3]],["bool",0]],[[["",0],["direction",3]],["bool",0]],[[["",0],["square",3]],["bool",0]],[[["",0],["brdidx",3]],["bool",0]],[[["",0],["brdidx",3]],["bool",0]],[[["",0],["board",3]],["bool",0]],[[["",0],["brdidx",3],["team",4],["vec",3,[["usize",0]]]],["vec",3,[["usize",0]]]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],[[]],[[["usize",0],["usize",0]],["brdidx",3]],[[]],[[]],[[["u32",0]]],[[["u32",0]]],[[["u32",0]]],[[["u32",0]]],[[["",0],["brdidx",3]],["square",3]],null,[[["brdidx",3],["brdidx",3]]],[[["board",3],["usize",0]],["board",3]],[[]],[[]],[[]],[[]],[[]],[[],["u32",0]],[[],["u32",0]],[[],["u32",0]],[[],["u32",0]],[[],["bool",0]],[[],["bool",0]],[[],["bool",0]],[[],["bool",0]],null,[[["",0],["brdidx",3]],["option",4,[["direction",3,[["square",3]]]]]],[[["",0],["brdidx",3]],["option",4,[["vec",3,[["usize",0]]]]]],[[["",0],["brdidx",3],["brdidx",3]],["usize",0]],[[["",0]],["usize",0]],[[["",0],["piece",3]],["bool",0]],[[["",0],["direction",3]],["bool",0]],[[["",0],["square",3]],["bool",0]],[[["",0],["brdidx",3]],["bool",0]],[[["",0],["board",3]],["bool",0]],null,[[["team",4],["strength",4]],["piece",3]],[[["squarestate",4],["option",4,[["piece",3]]]],["square",3]],[[["usize",0],["usize",0],["team",4]],["board",3]],[[]],[[]],[[]],[[]],[[["",0]],["usize",0]],[[["",0]],["usize",0]],[[["",0],["team",4]],["usize",0]],null,null,[[["team",4],["strength",4]],["square",3]],[[["",0],["brdidx",3],["team",4]],["option",4,[["vec",3,[["usize",0]]]]]],[[["",0],["brdidx",3],["team",4]],["option",4,[["vec",3,[["usize",0]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[["",0]],["isize",0]],null,[[["",0],["usize",0],["square",3]]],null,null,null,null,[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[],["square",3]],[[["square",3],["piece",3]],["moveable",4]],[[["",0],["brdidx",3],["brdidx",3],["piece",3]],["moveable",4]],[[["",0],["brdidx",3],["brdidx",3],["piece",3]],["moveable",4]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["movetype",4]],[[["",0]],["team",4]],[[["",0]],["strength",4]],[[["",0]],["squarestate",4]],[[["",0]],["moveable",4]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[]],[[]],[[]],[[]],[[]],[[["",0],["movetype",4]],["bool",0]],[[["",0],["team",4]],["bool",0]],[[["",0],["strength",4]],["bool",0]],[[["",0],["squarestate",4]],["bool",0]],[[["",0],["moveable",4]],["bool",0]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["u32",0]]],[[["u32",0]]],[[["u32",0]]],[[["u32",0]]],[[["u32",0]]],[[]],[[]],[[]],[[]],[[]],[[],["u32",0]],[[],["u32",0]],[[],["u32",0]],[[],["u32",0]],[[],["u32",0]],[[["u32",0]],["bool",0]],[[["u32",0]],["bool",0]],[[["u32",0]],["bool",0]],[[["u32",0]],["bool",0]],[[["u32",0]],["bool",0]],[[]],[[]],[[]],[[]],[[]],[[["",0]],["team",4]],[[]],[[]],[[]],[[]],[[]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[]],[[]],[[]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["board",3]]],[[["board",3]]],[[["board",3]]],[[["",0]],["option",4,[["vec",3,[["usize",0]]]]]],[[["",0]],["option",4,[["vec",3,[["square",3]]]]]],[[["",0]],["option",4]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],null,null,null,[[["",0],["board",3]],["vec",3,[["move",3]]]],[[["board",3],["vec",3,[["isize",0]]]],["isize",0]],null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["board",3]],["boardnode",3]],[[["",0]],["move",3]],[[["",0]],["boardnode",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["move",3]],["bool",0]],[[["",0],["boardnode",3]],["bool",0]],[[["",0],["arena",3],["vec",3,[["nodeid",3]]]],["vec",3,[["nodeid",3]]]],[[["",0],["arena",3],["nodeid",3]],["vec",3,[["nodeid",3]]]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],[[]],null,[[["",0],["arena",3],["board",3]],["nodeid",3]],[[["",0],["arena",3],["nodeid",3]],["vec",3,[["nodeid",3]]]],[[["",0],["board",3]],["option",4,[["board",3]]]],[[["",0],["boardnode",3]],["vec",3,[["boardnode",3]]]],[[["",0],["arena",3],["vec",3,[["nodeid",3]]]]],[[["",0],["arena",3],["vec",3,[["boardnode",3]]]],["vec",3,[["nodeid",3]]]],[[]],[[]],[[]],null,null,[[["",0],["move",3]],["bool",0]],[[["",0],["boardnode",3]],["bool",0]],[[["brdidx",3],["brdidx",3],["movetype",4]],["move",3]],[[["board",3],["isize",0]],["boardnode",3]],[[["usize",0],["team",4],["f64",0]],["computer",3]],null,[[["arena",3,[["boardnode",3]]],["nodeid",3]],["arena",3,[["boardnode",3]]]],[[["arena",3],["vec",3,[["nodeid",3]]],["threadrng",3]],["board",3]],null,null,null,null,[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],null,null,null,[[["",0]]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]]],null,[[["",0]],["board",3]],[[["",0]]],[[["",0]],["usize",0]],[[["",0],["brdidx",3]],["square",3]],[[["",0]],["team",4]],[[]],[[["",0]]],[[["",0],["brdidx",3],["brdidx",3]]],[[["",0],["brdidx",3],["brdidx",3]]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[]],[[["u32",0]]],[[["",0]],["option",4,[["team",4]]]],[[]],[[],["u32",0]],[[],["bool",0]],null,[[["",0],["brdidx",3],["brdidx",3]],["moveable",4]],[[["usize",0],["usize",0],["usize",0],["team",4],["usize",0]],["game",3]],[[["usize",0],["usize",0],["usize",0],["team",4],["usize",0],["str",0],["u32",0],["u32",0]],["game",3]],[[]],null,null,[[["",0],["usize",0]],["board",3]],null,[[["",0],["board",3]]],[[]],[[]],[[]],[[["",0]],["isize",0]],null,null,[[["",0],["board",3]]],[[["",0],["painter",3]]],[[["",0],["f64",0]]],[[["",0],["usize",0]]],[[["",0],["brdidx",3]]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],[[["",0]],["option",4,[["team",4]]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],null,null,[[]],[[["",0],["board",3]]],null,[[["",0],["formatter",3]],["result",6]],[[]],[[["u32",0]]],[[["str",0]],["htmlcanvaselement",3]],[[["htmlcanvaselement",3]],["canvasrenderingcontext2d",3]],null,[[]],[[],["u32",0]],[[],["bool",0]],null,[[["u32",0],["u32",0],["str",0]],["painter",3]],[[["u32",0],["u32",0],["htmlcanvaselement",3]],["painter",3]],[[]],null,null,null,[[]],[[]],[[["",0]]],[[]],null,null,null,[[["",0],["bool",0]]],[[["",0],["f64",0]]],[[["",0],["option",4]]],[[["",0],["jsvalue",3]]],null,[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0],["board",3]],["bool",0]],[[]],null,null,null,null,[[]]],"p":[[3,"Board"],[3,"Piece"],[3,"Direction"],[3,"Square"],[3,"BrdIdx"],[4,"Moveable"],[4,"Team"],[4,"SquareState"],[4,"MoveType"],[4,"Strength"],[3,"RowIndexIterator"],[3,"RowSquareIterator"],[3,"PieceIterator"],[3,"Computer"],[3,"BoardNode"],[3,"Move"],[3,"Game"],[3,"Painter"]]}\ }'); if (window.initSearch) {window.initSearch(searchIndex)}; \ No newline at end of file diff --git a/doc/search.js b/doc/search.js index eb6d6f7..a8026db 100644 --- a/doc/search.js +++ b/doc/search.js @@ -1 +1,2 @@ -(function(){var itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias",];var TY_PRIMITIVE=itemTypes.indexOf("primitive");var TY_KEYWORD=itemTypes.indexOf("keyword");function printTab(nb){if(nb===0||nb===1||nb===2){searchState.currentTab=nb}var nb_copy=nb;onEachLazy(document.getElementById("titles").childNodes,function(elem){if(nb_copy===0){addClass(elem,"selected")}else{removeClass(elem,"selected")}nb_copy-=1});onEachLazy(document.getElementById("results").childNodes,function(elem){if(nb===0){addClass(elem,"active")}else{removeClass(elem,"active")}nb-=1})}function removeEmptyStringsFromArray(x){for(var i=0,len=x.length;i-1){var obj=searchIndex[result.id];obj.lev=result.lev;var res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates[obj.fullPath]){continue}duplicates[obj.fullPath]=true;obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType){var ar=[];for(var entry in results){if(hasOwnPropertyRustdoc(results,entry)){var result=results[entry];result.word=searchWords[result.id];result.item=searchIndex[result.id]||{};ar.push(result)}}results=ar;if(results.length===0){return[]}results.sort(function(aaa,bbb){var a,b;a=(aaa.word!==val);b=(bbb.word!==val);if(a!==b){return a-b}a=(aaa.lev);b=(bbb.lev);if(a!==b){return a-b}a=(aaa.item.crate!==window.currentCrate);b=(bbb.item.crate!==window.currentCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});for(var i=0,len=results.length;i"));return{name:val.substring(0,val.indexOf("<")),generics:values.split(/\s*,\s*/),}}return{name:val,generics:[],}}function checkGenerics(obj,val){var tmp_lev,elem_name;if(val.generics.length>0){if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>=val.generics.length){var elems=Object.create(null);var elength=obj[GENERICS_DATA].length;for(var x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length>0){var elems=Object.create(null);len=obj[GENERICS_DATA].length;for(x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length!==0){tmp_lev=checkGenerics(obj,val);if(tmp_lev<=MAX_LEV_DISTANCE){return tmp_lev}}}}else if(literalSearch){var found=false;if((!val.generics||val.generics.length===0)&&obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){found=obj[GENERICS_DATA].some(function(gen){return gen[NAME]===val.name})}return found?0:MAX_LEV_DISTANCE+1}lev_distance=Math.min(levenshtein(obj[NAME],val.name),lev_distance);if(lev_distance<=MAX_LEV_DISTANCE){lev_distance=Math.ceil((checkGenerics(obj,val)+lev_distance)/2)}if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){var olength=obj[GENERICS_DATA].length;for(x=0;x0){var length=obj.type[INPUTS_DATA].length;for(var i=0;iOUTPUT_DATA){var ret=obj.type[OUTPUT_DATA];if(typeof ret[0]==="string"){ret=[ret]}for(var x=0,len=ret.length;xlength){return MAX_LEV_DISTANCE+1}for(var i=0;ilength){break}var lev_total=0;var aborted=false;for(var x=0;xMAX_LEV_DISTANCE){aborted=true;break}lev_total+=lev}if(!aborted){ret_lev=Math.min(ret_lev,Math.round(lev_total/clength))}}return ret_lev}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER)return true;if(filter===type)return true;var name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,}}function handleAliases(ret,query,filterCrates){var aliases=[];var crateAliases=[];if(filterCrates!==undefined){if(ALIASES[filterCrates]&&ALIASES[filterCrates][query.search]){var query_aliases=ALIASES[filterCrates][query.search];var len=query_aliases.length;for(var i=0;iMAX_RESULTS){ret.others.pop()}};onEach(aliases,pushFunc);onEach(crateAliases,pushFunc)}function addIntoResults(isExact,res,fullId,id,index,lev){if(lev===0||(!isExact&&lev<=MAX_LEV_DISTANCE)){if(res[fullId]!==undefined){var result=res[fullId];if(result.dontValidate||result.lev<=lev){return}}res[fullId]={id:id,index:index,dontValidate:isExact,lev:lev,}}}var nSearchWords=searchWords.length;var i,it;var ty;var fullId;var returned;var in_args;var len;if((val.charAt(0)==="\""||val.charAt(0)==="'")&&val.charAt(val.length-1)===val.charAt(0)){val=extractGenerics(val.substr(1,val.length-2));for(i=0;i")>-1){var trimmer=function(s){return s.trim()};var parts=val.split("->").map(trimmer);var input=parts[0];var inputs=input.split(",").map(trimmer).sort();for(i=0,len=inputs.length;i0){firstNonZeroDistance=distance;break}}in_args=firstNonZeroDistance}addIntoResults(true,results_in_args,fullId,i,-1,in_args);addIntoResults(true,results_returned,fullId,i,-1,returned);if(is_module){addIntoResults(true,results,fullId,i,-1,0)}}}query.inputs=inputs.map(function(input){return input.name});query.output=output.name}else{query.inputs=[val];query.output=val;query.search=val;val=val.replace(/_/g,"");var valGenerics=extractGenerics(val);var paths=valLower.split("::");removeEmptyStringsFromArray(paths);val=paths[paths.length-1];var contains=paths.slice(0,paths.length>1?paths.length-1:1);var lev,j;for(j=0;j1){lev=checkPath(contains,paths[paths.length-1],ty);if(lev>MAX_LEV_DISTANCE){continue}else if(lev>0){lev_add=lev/10}}returned=MAX_LEV_DISTANCE+1;in_args=MAX_LEV_DISTANCE+1;var index=-1;lev=MAX_LEV_DISTANCE+1;fullId=ty.id;if(searchWords[j].indexOf(split[i])>-1||searchWords[j].indexOf(val)>-1||ty.normalizedName.indexOf(val)>-1){if(typePassesFilter(typeFilter,ty.ty)&&results[fullId]===undefined){index=ty.normalizedName.indexOf(val)}}if((lev=levenshtein(searchWords[j],val))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)){lev+=1}else{lev=MAX_LEV_DISTANCE+1}}in_args=findArg(ty,valGenerics,false,typeFilter);returned=checkReturned(ty,valGenerics,false,typeFilter);lev+=lev_add;if(lev>0&&val.length>3&&searchWords[j].indexOf(val)>-1){if(val.length<6){lev-=1}else{lev=0}}addIntoResults(false,results_in_args,fullId,j,index,in_args);addIntoResults(false,results_returned,fullId,j,index,returned);if(typePassesFilter(typeFilter,ty.ty)&&(index!==-1||lev<=MAX_LEV_DISTANCE)){if(index!==-1&&paths.length<2){lev=0}addIntoResults(false,results,fullId,j,index,lev)}}}var ret={"in_args":sortResults(results_in_args,true),"returned":sortResults(results_returned,true),"others":sortResults(results,false),};handleAliases(ret,query,filterCrates);return ret}function validateResult(name,path,keys,parent){for(var i=0,len=keys.length;i-1||path.indexOf(keys[i])>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(keys[i])>-1)||levenshtein(name,keys[i])<=MAX_LEV_DISTANCE)){return false}}return true}function getQuery(raw){var matches,type="",query;query=raw;matches=query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i);if(matches){type=matches[1].replace(/^const$/,"constant");query=query.substring(matches[0].length)}return{raw:raw,query:query,type:type,id:query+type}}function nextTab(direction){var next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){var target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#titles > button").item(searchState.currentTab);if(target){target.focus()}}function buildHrefAndPath(item){var displayPath;var href;var type=itemTypes[item.ty];var name=item.name;var path=item.path;if(type==="mod"){displayPath=path+"::";href=window.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="primitive"||type==="keyword"){displayPath="";href=window.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=window.rootPath+name+"/index.html"}else if(item.parent!==undefined){var myparent=item.parent;var anchor="#"+type+"."+name;var parentType=itemTypes[myparent.ty];var pageType=parentType;var pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){var enumNameIdx=item.path.lastIndexOf("::");var enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=window.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=window.rootPath+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function escape(content){var h1=document.createElement("h1");h1.textContent=content;return h1.innerHTML}function pathSplitter(path){var tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){var extraClass="";if(display===true){extraClass=" active"}var output=document.createElement("div");var length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(function(item){var name=item.name;var type=itemTypes[item.ty];length+=1;var extra="";if(type==="primitive"){extra=" (primitive type)"}else if(type==="keyword"){extra=" (keyword)"}var link=document.createElement("a");link.className="result-"+type;link.href=item.href;var wrapper=document.createElement("div");var resultName=document.createElement("div");resultName.className="result-name";if(item.is_alias){var alias=document.createElement("span");alias.className="alias";var bold=document.createElement("b");bold.innerText=item.alias;alias.appendChild(bold);alias.insertAdjacentHTML("beforeend"," - see ");resultName.appendChild(alias)}resultName.insertAdjacentHTML("beforeend",item.displayPath+""+name+extra+"");wrapper.appendChild(resultName);var description=document.createElement("div");description.className="desc";var spanDesc=document.createElement("span");spanDesc.insertAdjacentHTML("beforeend",item.desc);description.appendChild(spanDesc);wrapper.appendChild(description);link.appendChild(wrapper);output.appendChild(link)})}else{output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first){var search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true"&&(!search.firstChild||search.firstChild.innerText!==searchState.loadingText))){var elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}var query=getQuery(searchState.input.value);currentResults=query.id;var ret_others=addTab(results.others,query,true);var ret_in_args=addTab(results.in_args,query,false);var ret_returned=addTab(results.returned,query,false);var currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}var output="

Results for "+escape(query.query)+(query.type?" (type: "+escape(query.type)+")":"")+"

"+"
"+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
";var resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;search.appendChild(resultsElem);searchState.focusedByTab=[null,null,null];searchState.showResults(search);var elems=document.getElementById("titles").childNodes;elems[0].onclick=function(){printTab(0)};elems[1].onclick=function(){printTab(1)};elems[2].onclick=function(){printTab(2)};printTab(currentTab)}function execSearch(query,searchWords,filterCrates){function getSmallest(arrays,positions,notDuplicates){var start=null;for(var it=0,len=positions.length;itpositions[it]&&(start===null||start>arrays[it][positions[it]].lev)&&!notDuplicates[arrays[it][positions[it]].fullPath]){start=arrays[it][positions[it]].lev}}return start}function mergeArrays(arrays){var ret=[];var positions=[];var notDuplicates={};for(var x=0,arrays_len=arrays.length;xpositions[x]&&arrays[x][positions[x]].lev===smallest&&!notDuplicates[arrays[x][positions[x]].fullPath]){ret.push(arrays[x][positions[x]]);notDuplicates[arrays[x][positions[x]].fullPath]=true;positions[x]+=1}}}return ret}function tokenizeQuery(raw){var i,matched;var l=raw.length;var depth=0;var nextAngle=/(<|>)/g;var ret=[];var start=0;for(i=0;i'){depth+=1}break;case">":if(depth>0){depth-=1}break;case",":if(depth===0){ret.push(raw.substring(start,i));start=i+1}break}}if(start!==i){ret.push(raw.substring(start,i))}return ret}var queries=tokenizeQuery(query.raw);var results={"in_args":[],"returned":[],"others":[],};for(var i=0,len=queries.length;i1){return{"in_args":mergeArrays(results.in_args),"returned":mergeArrays(results.returned),"others":mergeArrays(results.others),}}return{"in_args":results.in_args[0],"returned":results.returned[0],"others":results.others[0],}}function getFilterCrates(){var elem=document.getElementById("crate-search");if(elem&&elem.value!=="All crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return undefined}function search(e,forced){var params=searchState.getQueryStringParams();var query=getQuery(searchState.input.value.trim());if(e){e.preventDefault()}if(query.query.length===0){return}if(!forced&&query.id===currentResults){if(query.query.length>0){searchState.putBackSearch(searchState.input)}return}searchState.title="Results for "+query.query+" - Rust";if(searchState.browserSupportsHistoryApi()){var newURL=getNakedUrl()+"?search="+encodeURIComponent(query.raw)+window.location.hash;if(!history.state&&!params.search){history.pushState(query,"",newURL)}else{history.replaceState(query,"",newURL)}}var filterCrates=getFilterCrates();showResults(execSearch(query,searchWords,filterCrates),params["go_to_first"])}function buildIndex(rawSearchIndex){searchIndex=[];var searchWords=[];var i,word;var currentIndex=0;var id=0;for(var crate in rawSearchIndex){if(!hasOwnPropertyRustdoc(rawSearchIndex,crate)){continue}var crateSize=0;var crateCorpus=rawSearchIndex[crate];searchWords.push(crate);var crateRow={crate:crate,ty:1,name:crate,path:"",desc:crateCorpus.doc,parent:undefined,type:null,id:id,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),};id+=1;searchIndex.push(crateRow);currentIndex+=1;var itemTypes=crateCorpus.t;var itemNames=crateCorpus.n;var itemPaths=crateCorpus.q;var itemDescs=crateCorpus.d;var itemParentIdxs=crateCorpus.i;var itemFunctionSearchTypes=crateCorpus.f;var paths=crateCorpus.p;var aliases=crateCorpus.a;var len=paths.length;for(i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:itemFunctionSearchTypes[i],id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){ALIASES[crate]={};var j,local_aliases;for(var alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}if(!hasOwnPropertyRustdoc(ALIASES[crate],alias_name)){ALIASES[crate][alias_name]=[]}local_aliases=aliases[alias_name];for(j=0,len=local_aliases.length;j0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=function(){var qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}searchWords=buildIndex(rawSearchIndex);registerSearchEvents();if(searchState.getQueryStringParams().search){search()}};if(window.searchIndex!==undefined){initSearch(window.searchIndex)}})() \ No newline at end of file +(function(){var itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias",];var TY_PRIMITIVE=itemTypes.indexOf("primitive");var TY_KEYWORD=itemTypes.indexOf("keyword");function printTab(nb){if(nb===0||nb===1||nb===2){searchState.currentTab=nb}var nb_copy=nb;onEachLazy(document.getElementById("titles").childNodes,function(elem){if(nb_copy===0){addClass(elem,"selected")}else{removeClass(elem,"selected")}nb_copy-=1});onEachLazy(document.getElementById("results").childNodes,function(elem){if(nb===0){addClass(elem,"active")}else{removeClass(elem,"active")}nb-=1})}function removeEmptyStringsFromArray(x){for(var i=0,len=x.length;i-1){var obj=searchIndex[result.id];obj.lev=result.lev;var res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates[obj.fullPath]){continue}duplicates[obj.fullPath]=true;obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType){var ar=[];for(var entry in results){if(hasOwnPropertyRustdoc(results,entry)){var result=results[entry];result.word=searchWords[result.id];result.item=searchIndex[result.id]||{};ar.push(result)}}results=ar;if(results.length===0){return[]}results.sort(function(aaa,bbb){var a,b;a=(aaa.word!==val);b=(bbb.word!==val);if(a!==b){return a-b}a=(aaa.lev);b=(bbb.lev);if(a!==b){return a-b}a=(aaa.item.crate!==window.currentCrate);b=(bbb.item.crate!==window.currentCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});for(var i=0,len=results.length;i"));return{name:val.substring(0,val.indexOf("<")),generics:values.split(/\s*,\s*/),}}return{name:val,generics:[],}}function checkGenerics(obj,val){var tmp_lev,elem_name;if(val.generics.length>0){if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>=val.generics.length){var elems=Object.create(null);var elength=obj[GENERICS_DATA].length;for(var x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length>0){var elems=Object.create(null);len=obj[GENERICS_DATA].length;for(x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length!==0){tmp_lev=checkGenerics(obj,val);if(tmp_lev<=MAX_LEV_DISTANCE){return tmp_lev}}}}else if(literalSearch){var found=false;if((!val.generics||val.generics.length===0)&&obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){found=obj[GENERICS_DATA].some(function(gen){return gen[NAME]===val.name})}return found?0:MAX_LEV_DISTANCE+1}lev_distance=Math.min(levenshtein(obj[NAME],val.name),lev_distance);if(lev_distance<=MAX_LEV_DISTANCE){lev_distance=Math.ceil((checkGenerics(obj,val)+lev_distance)/2)}if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){var olength=obj[GENERICS_DATA].length;for(x=0;x0){var length=obj.type[INPUTS_DATA].length;for(var i=0;iOUTPUT_DATA){var ret=obj.type[OUTPUT_DATA];if(typeof ret[0]==="string"){ret=[ret]}for(var x=0,len=ret.length;xlength){return MAX_LEV_DISTANCE+1}for(var i=0;ilength){break}var lev_total=0;var aborted=false;for(var x=0;xMAX_LEV_DISTANCE){aborted=true;break}lev_total+=lev}if(!aborted){ret_lev=Math.min(ret_lev,Math.round(lev_total/clength))}}return ret_lev}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;var name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,}}function handleAliases(ret,query,filterCrates){var aliases=[];var crateAliases=[];if(filterCrates!==null){if(ALIASES[filterCrates]&&ALIASES[filterCrates][query.search]){var query_aliases=ALIASES[filterCrates][query.search];var len=query_aliases.length;for(var i=0;iMAX_RESULTS){ret.others.pop()}};onEach(aliases,pushFunc);onEach(crateAliases,pushFunc)}function addIntoResults(isExact,res,fullId,id,index,lev){if(lev===0||(!isExact&&lev<=MAX_LEV_DISTANCE)){if(res[fullId]!==undefined){var result=res[fullId];if(result.dontValidate||result.lev<=lev){return}}res[fullId]={id:id,index:index,dontValidate:isExact,lev:lev,}}}var nSearchWords=searchWords.length;var i,it;var ty;var fullId;var returned;var in_args;var len;if((val.charAt(0)==="\""||val.charAt(0)==="'")&&val.charAt(val.length-1)===val.charAt(0)){val=extractGenerics(val.substr(1,val.length-2));for(i=0;i")>-1){var trimmer=function(s){return s.trim()};var parts=val.split("->").map(trimmer);var input=parts[0];var inputs=input.split(",").map(trimmer).sort();for(i=0,len=inputs.length;i0){firstNonZeroDistance=distance;break}}in_args=firstNonZeroDistance}addIntoResults(true,results_in_args,fullId,i,-1,in_args);addIntoResults(true,results_returned,fullId,i,-1,returned);if(is_module){addIntoResults(true,results,fullId,i,-1,0)}}}query.inputs=inputs.map(function(input){return input.name});query.output=output.name}else{query.inputs=[val];query.output=val;query.search=val;val=val.replace(/_/g,"");var valGenerics=extractGenerics(val);var paths=valLower.split("::");removeEmptyStringsFromArray(paths);val=paths[paths.length-1];var contains=paths.slice(0,paths.length>1?paths.length-1:1);var lev,j;for(j=0;j1){lev=checkPath(contains,paths[paths.length-1],ty);if(lev>MAX_LEV_DISTANCE){continue}else if(lev>0){lev_add=lev/10}}returned=MAX_LEV_DISTANCE+1;in_args=MAX_LEV_DISTANCE+1;var index=-1;lev=MAX_LEV_DISTANCE+1;fullId=ty.id;if(searchWords[j].indexOf(split[i])>-1||searchWords[j].indexOf(val)>-1||ty.normalizedName.indexOf(val)>-1){if(typePassesFilter(typeFilter,ty.ty)&&results[fullId]===undefined){index=ty.normalizedName.indexOf(val)}}if((lev=levenshtein(searchWords[j],val))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)){lev+=1}else{lev=MAX_LEV_DISTANCE+1}}in_args=findArg(ty,valGenerics,false,typeFilter);returned=checkReturned(ty,valGenerics,false,typeFilter);lev+=lev_add;if(lev>0&&val.length>3&&searchWords[j].indexOf(val)>-1){if(val.length<6){lev-=1}else{lev=0}}addIntoResults(false,results_in_args,fullId,j,index,in_args);addIntoResults(false,results_returned,fullId,j,index,returned);if(typePassesFilter(typeFilter,ty.ty)&&(index!==-1||lev<=MAX_LEV_DISTANCE)){if(index!==-1&&paths.length<2){lev=0}addIntoResults(false,results,fullId,j,index,lev)}}}var ret={"in_args":sortResults(results_in_args,true),"returned":sortResults(results_returned,true),"others":sortResults(results,false),};handleAliases(ret,query,filterCrates);return ret}function validateResult(name,path,keys,parent){for(var i=0,len=keys.length;i-1||path.indexOf(keys[i])>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(keys[i])>-1)||levenshtein(name,keys[i])<=MAX_LEV_DISTANCE)){return false}}return true}function getQuery(raw){var matches,type="",query;query=raw;matches=query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i);if(matches){type=matches[1].replace(/^const$/,"constant");query=query.substring(matches[0].length)}return{raw:raw,query:query,type:type,id:query+type}}function nextTab(direction){var next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){var target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#titles > button").item(searchState.currentTab);if(target){target.focus()}}function buildHrefAndPath(item){var displayPath;var href;var type=itemTypes[item.ty];var name=item.name;var path=item.path;if(type==="mod"){displayPath=path+"::";href=window.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="primitive"||type==="keyword"){displayPath="";href=window.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=window.rootPath+name+"/index.html"}else if(item.parent!==undefined){var myparent=item.parent;var anchor="#"+type+"."+name;var parentType=itemTypes[myparent.ty];var pageType=parentType;var pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){var enumNameIdx=item.path.lastIndexOf("::");var enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=window.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=window.rootPath+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function escape(content){var h1=document.createElement("h1");h1.textContent=content;return h1.innerHTML}function pathSplitter(path){var tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){var extraClass="";if(display===true){extraClass=" active"}var output=document.createElement("div");var length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(function(item){var name=item.name;var type=itemTypes[item.ty];length+=1;var extra="";if(type==="primitive"){extra=" (primitive type)"}else if(type==="keyword"){extra=" (keyword)"}var link=document.createElement("a");link.className="result-"+type;link.href=item.href;var wrapper=document.createElement("div");var resultName=document.createElement("div");resultName.className="result-name";if(item.is_alias){var alias=document.createElement("span");alias.className="alias";var bold=document.createElement("b");bold.innerText=item.alias;alias.appendChild(bold);alias.insertAdjacentHTML("beforeend"," - see ");resultName.appendChild(alias)}resultName.insertAdjacentHTML("beforeend",item.displayPath+""+name+extra+"");wrapper.appendChild(resultName);var description=document.createElement("div");description.className="desc";var spanDesc=document.createElement("span");spanDesc.insertAdjacentHTML("beforeend",item.desc);description.appendChild(spanDesc);wrapper.appendChild(description);link.appendChild(wrapper);output.appendChild(link)})}else{output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first,filterCrates){var search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true"&&(!search.firstChild||search.firstChild.innerText!==searchState.loadingText))){var elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}var query=getQuery(searchState.input.value);currentResults=query.id;var ret_others=addTab(results.others,query,true);var ret_in_args=addTab(results.in_args,query,false);var ret_returned=addTab(results.returned,query,false);var currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";if(window.ALL_CRATES.length>1){crates=` in `}var output=`
+

Results for ${escape(query.query)} `+(query.type?" (type: "+escape(query.type)+")":"")+"

"+crates+`
`+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
";var resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;let crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.focusedByTab=[null,null,null];searchState.showResults(search);var elems=document.getElementById("titles").childNodes;elems[0].onclick=function(){printTab(0)};elems[1].onclick=function(){printTab(1)};elems[2].onclick=function(){printTab(2)};printTab(currentTab)}function execSearch(query,searchWords,filterCrates){query=query.raw.trim();var results={"in_args":[],"returned":[],"others":[],};if(query.length!==0){var tmp=execQuery(getQuery(query),searchWords,filterCrates);results.in_args.push(tmp.in_args);results.returned.push(tmp.returned);results.others.push(tmp.others)}return{"in_args":results.in_args[0],"returned":results.returned[0],"others":results.others[0],}}function search(e,forced){var params=searchState.getQueryStringParams();var query=getQuery(searchState.input.value.trim());if(e){e.preventDefault()}if(query.query.length===0){return}if(!forced&&query.id===currentResults){if(query.query.length>0){putBackSearch()}return}var filterCrates=getFilterCrates();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.query+" - Rust";if(searchState.browserSupportsHistoryApi()){var newURL=buildUrl(query.raw,filterCrates);if(!history.state&&!params.search){history.pushState(null,"",newURL)}else{history.replaceState(null,"",newURL)}}showResults(execSearch(query,searchWords,filterCrates),params["go_to_first"],filterCrates)}function buildIndex(rawSearchIndex){searchIndex=[];var searchWords=[];var i,word;var currentIndex=0;var id=0;for(var crate in rawSearchIndex){if(!hasOwnPropertyRustdoc(rawSearchIndex,crate)){continue}var crateSize=0;var crateCorpus=rawSearchIndex[crate];searchWords.push(crate);var crateRow={crate:crate,ty:1,name:crate,path:"",desc:crateCorpus.doc,parent:undefined,type:null,id:id,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),};id+=1;searchIndex.push(crateRow);currentIndex+=1;var itemTypes=crateCorpus.t;var itemNames=crateCorpus.n;var itemPaths=crateCorpus.q;var itemDescs=crateCorpus.d;var itemParentIdxs=crateCorpus.i;var itemFunctionSearchTypes=crateCorpus.f;var paths=crateCorpus.p;var aliases=crateCorpus.a;var len=paths.length;for(i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:itemFunctionSearchTypes[i],id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){ALIASES[crate]={};var j,local_aliases;for(var alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}if(!hasOwnPropertyRustdoc(ALIASES[crate],alias_name)){ALIASES[crate][alias_name]=[]}local_aliases=aliases[alias_name];for(j=0,len=local_aliases.length;j0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=function(){var qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="All crates"){var params=searchState.getQueryStringParams();var query=searchState.input.value.trim();if(!history.state&&!params.search){history.pushState(null,"",buildUrl(query,null))}else{history.replaceState(null,"",buildUrl(query,null))}}currentResults=null;search(undefined,true)}searchWords=buildIndex(rawSearchIndex);registerSearchEvents();function runSearchIfNeeded(){if(searchState.getQueryStringParams().search){search()}}runSearchIfNeeded()};if(window.searchIndex!==undefined){initSearch(window.searchIndex)}})() \ No newline at end of file diff --git a/doc/settings.css b/doc/settings.css index 6709865..35df7bc 100644 --- a/doc/settings.css +++ b/doc/settings.css @@ -1 +1 @@ -.setting-line{padding:5px;position:relative;}.setting-line>div{display:inline-block;vertical-align:top;font-size:17px;padding-top:2px;}.setting-line>.title{font-size:19px;width:100%;max-width:none;border-bottom:1px solid;}.toggle{position:relative;display:inline-block;width:45px;height:27px;margin-right:20px;}.toggle input{opacity:0;position:absolute;}.select-wrapper{float:right;position:relative;height:27px;min-width:25%;}.select-wrapper select{appearance:none;-moz-appearance:none;-webkit-appearance:none;background:none;border:2px solid #ccc;padding-right:28px;width:100%;}.select-wrapper img{pointer-events:none;position:absolute;right:0;bottom:0;background:#ccc;height:100%;width:28px;padding:0px 4px;}.select-wrapper select option{color:initial;}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.3s;transition:.3s;}.slider:before{position:absolute;content:"";height:19px;width:19px;left:4px;bottom:4px;background-color:white;-webkit-transition:.3s;transition:.3s;}input:checked+.slider{background-color:#2196F3;}input:focus+.slider{box-shadow:0 0 0 2px #0a84ff,0 0 0 6px rgba(10,132,255,0.3);}input:checked+.slider:before{-webkit-transform:translateX(19px);-ms-transform:translateX(19px);transform:translateX(19px);}.setting-line>.sub-settings{padding-left:42px;width:100%;display:block;} \ No newline at end of file +.setting-line{margin:0.6em 0 0.6em 0.3em;position:relative;}.setting-line>div{display:inline-block;vertical-align:top;font-size:17px;padding-top:2px;}.setting-line>.title{font-size:19px;width:100%;max-width:none;border-bottom:1px solid;}.setting-line .radio-line,.setting-line .choices{display:flex;flex-wrap:wrap;}.setting-line .radio-line .setting-name{flex-grow:1;margin-top:auto;margin-bottom:auto;}.setting-line .radio-line input{margin-right:0.3em;}.radio-line .choice{border-radius:0.1em;border:1px solid;margin-left:0.5em;margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;}.toggle{position:relative;display:inline-block;width:45px;height:27px;margin-right:20px;}.toggle input{opacity:0;position:absolute;}.select-wrapper{float:right;position:relative;height:27px;min-width:25%;}.select-wrapper select{appearance:none;-moz-appearance:none;-webkit-appearance:none;background:none;border:2px solid #ccc;padding-right:28px;width:100%;}.select-wrapper img{pointer-events:none;position:absolute;right:0;bottom:0;background:#ccc;height:100%;width:28px;padding:0px 4px;}.select-wrapper select option{color:initial;}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.3s;transition:.3s;}.slider:before{position:absolute;content:"";height:19px;width:19px;left:4px;bottom:4px;background-color:white;-webkit-transition:.3s;transition:.3s;}input:checked+.slider{background-color:#2196F3;}input:focus+.slider{box-shadow:0 0 0 2px #0a84ff,0 0 0 6px rgba(10,132,255,0.3);}input:checked+.slider:before{-webkit-transform:translateX(19px);-ms-transform:translateX(19px);transform:translateX(19px);}.setting-line>.sub-settings{padding-left:42px;width:100%;display:block;} \ No newline at end of file diff --git a/doc/settings.html b/doc/settings.html index 2c77b21..3d658f2 100644 --- a/doc/settings.html +++ b/doc/settings.html @@ -1,5 +1,17 @@ Rustdoc settings -

Rustdoc settings

Theme preferences
Use system theme
Preferred dark theme
Preferred light theme
-
Auto-hide item contents for large items.
Auto-hide item methods' documentation
Auto-hide trait implementation documentation
Directly go to item in search if there is only one result
Show line numbers on code examples
Disable keyboard shortcuts
+ +
+

Rustdoc settings

Back
Use system theme
Theme
Preferred light theme
Preferred dark theme
Auto-hide item contents for large items.
Auto-hide item methods' documentation
Auto-hide trait implementation documentation
Directly go to item in search if there is only one result
Show line numbers on code examples
Disable keyboard shortcuts
\ No newline at end of file diff --git a/doc/settings.js b/doc/settings.js index b4d6fdc..8047189 100644 --- a/doc/settings.js +++ b/doc/settings.js @@ -1 +1 @@ -(function(){function changeSetting(settingName,value){updateLocalStorage("rustdoc-"+settingName,value);switch(settingName){case"preferred-dark-theme":case"preferred-light-theme":case"use-system-theme":updateSystemTheme();break}}function handleKey(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey){return}switch(getVirtualKey(ev)){case"Enter":case"Return":case"Space":ev.target.checked=!ev.target.checked;ev.preventDefault();break}}function setEvents(){onEachLazy(document.getElementsByClassName("slider"),function(elem){var toggle=elem.previousElementSibling;var settingId=toggle.id;var settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=function(){changeSetting(this.id,this.checked)};toggle.onkeyup=handleKey;toggle.onkeyrelease=handleKey});onEachLazy(document.getElementsByClassName("select-wrapper"),function(elem){var select=elem.getElementsByTagName("select")[0];var settingId=select.id;var settingValue=getSettingValue(settingId);if(settingValue!==null){select.value=settingValue}select.onchange=function(){changeSetting(this.id,this.value)}})}window.addEventListener("DOMContentLoaded",setEvents)})() \ No newline at end of file +(function(){function changeSetting(settingName,value){updateLocalStorage(settingName,value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":case"use-system-theme":updateSystemTheme();updateLightAndDark();break}}function handleKey(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey){return}switch(getVirtualKey(ev)){case"Enter":case"Return":case"Space":ev.target.checked=!ev.target.checked;ev.preventDefault();break}}function showLightAndDark(){addClass(document.getElementById("theme").parentElement,"hidden");removeClass(document.getElementById("preferred-light-theme").parentElement,"hidden");removeClass(document.getElementById("preferred-dark-theme").parentElement,"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme").parentElement,"hidden");addClass(document.getElementById("preferred-dark-theme").parentElement,"hidden");removeClass(document.getElementById("theme").parentElement,"hidden")}function updateLightAndDark(){if(getSettingValue("use-system-theme")!=="false"){showLightAndDark()}else{hideLightAndDark()}}function setEvents(){updateLightAndDark();onEachLazy(document.getElementsByClassName("slider"),function(elem){var toggle=elem.previousElementSibling;var settingId=toggle.id;var settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=function(){changeSetting(this.id,this.checked)};toggle.onkeyup=handleKey;toggle.onkeyrelease=handleKey});onEachLazy(document.getElementsByClassName("select-wrapper"),function(elem){var select=elem.getElementsByTagName("select")[0];var settingId=select.id;var settingValue=getSettingValue(settingId);if(settingValue!==null){select.value=settingValue}select.onchange=function(){changeSetting(this.id,this.value)}});onEachLazy(document.querySelectorAll("input[type=\"radio\"]"),function(elem){const settingId=elem.name;const settingValue=getSettingValue(settingId);if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",function(ev){changeSetting(ev.target.name,ev.target.value)})});document.getElementById("back").addEventListener("click",function(){history.back()})}window.addEventListener("DOMContentLoaded",setEvents)})() \ No newline at end of file diff --git a/doc/source-script.js b/doc/source-script.js index 09515e0..e01a7fe 100644 --- a/doc/source-script.js +++ b/doc/source-script.js @@ -1 +1 @@ -(function(){function getCurrentFilePath(){var parts=window.location.pathname.split("/");var rootPathParts=window.rootPath.split("/");for(var i=0,len=rootPathParts.length;i"){sidebar.classList.add("expanded");child.innerText="<";updateLocalStorage("rustdoc-source-sidebar-show","true")}else{sidebar.classList.remove("expanded");child.innerText=">";updateLocalStorage("rustdoc-source-sidebar-show","false")}}function createSidebarToggle(){var sidebarToggle=document.createElement("div");sidebarToggle.id="sidebar-toggle";sidebarToggle.onclick=toggleSidebar;var inner=document.createElement("div");if(getCurrentValue("rustdoc-source-sidebar-show")==="true"){inner.innerText="<"}else{inner.innerText=">"}sidebarToggle.appendChild(inner);return sidebarToggle}function createSourceSidebar(){if(!window.rootPath.endsWith("/")){window.rootPath+="/"}var container=document.querySelector("nav.sidebar");var sidebarToggle=createSidebarToggle();container.insertBefore(sidebarToggle,container.firstChild);var sidebar=document.createElement("div");sidebar.id="source-sidebar";if(getCurrentValue("rustdoc-source-sidebar-show")!=="true"){container.classList.remove("expanded")}else{container.classList.add("expanded")}var currentFile=getCurrentFilePath();var hasFoundFile=false;var title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(sourcesIndex).forEach(function(key){sourcesIndex[key].name=key;hasFoundFile=createDirEntry(sourcesIndex[key],sidebar,"",currentFile,hasFoundFile)});container.insertBefore(sidebar,document.querySelector(".sidebar-logo").nextSibling);var selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}var lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSourceLines(scrollTo,match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}var from=parseInt(match[1],10);var to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(tocur_line_id){var tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",function(){var match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSourceLines(false,match)}});onEachLazy(document.getElementsByClassName("line-numbers"),function(el){el.addEventListener("click",handleSourceHighlight)});highlightSourceLines(true);window.createSourceSidebar=createSourceSidebar})() \ No newline at end of file +(function(){function getCurrentFilePath(){var parts=window.location.pathname.split("/");var rootPathParts=window.rootPath.split("/");for(var i=0,len=rootPathParts.length;i"){sidebar.classList.add("expanded");child.innerText="<";updateLocalStorage("source-sidebar-show","true")}else{sidebar.classList.remove("expanded");child.innerText=">";updateLocalStorage("source-sidebar-show","false")}}function createSidebarToggle(){var sidebarToggle=document.createElement("div");sidebarToggle.id="sidebar-toggle";sidebarToggle.onclick=toggleSidebar;var inner=document.createElement("div");if(getCurrentValue("source-sidebar-show")==="true"){inner.innerText="<"}else{inner.innerText=">"}sidebarToggle.appendChild(inner);return sidebarToggle}function createSourceSidebar(){if(!window.rootPath.endsWith("/")){window.rootPath+="/"}var container=document.querySelector("nav.sidebar");var sidebarToggle=createSidebarToggle();container.insertBefore(sidebarToggle,container.firstChild);var sidebar=document.createElement("div");sidebar.id="source-sidebar";if(getCurrentValue("source-sidebar-show")!=="true"){container.classList.remove("expanded")}else{container.classList.add("expanded")}var currentFile=getCurrentFilePath();var hasFoundFile=false;var title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(sourcesIndex).forEach(function(key){sourcesIndex[key].name=key;hasFoundFile=createDirEntry(sourcesIndex[key],sidebar,"",currentFile,hasFoundFile)});container.appendChild(sidebar);var selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}var lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSourceLines(scrollTo,match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}var from=parseInt(match[1],10);var to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(tocur_line_id){var tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",function(){var match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSourceLines(false,match)}});onEachLazy(document.getElementsByClassName("line-numbers"),function(el){el.addEventListener("click",handleSourceHighlight)});highlightSourceLines(true);window.createSourceSidebar=createSourceSidebar})() \ No newline at end of file diff --git a/doc/src/draught/board/enums.rs.html b/doc/src/draught/board/enums.rs.html index c3bbb9a..5cc0f68 100644 --- a/doc/src/draught/board/enums.rs.html +++ b/doc/src/draught/board/enums.rs.html @@ -1,6 +1,9 @@ -enums.rs - source -
\ No newline at end of file diff --git a/doc/src/draught/board/iter.rs.html b/doc/src/draught/board/iter.rs.html index a2294ae..ac40d12 100644 --- a/doc/src/draught/board/iter.rs.html +++ b/doc/src/draught/board/iter.rs.html @@ -1,6 +1,9 @@ -iter.rs - source -
  1
+iter.rs - source
+    
+    
  1
   2
   3
   4
@@ -390,5 +393,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 5076f7f..b5cd029 100644 --- a/doc/src/draught/board/mod.rs.html +++ b/doc/src/draught/board/mod.rs.html @@ -1,6 +1,9 @@ -mod.rs - source -
  1
+mod.rs - source
+    
+    
  1
   2
   3
   4
@@ -1700,5 +1703,5 @@
         write!(f, "{}", string)
     }
 }
-
+
\ No newline at end of file diff --git a/doc/src/draught/comp/mod.rs.html b/doc/src/draught/comp/mod.rs.html index 0f777d5..25a2de8 100644 --- a/doc/src/draught/comp/mod.rs.html +++ b/doc/src/draught/comp/mod.rs.html @@ -1,6 +1,9 @@ -mod.rs - source -
  1
+mod.rs - source
+    
+    
  1
   2
   3
   4
@@ -850,5 +853,5 @@
             .clone()
     }
 }
-
+
\ No newline at end of file diff --git a/doc/src/draught/game/mod.rs.html b/doc/src/draught/game/mod.rs.html index f9babfa..dc89741 100644 --- a/doc/src/draught/game/mod.rs.html +++ b/doc/src/draught/game/mod.rs.html @@ -1,6 +1,9 @@ -mod.rs - source -
  1
+mod.rs - source
+    
+    
  1
   2
   3
   4
@@ -503,5 +506,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/doc/src/draught/lib.rs.html b/doc/src/draught/lib.rs.html index bedb799..b688179 100644 --- a/doc/src/draught/lib.rs.html +++ b/doc/src/draught/lib.rs.html @@ -1,6 +1,9 @@ -lib.rs - source -
 1
+lib.rs - source
+    
+    
 1
  2
  3
  4
@@ -86,5 +89,5 @@
     log!("Initialising WebAssembly");
     utils::set_panic_hook();
 }
-
+
\ No newline at end of file diff --git a/doc/src/draught/paint.rs.html b/doc/src/draught/paint.rs.html index 06313ae..f781b52 100644 --- a/doc/src/draught/paint.rs.html +++ b/doc/src/draught/paint.rs.html @@ -1,6 +1,9 @@ -paint.rs - source -
  1
+paint.rs - source
+    
+    
  1
   2
   3
   4
@@ -782,5 +785,5 @@
         }
     }
 }
-
+
\ No newline at end of file diff --git a/doc/src/draught/utils.rs.html b/doc/src/draught/utils.rs.html index 4631ea7..267f8cc 100644 --- a/doc/src/draught/utils.rs.html +++ b/doc/src/draught/utils.rs.html @@ -1,6 +1,9 @@ -utils.rs - source -
 1
+utils.rs - source
+    
+    
 1
  2
  3
  4
@@ -21,5 +24,5 @@
     console_error_panic_hook::set_once();
 }
 
-
+
\ No newline at end of file diff --git a/doc/storage.js b/doc/storage.js index dd18db8..c6d070d 100644 --- a/doc/storage.js +++ b/doc/storage.js @@ -1 +1 @@ -var darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");window.mainTheme=document.getElementById("mainThemeStyle");var settingsDataset=(function(){var settingsElement=document.getElementById("default-settings");if(settingsElement===null){return null}var dataset=settingsElement.dataset;if(dataset===undefined){return null}return dataset})();function getSettingValue(settingName){var current=getCurrentValue('rustdoc-'+settingName);if(current!==null){return current}if(settingsDataset!==null){var def=settingsDataset[settingName.replace(/-/g,'_')];if(def!==undefined){return def}}return null}var localStoredTheme=getSettingValue("theme");var savedHref=[];function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(!elem||!elem.classList){return}elem.classList.add(className)}function removeClass(elem,className){if(!elem||!elem.classList){return}elem.classList.remove(className)}function onEach(arr,func,reversed){if(arr&&arr.length>0&&func){var length=arr.length;var i;if(reversed){for(i=length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(i=0;i=0){updateLocalStorage("rustdoc-preferred-dark-theme",localStoredTheme)}updateSystemTheme()}else{switchTheme(window.currentTheme,window.mainTheme,getSettingValue("theme")||"light",false)} \ No newline at end of file +var darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");window.mainTheme=document.getElementById("mainThemeStyle");var settingsDataset=(function(){var settingsElement=document.getElementById("default-settings");if(settingsElement===null){return null}var dataset=settingsElement.dataset;if(dataset===undefined){return null}return dataset})();function getSettingValue(settingName){var current=getCurrentValue(settingName);if(current!==null){return current}if(settingsDataset!==null){var def=settingsDataset[settingName.replace(/-/g,'_')];if(def!==undefined){return def}}return null}var localStoredTheme=getSettingValue("theme");var savedHref=[];function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(!elem||!elem.classList){return}elem.classList.add(className)}function removeClass(elem,className){if(!elem||!elem.classList){return}elem.classList.remove(className)}function onEach(arr,func,reversed){if(arr&&arr.length>0&&func){var length=arr.length;var i;if(reversed){for(i=length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(i=0;i=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}updateSystemTheme()}else{switchToSavedTheme()}window.addEventListener("pageshow",function(ev){if(ev.persisted){setTimeout(switchToSavedTheme,0)}}) \ No newline at end of file diff --git a/ed5ad1819e47a070ceaf.module.wasm b/ed5ad1819e47a070ceaf.module.wasm new file mode 100644 index 0000000000000000000000000000000000000000..24ef5cc7714e80b0b3fdb5a7d8ae84fc4a3d8f6a GIT binary patch literal 124951 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
 1
+enums.rs - source
+    
+    
 1
  2
  3
  4
@@ -172,5 +175,5 @@
     NoJumpablePiece = 7,
     JumpingSameTeam = 8,
 }
-
+