From a9f83295ee74087bf454987cbbb0a2cccd2f4c6a Mon Sep 17 00:00:00 2001 From: Sarsoo Date: Sat, 17 Sep 2022 21:52:27 +0000 Subject: [PATCH] deploy: 2fa38d96dc7818764bd736413f8ef798a4757a81 --- 10.bootstrap.js | 2 +- 10.bootstrap.js.map | 2 +- 3779a77aa968ad91d198.module.wasm | Bin 126399 -> 0 bytes 8a5d34b545c8f059a042.module.wasm | Bin 0 -> 126312 bytes doc/ayu.css | 2 +- doc/brush.svg | 1 - doc/dark.css | 2 +- doc/draught/all.html | 7 +- doc/draught/board/constant.STD_HEIGHT.html | 11 +- doc/draught/board/constant.STD_WIDTH.html | 11 +- ...t.__wbg_get_board_current_turn__const.html | 9 +- ...onstant.__wbg_get_board_height__const.html | 9 +- ...constant.__wbg_get_board_width__const.html | 9 +- .../constant.__wbg_get_brdidx_col__const.html | 9 +- .../constant.__wbg_get_brdidx_row__const.html | 9 +- ...stant.__wbg_get_piece_strength__const.html | 9 +- .../constant.__wbg_get_piece_team__const.html | 9 +- ...tant.__wbg_get_square_occupant__const.html | 9 +- ...onstant.__wbg_get_square_state__const.html | 9 +- doc/draught/board/enums/enum.MoveType.html | 61 ++-- doc/draught/board/enums/enum.Moveable.html | 61 ++-- doc/draught/board/enums/enum.SquareState.html | 65 ++--- doc/draught/board/enums/enum.Strength.html | 61 ++-- doc/draught/board/enums/enum.Team.html | 65 ++--- doc/draught/board/enums/index.html | 9 +- doc/draught/board/enums/sidebar-items.js | 2 +- doc/draught/board/index.html | 9 +- doc/draught/board/iter/index.html | 9 +- doc/draught/board/iter/sidebar-items.js | 2 +- .../board/iter/struct.PieceIterator.html | 263 +++++++++--------- .../board/iter/struct.RowIndexIterator.html | 263 +++++++++--------- .../board/iter/struct.RowSquareIterator.html | 261 ++++++++--------- doc/draught/board/sidebar-items.js | 2 +- doc/draught/board/struct.Board.html | 133 ++++----- doc/draught/board/struct.BrdIdx.html | 75 ++--- doc/draught/board/struct.Direction.html | 67 ++--- doc/draught/board/struct.Piece.html | 67 ++--- doc/draught/board/struct.Square.html | 73 ++--- doc/draught/comp/index.html | 9 +- doc/draught/comp/sidebar-items.js | 2 +- doc/draught/comp/struct.BoardNode.html | 49 ++-- doc/draught/comp/struct.Computer.html | 57 ++-- doc/draught/comp/struct.Move.html | 47 ++-- ...sm_bindgen_generated_init_wasm__const.html | 9 +- doc/draught/fn.init_wasm.html | 9 +- ...__wbg_get_game_last_node_count__const.html | 9 +- ....__wbg_get_game_perfect_chance__const.html | 9 +- doc/draught/game/index.html | 9 +- doc/draught/game/sidebar-items.js | 2 +- doc/draught/game/struct.Game.html | 87 +++--- doc/draught/index.html | 11 +- doc/draught/macro.log.html | 11 +- doc/draught/macro.log_error.html | 11 +- doc/draught/paint/constant.BLACK_PIECE.html | 11 +- .../paint/constant.BLACK_PIECE_OUTLINE.html | 11 +- doc/draught/paint/constant.BLACK_SQUARE.html | 11 +- doc/draught/paint/constant.DRAW_OUTLINE.html | 11 +- .../paint/constant.DRAW_PIECE_OUTLINES.html | 11 +- doc/draught/paint/constant.KING_OUTLINE.html | 11 +- doc/draught/paint/constant.OUTLINE_WIDTH.html | 11 +- .../constant.PIECE_OUTLINE_PROPORTION.html | 11 +- .../paint/constant.PIECE_PROPORTION.html | 11 +- .../paint/constant.SELECTED_PIECE.html | 11 +- .../constant.SELECTED_PIECE_OUTLINE.html | 11 +- .../paint/constant.SQUARE_OUTLINE.html | 11 +- doc/draught/paint/constant.WHITE_PIECE.html | 11 +- .../paint/constant.WHITE_PIECE_OUTLINE.html | 11 +- doc/draught/paint/constant.WHITE_SQUARE.html | 11 +- doc/draught/paint/index.html | 9 +- doc/draught/paint/sidebar-items.js | 2 +- doc/draught/paint/struct.Painter.html | 79 +++--- doc/draught/sidebar-items.js | 2 +- doc/draught/utils/fn.set_panic_hook.html | 9 +- doc/draught/utils/index.html | 9 +- doc/draught/utils/sidebar-items.js | 2 +- 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 | 6 +- doc/noscript.css | 2 +- doc/rustdoc.css | 2 +- doc/search-index.js | 5 +- doc/search.js | 2 +- doc/settings.css | 2 +- doc/settings.html | 7 +- doc/settings.js | 20 +- doc/source-script.js | 2 +- doc/src/draught/board/enums.rs.html | 9 +- doc/src/draught/board/iter.rs.html | 9 +- doc/src/draught/board/mod.rs.html | 9 +- doc/src/draught/comp/mod.rs.html | 9 +- doc/src/draught/game/mod.rs.html | 9 +- doc/src/draught/lib.rs.html | 21 +- doc/src/draught/paint.rs.html | 9 +- doc/src/draught/utils.rs.html | 9 +- doc/storage.js | 2 +- 110 files changed, 1246 insertions(+), 1197 deletions(-) delete mode 100644 3779a77aa968ad91d198.module.wasm create mode 100644 8a5d34b545c8f059a042.module.wasm delete mode 100644 doc/brush.svg diff --git a/10.bootstrap.js b/10.bootstrap.js index 25a7957..8681f9e 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,{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:()=>$,SZ:()=>S,T8:()=>_t,TL:()=>ft,Tt:()=>N,U5:()=>L,U7:()=>at,Ws:()=>nt,XP:()=>Z,YN:()=>Ot,_3:()=>ht,ae:()=>F,bx:()=>bt,cb:()=>kt,fO:()=>X,fY:()=>jt,fi:()=>gt,gk:()=>K,h4:()=>H,hx:()=>ut,i0:()=>j,iY:()=>Y,k4:()=>dt,kq:()=>et,lA:()=>A,mS:()=>J,m_:()=>St,nf:()=>rt,oH:()=>Bt,pt:()=>tt,pv:()=>ct,r2:()=>z,rC:()=>Et,rh:()=>U,u6:()=>st,ug:()=>M,vm:()=>vt,wc:()=>E,xB:()=>mt,yX:()=>P,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 f(t){s===o.length&&o.push(o.length+1);const e=s;return s=o[e],o[e]=t,e}function h(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+=h(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(f(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,f(r));return q.__wrap(n)}set_square_outline(t){a.painter_set_square_outline(this.ptr,f(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 f(g(t,e))}function W(){return f(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 $(t,e,r){var n,_;i(t).randomFillSync((n=e,_=r,b().subarray(n/1,n/1+_)))}function F(t,e){i(t).getRandomValues(i(e))}function L(){return O((function(){return f(self.self)}),arguments)}function Y(t){return f(i(t).crypto)}function J(t){return f(i(t).msCrypto)}function Z(t){return void 0===i(t)}function z(t,e,r){return f(i(t).require(g(e,r)))}function P(t){return f(i(t).getRandomValues)}function G(){return f(t)}function X(t){return i(t)instanceof Window}function V(t){const e=i(t).document;return x(e)?0:f(e)}function Q(t,e,r){const n=i(t).getElementById(g(e,r));return x(n)?0:f(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:f(n)}),arguments)}function ft(t,e){return f(new Function(g(t,e)))}function ht(){return O((function(t,e){return f(i(t).call(i(e)))}),arguments)}function wt(){return O((function(){return f(self.self)}),arguments)}function mt(){return O((function(){return f(window.window)}),arguments)}function yt(){return O((function(){return f(globalThis.globalThis)}),arguments)}function vt(){return O((function(){return f(r.g.global)}),arguments)}function Tt(t){return f(i(t).buffer)}function kt(t){return f(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 f(new Uint8Array(t>>>0))}function Ot(t,e,r){return f(i(t).subarray(e>>>0,r>>>0))}function St(t){return f(i(t))}function jt(t,e){const r=v(h(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 f(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 f=document.getElementById("status-d"),h=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:if(F.checked&&void 0===x.has_won()){let t=performance.now();x.ai_move();let e=performance.now();w.innerText=`searched ${x.last_node_count.toLocaleString("en-GB")} possible moves in ${(e-t).toLocaleString()}ms`}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),f.className=`alert alert-${e}`,f.innerText=t,f.hidden=!1,r&&(v=setTimeout((()=>{f.hidden=!0}),d))}function U(){switch(x.current_turn()){case _.SZ.White:h.innerText="⚪ White ⚪";break;case _.SZ.Black:h.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"),$=()=>{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=$,K.value=4;const F=document.getElementById("ai-checkbox"),L=()=>{};F.onchange=L;const Y=document.getElementById("ai_difficulty"),J=()=>{u=parseInt(Y.value)/100,x.set_perfect_chance(u)};Y.onchange=J,Y.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,"3779a77aa968ad91d198",{"./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_randomFillSync_d2ba53160aec6aba:a.Os,__wbg_getRandomValues_e57c9b75ddead065:a.ae,__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_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)}}]); +"use strict";(self.webpackChunkdraught=self.webpackChunkdraught||[]).push([[10],{171:(t,e,r)=>{r.a(t,(async(n,_)=>{try{r.d(e,{$L:()=>yt,AX:()=>Y,Ck:()=>R,HM:()=>it,J:()=>nt,Ji:()=>rt,KM:()=>L,LW:()=>Z,Ni:()=>ft,Nl:()=>G,Or:()=>St,Pc:()=>et,Rv:()=>K,SZ:()=>B,Sn:()=>mt,Tc:()=>lt,Tt:()=>S,VY:()=>V,Vf:()=>ut,XP:()=>P,YL:()=>pt,Z_:()=>Q,a2:()=>C,bB:()=>gt,bD:()=>st,bj:()=>xt,cE:()=>X,fP:()=>It,fY:()=>Nt,gW:()=>ht,h4:()=>W,i0:()=>N,iX:()=>J,ib:()=>Et,jp:()=>Tt,kH:()=>jt,l3:()=>ct,lA:()=>A,lB:()=>kt,m_:()=>Bt,o0:()=>F,oH:()=>Ot,oY:()=>$,qh:()=>bt,qz:()=>z,rh:()=>U,ri:()=>at,so:()=>ot,tI:()=>dt,ug:()=>H,v8:()=>tt,vc:()=>_t,wJ:()=>vt,wc:()=>E,wg:()=>D,yB:()=>wt});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=new Uint8Array;function g(){return 0===d.byteLength&&(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 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 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+=y(t,e).written}return w=c,_}let T=new Int32Array;function k(){return 0===T.byteLength&&(T=new Int32Array(a.memory.buffer)),T}function I(t){return null==t}function x(t,e){if(!(t instanceof e))throw new Error(`expected instance of ${e.name}`);return t.ptr}function E(){a.init_wasm()}function j(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 B=Object.freeze({Black:0,0:"Black",White:1,1:"White"}),N=(Object.freeze({Man:0,0:"Man",King:1,1:"King"}),Object.freeze({Empty:0,0:"Empty",Occupied:1,1:"Occupied",Unplayable:2,2:"Unplayable"})),S=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 O{static __wrap(t){const e=Object.create(O.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 M.__wrap(e)}set_cell(t,e){x(e,M);var r=e.ptr;e.ptr=0,a.board_set_cell(this.ptr,t,r)}grid_cell(t){x(t,U);var e=t.ptr;t.ptr=0;const r=a.board_grid_cell(this.ptr,e);return M.__wrap(r)}cell_index(t,e){return a.board_cell_index(this.ptr,t,e)>>>0}cell_idx(t){x(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){x(t,U);var r=t.ptr;t.ptr=0,x(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){x(t,U);var n=t.ptr;t.ptr=0,x(e,U);var _=e.ptr;e.ptr=0,x(r,q);var c=r.ptr;return r.ptr=0,a.board_validate_man_move(this.ptr,n,_,c)>>>0}validate_king_move(t,e,r){x(t,U);var n=t.ptr;t.ptr=0,x(e,U);var _=e.ptr;e.ptr=0,x(r,q);var c=r.ptr;return r.ptr=0,a.board_validate_king_move(this.ptr,n,_,c)>>>0}jumpee_idx(t,e){x(t,U);var r=t.ptr;t.ptr=0,x(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){x(t,U);var r=t.ptr;t.ptr=0,x(e,U);var n=e.ptr;e.ptr=0;const _=a.board_apply_move(this.ptr,r,n);return O.__wrap(_)}apply_jump(t,e){x(t,U);var r=t.ptr;t.ptr=0,x(e,U);var n=e.ptr;e.ptr=0;const _=a.board_apply_jump(this.ptr,r,n);return O.__wrap(_)}king_row_idx(){return a.board_king_row_idx(this.ptr)>>>0}static validate_jumpee(t,e){x(t,M);var r=t.ptr;t.ptr=0,x(e,q);var n=e.ptr;return e.ptr=0,a.board_validate_jumpee(r,n)>>>0}static check_jumpee_team(t,e){x(t,q);var r=t.ptr;t.ptr=0,x(e,q);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 O.__wrap(n)}static init_game(t,e){x(t,O);var r=t.ptr;t.ptr=0;const n=a.board_init_game(r,e);return O.__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 x(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){x(t,U);const e=a.game_current_cell_state(this.ptr,t.ptr);return M.__wrap(e)}set_search_depth(t){a.game_set_search_depth(this.ptr,t)}set_selected(t){x(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){x(t,U);var r=t.ptr;t.ptr=0,x(e,U);var n=e.ptr;return e.ptr=0,a.game_make_move(this.ptr,r,n)>>>0}execute_move(t,e){x(t,U);var r=t.ptr;t.ptr=0,x(e,U);var n=e.ptr;e.ptr=0,a.game_execute_move(this.ptr,r,n)}execute_jump(t,e){x(t,U);var r=t.ptr;t.ptr=0,x(e,U);var n=e.ptr;e.ptr=0,a.game_execute_jump(this.ptr,r,n)}push_new_board(t){x(t,O);var e=t.ptr;t.ptr=0,a.game_push_new_board(this.ptr,e)}set_current(t){x(t,O);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){x(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){const n=v(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){const 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 x(t,O),0!==a.painter_validate_board_dim(this.ptr,t.ptr)}draw(t){x(t,O),a.painter_draw(this.ptr,t.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_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 q.__wrap(r)}}class M{static __wrap(t){const e=Object.create(M.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:q.__wrap(t)}set occupant(t){let e=0;I(t)||(x(t,q),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;I(e)||(x(e,q),r=e.ptr,e.ptr=0);const n=a.square_new(t,r);return M.__wrap(n)}static pc(t,e){const r=a.square_pc(t,e);return M.__wrap(r)}static empty(){const t=a.square_empty();return M.__wrap(t)}static unplay(){const t=a.square_unplay();return M.__wrap(t)}}function H(t){l(t)}function W(t,e){return h(b(t,e))}function C(){return h(new Error)}function L(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 J(t,e){try{console.error(b(t,e))}finally{a.__wbindgen_free(t,e)}}function $(){return j((function(){return h(self.self)}),arguments)}function D(t){return h(i(t).crypto)}function Y(t){return h(i(t).msCrypto)}function P(t){return void 0===i(t)}function Z(t,e,r){return h(i(t).require(b(e,r)))}function K(t){return h(i(t).getRandomValues)}function F(t,e){i(t).getRandomValues(i(e))}function V(t,e,r){var n,_;i(t).randomFillSync((n=e,_=r,g().subarray(n/1,n/1+_)))}function z(){return h(t)}function X(t){let e;try{e=i(t)instanceof Window}catch{e=!1}return e}function G(t){const e=i(t).document;return I(e)?0:h(e)}function Q(t,e,r){const n=i(t).getElementById(b(e,r));return I(n)?0:h(n)}function tt(t){console.error(i(t))}function et(t){console.log(i(t))}function rt(t){let e;try{e=i(t)instanceof CanvasRenderingContext2D}catch{e=!1}return e}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 j((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){let e;try{e=i(t)instanceof HTMLCanvasElement}catch{e=!1}return e}function dt(t,e){i(t).width=e>>>0}function gt(t,e){i(t).height=e>>>0}function bt(){return j((function(t,e,r){const n=i(t).getContext(b(e,r));return I(n)?0:h(n)}),arguments)}function ht(t,e){return h(new Function(b(t,e)))}function ft(){return j((function(t,e){return h(i(t).call(i(e)))}),arguments)}function wt(){return j((function(){return h(self.self)}),arguments)}function mt(){return j((function(){return h(window.window)}),arguments)}function yt(){return j((function(){return h(globalThis.globalThis)}),arguments)}function vt(){return j((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 It(t,e,r){i(t).set(i(e),r>>>0)}function xt(t){return i(t).length}function Et(t){return h(new Uint8Array(t>>>0))}function jt(t,e,r){return h(i(t).subarray(e>>>0,r>>>0))}function Bt(t){return h(i(t))}function Nt(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 St(t,e){throw new Error(b(t,e))}function Ot(){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=B;let y=null,v=null,T=O,k=b.HUMAN_TURN.THINKING,I=null,x=null,E=[];B();const j=document.getElementById("game-canvas");function B(){I=new _.lA(c,o,i,_.SZ.Black,s),x=new _.Ck(l,p,"game-canvas"),I.set_painter(x),I.draw(),clearInterval(y),U(),A(),E=[],k=b.HUMAN_TURN.THINKING}function N(t){switch(k){case b.HUMAN_TURN.THINKING:if(I.current_cell_state(t).state!=_.i0.Occupied)return;if(I.current_cell_state(t).occupant.team!=I.current_turn())return;E.push(t),k=b.HUMAN_TURN.FROM_SELECTED,I.set_selected(t),I.draw();break;case b.HUMAN_TURN.FROM_SELECTED:if(!E[0].eq(t)){if(I.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(I.make_move(E[0],E[1])){case _.Tt.Allowed:if(D.checked&&void 0===I.has_won()){let t=performance.now();I.ai_move();let e=performance.now();w.innerText=`searched ${I.last_node_count.toLocaleString("en-GB")} possible moves in ${(e-t).toLocaleString()}ms`}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!")}}I.clear_selected(),I.draw(),E=[],k=b.HUMAN_TURN.THINKING;break;case b.AI_TURN:console.log("It's the AI's turn!")}U(),A(),R()}function S(t,e){var r=t.getBoundingClientRect();return{x:e.clientX-r.left,y:e.clientY-r.top}}function O(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(I.current_turn()){case _.SZ.White:f.innerText="⚪ White ⚪";break;case _.SZ.Black:f.innerText="🔴 Black 🔴"}}function A(){switch(I.winning()){case void 0:m.innerText="";break;case _.SZ.White:m.innerText="👑 White 👑";break;case _.SZ.Black:m.innerText="👑 Black 👑"}}function R(){switch(I.has_won()){case void 0:break;case _.SZ.White:T("You Lost!"),y=setInterval((()=>{B()}),g);break;case _.SZ.Black:T("You Won!","success"),y=setInterval((()=>{B()}),g)}}j.addEventListener("click",(t=>{var e=S(j,t);N(new _.rh(Math.floor(e.y/j.clientHeight*o),Math.floor(e.x/j.clientWidth*c)))}));const q=document.getElementById("width"),M=()=>{c=parseInt(q.value),B()};q.onchange=M,q.value=8;const H=document.getElementById("height"),W=()=>{o=parseInt(H.value),C.max=o/2-1,B()};H.onchange=W,H.value=8;const C=document.getElementById("play_rows"),L=()=>{i=parseInt(C.value),B()};C.onchange=L,C.value=3;const J=document.getElementById("ai_search_depth"),$=()=>{s=parseInt(J.value),I.set_search_depth(s),s>4&&T("This increases thinking time exponentially, be careful (probably don't go past 6)","warning")};J.onchange=$,J.value=4;const D=document.getElementById("ai-checkbox"),Y=()=>{};D.onchange=Y;const P=document.getElementById("ai_difficulty"),Z=()=>{u=parseInt(P.value)/100,I.set_perfect_chance(u)};P.onchange=Z,P.value=50,n()}catch(K){n(K)}}))},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,"8a5d34b545c8f059a042",{"./draught_bg.js":{__wbindgen_object_drop_ref:a.ug,__wbindgen_string_new:a.h4,__wbg_new_abda76e883ba8a5f:a.a2,__wbg_stack_658279fe44541cf6:a.KM,__wbg_error_f851667af71bcfc6:a.iX,__wbg_self_7eede1f4488bf346:a.oY,__wbg_crypto_c909fb428dcbddb6:a.wg,__wbg_msCrypto_511eefefbfc70ae4:a.AX,__wbindgen_is_undefined:a.XP,__wbg_require_900d5c3984fe7703:a.LW,__wbg_getRandomValues_307049345d0bd88c:a.Rv,__wbg_getRandomValues_cd175915511f705e:a.o0,__wbg_randomFillSync_85b3f4c52c56c313:a.VY,__wbg_static_accessor_MODULE_ef3aa2eb251158a5:a.qz,__wbg_instanceof_Window_acc97ff9f5d2c7b4:a.cE,__wbg_document_3ead31dbcad65886:a.Nl,__wbg_getElementById_3a708b83e4f034d7:a.Z_,__wbg_error_ef9a0be47931175f:a.v8,__wbg_log_4b5638ad60bdc54a:a.Pc,__wbg_instanceof_CanvasRenderingContext2d_ff80c06d296e3622:a.Ji,__wbg_setstrokeStyle_899ea3720dae323b:a.J,__wbg_setfillStyle_53ccf2a9886c1c4d:a.vc,__wbg_setlineWidth_64004648773fed7a:a.ri,__wbg_beginPath_4e91b7092d0d33d9:a.l3,__wbg_fill_8ec436f419a0d161:a.so,__wbg_stroke_85dee7d87c4a6ead:a.HM,__wbg_arc_30e550c408f151ac:a.bD,__wbg_fillRect_c7a19e13c5242507:a.Vf,__wbg_strokeRect_972fbfb664182aea:a.Tc,__wbg_instanceof_HtmlCanvasElement_97761617af6ea089:a.YL,__wbg_setwidth_afb418d3fbf71ba7:a.tI,__wbg_setheight_3eb8729b59493242:a.bB,__wbg_getContext_4d5e97892c1b206a:a.qh,__wbg_newnoargs_b5b063fc6c2f0376:a.gW,__wbg_call_97ae9d8645dc388b:a.Ni,__wbg_self_6d479506f72c6a71:a.yB,__wbg_window_f2557cc78490aceb:a.Sn,__wbg_globalThis_7f206bda628d5286:a.$L,__wbg_global_ba75c50d1cf384f4:a.wJ,__wbg_buffer_3f3d764d4747d564:a.jp,__wbg_new_8c3f0052272a457a:a.lB,__wbg_set_83db9690f9353e79:a.fP,__wbg_length_9e1ae1900cb0fbd5:a.bj,__wbg_newwithlength_f5933855e4f48a19:a.ib,__wbg_subarray_58ad4efbb5bcb886:a.kH,__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 1e3dce0..a14c131 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 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_randomFillSync_d2ba53160aec6aba(arg0, arg1, arg2) {\n getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));\n};\n\nexport function __wbg_getRandomValues_e57c9b75ddead065(arg0, arg1) {\n getObject(arg0).getRandomValues(getObject(arg1));\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_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\n let start = performance.now();\n\n game.ai_move();\n\n let end = performance.now();\n\n nodeCountText.innerText = `searched ${game.last_node_count.toLocaleString(\"en-GB\")} possible moves in ${(end - start).toLocaleString()}ms`;\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_randomFillSync_d2ba53160aec6aba","arg2","randomFillSync","__wbg_getRandomValues_e57c9b75ddead065","getRandomValues","__wbg_self_86b4b13392c7af56","self","arguments","__wbg_crypto_b8c92eaac23d0d80","crypto","__wbg_msCrypto_9ad6677321a08dd8","msCrypto","__wbindgen_is_undefined","__wbg_require_f5521a5b85ad2542","__wbg_getRandomValues_dd27e6b0652b3236","__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","start","performance","now","end","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 cachedUint8Memory0 = new Uint8Array();\n\nfunction getUint8Memory0() {\n if (cachedUint8Memory0.byteLength === 0) {\n cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8Memory0;\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 cachedInt32Memory0 = new Int32Array();\n\nfunction getInt32Memory0() {\n if (cachedInt32Memory0.byteLength === 0) {\n cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachedInt32Memory0;\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 * @returns {number}\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 * @returns {number}\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 * @returns {number}\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 * @returns {number}\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 * @returns {number}\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 * @returns {number}\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 * @returns {number}\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 * @returns {number}\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 * @returns {number}\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 * @returns {Piece | undefined}\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 * @returns {number}\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_abda76e883ba8a5f() {\n const ret = new Error();\n return addHeapObject(ret);\n};\n\nexport function __wbg_stack_658279fe44541cf6(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_f851667af71bcfc6(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_7eede1f4488bf346() { return handleError(function () {\n const ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_crypto_c909fb428dcbddb6(arg0) {\n const ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n};\n\nexport function __wbg_msCrypto_511eefefbfc70ae4(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_900d5c3984fe7703(arg0, arg1, arg2) {\n const ret = getObject(arg0).require(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n};\n\nexport function __wbg_getRandomValues_307049345d0bd88c(arg0) {\n const ret = getObject(arg0).getRandomValues;\n return addHeapObject(ret);\n};\n\nexport function __wbg_getRandomValues_cd175915511f705e(arg0, arg1) {\n getObject(arg0).getRandomValues(getObject(arg1));\n};\n\nexport function __wbg_randomFillSync_85b3f4c52c56c313(arg0, arg1, arg2) {\n getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));\n};\n\nexport function __wbg_static_accessor_MODULE_ef3aa2eb251158a5() {\n const ret = module;\n return addHeapObject(ret);\n};\n\nexport function __wbg_instanceof_Window_acc97ff9f5d2c7b4(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Window;\n } catch {\n result = false;\n }\n const ret = result;\n return ret;\n};\n\nexport function __wbg_document_3ead31dbcad65886(arg0) {\n const ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_getElementById_3a708b83e4f034d7(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_ef9a0be47931175f(arg0) {\n console.error(getObject(arg0));\n};\n\nexport function __wbg_log_4b5638ad60bdc54a(arg0) {\n console.log(getObject(arg0));\n};\n\nexport function __wbg_instanceof_CanvasRenderingContext2d_ff80c06d296e3622(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof CanvasRenderingContext2D;\n } catch {\n result = false;\n }\n const ret = result;\n return ret;\n};\n\nexport function __wbg_setstrokeStyle_899ea3720dae323b(arg0, arg1) {\n getObject(arg0).strokeStyle = getObject(arg1);\n};\n\nexport function __wbg_setfillStyle_53ccf2a9886c1c4d(arg0, arg1) {\n getObject(arg0).fillStyle = getObject(arg1);\n};\n\nexport function __wbg_setlineWidth_64004648773fed7a(arg0, arg1) {\n getObject(arg0).lineWidth = arg1;\n};\n\nexport function __wbg_beginPath_4e91b7092d0d33d9(arg0) {\n getObject(arg0).beginPath();\n};\n\nexport function __wbg_fill_8ec436f419a0d161(arg0) {\n getObject(arg0).fill();\n};\n\nexport function __wbg_stroke_85dee7d87c4a6ead(arg0) {\n getObject(arg0).stroke();\n};\n\nexport function __wbg_arc_30e550c408f151ac() { 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_c7a19e13c5242507(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).fillRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_strokeRect_972fbfb664182aea(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).strokeRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_instanceof_HtmlCanvasElement_97761617af6ea089(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof HTMLCanvasElement;\n } catch {\n result = false;\n }\n const ret = result;\n return ret;\n};\n\nexport function __wbg_setwidth_afb418d3fbf71ba7(arg0, arg1) {\n getObject(arg0).width = arg1 >>> 0;\n};\n\nexport function __wbg_setheight_3eb8729b59493242(arg0, arg1) {\n getObject(arg0).height = arg1 >>> 0;\n};\n\nexport function __wbg_getContext_4d5e97892c1b206a() { 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_b5b063fc6c2f0376(arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nexport function __wbg_call_97ae9d8645dc388b() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_self_6d479506f72c6a71() { return handleError(function () {\n const ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_window_f2557cc78490aceb() { return handleError(function () {\n const ret = window.window;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_globalThis_7f206bda628d5286() { return handleError(function () {\n const ret = globalThis.globalThis;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_global_ba75c50d1cf384f4() { return handleError(function () {\n const ret = global.global;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_buffer_3f3d764d4747d564(arg0) {\n const ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_8c3f0052272a457a(arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n};\n\nexport function __wbg_set_83db9690f9353e79(arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n};\n\nexport function __wbg_length_9e1ae1900cb0fbd5(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n};\n\nexport function __wbg_newwithlength_f5933855e4f48a19(arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return addHeapObject(ret);\n};\n\nexport function __wbg_subarray_58ad4efbb5bcb886(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\n let start = performance.now();\n\n game.ai_move();\n\n let end = performance.now();\n\n nodeCountText.innerText = `searched ${game.last_node_count.toLocaleString(\"en-GB\")} possible moves in ${(end - start).toLocaleString()}ms`;\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","cachedUint8Memory0","Uint8Array","getUint8Memory0","byteLength","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","cachedInt32Memory0","Int32Array","getInt32Memory0","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_abda76e883ba8a5f","__wbg_stack_658279fe44541cf6","__wbg_error_f851667af71bcfc6","console","error","__wbg_self_7eede1f4488bf346","self","arguments","__wbg_crypto_c909fb428dcbddb6","crypto","__wbg_msCrypto_511eefefbfc70ae4","msCrypto","__wbindgen_is_undefined","__wbg_require_900d5c3984fe7703","arg2","__wbg_getRandomValues_307049345d0bd88c","getRandomValues","__wbg_getRandomValues_cd175915511f705e","__wbg_randomFillSync_85b3f4c52c56c313","randomFillSync","__wbg_static_accessor_MODULE_ef3aa2eb251158a5","__wbg_instanceof_Window_acc97ff9f5d2c7b4","result","Window","__wbg_document_3ead31dbcad65886","document","__wbg_getElementById_3a708b83e4f034d7","getElementById","__wbg_error_ef9a0be47931175f","__wbg_log_4b5638ad60bdc54a","log","__wbg_instanceof_CanvasRenderingContext2d_ff80c06d296e3622","CanvasRenderingContext2D","__wbg_setstrokeStyle_899ea3720dae323b","strokeStyle","__wbg_setfillStyle_53ccf2a9886c1c4d","fillStyle","__wbg_setlineWidth_64004648773fed7a","lineWidth","__wbg_beginPath_4e91b7092d0d33d9","beginPath","__wbg_fill_8ec436f419a0d161","__wbg_stroke_85dee7d87c4a6ead","stroke","__wbg_arc_30e550c408f151ac","arg3","arg4","arg5","arc","__wbg_fillRect_c7a19e13c5242507","fillRect","__wbg_strokeRect_972fbfb664182aea","strokeRect","__wbg_instanceof_HtmlCanvasElement_97761617af6ea089","HTMLCanvasElement","__wbg_setwidth_afb418d3fbf71ba7","__wbg_setheight_3eb8729b59493242","__wbg_getContext_4d5e97892c1b206a","getContext","__wbg_newnoargs_b5b063fc6c2f0376","Function","__wbg_call_97ae9d8645dc388b","__wbg_self_6d479506f72c6a71","__wbg_window_f2557cc78490aceb","window","__wbg_globalThis_7f206bda628d5286","globalThis","__wbg_global_ba75c50d1cf384f4","g","global","__wbg_buffer_3f3d764d4747d564","buffer","__wbg_new_8c3f0052272a457a","__wbg_set_83db9690f9353e79","__wbg_length_9e1ae1900cb0fbd5","__wbg_newwithlength_f5933855e4f48a19","__wbg_subarray_58ad4efbb5bcb886","__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","start","performance","now","end","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/3779a77aa968ad91d198.module.wasm b/3779a77aa968ad91d198.module.wasm deleted file mode 100644 index 6c3a6e797b6a92a617bc93e4b5b6835ecc080905..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126399 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 diff --git a/8a5d34b545c8f059a042.module.wasm b/8a5d34b545c8f059a042.module.wasm new file mode 100644 index 0000000000000000000000000000000000000000..52a6212deeefa3f2db4f8f3ae7877edae5861a23 GIT binary patch literal 126312 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 literal 0 HcmV?d00001 diff --git a/doc/ayu.css b/doc/ayu.css index 6ef5039..a9c9be0 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,.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-list .scrape-help{border-color:#aaa;color:#eee;}.scraped-example-list .scrape-help:hover{border-color:white;color:white;}.more-examples-toggle summary,.more-examples-toggle .hide-more{color:#999;}.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:#999;}.toggle-line:hover .toggle-line-inner{background:#c5c5c5;} \ No newline at end of file + body,#settings-menu #settings,#settings-menu #settings::before{background-color:#0f1419;color:#c5c5c5;}.setting-line .radio-line input{border-color:#c5c5c5;}.setting-line .radio-line input:checked{box-shadow:inset 0 0 0 3px #0f1419;background-color:#ffb454;}.setting-line .radio-line input:focus{box-shadow:0 0 1px 1px #ffb454;}.setting-line .radio-line input:checked:focus{box-shadow:inset 0 0 0 3px 0f1419,0 0 2px 2px #ffb454;}.setting-line .radio-line input:hover{border-color:#ffb454 !important;}.slider{background-color:#ccc;}.slider:before{background-color:white;}input:checked+.slider{background-color:#ffb454;}input:focus+.slider{box-shadow:0 0 0 2px #0a84ff,0 0 0 6px rgba(10,132,255,0.3);}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 !important;}.search-input{color:#ffffff;}.module-item .stab,.import-item .stab{color:#000;}.stab.empty-impl{}.stab.unstable,.stab.deprecated,.stab.portability,.stab.empty-impl{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;}#settings-menu>a,#help-button{border-color:#5c6773;background-color:#0f1419;color:#fff;}#settings-menu>a img{filter:invert(100);}#settings-menu #settings,#settings-menu #settings::before{border-color:#5c6773;}#copy-path{color:#fff;}#copy-path>img{filter:invert(70%);}#copy-path:hover>img{filter:invert(100%);}#settings-menu>a:hover,#settings-menu>a: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);}.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;}.scraped-example-list .scrape-help{border-color:#aaa;color:#eee;}.scraped-example-list .scrape-help:hover{border-color:white;color:white;}.more-examples-toggle summary,.more-examples-toggle .hide-more{color:#999;}.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:#999;}.toggle-line:hover .toggle-line-inner{background:#c5c5c5;} \ No newline at end of file diff --git a/doc/brush.svg b/doc/brush.svg deleted file mode 100644 index ea266e8..0000000 --- a/doc/brush.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/doc/dark.css b/doc/dark.css index 34ae439..d8bd200 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,.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-list .scrape-help{border-color:#aaa;color:#eee;}.scraped-example-list .scrape-help:hover{border-color:white;color:white;}.more-examples-toggle summary,.more-examples-toggle .hide-more{color:#999;}.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:#999;}.toggle-line:hover .toggle-line-inner{background:#c5c5c5;} \ No newline at end of file +body,#settings-menu #settings,#settings-menu #settings::before{background-color:#353535;color:#ddd;}.setting-line .radio-line input{border-color:#ddd;}.setting-line .radio-line input:checked{box-shadow:inset 0 0 0 3px #353535;background-color:#2196f3;}.setting-line .radio-line input:focus{box-shadow:0 0 1px 1px #2196f3;}.setting-line .radio-line input:checked:focus{box-shadow:inset 0 0 0 3px #353535,0 0 2px 2px #2196f3;}.setting-line .radio-line input:hover{border-color:#2196f3 !important;}.slider{background-color:#ccc;}.slider:before{background-color:white;}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);}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:#f0f0f0 !important;}.search-input{border-color:#e0e0e0;}.search-input:focus{border-color:#008dfd;}.module-item .stab,.import-item .stab{color:#ddd;}.stab.empty-impl{background:#FFF5D6;border-color:#FFC600;color:#2f2f2f;}.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;}#settings-menu>a,#help-button{border-color:#e0e0e0;background:#f0f0f0;color:#000;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button:hover,#help-button:focus{border-color:#ffb900;}#settings-menu #settings,#settings-menu #settings::before{border-color:#d2d2d2;}#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;}.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;}.scraped-example-list .scrape-help{border-color:#aaa;color:#eee;}.scraped-example-list .scrape-help:hover{border-color:white;color:white;}.more-examples-toggle summary,.more-examples-toggle .hide-more{color:#999;}.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:#999;}.toggle-line:hover .toggle-line-inner{background:#c5c5c5;} \ No newline at end of file diff --git a/doc/draught/all.html b/doc/draught/all.html index b4cf00e..d54c3c1 100644 --- a/doc/draught/all.html +++ b/doc/draught/all.html @@ -1,7 +1,8 @@ -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 a0537d5..ecc3327 100644 --- a/doc/draught/board/constant.STD_HEIGHT.html +++ b/doc/draught/board/constant.STD_HEIGHT.html @@ -1,9 +1,10 @@ -STD_HEIGHT in draught::board - Rust -
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 56f1a7e..dcd3a08 100644 --- a/doc/draught/board/constant.STD_WIDTH.html +++ b/doc/draught/board/constant.STD_WIDTH.html @@ -1,9 +1,10 @@ -STD_WIDTH in draught::board - Rust -
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 ca6582d..0be4137 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,8 +1,9 @@ -__wbg_get_board_current_turn__const in draught::board - Rust -
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 723c956..010ed44 100644 --- a/doc/draught/board/constant.__wbg_get_board_height__const.html +++ b/doc/draught/board/constant.__wbg_get_board_height__const.html @@ -1,8 +1,9 @@ -__wbg_get_board_height__const in draught::board - Rust -
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 73a93ba..b423e81 100644 --- a/doc/draught/board/constant.__wbg_get_board_width__const.html +++ b/doc/draught/board/constant.__wbg_get_board_width__const.html @@ -1,8 +1,9 @@ -__wbg_get_board_width__const in draught::board - Rust -
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 888f606..6905e95 100644 --- a/doc/draught/board/constant.__wbg_get_brdidx_col__const.html +++ b/doc/draught/board/constant.__wbg_get_brdidx_col__const.html @@ -1,8 +1,9 @@ -__wbg_get_brdidx_col__const in draught::board - Rust -
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 6b99658..cb93086 100644 --- a/doc/draught/board/constant.__wbg_get_brdidx_row__const.html +++ b/doc/draught/board/constant.__wbg_get_brdidx_row__const.html @@ -1,8 +1,9 @@ -__wbg_get_brdidx_row__const in draught::board - Rust -
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 b873158..a9be5ec 100644 --- a/doc/draught/board/constant.__wbg_get_piece_strength__const.html +++ b/doc/draught/board/constant.__wbg_get_piece_strength__const.html @@ -1,8 +1,9 @@ -__wbg_get_piece_strength__const in draught::board - Rust -
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 3641c3b..80845c7 100644 --- a/doc/draught/board/constant.__wbg_get_piece_team__const.html +++ b/doc/draught/board/constant.__wbg_get_piece_team__const.html @@ -1,8 +1,9 @@ -__wbg_get_piece_team__const in draught::board - Rust -
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 ca48846..8745551 100644 --- a/doc/draught/board/constant.__wbg_get_square_occupant__const.html +++ b/doc/draught/board/constant.__wbg_get_square_occupant__const.html @@ -1,8 +1,9 @@ -__wbg_get_square_occupant__const in draught::board - Rust -
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 326cae6..e8684e2 100644 --- a/doc/draught/board/constant.__wbg_get_square_state__const.html +++ b/doc/draught/board/constant.__wbg_get_square_state__const.html @@ -1,8 +1,9 @@ -__wbg_get_square_state__const in draught::board - Rust -
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 b3a3fda..553022a 100644 --- a/doc/draught/board/enums/enum.MoveType.html +++ b/doc/draught/board/enums/enum.MoveType.html @@ -1,48 +1,49 @@ -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 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

-

Returns the argument unchanged.

-

Calls U::from(self).

+

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 +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

+

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 2244bc2..4e3f99f 100644 --- a/doc/draught/board/enums/enum.Moveable.html +++ b/doc/draught/board/enums/enum.Moveable.html @@ -1,9 +1,10 @@ -Moveable in draught::board::enums - Rust -
#[repr(u8)]
 pub enum Moveable {
     Allowed,
@@ -16,40 +17,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 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

-

Returns the argument unchanged.

-

Calls U::from(self).

+

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 +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

+

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 40fc57f..64073b6 100644 --- a/doc/draught/board/enums/enum.SquareState.html +++ b/doc/draught/board/enums/enum.SquareState.html @@ -1,51 +1,52 @@ -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 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

-

Returns the argument unchanged.

-

Calls U::from(self).

+

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 +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

+

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 efee9f8..a707c41 100644 --- a/doc/draught/board/enums/enum.Strength.html +++ b/doc/draught/board/enums/enum.Strength.html @@ -1,48 +1,49 @@ -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 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

-

Returns the argument unchanged.

-

Calls U::from(self).

+

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 +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

+

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 8d26781..f83ca01 100644 --- a/doc/draught/board/enums/enum.Team.html +++ b/doc/draught/board/enums/enum.Team.html @@ -1,51 +1,52 @@ -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 +

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 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

-

Returns the argument unchanged.

-

Calls U::from(self).

+

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 +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

+

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 ebb2a69..f54afbb 100644 --- a/doc/draught/board/enums/index.html +++ b/doc/draught/board/enums/index.html @@ -1,14 +1,15 @@ -draught::board::enums - Rust -

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/enums/sidebar-items.js b/doc/draught/board/enums/sidebar-items.js index 17a2275..e0939a1 100644 --- a/doc/draught/board/enums/sidebar-items.js +++ b/doc/draught/board/enums/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"enum":[["MoveType","Move/Jump, for use in Move"],["Moveable","Possible outcomes of trying to move"],["SquareState","Model board square as Empty/Occupied/Unplayable"],["Strength","Man/King"],["Team","Black/White"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":[["MoveType","Move/Jump, for use in Move"],["Moveable","Possible outcomes of trying to move"],["SquareState","Model board square as Empty/Occupied/Unplayable"],["Strength","Man/King"],["Team","Black/White"]]}; \ No newline at end of file diff --git a/doc/draught/board/index.html b/doc/draught/board/index.html index 4e3532a..d26c3cf 100644 --- a/doc/draught/board/index.html +++ b/doc/draught/board/index.html @@ -1,9 +1,10 @@ -draught::board - Rust -
Expand description

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

Modules

Structs

@@ -15,5 +16,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 a8f34fe..082efca 100644 --- a/doc/draught/board/iter/index.html +++ b/doc/draught/board/iter/index.html @@ -1,9 +1,10 @@ -draught::board::iter - Rust -
+
\ No newline at end of file diff --git a/doc/draught/board/iter/sidebar-items.js b/doc/draught/board/iter/sidebar-items.js index e395733..cf0f846 100644 --- a/doc/draught/board/iter/sidebar-items.js +++ b/doc/draught/board/iter/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"struct":[["PieceIterator",""],["RowIndexIterator",""],["RowSquareIterator",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"struct":[["PieceIterator",""],["RowIndexIterator",""],["RowSquareIterator",""]]}; \ No newline at end of file diff --git a/doc/draught/board/iter/struct.PieceIterator.html b/doc/draught/board/iter/struct.PieceIterator.html index 11ba5e0..4be9e37 100644 --- a/doc/draught/board/iter/struct.PieceIterator.html +++ b/doc/draught/board/iter/struct.PieceIterator.html @@ -1,141 +1,142 @@ -PieceIterator in draught::board::iter - Rust -
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

-
🔬 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

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

Collects all the items from 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

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

Collects all the items from 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, 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

-

Returns the argument unchanged.

-

Calls U::from(self).

+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 +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 dccb36c..7d596e3 100644 --- a/doc/draught/board/iter/struct.RowIndexIterator.html +++ b/doc/draught/board/iter/struct.RowIndexIterator.html @@ -1,141 +1,142 @@ -RowIndexIterator in draught::board::iter - Rust -
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

-
🔬 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

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

Collects all the items from 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

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

Collects all the items from 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, 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

-

Returns the argument unchanged.

-

Calls U::from(self).

+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 +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 82413a5..dd42779 100644 --- a/doc/draught/board/iter/struct.RowSquareIterator.html +++ b/doc/draught/board/iter/struct.RowSquareIterator.html @@ -1,141 +1,142 @@ -RowSquareIterator in draught::board::iter - Rust -
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

-
🔬 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

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

Collects all the items from 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

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

Collects all the items from 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, 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

-

Returns the argument unchanged.

-

Calls U::from(self).

+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 +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/sidebar-items.js b/doc/draught/board/sidebar-items.js index 205487c..39d8652 100644 --- a/doc/draught/board/sidebar-items.js +++ b/doc/draught/board/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["STD_HEIGHT","Standard height of a checkers board is 8 squares"],["STD_WIDTH","Standard width of a checkers board is 8 squares"],["__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",""]],"mod":[["enums",""],["iter",""]],"struct":[["Board","Single state of a checkers board"],["BrdIdx","Rank 2 tensor index to identify a board square by row and column"],["Direction","Standard diagonal movements given by north west/east etc"],["Piece","Game piece given by its team and strength (normal or kinged)"],["Square","Board squares given by a state and a possible occupying game piece"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":[["STD_HEIGHT","Standard height of a checkers board is 8 squares"],["STD_WIDTH","Standard width of a checkers board is 8 squares"],["__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",""]],"mod":[["enums",""],["iter",""]],"struct":[["Board","Single state of a checkers board"],["BrdIdx","Rank 2 tensor index to identify a board square by row and column"],["Direction","Standard diagonal movements given by north west/east etc"],["Piece","Game piece given by its team and strength (normal or kinged)"],["Square","Board squares given by a state and a possible occupying game piece"]]}; \ No newline at end of file diff --git a/doc/draught/board/struct.Board.html b/doc/draught/board/struct.Board.html index 294dfed..bb750c0 100644 --- a/doc/draught/board/struct.Board.html +++ b/doc/draught/board/struct.Board.html @@ -1,109 +1,110 @@ -Board in draught::board - Rust -
pub struct Board {
-    cells: Vec<Square>,
-    pub width: usize,
-    pub height: usize,
+    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

+

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

+

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

+

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

+

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

+

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

+

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 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)

+

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 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

+

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 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

-

Converts to this type from the input type.

-

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

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

+

Converts to this type from the input type.

+

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 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.

+

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::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).

+

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 +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

+

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 066a5c9..0521701 100644 --- a/doc/draught/board/struct.BrdIdx.html +++ b/doc/draught/board/struct.BrdIdx.html @@ -1,59 +1,60 @@ -BrdIdx in draught::board - Rust -
pub struct BrdIdx {
-    pub row: usize,
-    pub col: usize,
+    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

-

Converts to this type from the input type.

-

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

+

Converts to this type from the input type.

+

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 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.

+

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::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).

+

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 +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

+

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 709da00..8919841 100644 --- a/doc/draught/board/struct.Direction.html +++ b/doc/draught/board/struct.Direction.html @@ -1,41 +1,42 @@ -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

-

Returns the argument unchanged.

-

Calls U::from(self).

+

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.

-
+From<T> for U chooses to do.

+

The resulting type after obtaining ownership.

+

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

+

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 1591964..0718cb7 100644 --- a/doc/draught/board/struct.Piece.html +++ b/doc/draught/board/struct.Piece.html @@ -1,57 +1,58 @@ -Piece in draught::board - Rust -
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

-

Converts to this type from the input type.

-

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

+

Converts to this type from the input type.

+

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 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.

+

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::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).

+

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 +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

+

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 4cd6464..a5561ef 100644 --- a/doc/draught/board/struct.Square.html +++ b/doc/draught/board/struct.Square.html @@ -1,63 +1,64 @@ -Square in draught::board - Rust -
pub struct Square {
-    pub occupant: Option<Piece>,
+    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

+

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

-

Converts to this type from the input type.

-

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

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

+

Converts to this type from the input type.

+

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 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.

+

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::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).

+

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 +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

+

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 1370798..f8f22cb 100644 --- a/doc/draught/comp/index.html +++ b/doc/draught/comp/index.html @@ -1,13 +1,14 @@ -draught::comp - Rust -
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/sidebar-items.js b/doc/draught/comp/sidebar-items.js index 71168d6..304efc7 100644 --- a/doc/draught/comp/sidebar-items.js +++ b/doc/draught/comp/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"struct":[["BoardNode","For storing boards in the AI tree, stores board with score for comparisons"],["Computer","Root-level structure for managing the game as a collection of board states"],["Move","Represents a move by source/destination indices and the move type"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"struct":[["BoardNode","For storing boards in the AI tree, stores board with score for comparisons"],["Computer","Root-level structure for managing the game as a collection of board states"],["Move","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 718b5b0..ff3ab62 100644 --- a/doc/draught/comp/struct.BoardNode.html +++ b/doc/draught/comp/struct.BoardNode.html @@ -1,32 +1,33 @@ -BoardNode in draught::comp - Rust -
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

-

Returns the argument unchanged.

-

Calls U::from(self).

+

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.

-
+From<T> for U chooses to do.

+

The resulting type after obtaining ownership.

+

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

+

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 3de0357..897aedd 100644 --- a/doc/draught/comp/struct.Computer.html +++ b/doc/draught/comp/struct.Computer.html @@ -1,39 +1,40 @@ -Computer in draught::comp - Rust -
pub struct Computer {
-    pub search_depth: usize,
+    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

+

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 +

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

-

Returns the argument unchanged.

-

Calls U::from(self).

+

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.

-
+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 9b74860..0364fa4 100644 --- a/doc/draught/comp/struct.Move.html +++ b/doc/draught/comp/struct.Move.html @@ -1,33 +1,34 @@ -Move in draught::comp - Rust -
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

-

Returns the argument unchanged.

-

Calls U::from(self).

+

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.

-
+From<T> for U chooses to do.

+

The resulting type after obtaining ownership.

+

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

+

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 683f483..cbae9ad 100644 --- a/doc/draught/constant.__wasm_bindgen_generated_init_wasm__const.html +++ b/doc/draught/constant.__wasm_bindgen_generated_init_wasm__const.html @@ -1,8 +1,9 @@ -__wasm_bindgen_generated_init_wasm__const in draught - Rust -
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 fbb19ae..ebe9acc 100644 --- a/doc/draught/fn.init_wasm.html +++ b/doc/draught/fn.init_wasm.html @@ -1,8 +1,9 @@ -init_wasm in draught - Rust -
+

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 39fc5ee..acf1e20 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,8 +1,9 @@ -__wbg_get_game_last_node_count__const in draught::game - Rust -
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 ec59c34..a70e575 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,8 +1,9 @@ -__wbg_get_game_perfect_chance__const in draught::game - Rust -
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 61d3dc6..b27b25a 100644 --- a/doc/draught/game/index.html +++ b/doc/draught/game/index.html @@ -1,12 +1,13 @@ -draught::game - Rust -
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/sidebar-items.js b/doc/draught/game/sidebar-items.js index 2a082b4..8d0802c 100644 --- a/doc/draught/game/sidebar-items.js +++ b/doc/draught/game/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["__wbg_get_game_last_node_count__const",""],["__wbg_get_game_perfect_chance__const",""]],"struct":[["Game","Root-level structure for managing the game as a collection of board states"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":[["__wbg_get_game_last_node_count__const",""],["__wbg_get_game_perfect_chance__const",""]],"struct":[["Game","Root-level structure for managing the game as a collection of board states"]]}; \ No newline at end of file diff --git a/doc/draught/game/struct.Game.html b/doc/draught/game/struct.Game.html index 8e2df50..7d18185 100644 --- a/doc/draught/game/struct.Game.html +++ b/doc/draught/game/struct.Game.html @@ -1,80 +1,81 @@ -Game in draught::game - Rust -
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

+

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

+

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

+

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 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

+

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

+

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

-

Converts to this type from the input type.

-

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

Trait Implementations

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

Converts to this type from the input type.

+

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 the None branch of this option. Read more

-

The wasm ABI type references to Self are recovered from.

+

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::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).

+

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 +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 1618772..03eb4f5 100644 --- a/doc/draught/index.html +++ b/doc/draught/index.html @@ -1,10 +1,11 @@ -draught - Rust -
+

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

@@ -16,5 +17,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 3aeba0d..1076bac 100644 --- a/doc/draught/macro.log.html +++ b/doc/draught/macro.log.html @@ -1,12 +1,13 @@ -log in draught - Rust -
+

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 a3d3a18..4da1e7d 100644 --- a/doc/draught/macro.log_error.html +++ b/doc/draught/macro.log_error.html @@ -1,11 +1,12 @@ -log_error in draught - Rust -
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 1260d50..5cbb32c 100644 --- a/doc/draught/paint/constant.BLACK_PIECE.html +++ b/doc/draught/paint/constant.BLACK_PIECE.html @@ -1,9 +1,10 @@ -BLACK_PIECE in draught::paint - Rust -
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 030ad74..b12e801 100644 --- a/doc/draught/paint/constant.BLACK_PIECE_OUTLINE.html +++ b/doc/draught/paint/constant.BLACK_PIECE_OUTLINE.html @@ -1,9 +1,10 @@ -BLACK_PIECE_OUTLINE in draught::paint - Rust -
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 6e9d479..43daecb 100644 --- a/doc/draught/paint/constant.BLACK_SQUARE.html +++ b/doc/draught/paint/constant.BLACK_SQUARE.html @@ -1,9 +1,10 @@ -BLACK_SQUARE in draught::paint - Rust -
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 c83c52f..e0cf3cc 100644 --- a/doc/draught/paint/constant.DRAW_OUTLINE.html +++ b/doc/draught/paint/constant.DRAW_OUTLINE.html @@ -1,9 +1,10 @@ -DRAW_OUTLINE in draught::paint - Rust -
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 c4adc98..6daba47 100644 --- a/doc/draught/paint/constant.DRAW_PIECE_OUTLINES.html +++ b/doc/draught/paint/constant.DRAW_PIECE_OUTLINES.html @@ -1,9 +1,10 @@ -DRAW_PIECE_OUTLINES in draught::paint - Rust -
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 e9d2a5d..d2bdcd8 100644 --- a/doc/draught/paint/constant.KING_OUTLINE.html +++ b/doc/draught/paint/constant.KING_OUTLINE.html @@ -1,9 +1,10 @@ -KING_OUTLINE in draught::paint - Rust -
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 6e9a905..98e25a8 100644 --- a/doc/draught/paint/constant.OUTLINE_WIDTH.html +++ b/doc/draught/paint/constant.OUTLINE_WIDTH.html @@ -1,9 +1,10 @@ -OUTLINE_WIDTH in draught::paint - Rust -
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 44f32f9..cb056d3 100644 --- a/doc/draught/paint/constant.PIECE_OUTLINE_PROPORTION.html +++ b/doc/draught/paint/constant.PIECE_OUTLINE_PROPORTION.html @@ -1,9 +1,10 @@ -PIECE_OUTLINE_PROPORTION in draught::paint - Rust -
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 01ace90..8158265 100644 --- a/doc/draught/paint/constant.PIECE_PROPORTION.html +++ b/doc/draught/paint/constant.PIECE_PROPORTION.html @@ -1,9 +1,10 @@ -PIECE_PROPORTION in draught::paint - Rust -
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 ef0f55a..894f31f 100644 --- a/doc/draught/paint/constant.SELECTED_PIECE.html +++ b/doc/draught/paint/constant.SELECTED_PIECE.html @@ -1,9 +1,10 @@ -SELECTED_PIECE in draught::paint - Rust -
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 bde97f9..9cba5f7 100644 --- a/doc/draught/paint/constant.SELECTED_PIECE_OUTLINE.html +++ b/doc/draught/paint/constant.SELECTED_PIECE_OUTLINE.html @@ -1,9 +1,10 @@ -SELECTED_PIECE_OUTLINE in draught::paint - Rust -
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 5621476..4952192 100644 --- a/doc/draught/paint/constant.SQUARE_OUTLINE.html +++ b/doc/draught/paint/constant.SQUARE_OUTLINE.html @@ -1,9 +1,10 @@ -SQUARE_OUTLINE in draught::paint - Rust -
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 b63c005..154c721 100644 --- a/doc/draught/paint/constant.WHITE_PIECE.html +++ b/doc/draught/paint/constant.WHITE_PIECE.html @@ -1,9 +1,10 @@ -WHITE_PIECE in draught::paint - Rust -
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 ea1e5ba..a204763 100644 --- a/doc/draught/paint/constant.WHITE_PIECE_OUTLINE.html +++ b/doc/draught/paint/constant.WHITE_PIECE_OUTLINE.html @@ -1,9 +1,10 @@ -WHITE_PIECE_OUTLINE in draught::paint - Rust -
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 cbc715f..bbf723b 100644 --- a/doc/draught/paint/constant.WHITE_SQUARE.html +++ b/doc/draught/paint/constant.WHITE_SQUARE.html @@ -1,9 +1,10 @@ -WHITE_SQUARE in draught::paint - Rust -
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 c6df4c7..222bff7 100644 --- a/doc/draught/paint/index.html +++ b/doc/draught/paint/index.html @@ -1,9 +1,10 @@ -draught::paint - Rust -
Expand description

Components for painting board states onto HTML canvases

Structs

Used to paint boards onto HTML canvases

@@ -23,5 +24,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/sidebar-items.js b/doc/draught/paint/sidebar-items.js index dc59e1f..bc3480f 100644 --- a/doc/draught/paint/sidebar-items.js +++ b/doc/draught/paint/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["BLACK_PIECE","Default hex colour value for black pieces"],["BLACK_PIECE_OUTLINE","Default hex colour value for black piece outline"],["BLACK_SQUARE","Default hex colour value for black square background"],["DRAW_OUTLINE","Whether to outline black squares"],["DRAW_PIECE_OUTLINES","Whether to outline pieces"],["KING_OUTLINE","Default hex colour value for black piece outline"],["OUTLINE_WIDTH","Line width when outlining black squares as proportion of min cell dimension"],["PIECE_OUTLINE_PROPORTION","Line width for outlining pieces as proportion of piece radius"],["PIECE_PROPORTION","Proportion of square that piece fills as proportion of min cell dimension"],["SELECTED_PIECE","Default hex colour value for selected piece"],["SELECTED_PIECE_OUTLINE","Default hex colour value for selected piece outline"],["SQUARE_OUTLINE","Default hex colour value for outline of black squares"],["WHITE_PIECE","Default hex colour value for white pieces"],["WHITE_PIECE_OUTLINE","Default hex colour value for white piece outline"],["WHITE_SQUARE","Default hex colour value for white square background"]],"struct":[["Painter","Used to paint boards onto HTML canvases"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":[["BLACK_PIECE","Default hex colour value for black pieces"],["BLACK_PIECE_OUTLINE","Default hex colour value for black piece outline"],["BLACK_SQUARE","Default hex colour value for black square background"],["DRAW_OUTLINE","Whether to outline black squares"],["DRAW_PIECE_OUTLINES","Whether to outline pieces"],["KING_OUTLINE","Default hex colour value for black piece outline"],["OUTLINE_WIDTH","Line width when outlining black squares as proportion of min cell dimension"],["PIECE_OUTLINE_PROPORTION","Line width for outlining pieces as proportion of piece radius"],["PIECE_PROPORTION","Proportion of square that piece fills as proportion of min cell dimension"],["SELECTED_PIECE","Default hex colour value for selected piece"],["SELECTED_PIECE_OUTLINE","Default hex colour value for selected piece outline"],["SQUARE_OUTLINE","Default hex colour value for outline of black squares"],["WHITE_PIECE","Default hex colour value for white pieces"],["WHITE_PIECE_OUTLINE","Default hex colour value for white piece outline"],["WHITE_SQUARE","Default hex colour value for white square background"]],"struct":[["Painter","Used to paint boards onto HTML canvases"]]}; \ No newline at end of file diff --git a/doc/draught/paint/struct.Painter.html b/doc/draught/paint/struct.Painter.html index 81e38ff..104fce4 100644 --- a/doc/draught/paint/struct.Painter.html +++ b/doc/draught/paint/struct.Painter.html @@ -1,13 +1,14 @@ -Painter in draught::paint - Rust -
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, @@ -17,61 +18,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

+

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

+

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

+

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

+

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

-

Converts to this type from the input type.

-

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

Trait Implementations

Formats the value using the given formatter. Read more

+

Converts to this type from the input type.

+

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 the None branch of this option. Read more

-

The wasm ABI type references to Self are recovered from.

+

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::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).

+

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 +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/sidebar-items.js b/doc/draught/sidebar-items.js index 2a4c9f0..21cf1e0 100644 --- a/doc/draught/sidebar-items.js +++ b/doc/draught/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["__wasm_bindgen_generated_init_wasm__const",""]],"fn":[["init_wasm",""]],"macro":[["log","Wrap the [`web_sys`] access to the browser console in a macro for easy logging"],["log_error",""]],"mod":[["board","Board module for components related to the checkers board and game structure"],["comp","AI player logic"],["game","Top-level object for managing [`Board`]s, applying and managing turns"],["paint","Components for painting board states onto HTML canvases"],["utils",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":[["__wasm_bindgen_generated_init_wasm__const",""]],"fn":[["init_wasm",""]],"macro":[["log","Wrap the [`web_sys`] access to the browser console in a macro for easy logging"],["log_error",""]],"mod":[["board","Board module for components related to the checkers board and game structure"],["comp","AI player logic"],["game","Top-level object for managing [`Board`]s, applying and managing turns"],["paint","Components for painting board states onto HTML canvases"],["utils",""]]}; \ 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 4a8adf0..d427c44 100644 --- a/doc/draught/utils/fn.set_panic_hook.html +++ b/doc/draught/utils/fn.set_panic_hook.html @@ -1,8 +1,9 @@ -set_panic_hook in draught::utils - Rust -
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 9d685fa..2a5ed96 100644 --- a/doc/draught/utils/index.html +++ b/doc/draught/utils/index.html @@ -1,9 +1,10 @@ -draught::utils - Rust -
+
\ No newline at end of file diff --git a/doc/draught/utils/sidebar-items.js b/doc/draught/utils/sidebar-items.js index 8b40b8f..8c9958f 100644 --- a/doc/draught/utils/sidebar-items.js +++ b/doc/draught/utils/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["set_panic_hook",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":[["set_panic_hook",""]]}; \ No newline at end of file diff --git a/doc/implementors/core/clone/trait.Clone.js b/doc/implementors/core/clone/trait.Clone.js index 9679e4a..34ed7ad 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 1fddf81..a4e3080 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 1cd0773..86e4b65 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 f792140..448b91c 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 5490f76..5828b76 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 31ed9b2..c0d7cc0 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 b4f7e7e..1585142 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 3b6d06c..bfb4fa8 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 5e07b75..4ad47fa 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 6ab286d..2d2bf58 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 38f53fd..7428c27 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 a529e9d..f050844 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 fefca00..58e91e6 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 96031f4..04cfe9b 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 55c3734..d9281e3 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 55e776a..351fa5d 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 90de68d..ceb83fc 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,.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;}.scraped-example-list .scrape-help{border-color:#555;color:#333;}.scraped-example-list .scrape-help:hover{border-color:black;color:black;}.more-examples-toggle summary,.more-examples-toggle .hide-more{color:#999;}.scraped-example .example-wrap .rust span.highlight{background:#fcffd6;}.scraped-example .example-wrap .rust span.highlight.focus{background:#f6fdb0;}.scraped-example:not(.expanded) .code-wrapper:before{background:linear-gradient(to bottom,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper:after{background:linear-gradient(to top,rgba(255,255,255,1),rgba(255,255,255,0));}.toggle-line-inner{background:#ccc;}.toggle-line:hover .toggle-line-inner{background:#999;} \ No newline at end of file + body,#settings-menu #settings,#settings-menu #settings::before{background-color:white;color:black;}.setting-line .radio-line input{border-color:black;}.setting-line .radio-line input:checked{box-shadow:inset 0 0 0 3px white;background-color:#2196f3;}.setting-line .radio-line input:focus{box-shadow:0 0 1px 1px #2196f3;}.setting-line .radio-line input:checked:focus{box-shadow:inset 0 0 0 3px white,0 0 2px 2px #2196f3;}.setting-line .radio-line input:hover{border-color:#2196f3 !important;}.slider{background-color:#ccc;}.slider:before{background-color:white;}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);}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{background-color:white;border-color:#e0e0e0 !important;}.search-input:focus{border-color:#66afe9;}.module-item .stab,.import-item .stab{color:#000;}.stab.empty-impl{background:#FFF5D6;border-color:#FFC600;}.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;}#settings-menu>a,#help-button{border-color:#e0e0e0;background-color:#fff;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button:hover,#help-button:focus{border-color:#717171;}#settings-menu #settings,#settings-menu #settings::before{border-color:#DDDDDD;}#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;}.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;}.scraped-example-list .scrape-help{border-color:#555;color:#333;}.scraped-example-list .scrape-help:hover{border-color:black;color:black;}.more-examples-toggle summary,.more-examples-toggle .hide-more{color:#999;}.scraped-example .example-wrap .rust span.highlight{background:#fcffd6;}.scraped-example .example-wrap .rust span.highlight.focus{background:#f6fdb0;}.scraped-example:not(.expanded) .code-wrapper:before{background:linear-gradient(to bottom,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper:after{background:linear-gradient(to top,rgba(255,255,255,1),rgba(255,255,255,0));}.toggle-line-inner{background:#ccc;}.toggle-line:hover .toggle-line-inner{background:#999;} \ No newline at end of file diff --git a/doc/main.js b/doc/main.js index 54450c1..a756f49 100644 --- a/doc/main.js +++ b/doc/main.js @@ -1,8 +1,8 @@ -"use strict";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){const 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){const 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 hideMain(){addClass(document.getElementById(MAIN_ID),"hidden")}function showMain(){removeClass(document.getElementById(MAIN_ID),"hidden")}(function(){window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");window.searchJS=resourcePath("search",".js");window.searchIndexJS=resourcePath("search-index",".js");window.settingsJS=resourcePath("settings",".js");const 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,};const mobileLocationTitle=document.querySelector(".mobile-topbar h2.location");const 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}const c=ev.charCode||ev.keyCode;if(c==27){return"Escape"}return String.fromCharCode(c)}const THEME_PICKER_ELEMENT_ID="theme-picker";const THEMES_ELEMENT_ID="theme-choices";const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";function getThemesElement(){return document.getElementById(THEMES_ELEMENT_ID)}function getThemePickerElement(){return document.getElementById(THEME_PICKER_ELEMENT_ID)}function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function showThemeButtonState(){const themePicker=getThemePickerElement();const themeChoices=getThemesElement();themeChoices.style.display="block";themePicker.style.borderBottomRightRadius="0";themePicker.style.borderBottomLeftRadius="0"}function hideThemeButtonState(){const themePicker=getThemePickerElement();const themeChoices=getThemesElement();themeChoices.style.display="none";themePicker.style.borderBottomRightRadius="3px";themePicker.style.borderBottomLeftRadius="3px"}window.hideSettings=()=>{};(function(){if(!document.location.href.startsWith("file:///")){return}const themeChoices=getThemesElement();const themePicker=getThemePickerElement();const availableThemes=getVar("themes").split(",");removeClass(themeChoices.parentElement,"hidden");function switchThemeButtonState(){if(themeChoices.style.display==="block"){hideThemeButtonState()}else{showThemeButtonState()}}function handleThemeButtonsBlur(e){const active=document.activeElement;const 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(item=>{const but=document.createElement("button");but.textContent=item;but.onclick=()=>{switchTheme(window.currentTheme,window.mainTheme,item,true);useSystemTheme(false)};but.onblur=handleThemeButtonsBlur;themeChoices.appendChild(but)})}());function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden")}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function loadCss(cssFileName){const link=document.createElement("link");link.href=resourcePath(cssFileName,".css");link.type="text/css";link.rel="stylesheet";document.getElementsByTagName("head")[0].appendChild(link)}(function(){function loadScript(url){const script=document.createElement("script");script.src=url;document.head.append(script)}getSettingsButton().onclick=event=>{addClass(getSettingsButton(),"rotate");event.preventDefault();loadCss("settings");loadScript(window.settingsJS)};window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},hideResults:()=>{switchDisplayedElement(null);document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(window.searchJS);loadScript(window.searchIndexJS)}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){const search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search);loadSearch()}},};function getPageId(){if(window.location.hash){const tmp=window.location.hash.replace(/^#/,"");if(tmp.length>0){return tmp}}return null}const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const 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){const 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){searchState.clearInputTimeout();const help=getHelpElement(false);if(help&&!hasClass(help,"hidden")){displayHelp(false,ev,help)}else{switchDisplayedElement(null);if(browserSupportsHistoryApi()){history.replaceState(null,window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}ev.preventDefault()}searchState.defocus();hideThemeButtonState()}const disableShortcuts=getSettingValue("disable-shortcuts")==="true";function handleShortcut(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}let themePicker;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();themePicker=getThemePickerElement();themePicker.click();themePicker.focus();break;default:if(getThemePickerElement().parentNode.contains(ev.target)){handleThemeKeyDown(ev)}}}}function handleThemeKeyDown(ev){const active=document.activeElement;const 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);window.initSidebarItems=items=>{const sidebar=document.getElementsByClassName("sidebar-elems")[0];let others;const current=window.sidebarCurrent;function addSidebarCrates(crates){if(!hasClass(document.body,"crate")){return}const div=document.createElement("div");div.className="block crate";div.innerHTML="

Crates

";const ul=document.createElement("ul");div.appendChild(ul);for(const crate of crates){let klass="crate";if(window.rootPath!=="./"&&crate===window.currentCrate){klass+=" current"}const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";link.className=klass;link.textContent=crate;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}others.appendChild(div)}function block(shortty,id,longty){const filtered=items[shortty];if(!filtered){return}const div=document.createElement("div");div.className="block "+shortty;const h3=document.createElement("h3");h3.innerHTML=`${longty}`;div.appendChild(h3);const ul=document.createElement("ul");for(const item of filtered){const name=item[0];const desc=item[1];let klass=shortty;if(name===current.name&&shortty===current.ty){klass+=" current"}let path;if(shortty==="mod"){path=name+"/index.html"}else{path=shortty+"."+name+".html"}const link=document.createElement("a");link.href=current.relpath+path;link.title=desc;link.className=klass;link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}div.appendChild(ul);others.appendChild(div)}if(sidebar){others=document.createElement("div");others.className="others";sidebar.appendChild(others);const isModule=hasClass(document.body,"mod");if(!isModule){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("union","unions","Unions");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Definitions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("traitalias","trait-aliases","Trait Aliases")}addSidebarCrates(window.ALL_CRATES)}};window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector("h1.fqn > .in-band > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const ignoreExternCrates=document.querySelector("script[data-ignore-extern-crates]").getAttribute("data-ignore-extern-crates");for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.indexOf(lib)!==-1){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct.synthetic?synthetic_implementors:implementors;if(struct.synthetic){for(const struct_type of struct.types){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct.text;addClass(code,"code-header");addClass(code,"in-band");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&href.indexOf("http")!==0){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}function labelForToggleButton(sectionIsCollapsed){if(sectionIsCollapsed){return"+"}return"\u2212"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}let sectionIsCollapsed=false;if(hasClass(innerToggle,"will-expand")){removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("rustdoc-toggle"),e=>{if(!hasClass(e,"type-contents-toggle")){e.open=true}});innerToggle.title="collapse all docs"}else{addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("rustdoc-toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});sectionIsCollapsed=true;innerToggle.title="expand all docs"}innerToggle.children[0].innerText=labelForToggleButton(sectionIsCollapsed)}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("rustdoc-toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}});const pageId=getPageId();if(pageId!==null){expandSection(pageId)}}());(function(){let lineNumbersFunc=()=>{};if(getSettingValue("line-numbers")==="true"){lineNumbersFunc=x=>{const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{if(hasClass(e,"compile_fail")){e.addEventListener("mouseover",function(){this.parentElement.previousElementSibling.childNodes[0].style.color="#f00"});e.addEventListener("mouseout",function(){this.parentElement.previousElementSibling.childNodes[0].style.color=""})}else if(hasClass(e,"ignore")){e.addEventListener("mouseover",function(){this.parentElement.previousElementSibling.childNodes[0].style.color="#ff9200"});e.addEventListener("mouseout",function(){this.parentElement.previousElementSibling.childNodes[0].style.color=""})}lineNumbersFunc(e)})}());function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}function handleClick(id,f){const elem=document.getElementById(id);if(elem){elem.addEventListener("click",f)}}handleClick("help-button",ev=>{displayHelp(true,ev)});handleClick(MAIN_ID,()=>{hideSidebar()});onEachLazy(document.getElementsByTagName("a"),el=>{if(el.hash){el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})}});onEachLazy(document.querySelectorAll(".rustdoc-toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});onEachLazy(document.getElementsByClassName("notable-traits"),e=>{e.onclick=function(){this.getElementsByClassName("notable-traits-tooltiptext")[0].classList.toggle("force-tooltip")}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){addClass(sidebar,"shown")}else{removeClass(sidebar,"shown")}})}let buildHelperPopup=()=>{const popup=document.createElement("aside");addClass(popup,"hidden");popup.id="help";popup.addEventListener("click",ev=>{if(ev.target===popup){displayHelp(false,ev)}});const book_info=document.createElement("span");book_info.className="top";book_info.innerHTML="You can find more information in \ - the rustdoc book.";const container=document.createElement("div");const 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(x=>"
"+x[0].split(" ").map((y,index)=>(index&1)===0?""+y+"":" "+y+" ").join("")+"
"+x[1]+"
").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";const infos=["Prefix searches with a type followed by a colon (e.g., fn:) to \ +"use strict";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){const 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){const 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 hideMain(){addClass(document.getElementById(MAIN_ID),"hidden")}function showMain(){removeClass(document.getElementById(MAIN_ID),"hidden")}(function(){window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate")}());function setMobileTopbar(){const mobileLocationTitle=document.querySelector(".mobile-topbar h2.location");const 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}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}window.hideSettings=()=>{};function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden")}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function loadCss(cssFileName){const link=document.createElement("link");link.href=resourcePath(cssFileName,".css");link.type="text/css";link.rel="stylesheet";document.getElementsByTagName("head")[0].appendChild(link)}(function(){function loadScript(url){const script=document.createElement("script");script.src=url;document.head.append(script)}getSettingsButton().onclick=event=>{addClass(getSettingsButton(),"rotate");event.preventDefault();loadCss("settings");loadScript(resourcePath("settings",".js"))};window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},hideResults:()=>{switchDisplayedElement(null);document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(resourcePath("search",".js"));loadScript(resourcePath("search-index",".js"))}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){const search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search);loadSearch()}},};function getPageId(){if(window.location.hash){const tmp=window.location.hash.replace(/^#/,"");if(tmp.length>0){return tmp}}return null}const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const 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){const 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){searchState.clearInputTimeout();const help=getHelpElement(false);if(help&&!hasClass(help,"hidden")){displayHelp(false,ev,help)}else{switchDisplayedElement(null);if(browserSupportsHistoryApi()){history.replaceState(null,window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}ev.preventDefault()}searchState.defocus();window.hideSettings()}const 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;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementsByClassName("sidebar-elems")[0];function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const div=document.createElement("div");div.className="block "+shortty;const h3=document.createElement("h3");h3.innerHTML=`${longty}`;div.appendChild(h3);const ul=document.createElement("ul");for(const item of filtered){const name=item[0];const desc=item[1];let klass=shortty;let path;if(shortty==="mod"){path=name+"/index.html"}else{path=shortty+"."+name+".html"}const current_page=document.location.href.split("/").pop();if(path===current_page){klass+=" current"}const link=document.createElement("a");link.href=path;link.title=desc;link.className=klass;link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}div.appendChild(ul);sidebar.appendChild(div)}if(sidebar){const isModule=hasClass(document.body,"mod");if(!isModule){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("union","unions","Unions");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Definitions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("traitalias","trait-aliases","Trait Aliases")}}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector("h1.fqn > .in-band > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const ignoreExternCrates=document.querySelector("script[data-ignore-extern-crates]").getAttribute("data-ignore-extern-crates");for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.indexOf(lib)!==-1){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct.synthetic?synthetic_implementors:implementors;if(struct.synthetic){for(const struct_type of struct.types){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct.text;addClass(code,"code-header");addClass(code,"in-band");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&href.indexOf("http")!==0){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementsByClassName("sidebar-elems")[0];if(!sidebarElems){return}const div=document.createElement("div");div.className="block crate";div.innerHTML="

Crates

";const ul=document.createElement("ul");div.appendChild(ul);for(const crate of window.ALL_CRATES){let klass="crate";if(window.rootPath!=="./"&&crate===window.currentCrate){klass+=" current"}const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";link.className=klass;link.textContent=crate;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(div)}function labelForToggleButton(sectionIsCollapsed){if(sectionIsCollapsed){return"+"}return"\u2212"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}let sectionIsCollapsed=false;if(hasClass(innerToggle,"will-expand")){removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("rustdoc-toggle"),e=>{if(!hasClass(e,"type-contents-toggle")){e.open=true}});innerToggle.title="collapse all docs"}else{addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("rustdoc-toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});sectionIsCollapsed=true;innerToggle.title="expand all docs"}innerToggle.children[0].innerText=labelForToggleButton(sectionIsCollapsed)}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("rustdoc-toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}});const pageId=getPageId();if(pageId!==null){expandSection(pageId)}}());(function(){let lineNumbersFunc=()=>{};if(getSettingValue("line-numbers")==="true"){lineNumbersFunc=x=>{const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{if(hasClass(e,"compile_fail")){e.addEventListener("mouseover",function(){this.parentElement.previousElementSibling.childNodes[0].style.color="#f00"});e.addEventListener("mouseout",function(){this.parentElement.previousElementSibling.childNodes[0].style.color=""})}else if(hasClass(e,"ignore")){e.addEventListener("mouseover",function(){this.parentElement.previousElementSibling.childNodes[0].style.color="#ff9200"});e.addEventListener("mouseout",function(){this.parentElement.previousElementSibling.childNodes[0].style.color=""})}lineNumbersFunc(e)})}());function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}function handleClick(id,f){const elem=document.getElementById(id);if(elem){elem.addEventListener("click",f)}}handleClick("help-button",ev=>{displayHelp(true,ev)});handleClick(MAIN_ID,()=>{hideSidebar()});onEachLazy(document.getElementsByTagName("a"),el=>{if(el.hash){el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})}});onEachLazy(document.querySelectorAll(".rustdoc-toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});onEachLazy(document.getElementsByClassName("notable-traits"),e=>{e.onclick=function(){this.getElementsByClassName("notable-traits-tooltiptext")[0].classList.toggle("force-tooltip")}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){addClass(sidebar,"shown")}else{removeClass(sidebar,"shown")}})}let buildHelperPopup=()=>{const popup=document.createElement("aside");addClass(popup,"hidden");popup.id="help";popup.addEventListener("click",ev=>{if(ev.target===popup){displayHelp(false,ev)}});const book_info=document.createElement("span");book_info.className="top";book_info.innerHTML="You can find more information in \ + the rustdoc book.";const container=document.createElement("div");const shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["↑","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(x=>"
"+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
"+x[1]+"
").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";const 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, \ and const.","Search functions by type signature (e.g., vec -> usize or \ * -> vec)","Search multiple things at once by splitting your query with comma (e.g., \ str,u8 or String,struct:Vec,test)","You can look for items with an exact name by putting double quotes around \ - your request: \"string\"","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

"+x+"

").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;container.appendChild(book_info);container.appendChild(div_shortcuts);container.appendChild(div_infos);const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);container.appendChild(rustdoc_version);popup.appendChild(container);insertAfter(popup,document.querySelector("main"));buildHelperPopup=()=>{}};onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){let reset_button_timeout=null;window.copy_path=but=>{const parent=but.parentElement;const path=[];onEach(parent.childNodes,child=>{if(child.tagName==="A"){path.push(child.textContent)}});const el=document.createElement("textarea");el.value=path.join("::");el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el);but.children[0].style.display="none";let tmp;if(but.childNodes.length<2){tmp=document.createTextNode("✓");but.appendChild(tmp)}else{onEachLazy(but.childNodes,e=>{if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent="✓"}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent="";reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file + your request: \"string\"","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

"+x+"

").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;container.appendChild(book_info);container.appendChild(div_shortcuts);container.appendChild(div_infos);const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);container.appendChild(rustdoc_version);popup.appendChild(container);insertAfter(popup,document.querySelector("main"));buildHelperPopup=()=>{}};setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){let reset_button_timeout=null;window.copy_path=but=>{const parent=but.parentElement;const path=[];onEach(parent.childNodes,child=>{if(child.tagName==="A"){path.push(child.textContent)}});const el=document.createElement("textarea");el.value=path.join("::");el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el);but.children[0].style.display="none";let tmp;if(but.childNodes.length<2){tmp=document.createTextNode("✓");but.appendChild(tmp)}else{onEachLazy(but.childNodes,e=>{if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent="✓"}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent="";reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/doc/noscript.css b/doc/noscript.css index 8ad8864..d850bb3 100644 --- a/doc/noscript.css +++ b/doc/noscript.css @@ -1 +1 @@ - #main-content .attributes{margin-left:0 !important;}#copy-path{display:none;}.sub{display:none;}#theme-picker{display:none;} \ No newline at end of file + #main-content .attributes{margin-left:0 !important;}#copy-path{display:none;}.sub{display:none;} \ No newline at end of file diff --git a/doc/rustdoc.css b/doc/rustdoc.css index 46b5877..26904c7 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");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");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");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");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");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic.ttf.woff2") format("woff2");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;}.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(#sidebar-toggle){opacity:0;visibility:hidden;}.source .sidebar.expanded{overflow-y:auto;}.source .sidebar.expanded>*:not(#sidebar-toggle){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;}.line-numbers{text-align:right;}.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):not(.more-examples-toggle){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;}.item-info{display:block;}.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):not(.scrape-help):hover,.docblock-short a:not(.srclink):not(.test-arrow):not(.scrape-help):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:first-child:last-child{margin-right:1px;width:calc(100% - 1px);}#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;}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate img{animation:rotating 2s linear infinite;}#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;}.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-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;background:transparent;border-width:1px;border-style:solid;border-radius:50px;}.scraped-example-title{font-family:'Fira Sans';}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper{max-height:240px;}.scraped-example:not(.expanded) .code-wrapper pre{overflow-y:hidden;max-height:240px;padding-bottom:0;}.scraped-example:not(.expanded) .code-wrapper pre.line-numbers{overflow-x:hidden;}.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:not(.expanded) .code-wrapper:before{content:" ";width:100%;height:5px;position:absolute;z-index:100;top:0;}.scraped-example:not(.expanded) .code-wrapper:after{content:" ";width:100%;height:5px;position:absolute;z-index:100;bottom:0;}.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:not(.expanded) .code-wrapper .example-wrap{overflow-x:hidden;}.scraped-example .code-wrapper .example-wrap pre.rust{overflow-x:inherit;width:inherit;overflow-y:hidden;}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;margin-bottom:5px;cursor:pointer;}.more-examples-toggle summary,.more-examples-toggle .hide-more{font-family:'Fira Sans';}.more-scraped-examples{margin-left:5px;display:flex;flex-direction:row;}.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-inner{min-width:2px;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");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");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");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");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");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic.ttf.woff2") format("woff2");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;}.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;}.rustdoc.source .sidebar .sidebar-logo{display:none;}.source .sidebar>*:not(#sidebar-toggle){opacity:0;visibility:hidden;}.source-sidebar-expanded .source .sidebar{overflow-y:auto;}.source-sidebar-expanded .source .sidebar>*:not(#sidebar-toggle){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;}.line-numbers{text-align:right;}.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):not(.more-examples-toggle){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;}.item-info{display:block;}.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):not(.scrape-help):hover,.docblock-short a:not(.srclink):not(.test-arrow):not(.scrape-help):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:1px solid;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:first-child:last-child{margin-right:1px;width:calc(100% - 1px);}#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;}#settings-menu,#help-button{margin-left:4px;outline:none;}#copy-path{height:34px;}#settings-menu>a,#help-button,#copy-path{padding:5px;width:33px;border:1px solid;border-radius:2px;cursor:pointer;}#settings-menu{padding:0;}#settings-menu>a{padding:5px;width:100%;height:100%;display:block;}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}#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;}.source-sidebar-expanded .source .sidebar+main .width-limiter .sub-logo-container.rust-logo{display:none;}.source-sidebar-expanded .source .sidebar{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,.source-sidebar-expanded .source .sidebar,.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;}.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-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-expanded #sidebar-toggle{left:unset;top:unset;width:unset;border-top-right-radius:unset;border-bottom-right-radius:unset;}#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 .source .sidebar{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;}.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-toggle{top:10px;}.source-sidebar-expanded #sidebar-toggle{top:unset;}}.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-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;background:transparent;border-width:1px;border-style:solid;border-radius:50px;}.scraped-example-title{font-family:'Fira Sans';}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper{max-height:240px;}.scraped-example:not(.expanded) .code-wrapper pre{overflow-y:hidden;max-height:240px;padding-bottom:0;}.scraped-example:not(.expanded) .code-wrapper pre.line-numbers{overflow-x:hidden;}.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:not(.expanded) .code-wrapper:before{content:" ";width:100%;height:5px;position:absolute;z-index:100;top:0;}.scraped-example:not(.expanded) .code-wrapper:after{content:" ";width:100%;height:5px;position:absolute;z-index:100;bottom:0;}.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:not(.expanded) .code-wrapper .example-wrap{overflow-x:hidden;}.scraped-example .code-wrapper .example-wrap pre.rust{overflow-x:inherit;width:inherit;overflow-y:hidden;}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;margin-bottom:5px;cursor:pointer;}.more-examples-toggle summary,.more-examples-toggle .hide-more{font-family:'Fira Sans';}.more-scraped-examples{margin-left:5px;display:flex;flex-direction:row;}.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-inner{min-width:2px;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 3ffc5fc..1e739b6 100644 --- a/doc/search-index.js +++ b/doc/search-index.js @@ -1,4 +1,5 @@ var searchIndex = JSON.parse('{\ -"draught":{"doc":"Draught","t":[2,2,2,2,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":["Board","Computer","Game","Painter","__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,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,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"]]}\ +"draught":{"doc":"Draught","t":[2,2,2,2,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":["Board","Computer","Game","Painter","__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,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,null,null,null,null,[[["board",3],["brdidx",3]],["option",4,[["direction",3,[["square",3]]]]]],[[["board",3],["brdidx",3]],["option",4,[["vec",3,[["usize",0]]]]]],[[["board",3],["brdidx",3],["brdidx",3]],["board",3]],[[["board",3],["brdidx",3],["brdidx",3]],["board",3]],[[["board",3],["usize",0]],["brdidx",3]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["board",3],["brdidx",3],["brdidx",3]],["moveable",4]],[[["board",3],["usize",0]],["square",3]],[[["board",3],["brdidx",3]],["usize",0]],[[["board",3],["usize",0],["usize",0]],["usize",0]],[[["board",3],["usize",0]],["square",3]],[[["board",3],["usize",0]],["squarestate",4]],[[["board",3]],["square",0]],null,[[["piece",3],["piece",3]],["bool",0]],[[["board",3],["brdidx",3]]],[[["piece",3]],["piece",3]],[[["direction",3,[["",26,[["clone",8],["clone",8],["copy",8]]]]]],["direction",3,[["",26,[["clone",8],["clone",8],["copy",8]]]]]],[[["square",3]],["square",3]],[[["brdidx",3]],["brdidx",3]],[[["board",3]],["board",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,null,[[]],[[]],[[]],[[]],[[],["direction",3,[["",26,[["clone",8],["copy",8]]]]]],[[],["square",3]],null,[[["piece",3],["piece",3]],["bool",0]],[[["direction",3,[["",26,[["partialeq",8],["clone",8],["copy",8]]]]],["direction",3]],["bool",0]],[[["square",3],["square",3]],["bool",0]],[[["brdidx",3],["brdidx",3]],["bool",0]],[[["brdidx",3],["brdidx",3]],["bool",0]],[[["board",3],["board",3]],["bool",0]],[[["board",3],["brdidx",3],["team",4],["vec",3,[["usize",0]]]],["vec",3,[["usize",0]]]],[[["piece",3],["formatter",3]],["result",6]],[[["direction",3,[["",26,[["debug",8],["clone",8],["copy",8]]]]],["formatter",3]],["result",6]],[[["square",3],["formatter",3]],["result",6]],[[["brdidx",3],["formatter",3]],["result",6]],[[["brdidx",3],["formatter",3]],["result",6]],[[["board",3],["formatter",3]],["result",6]],[[["board",3],["formatter",3]],["result",6]],[[]],[[]],[[]],[[["usize",0],["usize",0]],["brdidx",3]],[[]],[[]],[[["u32",0]],["piece",3]],[[["u32",0]],["square",3]],[[["u32",0]],["brdidx",3]],[[["u32",0]],["board",3]],[[["board",3],["brdidx",3]],["square",3]],null,[[["brdidx",3],["brdidx",3]]],[[["board",3],["usize",0]],["board",3]],[[]],[[]],[[]],[[]],[[]],[[["piece",3]],["u32",0]],[[["square",3]],["u32",0]],[[["brdidx",3]],["u32",0]],[[["board",3]],["u32",0]],[[],["bool",0]],[[],["bool",0]],[[],["bool",0]],[[],["bool",0]],null,[[["board",3],["brdidx",3]],["option",4,[["direction",3,[["square",3]]]]]],[[["board",3],["brdidx",3]],["option",4,[["vec",3,[["usize",0]]]]]],[[["board",3],["brdidx",3],["brdidx",3]],["usize",0]],[[["board",3]],["usize",0]],[[["piece",3],["piece",3]],["bool",0]],[[["direction",3,[["",26,[["partialeq",8],["clone",8],["copy",8]]]]],["direction",3]],["bool",0]],[[["square",3],["square",3]],["bool",0]],[[["brdidx",3],["brdidx",3]],["bool",0]],[[["board",3],["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]],[[]],[[]],[[]],[[]],[[["board",3]],["usize",0]],[[["board",3]],["usize",0]],[[["board",3],["team",4]],["usize",0]],null,null,[[["team",4],["strength",4]],["square",3]],[[["board",3],["brdidx",3],["team",4]],["option",4,[["vec",3,[["usize",0]]]]]],[[["board",3],["brdidx",3],["team",4]],["option",4,[["vec",3,[["usize",0]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[["board",3]],["isize",0]],null,[[["board",3],["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]],[[["board",3],["brdidx",3],["brdidx",3],["piece",3]],["moveable",4]],[[["board",3],["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]],[[["movetype",4]],["movetype",4]],[[["team",4]],["team",4]],[[["strength",4]],["strength",4]],[[["squarestate",4]],["squarestate",4]],[[["moveable",4]],["moveable",4]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[]],[[]],[[]],[[]],[[]],[[["movetype",4],["movetype",4]],["bool",0]],[[["team",4],["team",4]],["bool",0]],[[["strength",4],["strength",4]],["bool",0]],[[["squarestate",4],["squarestate",4]],["bool",0]],[[["moveable",4],["moveable",4]],["bool",0]],[[["movetype",4],["formatter",3]],["result",6]],[[["team",4],["formatter",3]],["result",6]],[[["team",4],["formatter",3]],["result",6]],[[["strength",4],["formatter",3]],["result",6]],[[["squarestate",4],["formatter",3]],["result",6]],[[["squarestate",4],["formatter",3]],["result",6]],[[["moveable",4],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["u32",0]],["movetype",4]],[[["u32",0]],["team",4]],[[["u32",0]],["strength",4]],[[["u32",0]],["squarestate",4]],[[["u32",0]],["moveable",4]],[[]],[[]],[[]],[[]],[[]],[[["movetype",4]],["u32",0]],[[["team",4]],["u32",0]],[[["strength",4]],["u32",0]],[[["squarestate",4]],["u32",0]],[[["moveable",4]],["u32",0]],[[["u32",0]],["bool",0]],[[["u32",0]],["bool",0]],[[["u32",0]],["bool",0]],[[["u32",0]],["bool",0]],[[["u32",0]],["bool",0]],[[]],[[]],[[]],[[]],[[]],[[["team",4]],["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]],["rowindexiterator",3]],[[["board",3]],["rowsquareiterator",3]],[[["board",3]],["pieceiterator",3]],[[["rowindexiterator",3]],["option",4,[["vec",3,[["usize",0]]]]]],[[["rowsquareiterator",3]],["option",4,[["vec",3,[["square",3]]]]]],[[["pieceiterator",3]],["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,[[["computer",3],["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]],[[["move",3]],["move",3]],[[["boardnode",3]],["boardnode",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["move",3],["move",3]],["bool",0]],[[["boardnode",3],["boardnode",3]],["bool",0]],[[["computer",3],["arena",3],["vec",3,[["nodeid",3]]]],["vec",3,[["nodeid",3]]]],[[["computer",3],["arena",3],["nodeid",3]],["vec",3,[["nodeid",3]]]],[[["move",3],["formatter",3]],["result",6]],[[["boardnode",3],["formatter",3]],["result",6]],[[["computer",3],["formatter",3]],["result",6]],[[]],[[]],[[]],null,[[["computer",3],["arena",3],["board",3]],["nodeid",3]],[[["computer",3],["arena",3],["nodeid",3]],["vec",3,[["nodeid",3]]]],[[["computer",3],["board",3]],["option",4,[["board",3]]]],[[["computer",3],["boardnode",3]],["vec",3,[["boardnode",3]]]],[[["computer",3],["arena",3],["vec",3,[["nodeid",3]]]]],[[["computer",3],["arena",3],["vec",3,[["boardnode",3]]]],["vec",3,[["nodeid",3]]]],[[]],[[]],[[]],null,null,[[["move",3],["move",3]],["bool",0]],[[["boardnode",3],["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,[[["game",3]]],[[["",0]],["",0]],[[["",0]],["",0]],[[["game",3]]],null,[[["game",3]],["board",3]],[[["game",3]],["square",0]],[[["game",3]],["usize",0]],[[["game",3],["brdidx",3]],["square",3]],[[["game",3]],["team",4]],[[]],[[["game",3]]],[[["game",3],["brdidx",3],["brdidx",3]]],[[["game",3],["brdidx",3],["brdidx",3]]],[[["game",3],["formatter",3]],["result",6]],[[["game",3],["formatter",3]],["result",6]],[[]],[[["u32",0]],["game",3]],[[["game",3]],["option",4,[["team",4]]]],[[]],[[["game",3]],["u32",0]],[[],["bool",0]],null,[[["game",3],["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,[[["game",3],["usize",0]],["board",3]],null,[[["game",3],["board",3]]],[[]],[[]],[[]],[[["game",3]],["isize",0]],null,null,[[["game",3],["board",3]]],[[["game",3],["painter",3]]],[[["game",3],["f64",0]]],[[["game",3],["usize",0]]],[[["game",3],["brdidx",3]]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],[[["game",3]],["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,[[]],[[["painter",3],["board",3]]],null,[[["painter",3],["formatter",3]],["result",6]],[[]],[[["u32",0]],["painter",3]],[[["str",0]],["htmlcanvaselement",3]],[[["htmlcanvaselement",3]],["canvasrenderingcontext2d",3]],null,[[]],[[["painter",3]],["u32",0]],[[],["bool",0]],null,[[["u32",0],["u32",0],["str",0]],["painter",3]],[[["u32",0],["u32",0],["htmlcanvaselement",3]],["painter",3]],[[]],null,null,null,[[]],[[]],[[["painter",3]]],[[]],null,null,null,[[["painter",3],["bool",0]]],[[["painter",3],["f64",0]]],[[["painter",3],["option",4]]],[[["painter",3],["jsvalue",3]]],null,[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["painter",3],["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 +if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; +if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex}; diff --git a/doc/search.js b/doc/search.js index 860a595..8fd46df 100644 --- a/doc/search.js +++ b/doc/search.js @@ -1 +1 @@ -"use strict";(function(){const 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",];const TY_PRIMITIVE=itemTypes.indexOf("primitive");const TY_KEYWORD=itemTypes.indexOf("keyword");function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("titles").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb}else if(nb!=0){printTab(0)}}const levenshtein_row2=[];function levenshtein(s1,s2){if(s1===s2){return 0}const s1_len=s1.length,s2_len=s2.length;if(s1_len&&s2_len){let i1=0,i2=0,a,b,c,c2;const row=levenshtein_row2;while(i1{const MAX_LEV_DISTANCE=3;const MAX_RESULTS=200;const GENERICS_DATA=2;const NAME=0;const INPUTS_DATA=0;const OUTPUT_DATA=1;const NO_TYPE_FILTER=-1;let searchIndex;let currentResults;const ALIASES=Object.create(null);const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}function isWhitespace(c){return" \t\n\r".indexOf(c)!==-1}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isEndCharacter(c){return",>-".indexOf(c)!==-1}function isStopCharacter(c){return isWhitespace(c)||isEndCharacter(c)}function isErrorCharacter(c){return"()".indexOf(c)!==-1}function itemTypeFromName(typename){for(let i=0,len=itemTypes.length;i0){throw new Error("Cannot use literal search when there is more than one element")}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw new Error("Unclosed `\"`")}else if(parserState.userQuery[end]!=="\""){throw new Error(`Unexpected \`${parserState.userQuery[end]}\` in a string element`)}else if(start===end){throw new Error("Cannot have empty string element")}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)=="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)=="->"}function isIdentCharacter(c){return(c==="_"||(c>="0"&&c<="9")||(c>="a"&&c<="z")||(c>="A"&&c<="Z"))}function isSeparatorCharacter(c){return c===","||isWhitespaceCharacter(c)}function isWhitespaceCharacter(c){return c===" "||c==="\t"}function createQueryElement(query,parserState,name,generics,isInGenerics){if(name==="*"||(name.length===0&&generics.length===0)){return}if(query.literalSearch&&parserState.totalElems-parserState.genericsElems>0){throw new Error("You cannot have more than one element if you use quotes")}const pathSegments=name.split("::");if(pathSegments.length>1){for(let i=0,len=pathSegments.length;i=end){throw new Error("Found generics without a path")}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}if(start>=end&&generics.length===0){return}elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics))}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;while(parserState.pos"){extra="`<`"}else if(endChar===""){extra="`->`"}throw new Error("Unexpected `"+c+"` after "+extra)}if(!foundStopChar){if(endChar!==""){throw new Error(`Expected \`,\`, \` \` or \`${endChar}\`, found \`${c}\``)}throw new Error(`Expected \`,\` or \` \`, found \`${c}\``)}const posBefore=parserState.pos;getNextElem(query,parserState,elems,endChar===">");if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}parserState.pos+=1}function checkExtraTypeFilterCharacters(parserState){const query=parserState.userQuery;for(let pos=0;pos"){if(isReturnArrow(parserState)){break}throw new Error(`Unexpected \`${c}\` (did you mean \`->\`?)`)}throw new Error(`Unexpected \`${c}\``)}else if(c===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw new Error("Unexpected `:`")}if(query.elems.length===0){throw new Error("Expected type filter before `:`")}else if(query.elems.length!==1||parserState.totalElems!==1){throw new Error("Unexpected `:`")}else if(query.literalSearch){throw new Error("You cannot use quotes on type filter")}checkExtraTypeFilterCharacters(parserState);parserState.typeFilter=query.elems.pop().name;parserState.pos+=1;parserState.totalElems=0;query.literalSearch=false;foundStopChar=true;continue}if(!foundStopChar){if(parserState.typeFilter!==null){throw new Error(`Expected \`,\`, \` \` or \`->\`, found \`${c}\``)}throw new Error(`Expected \`,\`, \` \`, \`:\` or \`->\`, found \`${c}\``)}before=query.elems.length;getNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}while(parserState.pos`")}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),typeFilter:NO_TYPE_FILTER,elems:[],returned:[],foundElems:0,literalSearch:false,error:null,}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="All crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return null}function parseQuery(userQuery){userQuery=userQuery.trim();const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);if(parserState.typeFilter!==null){let typeFilter=parserState.typeFilter;if(typeFilter==="const"){typeFilter="constant"}query.typeFilter=itemTypeFromName(typeFilter)}}catch(err){query=newParsedQuery(userQuery);query.error=err.message;query.typeFilter=-1;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}function execQuery(parsedQuery,searchWords,filterCrates){const results_others={},results_in_args={},results_returned={};function transformResults(results){const duplicates={};const out=[];for(const result of results){if(result.id>-1){const obj=searchIndex[result.id];obj.lev=result.lev;const 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){const userQuery=parsedQuery.userQuery;const ar=[];for(const entry in results){if(hasOwnPropertyRustdoc(results,entry)){const 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((aaa,bbb)=>{let a,b;a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);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});let nameSplit=null;if(parsedQuery.elems.length===1){const hasPath=typeof parsedQuery.elems[0].path==="undefined";nameSplit=hasPath?null:parsedQuery.elems[0].path}for(const result of results){if(result.dontValidate){continue}const name=result.item.name.toLowerCase(),path=result.item.path.toLowerCase(),parent=result.item.parent;if(!isType&&!validateResult(name,path,nameSplit,parent)){result.id=-1}}return transformResults(results)}function checkGenerics(row,elem,defaultLev){if(row.length<=GENERICS_DATA||row[GENERICS_DATA].length===0){return elem.generics.length===0?defaultLev:MAX_LEV_DISTANCE+1}else if(row[GENERICS_DATA].length>0&&row[GENERICS_DATA][0][NAME]===""){if(row.length>GENERICS_DATA){return checkGenerics(row[GENERICS_DATA][0],elem,defaultLev)}return elem.generics.length===0?defaultLev:MAX_LEV_DISTANCE+1}let elem_name;if(elem.generics.length>0&&row[GENERICS_DATA].length>=elem.generics.length){const elems=Object.create(null);for(const entry of row[GENERICS_DATA]){elem_name=entry[NAME];if(elem_name===""){if(checkGenerics(entry,elem,MAX_LEV_DISTANCE+1)!==0){return MAX_LEV_DISTANCE+1}continue}if(elems[elem_name]===undefined){elems[elem_name]=0}elems[elem_name]+=1}for(const generic of elem.generics){let match=null;if(elems[generic.name]){match=generic.name}else{for(elem_name in elems){if(!hasOwnPropertyRustdoc(elems,elem_name)){continue}if(elem_name===generic){match=elem_name;break}}}if(match===null){return MAX_LEV_DISTANCE+1}elems[match]-=1;if(elems[match]===0){delete elems[match]}}return 0}return MAX_LEV_DISTANCE+1}function checkIfInGenerics(row,elem){let lev=MAX_LEV_DISTANCE+1;for(const entry of row[GENERICS_DATA]){lev=Math.min(checkType(entry,elem,true),lev);if(lev===0){break}}return lev}function checkType(row,elem,literalSearch){if(row[NAME].length===0){if(row.length>GENERICS_DATA){return checkIfInGenerics(row,elem)}return MAX_LEV_DISTANCE+1}let lev=levenshtein(row[NAME],elem.name);if(literalSearch){if(lev!==0){if(elem.generics.length===0){const checkGeneric=(row.length>GENERICS_DATA&&row[GENERICS_DATA].length>0);if(checkGeneric&&row[GENERICS_DATA].findIndex(tmp_elem=>tmp_elem[NAME]===elem.name)!==-1){return 0}}return MAX_LEV_DISTANCE+1}else if(elem.generics.length>0){return checkGenerics(row,elem,MAX_LEV_DISTANCE+1)}return 0}else if(row.length>GENERICS_DATA){if(elem.generics.length===0){if(lev===0){return 0}lev=checkIfInGenerics(row,elem);return lev+0.5}else if(lev>MAX_LEV_DISTANCE){return checkIfInGenerics(row,elem)}else{const tmp_lev=checkGenerics(row,elem,lev);if(tmp_lev>MAX_LEV_DISTANCE){return MAX_LEV_DISTANCE+1}return(tmp_lev+lev)/2}}else if(elem.generics.length>0){return MAX_LEV_DISTANCE+1}return lev}function findArg(row,elem,typeFilter){let lev=MAX_LEV_DISTANCE+1;if(row&&row.type&&row.type[INPUTS_DATA]&&row.type[INPUTS_DATA].length>0){for(const input of row.type[INPUTS_DATA]){if(!typePassesFilter(typeFilter,input[1])){continue}lev=Math.min(lev,checkType(input,elem,parsedQuery.literalSearch));if(lev===0){return 0}}}return parsedQuery.literalSearch?MAX_LEV_DISTANCE+1:lev}function checkReturned(row,elem,typeFilter){let lev=MAX_LEV_DISTANCE+1;if(row&&row.type&&row.type.length>OUTPUT_DATA){let ret=row.type[OUTPUT_DATA];if(typeof ret[0]==="string"){ret=[ret]}for(const ret_ty of ret){if(!typePassesFilter(typeFilter,ret_ty[1])){continue}lev=Math.min(lev,checkType(ret_ty,elem,parsedQuery.literalSearch));if(lev===0){return 0}}}return parsedQuery.literalSearch?MAX_LEV_DISTANCE+1:lev}function checkPath(contains,ty){if(contains.length===0){return 0}let ret_lev=MAX_LEV_DISTANCE+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;if(clength>length){return MAX_LEV_DISTANCE+1}for(let i=0;ilength){break}let lev_total=0;let aborted=false;for(let 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;const 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){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES[filterCrates]&&ALIASES[filterCrates][lowerQuery]){const query_aliases=ALIASES[filterCrates][lowerQuery];for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{Object.keys(ALIASES).forEach(crate=>{if(ALIASES[crate][lowerQuery]){const pushTo=crate===window.currentCrate?crateAliases:aliases;const query_aliases=ALIASES[crate][lowerQuery];for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}})}const sortFunc=(aaa,bbb)=>{if(aaa.path{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};onEach(aliases,pushFunc);onEach(crateAliases,pushFunc)}function addIntoResults(results,fullId,id,index,lev){if(lev===0||(!parsedQuery.literalSearch&&lev<=MAX_LEV_DISTANCE)){if(results[fullId]!==undefined){const result=results[fullId];if(result.dontValidate||result.lev<=lev){return}}results[fullId]={id:id,index:index,dontValidate:parsedQuery.literalSearch,lev:lev,}}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let lev,lev_add=0,index=-1;const fullId=row.id;const in_args=findArg(row,elem,parsedQuery.typeFilter);const returned=checkReturned(row,elem,parsedQuery.typeFilter);addIntoResults(results_in_args,fullId,pos,index,in_args);addIntoResults(results_returned,fullId,pos,index,returned);if(!typePassesFilter(parsedQuery.typeFilter,row.ty)){return}const searchWord=searchWords[pos];if(parsedQuery.literalSearch){if(searchWord===elem.name){addIntoResults(results_others,fullId,pos,-1,0)}return}if(elem.name.length===0){if(row.type!==null){lev=checkGenerics(row.type,elem,MAX_LEV_DISTANCE+1);addIntoResults(results_others,fullId,pos,index,lev)}return}if(elem.fullPath.length>1){lev=checkPath(elem.pathWithoutLast,row);if(lev>MAX_LEV_DISTANCE||(parsedQuery.literalSearch&&lev!==0)){return}else if(lev>0){lev_add=lev/10}}if(searchWord.indexOf(elem.pathLast)>-1||row.normalizedName.indexOf(elem.pathLast)>-1){if(!results_others[fullId]!==undefined){index=row.normalizedName.indexOf(elem.pathLast)}}lev=levenshtein(searchWord,elem.pathLast);if(lev>0&&elem.pathLast.length>2&&searchWord.indexOf(elem.pathLast)>-1){if(elem.pathLast.length<6){lev=1}else{lev=0}}lev+=lev_add;if(lev>MAX_LEV_DISTANCE){return}else if(index!==-1&&elem.fullPath.length<2){lev-=1}if(lev<0){lev=0}addIntoResults(results_others,fullId,pos,index,lev)}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let totalLev=0;let nbLev=0;function checkArgs(elems,callback){for(const elem of elems){const lev=callback(row,elem,NO_TYPE_FILTER);if(lev<=1){nbLev+=1;totalLev+=lev}else{return false}}return true}if(!checkArgs(parsedQuery.elems,findArg)){return}if(!checkArgs(parsedQuery.returned,checkReturned)){return}if(nbLev===0){return}const lev=Math.round(totalLev/nbLev);addIntoResults(results,row.id,pos,0,lev)}function innerRunQuery(){let elem,i,nSearchWords,in_returned,row;if(parsedQuery.foundElems===1){if(parsedQuery.elems.length===1){elem=parsedQuery.elems[0];for(i=0,nSearchWords=searchWords.length;i0){for(i=0,nSearchWords=searchWords.length;i-1||path.indexOf(key)>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(key)>-1)||levenshtein(name,key)<=MAX_LEV_DISTANCE)){return false}}return true}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const 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){let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;if(type==="mod"){displayPath=path+"::";href=window.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=window.rootPath+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}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){const myparent=item.parent;let anchor="#"+type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const 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){const h1=document.createElement("h1");h1.textContent=content;return h1.innerHTML}function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){let extraClass="";if(display===true){extraClass=" active"}const output=document.createElement("div");let length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(item=>{const name=item.name;const type=itemTypes[item.ty];length+=1;let extra="";if(type==="primitive"){extra=" (primitive type)"}else if(type==="keyword"){extra=" (keyword)"}const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const wrapper=document.createElement("div");const resultName=document.createElement("div");resultName.className="result-name";if(item.is_alias){const alias=document.createElement("span");alias.className="alias";const 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);const description=document.createElement("div");description.className="desc";const spanDesc=document.createElement("span");spanDesc.insertAdjacentHTML("beforeend",item.desc);description.appendChild(spanDesc);wrapper.appendChild(description);link.appendChild(wrapper);output.appendChild(link)})}else if(query.error===null){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){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true"&&(!search.firstChild||search.firstChild.innerText!==searchState.loadingText))){const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const ret_others=addTab(results.others,results.query,true);const ret_in_args=addTab(results.in_args,results.query,false);const ret_returned=addTab(results.returned,results.query,false);let 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 "}let typeFilter="";if(results.query.typeFilter!==NO_TYPE_FILTER){typeFilter=" (type: "+escape(itemTypes[results.query.typeFilter])+")"}let output="
"+`

Results for ${escape(results.query.userQuery)}`+`${typeFilter}

in ${crates}
`;if(results.query.error!==null){output+=`

Query parser error: "${results.query.error}".

`;output+="
"+makeTabHeader(0,"In Names",ret_others[1])+"
";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
"+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
";currentTab=0}const 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;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("titles").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>{printTab(j)};searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function search(e,forced){const params=searchState.getQueryStringParams();const query=parseQuery(searchState.input.value.trim());if(e){e.preventDefault()}if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}let filterCrates=getFilterCrates();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.original+" - Rust";if(browserSupportsHistoryApi()){const newURL=buildUrl(query.original,filterCrates);if(!history.state&&!params.search){history.pushState(null,"",newURL)}else{history.replaceState(null,"",newURL)}}showResults(execQuery(query,searchWords,filterCrates),params.go_to_first,filterCrates)}function buildIndex(rawSearchIndex){searchIndex=[];const searchWords=[];let i,word;let currentIndex=0;let id=0;for(const crate in rawSearchIndex){if(!hasOwnPropertyRustdoc(rawSearchIndex,crate)){continue}let crateSize=0;const crateCorpus=rawSearchIndex[crate];searchWords.push(crate);const 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;const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=crateCorpus.q;const itemDescs=crateCorpus.d;const itemParentIdxs=crateCorpus.i;const itemFunctionSearchTypes=crateCorpus.f;const paths=crateCorpus.p;const aliases=crateCorpus.a;let 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]=Object.create(null);for(const alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}if(!hasOwnPropertyRustdoc(ALIASES[crate],alias_name)){ALIASES[crate][alias_name]=[]}for(const local_alias of aliases[alias_name]){ALIASES[crate][alias_name].push(local_alias+currentIndex)}}}currentIndex+=crateSize}return searchWords}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){if(browserSupportsHistoryApi()){history.replaceState(null,window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="All crates"){const params=searchState.getQueryStringParams();const 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)}const 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 +"use strict";(function(){const 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",];const TY_PRIMITIVE=itemTypes.indexOf("primitive");const TY_KEYWORD=itemTypes.indexOf("keyword");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";function hasOwnPropertyRustdoc(obj,property){return Object.prototype.hasOwnProperty.call(obj,property)}function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("titles").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb}else if(nb!==0){printTab(0)}}const levenshtein_row2=[];function levenshtein(s1,s2){if(s1===s2){return 0}const s1_len=s1.length,s2_len=s2.length;if(s1_len&&s2_len){let i1=0,i2=0,a,b,c,c2;const row=levenshtein_row2;while(i1-".indexOf(c)!==-1}function isStopCharacter(c){return isWhitespace(c)||isEndCharacter(c)}function isErrorCharacter(c){return"()".indexOf(c)!==-1}function itemTypeFromName(typename){for(let i=0,len=itemTypes.length;i0){throw new Error("Cannot use literal search when there is more than one element")}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw new Error("Unclosed `\"`")}else if(parserState.userQuery[end]!=="\""){throw new Error(`Unexpected \`${parserState.userQuery[end]}\` in a string element`)}else if(start===end){throw new Error("Cannot have empty string element")}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function isIdentCharacter(c){return(c==="_"||(c>="0"&&c<="9")||(c>="a"&&c<="z")||(c>="A"&&c<="Z"))}function isSeparatorCharacter(c){return c===","||isWhitespaceCharacter(c)}function isWhitespaceCharacter(c){return c===" "||c==="\t"}function createQueryElement(query,parserState,name,generics,isInGenerics){if(name==="*"||(name.length===0&&generics.length===0)){return}if(query.literalSearch&&parserState.totalElems-parserState.genericsElems>0){throw new Error("You cannot have more than one element if you use quotes")}const pathSegments=name.split("::");if(pathSegments.length>1){for(let i=0,len=pathSegments.length;i=end){throw new Error("Found generics without a path")}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}if(start>=end&&generics.length===0){return}elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics))}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;while(parserState.pos"){extra="`<`"}else if(endChar===""){extra="`->`"}throw new Error("Unexpected `"+c+"` after "+extra)}if(!foundStopChar){if(endChar!==""){throw new Error(`Expected \`,\`, \` \` or \`${endChar}\`, found \`${c}\``)}throw new Error(`Expected \`,\` or \` \`, found \`${c}\``)}const posBefore=parserState.pos;getNextElem(query,parserState,elems,endChar===">");if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}parserState.pos+=1}function checkExtraTypeFilterCharacters(parserState){const query=parserState.userQuery;for(let pos=0;pos"){if(isReturnArrow(parserState)){break}throw new Error(`Unexpected \`${c}\` (did you mean \`->\`?)`)}throw new Error(`Unexpected \`${c}\``)}else if(c===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw new Error("Unexpected `:`")}if(query.elems.length===0){throw new Error("Expected type filter before `:`")}else if(query.elems.length!==1||parserState.totalElems!==1){throw new Error("Unexpected `:`")}else if(query.literalSearch){throw new Error("You cannot use quotes on type filter")}checkExtraTypeFilterCharacters(parserState);parserState.typeFilter=query.elems.pop().name;parserState.pos+=1;parserState.totalElems=0;query.literalSearch=false;foundStopChar=true;continue}if(!foundStopChar){if(parserState.typeFilter!==null){throw new Error(`Expected \`,\`, \` \` or \`->\`, found \`${c}\``)}throw new Error(`Expected \`,\`, \` \`, \`:\` or \`->\`, found \`${c}\``)}before=query.elems.length;getNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}while(parserState.pos`")}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),typeFilter:NO_TYPE_FILTER,elems:[],returned:[],foundElems:0,literalSearch:false,error:null,}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="All crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return null}function parseQuery(userQuery){userQuery=userQuery.trim();const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);if(parserState.typeFilter!==null){let typeFilter=parserState.typeFilter;if(typeFilter==="const"){typeFilter="constant"}query.typeFilter=itemTypeFromName(typeFilter)}}catch(err){query=newParsedQuery(userQuery);query.error=err.message;query.typeFilter=-1;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}function execQuery(parsedQuery,searchWords,filterCrates,currentCrate){const results_others={},results_in_args={},results_returned={};function transformResults(results){const duplicates={};const out=[];for(const result of results){if(result.id>-1){const obj=searchIndex[result.id];obj.lev=result.lev;const 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,preferredCrate){const userQuery=parsedQuery.userQuery;const ar=[];for(const entry in results){if(hasOwnPropertyRustdoc(results,entry)){const 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((aaa,bbb)=>{let a,b;a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);if(a!==b){return a-b}a=(aaa.lev);b=(bbb.lev);if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);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});let nameSplit=null;if(parsedQuery.elems.length===1){const hasPath=typeof parsedQuery.elems[0].path==="undefined";nameSplit=hasPath?null:parsedQuery.elems[0].path}for(const result of results){if(result.dontValidate){continue}const name=result.item.name.toLowerCase(),path=result.item.path.toLowerCase(),parent=result.item.parent;if(!isType&&!validateResult(name,path,nameSplit,parent)){result.id=-1}}return transformResults(results)}function checkGenerics(row,elem,defaultLev){if(row.length<=GENERICS_DATA||row[GENERICS_DATA].length===0){return elem.generics.length===0?defaultLev:MAX_LEV_DISTANCE+1}else if(row[GENERICS_DATA].length>0&&row[GENERICS_DATA][0][NAME]===""){if(row.length>GENERICS_DATA){return checkGenerics(row[GENERICS_DATA][0],elem,defaultLev)}return elem.generics.length===0?defaultLev:MAX_LEV_DISTANCE+1}let elem_name;if(elem.generics.length>0&&row[GENERICS_DATA].length>=elem.generics.length){const elems=Object.create(null);for(const entry of row[GENERICS_DATA]){elem_name=entry[NAME];if(elem_name===""){if(checkGenerics(entry,elem,MAX_LEV_DISTANCE+1)!==0){return MAX_LEV_DISTANCE+1}continue}if(elems[elem_name]===undefined){elems[elem_name]=0}elems[elem_name]+=1}for(const generic of elem.generics){let match=null;if(elems[generic.name]){match=generic.name}else{for(elem_name in elems){if(!hasOwnPropertyRustdoc(elems,elem_name)){continue}if(elem_name===generic){match=elem_name;break}}}if(match===null){return MAX_LEV_DISTANCE+1}elems[match]-=1;if(elems[match]===0){delete elems[match]}}return 0}return MAX_LEV_DISTANCE+1}function checkIfInGenerics(row,elem){let lev=MAX_LEV_DISTANCE+1;for(const entry of row[GENERICS_DATA]){lev=Math.min(checkType(entry,elem,true),lev);if(lev===0){break}}return lev}function checkType(row,elem,literalSearch){if(row[NAME].length===0){if(row.length>GENERICS_DATA){return checkIfInGenerics(row,elem)}return MAX_LEV_DISTANCE+1}let lev=levenshtein(row[NAME],elem.name);if(literalSearch){if(lev!==0){if(elem.generics.length===0){const checkGeneric=(row.length>GENERICS_DATA&&row[GENERICS_DATA].length>0);if(checkGeneric&&row[GENERICS_DATA].findIndex(tmp_elem=>tmp_elem[NAME]===elem.name)!==-1){return 0}}return MAX_LEV_DISTANCE+1}else if(elem.generics.length>0){return checkGenerics(row,elem,MAX_LEV_DISTANCE+1)}return 0}else if(row.length>GENERICS_DATA){if(elem.generics.length===0){if(lev===0){return 0}lev=checkIfInGenerics(row,elem);return lev+0.5}else if(lev>MAX_LEV_DISTANCE){return checkIfInGenerics(row,elem)}else{const tmp_lev=checkGenerics(row,elem,lev);if(tmp_lev>MAX_LEV_DISTANCE){return MAX_LEV_DISTANCE+1}return(tmp_lev+lev)/2}}else if(elem.generics.length>0){return MAX_LEV_DISTANCE+1}return lev}function findArg(row,elem,typeFilter){let lev=MAX_LEV_DISTANCE+1;if(row&&row.type&&row.type[INPUTS_DATA]&&row.type[INPUTS_DATA].length>0){for(const input of row.type[INPUTS_DATA]){if(!typePassesFilter(typeFilter,input[1])){continue}lev=Math.min(lev,checkType(input,elem,parsedQuery.literalSearch));if(lev===0){return 0}}}return parsedQuery.literalSearch?MAX_LEV_DISTANCE+1:lev}function checkReturned(row,elem,typeFilter){let lev=MAX_LEV_DISTANCE+1;if(row&&row.type&&row.type.length>OUTPUT_DATA){let ret=row.type[OUTPUT_DATA];if(typeof ret[0]==="string"){ret=[ret]}for(const ret_ty of ret){if(!typePassesFilter(typeFilter,ret_ty[1])){continue}lev=Math.min(lev,checkType(ret_ty,elem,parsedQuery.literalSearch));if(lev===0){return 0}}}return parsedQuery.literalSearch?MAX_LEV_DISTANCE+1:lev}function checkPath(contains,ty){if(contains.length===0){return 0}let ret_lev=MAX_LEV_DISTANCE+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;if(clength>length){return MAX_LEV_DISTANCE+1}for(let i=0;ilength){break}let lev_total=0;let aborted=false;for(let 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;const 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,currentCrate){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES[filterCrates]&&ALIASES[filterCrates][lowerQuery]){const query_aliases=ALIASES[filterCrates][lowerQuery];for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{Object.keys(ALIASES).forEach(crate=>{if(ALIASES[crate][lowerQuery]){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=ALIASES[crate][lowerQuery];for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}})}const sortFunc=(aaa,bbb)=>{if(aaa.path{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach(pushFunc);crateAliases.forEach(pushFunc)}function addIntoResults(results,fullId,id,index,lev){if(lev===0||(!parsedQuery.literalSearch&&lev<=MAX_LEV_DISTANCE)){if(results[fullId]!==undefined){const result=results[fullId];if(result.dontValidate||result.lev<=lev){return}}results[fullId]={id:id,index:index,dontValidate:parsedQuery.literalSearch,lev:lev,}}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let lev,lev_add=0,index=-1;const fullId=row.id;const in_args=findArg(row,elem,parsedQuery.typeFilter);const returned=checkReturned(row,elem,parsedQuery.typeFilter);addIntoResults(results_in_args,fullId,pos,index,in_args);addIntoResults(results_returned,fullId,pos,index,returned);if(!typePassesFilter(parsedQuery.typeFilter,row.ty)){return}const searchWord=searchWords[pos];if(parsedQuery.literalSearch){if(searchWord===elem.name){addIntoResults(results_others,fullId,pos,-1,0)}return}if(elem.name.length===0){if(row.type!==null){lev=checkGenerics(row.type,elem,MAX_LEV_DISTANCE+1);addIntoResults(results_others,fullId,pos,index,lev)}return}if(elem.fullPath.length>1){lev=checkPath(elem.pathWithoutLast,row);if(lev>MAX_LEV_DISTANCE||(parsedQuery.literalSearch&&lev!==0)){return}else if(lev>0){lev_add=lev/10}}if(searchWord.indexOf(elem.pathLast)>-1||row.normalizedName.indexOf(elem.pathLast)>-1){index=row.normalizedName.indexOf(elem.pathLast)}lev=levenshtein(searchWord,elem.pathLast);if(lev>0&&elem.pathLast.length>2&&searchWord.indexOf(elem.pathLast)>-1){if(elem.pathLast.length<6){lev=1}else{lev=0}}lev+=lev_add;if(lev>MAX_LEV_DISTANCE){return}else if(index!==-1&&elem.fullPath.length<2){lev-=1}if(lev<0){lev=0}addIntoResults(results_others,fullId,pos,index,lev)}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let totalLev=0;let nbLev=0;function checkArgs(elems,callback){for(const elem of elems){const lev=callback(row,elem,NO_TYPE_FILTER);if(lev<=1){nbLev+=1;totalLev+=lev}else{return false}}return true}if(!checkArgs(parsedQuery.elems,findArg)){return}if(!checkArgs(parsedQuery.returned,checkReturned)){return}if(nbLev===0){return}const lev=Math.round(totalLev/nbLev);addIntoResults(results,row.id,pos,0,lev)}function innerRunQuery(){let elem,i,nSearchWords,in_returned,row;if(parsedQuery.foundElems===1){if(parsedQuery.elems.length===1){elem=parsedQuery.elems[0];for(i=0,nSearchWords=searchWords.length;i0){for(i=0,nSearchWords=searchWords.length;i-1||path.indexOf(key)>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(key)>-1)||levenshtein(name,key)<=MAX_LEV_DISTANCE)){return false}}return true}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const 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){let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;if(type==="mod"){displayPath=path+"::";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=ROOT_PATH+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor="#"+type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const 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=ROOT_PATH+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function escape(content){const h1=document.createElement("h1");h1.textContent=content;return h1.innerHTML}function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){let extraClass="";if(display===true){extraClass=" active"}const output=document.createElement("div");let length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(item=>{const name=item.name;const type=itemTypes[item.ty];length+=1;let extra="";if(type==="primitive"){extra=" (primitive type)"}else if(type==="keyword"){extra=" (keyword)"}const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const wrapper=document.createElement("div");const resultName=document.createElement("div");resultName.className="result-name";if(item.is_alias){const alias=document.createElement("span");alias.className="alias";const 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);const description=document.createElement("div");description.className="desc";const spanDesc=document.createElement("span");spanDesc.insertAdjacentHTML("beforeend",item.desc);description.appendChild(spanDesc);wrapper.appendChild(description);link.appendChild(wrapper);output.appendChild(link)})}else if(query.error===null){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){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true"&&(!search.firstChild||search.firstChild.innerText!==searchState.loadingText))){const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const ret_others=addTab(results.others,results.query,true);const ret_in_args=addTab(results.in_args,results.query,false);const ret_returned=addTab(results.returned,results.query,false);let 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="";const crates_list=Object.keys(rawSearchIndex);if(crates_list.length>1){crates=" in "}let typeFilter="";if(results.query.typeFilter!==NO_TYPE_FILTER){typeFilter=" (type: "+escape(itemTypes[results.query.typeFilter])+")"}let output="
"+`

Results for ${escape(results.query.userQuery)}`+`${typeFilter}

${crates}
`;if(results.query.error!==null){output+=`

Query parser error: "${results.query.error}".

`;output+="
"+makeTabHeader(0,"In Names",ret_others[1])+"
";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
"+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
";currentTab=0}const 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;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("titles").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function search(e,forced){const params=searchState.getQueryStringParams();const query=parseQuery(searchState.input.value.trim());if(e){e.preventDefault()}if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}let filterCrates=getFilterCrates();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.original+" - Rust";if(browserSupportsHistoryApi()){const newURL=buildUrl(query.original,filterCrates);if(!history.state&&!params.search){history.pushState(null,"",newURL)}else{history.replaceState(null,"",newURL)}}showResults(execQuery(query,searchWords,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildIndex(rawSearchIndex){searchIndex=[];const searchWords=[];let i,word;let currentIndex=0;let id=0;for(const crate in rawSearchIndex){if(!hasOwnPropertyRustdoc(rawSearchIndex,crate)){continue}let crateSize=0;const crateCorpus=rawSearchIndex[crate];searchWords.push(crate);const 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;const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=crateCorpus.q;const itemDescs=crateCorpus.d;const itemParentIdxs=crateCorpus.i;const itemFunctionSearchTypes=crateCorpus.f;const paths=crateCorpus.p;const aliases=crateCorpus.a;let 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]=Object.create(null);for(const alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}if(!hasOwnPropertyRustdoc(ALIASES[crate],alias_name)){ALIASES[crate][alias_name]=[]}for(const local_alias of aliases[alias_name]){ALIASES[crate][alias_name].push(local_alias+currentIndex)}}}currentIndex+=crateSize}return searchWords}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){if(browserSupportsHistoryApi()){history.replaceState(null,window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="All crates"){const params=searchState.getQueryStringParams();const 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)}const searchWords=buildIndex(rawSearchIndex);if(typeof window!=="undefined"){registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}if(typeof exports!=="undefined"){exports.initSearch=initSearch;exports.execQuery=execQuery;exports.parseQuery=parseQuery}return searchWords}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch({})}})() \ No newline at end of file diff --git a/doc/settings.css b/doc/settings.css index a76a580..2be35b2 100644 --- a/doc/settings.css +++ b/doc/settings.css @@ -1 +1 @@ -.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;}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;transition:.3s;}.slider:before{position:absolute;content:"";height:19px;width:19px;left:4px;bottom:4px;background-color:white;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{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 .choices{display:flex;flex-wrap:wrap;}.setting-line .radio-line input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:1px solid;outline:none;-webkit-appearance:none;cursor:pointer;border-radius:50%;}.setting-line .radio-line input+span{padding-bottom:1px;}.radio-line .setting-name{width:100%;}.radio-line .choice{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:flex;align-items:center;cursor:pointer;}.radio-line .choice+.choice{margin-left:0.5em;}.toggle{position:relative;display:inline-block;width:100%;height:27px;margin-right:20px;display:flex;align-items:center;cursor:pointer;}.toggle input{opacity:0;position:absolute;}.slider{position:relative;width:45px;display:block;height:28px;margin-right:20px;cursor:pointer;background-color:#ccc;transition:.3s;}.slider:before{position:absolute;content:"";height:19px;width:19px;left:4px;bottom:4px;transition:.3s;}input:checked+.slider:before{transform:translateX(19px);}.setting-line>.sub-settings{padding-left:42px;width:100%;display:block;}div#settings{position:absolute;right:0;z-index:1;display:block;margin-top:7px;border-radius:3px;border:1px solid;}#settings .setting-line{margin:1.2em 0.6em;}div#settings::before{content:'';position:absolute;right:11px;border:solid;border-width:1px 1px 0 0;display:inline-block;padding:4px;transform:rotate(-45deg);top:-5px;} \ No newline at end of file diff --git a/doc/settings.html b/doc/settings.html index b0eb6e1..8c7b350 100644 --- a/doc/settings.html +++ b/doc/settings.html @@ -1,7 +1,8 @@ -Rustdoc settings -

Rustdoc settings

Back
\ No newline at end of file diff --git a/doc/settings.js b/doc/settings.js index a68768c..35d65a9 100644 --- a/doc/settings.js +++ b/doc/settings.js @@ -3,17 +3,9 @@
`;onEach(setting["options"],option=>{const checked=option===setting["default"]?" checked":"";output+=``});output+="
"}else{const checked=setting["default"]===true?" checked":"";output+=` - -
${setting_name}
`}output+=""}return output}function buildSettingsPage(){const themes=getVar("themes").split(",");const settings=[{"name":"Use system theme","js_name":"use-system-theme","default":true,},{"name":"Theme","js_name":"theme","default":"light","options":themes,},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":themes,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":themes,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const el=document.createElement("section");el.id="settings";let innerHTML=` -
-

- Rustdoc settings -

- `;if(isSettingsPage){innerHTML+="Back"}else{innerHTML+="Back"}innerHTML+=` -
-
${buildSettingsPageSections(settings)}
`;el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{getNotDisplayedElem().appendChild(el)}return el}const settingsMenu=buildSettingsPage();if(isSettingsPage){getSettingsButton().onclick=function(event){event.preventDefault()}}else{const settingsButton=getSettingsButton();settingsButton.onclick=function(event){event.preventDefault();if(settingsMenu.parentElement.id===NOT_DISPLAYED_ID){switchDisplayedElement(settingsMenu)}else{window.hideSettings()}};window.hideSettings=function(){switchDisplayedElement(null)}}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){switchDisplayedElement(settingsMenu)}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file + ${option}\ + `});output+=""}else{const checked=setting["default"]===true?" checked":"";output+=``}output+=""}return output}function buildSettingsPage(){const themes=getVar("themes").split(",");const settings=[{"name":"Use system theme","js_name":"use-system-theme","default":true,},{"name":"Theme","js_name":"theme","default":"light","options":themes,},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":themes,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":themes,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
${buildSettingsPageSections(settings)}
`;const el=document.createElement(elementKind);el.id="settings";el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display=""}function elemIsInParent(elem,parent){while(elem&&elem!==document.body){if(elem===parent){return true}elem=elem.parentElement}return false}function blurHandler(event){const settingsButton=getSettingsButton();if(!elemIsInParent(document.activeElement,settingsButton)&&!elemIsInParent(event.relatedTarget,settingsButton)){window.hideSettings()}}if(isSettingsPage){getSettingsButton().onclick=function(event){event.preventDefault()}}else{const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");window.hideSettings=function(){settingsMenu.style.display="none"};settingsButton.onclick=function(event){if(elemIsInParent(event.target,settingsMenu)){return}event.preventDefault();if(settingsMenu.style.display!=="none"){window.hideSettings()}else{displaySettings()}};settingsButton.onblur=blurHandler;settingsButton.querySelector("a").onblur=blurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=blurHandler});settingsMenu.onblur=blurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file diff --git a/doc/source-script.js b/doc/source-script.js index 96e6c42..c885670 100644 --- a/doc/source-script.js +++ b/doc/source-script.js @@ -1 +1 @@ -"use strict";(function(){function getCurrentFilePath(){const parts=window.location.pathname.split("/");const rootPathParts=window.rootPath.split("/");for(const rootPathPart of rootPathParts){if(rootPathPart===".."){parts.pop()}}let file=window.location.pathname.substring(parts.join("/").length);if(file.startsWith("/")){file=file.substring(1)}return file.substring(0,file.length-5)}function createDirEntry(elem,parent,fullPath,currentFile,hasFoundFile){const name=document.createElement("div");name.className="name";fullPath+=elem["name"]+"/";name.onclick=()=>{if(hasClass(this,"expand")){removeClass(this,"expand")}else{addClass(this,"expand")}};name.innerText=elem["name"];const children=document.createElement("div");children.className="children";const folders=document.createElement("div");folders.className="folders";if(elem.dirs){for(const dir of elem.dirs){if(createDirEntry(dir,folders,fullPath,currentFile,hasFoundFile)){addClass(name,"expand");hasFoundFile=true}}}children.appendChild(folders);const files=document.createElement("div");files.className="files";if(elem.files){for(const file_text of elem.files){const file=document.createElement("a");file.innerText=file_text;file.href=window.rootPath+"src/"+fullPath+file_text+".html";if(!hasFoundFile&¤tFile===fullPath+file_text){file.className="selected";addClass(name,"expand");hasFoundFile=true}files.appendChild(file)}}children.appendChild(files);parent.appendChild(name);parent.appendChild(children);return hasFoundFile&¤tFile.startsWith(fullPath)}function toggleSidebar(){const sidebar=document.querySelector("nav.sidebar");const child=this.children[0];if(child.innerText===">"){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(){const sidebarToggle=document.createElement("div");sidebarToggle.id="sidebar-toggle";sidebarToggle.onclick=toggleSidebar;const 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+="/"}const container=document.querySelector("nav.sidebar");const sidebarToggle=createSidebarToggle();container.insertBefore(sidebarToggle,container.firstChild);const sidebar=document.createElement("div");sidebar.id="source-sidebar";if(getCurrentValue("source-sidebar-show")!=="true"){container.classList.remove("expanded")}else{container.classList.add("expanded")}const currentFile=getCurrentFilePath();let hasFoundFile=false;const title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(sourcesIndex).forEach(key=>{sourcesIndex[key].name=key;hasFoundFile=createDirEntry(sourcesIndex[key],sidebar,"",currentFile,hasFoundFile)});container.appendChild(sidebar);const selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}const lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSourceLines(match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}let from=parseInt(match[1],10);let to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(to{onEachLazy(e.getElementsByTagName("span"),i_e=>{removeClass(i_e,"line-highlighted")})});for(let i=from;i<=to;++i){elem=document.getElementById(i);if(!elem){break}addClass(elem,"line-highlighted")}}const handleSourceHighlight=(function(){let prev_line_id=0;const set_fragment=name=>{const x=window.scrollX,y=window.scrollY;if(browserSupportsHistoryApi()){history.replaceState(null,null,"#"+name);highlightSourceLines()}else{location.replace("#"+name)}window.scrollTo(x,y)};return ev=>{let cur_line_id=parseInt(ev.target.id,10);ev.preventDefault();if(ev.shiftKey&&prev_line_id){if(prev_line_id>cur_line_id){const 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",()=>{const match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSourceLines(match)}});onEachLazy(document.getElementsByClassName("line-numbers"),el=>{el.addEventListener("click",handleSourceHighlight)});highlightSourceLines();window.createSourceSidebar=createSourceSidebar})() \ No newline at end of file +"use strict";(function(){const rootPath=document.getElementById("rustdoc-vars").attributes["data-root-path"].value;function createDirEntry(elem,parent,fullPath,hasFoundFile){const name=document.createElement("div");name.className="name";fullPath+=elem["name"]+"/";name.onclick=ev=>{if(hasClass(ev.target,"expand")){removeClass(ev.target,"expand")}else{addClass(ev.target,"expand")}};name.innerText=elem["name"];const children=document.createElement("div");children.className="children";const folders=document.createElement("div");folders.className="folders";if(elem.dirs){for(const dir of elem.dirs){if(createDirEntry(dir,folders,fullPath,hasFoundFile)){addClass(name,"expand");hasFoundFile=true}}}children.appendChild(folders);const files=document.createElement("div");files.className="files";if(elem.files){for(const file_text of elem.files){const file=document.createElement("a");file.innerText=file_text;file.href=rootPath+"src/"+fullPath+file_text+".html";const w=window.location.href.split("#")[0];if(!hasFoundFile&&w===file.href){file.className="selected";addClass(name,"expand");hasFoundFile=true}files.appendChild(file)}}children.appendChild(files);parent.appendChild(name);parent.appendChild(children);return hasFoundFile}function toggleSidebar(){const child=this.children[0];if(child.innerText===">"){addClass(document.documentElement,"source-sidebar-expanded");child.innerText="<";updateLocalStorage("source-sidebar-show","true")}else{removeClass(document.documentElement,"source-sidebar-expanded");child.innerText=">";updateLocalStorage("source-sidebar-show","false")}}function createSidebarToggle(){const sidebarToggle=document.createElement("div");sidebarToggle.id="sidebar-toggle";sidebarToggle.onclick=toggleSidebar;const inner=document.createElement("div");if(getCurrentValue("source-sidebar-show")==="true"){inner.innerText="<"}else{inner.innerText=">"}sidebarToggle.appendChild(inner);return sidebarToggle}function createSourceSidebar(){const container=document.querySelector("nav.sidebar");const sidebarToggle=createSidebarToggle();container.insertBefore(sidebarToggle,container.firstChild);const sidebar=document.createElement("div");sidebar.id="source-sidebar";let hasFoundFile=false;const title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(sourcesIndex).forEach(key=>{sourcesIndex[key].name=key;hasFoundFile=createDirEntry(sourcesIndex[key],sidebar,"",hasFoundFile)});container.appendChild(sidebar);const selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}const lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSourceLines(match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}let from=parseInt(match[1],10);let to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(to{onEachLazy(e.getElementsByTagName("span"),i_e=>{removeClass(i_e,"line-highlighted")})});for(let i=from;i<=to;++i){elem=document.getElementById(i);if(!elem){break}addClass(elem,"line-highlighted")}}const handleSourceHighlight=(function(){let prev_line_id=0;const set_fragment=name=>{const x=window.scrollX,y=window.scrollY;if(browserSupportsHistoryApi()){history.replaceState(null,null,"#"+name);highlightSourceLines()}else{location.replace("#"+name)}window.scrollTo(x,y)};return ev=>{let cur_line_id=parseInt(ev.target.id,10);if(isNaN(cur_line_id)){return}ev.preventDefault();if(ev.shiftKey&&prev_line_id){if(prev_line_id>cur_line_id){const 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",()=>{const match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSourceLines(match)}});onEachLazy(document.getElementsByClassName("line-numbers"),el=>{el.addEventListener("click",handleSourceHighlight)});highlightSourceLines();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 0814165..a93a7b2 100644 --- a/doc/src/draught/board/enums.rs.html +++ b/doc/src/draught/board/enums.rs.html @@ -1,9 +1,10 @@ -enums.rs - source -
1
 2
 3
 4
@@ -175,5 +176,5 @@
     NoJumpablePiece = 7,
     JumpingSameTeam = 8,
 }
-
+
\ 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 6f5ec94..1db786f 100644 --- a/doc/src/draught/board/iter.rs.html +++ b/doc/src/draught/board/iter.rs.html @@ -1,9 +1,10 @@ -iter.rs - source -
1
 2
 3
 4
@@ -393,5 +394,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 f724510..7182a0a 100644 --- a/doc/src/draught/board/mod.rs.html +++ b/doc/src/draught/board/mod.rs.html @@ -1,9 +1,10 @@ -mod.rs - source -
1
 2
 3
 4
@@ -1703,5 +1704,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 712db4b..46e10f7 100644 --- a/doc/src/draught/comp/mod.rs.html +++ b/doc/src/draught/comp/mod.rs.html @@ -1,9 +1,10 @@ -mod.rs - source -
1
 2
 3
 4
@@ -863,5 +864,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 de5bc7a..4f2a849 100644 --- a/doc/src/draught/game/mod.rs.html +++ b/doc/src/draught/game/mod.rs.html @@ -1,9 +1,10 @@ -mod.rs - source -
1
 2
 3
 4
@@ -506,5 +507,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/doc/src/draught/lib.rs.html b/doc/src/draught/lib.rs.html index 1a4cc86..2d4b6ed 100644 --- a/doc/src/draught/lib.rs.html +++ b/doc/src/draught/lib.rs.html @@ -1,9 +1,10 @@ -lib.rs - source -
1
 2
 3
 4
@@ -40,12 +41,6 @@
 35
 36
 37
-38
-39
-40
-41
-42
-43
 
//! Draught
 //! 
 //! An implementation of checkers/draughts in Rust WebAssembly with a minimax AI player
@@ -64,12 +59,6 @@
 pub use comp::Computer;
 pub use paint::Painter;
 
-// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global
-// allocator.
-#[cfg(feature = "wee_alloc")]
-#[global_allocator]
-static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
-
 /// Wrap the [`web_sys`] access to the browser console in a macro for easy logging
 #[macro_export]
 macro_rules! log {
@@ -89,5 +78,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 77c8d58..5792a3f 100644 --- a/doc/src/draught/paint.rs.html +++ b/doc/src/draught/paint.rs.html @@ -1,9 +1,10 @@ -paint.rs - source -
1
 2
 3
 4
@@ -785,5 +786,5 @@
         }
     }
 }
-
+
\ No newline at end of file diff --git a/doc/src/draught/utils.rs.html b/doc/src/draught/utils.rs.html index 33113d6..2f88d01 100644 --- a/doc/src/draught/utils.rs.html +++ b/doc/src/draught/utils.rs.html @@ -1,9 +1,10 @@ -utils.rs - source -
1
 2
 3
 4
@@ -24,5 +25,5 @@
     console_error_panic_hook::set_once();
 }
 
-
+
\ No newline at end of file diff --git a/doc/storage.js b/doc/storage.js index a0eef58..ad14b2a 100644 --- a/doc/storage.js +++ b/doc/storage.js @@ -1 +1 @@ -"use strict";const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");window.mainTheme=document.getElementById("mainThemeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");if(settingsElement===null){return null}const dataset=settingsElement.dataset;if(dataset===undefined){return null}return dataset})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current!==null){return current}if(settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return null}const localStoredTheme=getSettingValue("theme");const 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){if(reversed){const length=arr.length;for(let i=length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(const elem of arr){if(func(elem)){return true}}}}return false}function onEachLazy(lazyArray,func,reversed){return onEach(Array.prototype.slice.call(lazyArray),func,reversed)}function hasOwnPropertyRustdoc(obj,property){return Object.prototype.hasOwnProperty.call(obj,property)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}function switchTheme(styleElem,mainStyleElem,newTheme,saveTheme){const newHref=mainStyleElem.href.replace(/\/rustdoc([^/]*)\.css/,"/"+newTheme+"$1"+".css");if(saveTheme){updateLocalStorage("theme",newTheme)}if(styleElem.href===newHref){return}let found=false;if(savedHref.length===0){onEachLazy(document.getElementsByTagName("link"),el=>{savedHref.push(el.href)})}onEach(savedHref,el=>{if(el===newHref){found=true;return true}});if(found){styleElem.href=newHref}}function useSystemTheme(value){if(value===undefined){value=true}updateLocalStorage("use-system-theme",value);const toggle=document.getElementById("use-system-theme");if(toggle&&toggle instanceof HTMLInputElement){toggle.checked=value}}const updateSystemTheme=(function(){if(!window.matchMedia){return()=>{const cssTheme=getComputedStyle(document.documentElement).getPropertyValue("content");switchTheme(window.currentTheme,window.mainTheme,JSON.parse(cssTheme)||"light",true)}}const mql=window.matchMedia("(prefers-color-scheme: dark)");function handlePreferenceChange(mql){const use=theme=>{switchTheme(window.currentTheme,window.mainTheme,theme,true)};if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";if(mql.matches){use(darkTheme)}else{use(lightTheme)}}else{use(getSettingValue("theme"))}}mql.addListener(handlePreferenceChange);return()=>{handlePreferenceChange(mql)}})();function switchToSavedTheme(){switchTheme(window.currentTheme,window.mainTheme,getSettingValue("theme")||"light",false)}if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}updateSystemTheme()}else{switchToSavedTheme()}window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(switchToSavedTheme,0)}}) \ No newline at end of file +"use strict";const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");window.mainTheme=document.getElementById("mainThemeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");if(settingsElement===null){return null}const dataset=settingsElement.dataset;if(dataset===undefined){return null}return dataset})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current!==null){return current}if(settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return null}const localStoredTheme=getSettingValue("theme");const 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){if(reversed){const length=arr.length;for(let i=length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(const elem of arr){if(func(elem)){return true}}}}return false}function onEachLazy(lazyArray,func,reversed){return onEach(Array.prototype.slice.call(lazyArray),func,reversed)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}function switchTheme(styleElem,mainStyleElem,newTheme,saveTheme){const newHref=mainStyleElem.href.replace(/\/rustdoc([^/]*)\.css/,"/"+newTheme+"$1"+".css");if(saveTheme){updateLocalStorage("theme",newTheme)}if(styleElem.href===newHref){return}let found=false;if(savedHref.length===0){onEachLazy(document.getElementsByTagName("link"),el=>{savedHref.push(el.href)})}onEach(savedHref,el=>{if(el===newHref){found=true;return true}});if(found){styleElem.href=newHref}}function useSystemTheme(value){if(value===undefined){value=true}updateLocalStorage("use-system-theme",value);const toggle=document.getElementById("use-system-theme");if(toggle&&toggle instanceof HTMLInputElement){toggle.checked=value}}const updateSystemTheme=(function(){if(!window.matchMedia){return()=>{const cssTheme=getComputedStyle(document.documentElement).getPropertyValue("content");switchTheme(window.currentTheme,window.mainTheme,JSON.parse(cssTheme)||"light",true)}}const mql=window.matchMedia("(prefers-color-scheme: dark)");function handlePreferenceChange(mql){const use=theme=>{switchTheme(window.currentTheme,window.mainTheme,theme,true)};if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";if(mql.matches){use(darkTheme)}else{use(lightTheme)}}else{use(getSettingValue("theme"))}}mql.addListener(handlePreferenceChange);return()=>{handlePreferenceChange(mql)}})();function switchToSavedTheme(){switchTheme(window.currentTheme,window.mainTheme,getSettingValue("theme")||"light",false)}if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}updateSystemTheme()}else{switchToSavedTheme()}if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"source-sidebar-expanded")}window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(switchToSavedTheme,0)}}) \ No newline at end of file