deno-asearch
機能
曖昧一致したかどうか
その時のあいまい度
実装したいこと
よく考えたら、ある距離以内でマッチしているかどうか判定するだけなら全てのレジスタを一つずつマスクする必要ないじゃん!
全てのレジスタをORしたやつをマスクすればいい
ある距離以内でのマッチを判定する関数は削除した
ワイルドカードにマッチしたら、曖昧度を1だけ増やしたい
マッチした箇所
そもそも取得できるのかどうかすらわからない
修正点
unpackをfor loopに置き換えた
ついでにiteratorにして、不要な配列生成・破棄をなくす
arraybuffer止めた
どうせハッシュテーブルだし、そんなに検索に時間をかけないだろう
その他refactoring
いっそwasmを手書きしてみるか?
unicode変換できるのかな?
バグ
実装
Rust側
TS側
wasmは予めUint8Arrayに変換しておく
umd版を用意しておく
web workerから使えるようにする
2022-02-11
test()
のJSDocの解説がおかしいので直す
最大距離ではなく、ちょうどその距離にマッチするかどうかを調べる
12:27:07 done
2022-01-23
16:27:13 CI入れた
2022-01-19
2021-11-13
テストデータを追加しやすいように構造を変えた
全てのUnicode charctersに対応した
多分ほんの少しだけ速くなった
ほとんど誤差程度だが
メモリ消費量を抑えた
遷移可能テーブルを、必要な文字の分だけ作るようにした
2021-10-11
19:03:56 一旦TypeScriptだけで書いたやつを作っておく
mod.tsexport * from "https://raw.githubusercontent.com/takker99/deno-asearch/0.4.0/mod.ts";
↓でコンパイルが通らない……
Rustの型システムを1からしっかり読み込まないと先には進めなさそう
References
lib.rsuse asearch::Asearch;
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub struct ClosureHandle(Closure<dyn FnMut(&str, u8) -> bool>);
#[wasm_bindgen]
pub fn asearch(source: &str) -> ClosureHandle {
let asearch = Asearch::new(source);
let cb = Closure::wrap(Box::new(move |text, ambig| {
asearch.find(text, ambig);
}) as Box<dyn FnMut(&str,u8) -> bool>);
ClosureHandle(cb)
}
Cargo.toml[package]
name = "deno-asearch"
version = "0.1.0"
authors = ["takker"]
edition = "2018"
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2.73"
asearch = "0.1.2"