Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

ms-toollib

Package Overview
Dependencies
Maintainers
1
Versions
48
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ms-toollib - npm Package Compare versions

Comparing version
1.5.1
to
1.5.2
+1
-1
base/Cargo.toml
[package]
name = "ms_toollib"
version = "1.4.17"
version = "1.5.2"
description = "Algorithms for Minesweeper"

@@ -5,0 +5,0 @@ documentation = "https://docs.rs/ms_toollib"

@@ -62,3 +62,3 @@ //! # 扫雷算法工具箱

// cargo bench
// cargo publish --features rs
// cargo publish --features rs --allow-dirty
// 需要换成官方的源,不能用镜像

@@ -65,0 +65,0 @@ // cargo yank --vers 0.0.1

#[cfg(any(feature = "py", feature = "rs"))]
use rand::Rng;
// 轻量级的安全局面,防住简单的内存读取攻击。假如不读源码,攻击者需要花一些时间。
#[cfg(any(feature = "py", feature = "rs"))]

@@ -5,0 +7,0 @@ fn encode(v: i32, rng: &mut rand::rngs::ThreadRng) -> (i32, i32, i32) {

@@ -6,2 +6,4 @@ use crate::miscellaneous::s_to_ms;

use std::cmp::{max, min};
use std::path::Path;
use std::thread;

@@ -591,3 +593,3 @@ #[cfg(any(feature = "py", feature = "rs"))]

// }
/// 存evf文件,自动加后缀,xxx.evf重复变成xxx(2).evf
/// 存evf文件,自动加后缀,xxx.evf重复变成xxx(2).evf。后台线程执行,即使对象销毁也不影响。
pub fn save_to_evf_file(&self, file_name: &str) -> String {

@@ -599,28 +601,34 @@ if self.raw_data.is_empty() {

}
let file_exist =
std::path::Path::new((file_name.to_string() + &(".evf".to_string())).as_str()).exists();
if !file_exist {
fs::write(
(file_name.to_string() + &(".evf".to_string())).as_str(),
&self.raw_data,
)
.unwrap();
return (file_name.to_string() + &(".evf".to_string()))
.as_str()
.to_string();
} else {
let mut id = 2;
let mut format_name;
loop {
format_name = file_name.to_string() + &(format!("({}).evf", id).to_string());
let new_file_name = format_name.as_str();
let file_exist = std::path::Path::new(new_file_name).exists();
if !file_exist {
fs::write(new_file_name, &self.raw_data).unwrap();
return new_file_name.to_string();
let base = file_name.to_string();
let data = self.raw_data.clone();
// 先计算文件名(同步,极快)
let final_name = {
let first = format!("{}.evf", base);
if !Path::new(&first).exists() {
first
} else {
let mut id = 2;
loop {
let name = format!("{}({}).evf", base, id);
if !Path::new(&name).exists() {
break name;
}
id += 1;
}
id += 1;
}
}
};
// 后台线程写入文件
let write_name = final_name.clone();
thread::spawn(move || {
if let Err(e) = fs::write(&write_name, data) {
eprintln!("Failed to write evf file: {}", e);
}
});
// 立刻返回,不阻塞
final_name
}
}

@@ -32,2 +32,3 @@ // 录像相关的类,局面在board

use crate::videos::byte_reader::ByteReader;
use crate::videos::types::{

@@ -37,3 +38,2 @@ ErrReadVideoReason, Event, GameDynamicParams, KeyDynamicParams, MouseEvent, StaticParams,

};
use crate::videos::byte_reader::ByteReader;
/// 扫雷游戏状态机

@@ -377,6 +377,3 @@ /// 功能:整局游戏的全部信息。自动推导局面、计算数据、计时、保存文件等功能。

// println!("{:?}, ", self.board);
assert!(
self.can_analyse,
"调用parse或扫完前,不能调用analyse方法"
);
assert!(self.can_analyse, "调用parse或扫完前,不能调用analyse方法");
// self.minesweeper_board

@@ -395,3 +392,3 @@ let mut b = MinesweeperBoard::<Vec<Vec<i32>>>::new(self.board.clone());

let old_state = b.game_board_state;
// println!(">>> {:?}, {:?}", svi.mouse, b.mouse_state);
// println!(">>> {:?}, {:?}", mouse_event.mouse, b.mouse_state);
let u_level = b

@@ -719,4 +716,3 @@ .step(

impl ByteReader for BaseVideo<Vec<Vec<i32>>> {
impl ByteReader for BaseVideo<Vec<Vec<i32>>> {
fn raw_data(&self) -> &[u8] {

@@ -731,3 +727,2 @@ &self.raw_data

pub trait NewBaseVideo<T> {

@@ -1039,2 +1034,3 @@ fn new(file_name: T) -> Self;

self.game_board_state = GameBoardState::Loss;
self.is_completed = false;
self.gather_params_after_game(time_ms, None);

@@ -1159,40 +1155,48 @@ Ok(0)

let num = 0;
// for e in &self.video_action_state_recorder {
// if num < 800 {
// if e.mouse != "mv" {
// println!(
// "time = {:?}, mouse = {:?}, x = {:?}, y = {:?}, level = {:?}",
// e.time, e.mouse, e.x, e.y, e.useful_level
// );
// }
// }
// println!(
// "time = {:?}, mouse = {:?}, x = {:?}, y = {:?}, level = {:?}",
// e.time, e.mouse, e.x, e.y, e.useful_level
// );
// if e.mouse != "mv" {
// println!(
// "my_board.step_flow(vec![({:?}, ({:?}, {:?}))]).unwrap();",
// // "video.step({:?}, ({:?}, {:?})).unwrap();",
// e.mouse,
// e.y / self.cell_pixel_size as u16,
// e.x / self.cell_pixel_size as u16
// );
// }
// num += 1;
// if e.mouse != "mv" {
// println!(
// "time = {:?}, mouse = {:?}, x = {:?}, y = {:?}",
// e.time, e.mouse, e.x, e.y
// );
// e.prior_game_board
// .game_board
// .iter()
// .for_each(|v| println!("{:?}", v));
// e.prior_game_board
// .poss
// .iter()
// .for_each(|v| println!("{:?}", v));
// }
// }
for e in &self.video_action_state_recorder {
if num < 800 {
if let Some(Event::Mouse(mouse_event)) = &e.event {
if mouse_event.mouse != "mv" {
println!(
"time = {:?}, mouse = {:?}, x = {:?}, y = {:?}, level = {:?}",
e.time, mouse_event.mouse, mouse_event.x, mouse_event.y, e.useful_level
);
}
}
// if e.mouse != "mv" {
// println!(
// "time = {:?}, mouse = {:?}, x = {:?}, y = {:?}, level = {:?}",
// e.time, e.mouse, e.x, e.y, e.useful_level
// );
// }
}
// println!(
// "time = {:?}, mouse = {:?}, x = {:?}, y = {:?}, level = {:?}",
// e.time, e.mouse, e.x, e.y, e.useful_level
// );
// if e.mouse != "mv" {
// println!(
// "my_board.step_flow(vec![({:?}, ({:?}, {:?}))]).unwrap();",
// // "video.step({:?}, ({:?}, {:?})).unwrap();",
// e.mouse,
// e.y / self.cell_pixel_size as u16,
// e.x / self.cell_pixel_size as u16
// );
// }
// num += 1;
// if e.mouse != "mv" {
// println!(
// "time = {:?}, mouse = {:?}, x = {:?}, y = {:?}",
// e.time, e.mouse, e.x, e.y
// );
// e.prior_game_board
// .game_board
// .iter()
// .for_each(|v| println!("{:?}", v));
// e.prior_game_board
// .poss
// .iter()
// .for_each(|v| println!("{:?}", v));
// }
}
}

@@ -1199,0 +1203,0 @@ pub fn print_comments(&self) {

@@ -431,3 +431,4 @@ use crate::utils::refresh_board;

GameBoardState::Ready => match e {
"mv" => {
"mv" | "mc" | "mr" => {
// arbiter这个奇葩,录像可能以中键的按下和抬起开始
return Ok(0);

@@ -434,0 +435,0 @@ }

@@ -285,3 +285,23 @@ // 测试录像分析模块

#[test]
// cargo test --features rs -- --nocapture temp_avf_video_works
fn temp_avf_video_works() {
// 录像解析工具测试
let mut video =
AvfVideo::new("fff.avf");
let r = video.parse();
assert_eq!(r.unwrap(), ());
// video.data.print_event();
video.data.analyse();
println!("bbbv: {:?}", video.data.static_params.bbbv);
video.data.set_current_time(999.99);
println!("left: {:?}", video.data.get_left());
println!("right: {:?}", video.data.get_right());
println!("double: {:?}", video.data.get_double());
}
#[test]
// cargo test --features rs -- --nocapture RmvVideo_works

@@ -499,3 +519,4 @@ fn rmv_video_works() {

let test_file_name = video.save_to_evf_file("test");
// println!("{:?}", test_file_name);
println!("{:?}", test_file_name);
_sleep_ms(50);
let mut video = EvfVideo::new(&test_file_name);

@@ -502,0 +523,0 @@ let r = video.parse();

Metadata-Version: 2.4
Name: ms_toollib
Version: 1.5.1
Version: 1.5.2
Summary: Algorithms for minesweeper.

@@ -5,0 +5,0 @@ Keywords: minesweeper,sweeper,probability,solver,3BV

[project]
name = "ms_toollib"
version = "1.5.1"
version = "1.5.2"
description = "Algorithms for minesweeper."

@@ -5,0 +5,0 @@ readme = "readme.md"

@@ -100,5 +100,5 @@ # This file is automatically @generated by Cargo.

name = "cc"
version = "1.2.47"
version = "1.2.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07"
checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215"
dependencies = [

@@ -372,5 +372,5 @@ "find-msvc-tools",

name = "libc"
version = "0.2.177"
version = "0.2.178"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091"

@@ -385,9 +385,9 @@ [[package]]

name = "libredox"
version = "0.1.10"
version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50"
dependencies = [
"bitflags",
"libc",
"redox_syscall",
"redox_syscall 0.6.0",
]

@@ -440,3 +440,3 @@

"quote",
"syn 2.0.110",
"syn 2.0.111",
]

@@ -470,5 +470,5 @@

name = "log"
version = "0.4.28"
version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"

@@ -536,3 +536,3 @@ [[package]]

"itertools 0.6.5",
"ms_toollib 1.4.17",
"ms_toollib 1.5.2",
"pyo3",

@@ -543,3 +543,3 @@ ]

name = "ms_toollib"
version = "1.4.17"
version = "1.5.2"
dependencies = [

@@ -635,3 +635,3 @@ "encoding_rs",

"libc",
"redox_syscall",
"redox_syscall 0.5.18",
"smallvec",

@@ -683,3 +683,3 @@ "windows-link",

"quote",
"syn 2.0.110",
"syn 2.0.111",
]

@@ -770,5 +770,5 @@

name = "pyo3"
version = "0.27.1"
version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37a6df7eab65fc7bee654a421404947e10a0f7085b6951bf2ea395f4659fb0cf"
checksum = "ab53c047fcd1a1d2a8820fe84f05d6be69e9526be40cb03b73f86b6b03e6d87d"
dependencies = [

@@ -788,5 +788,5 @@ "indoc",

name = "pyo3-build-config"
version = "0.27.1"
version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f77d387774f6f6eec64a004eac0ed525aab7fa1966d94b42f743797b3e395afb"
checksum = "b455933107de8642b4487ed26d912c2d899dec6114884214a0b3bb3be9261ea6"
dependencies = [

@@ -798,5 +798,5 @@ "target-lexicon",

name = "pyo3-ffi"
version = "0.27.1"
version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dd13844a4242793e02df3e2ec093f540d948299a6a77ea9ce7afd8623f542be"
checksum = "1c85c9cbfaddf651b1221594209aed57e9e5cff63c4d11d1feead529b872a089"
dependencies = [

@@ -809,5 +809,5 @@ "libc",

name = "pyo3-macros"
version = "0.27.1"
version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eaf8f9f1108270b90d3676b8679586385430e5c0bb78bb5f043f95499c821a71"
checksum = "0a5b10c9bf9888125d917fb4d2ca2d25c8df94c7ab5a52e13313a07e050a3b02"
dependencies = [

@@ -817,3 +817,3 @@ "proc-macro2",

"quote",
"syn 2.0.110",
"syn 2.0.111",
]

@@ -823,5 +823,5 @@

name = "pyo3-macros-backend"
version = "0.27.1"
version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70a3b2274450ba5288bc9b8c1b69ff569d1d61189d4bff38f8d22e03d17f932b"
checksum = "03b51720d314836e53327f5871d4c0cfb4fb37cc2c4a11cc71907a86342c40f9"
dependencies = [

@@ -832,3 +832,3 @@ "heck",

"quote",
"syn 2.0.110",
"syn 2.0.111",
]

@@ -901,2 +901,11 @@

[[package]]
name = "redox_syscall"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec96166dafa0886eb81fe1c0a388bece180fbef2135f97c1e2cf8302e74b43b5"
dependencies = [
"bitflags",
]
[[package]]
name = "regex"

@@ -1014,3 +1023,3 @@ version = "1.12.2"

"quote",
"syn 2.0.110",
"syn 2.0.111",
]

@@ -1037,5 +1046,5 @@

name = "simd-adler32"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2"

@@ -1084,5 +1093,5 @@ [[package]]

name = "syn"
version = "2.0.110"
version = "2.0.111"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea"
checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
dependencies = [

@@ -1475,5 +1484,5 @@ "proc-macro2",

name = "zerocopy"
version = "0.8.28"
version = "0.8.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43fa6694ed34d6e57407afbccdeecfa268c470a7d2a5b0cf49ce9fcc345afb90"
checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3"
dependencies = [

@@ -1485,9 +1494,9 @@ "zerocopy-derive",

name = "zerocopy-derive"
version = "0.8.28"
version = "0.8.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c640b22cd9817fae95be82f0d2f90b11f7605f6c319d16705c459b27ac2cbc26"
checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.110",
"syn 2.0.111",
]

@@ -403,3 +403,3 @@ use pyo3::exceptions::PyRuntimeError;

name = "mark_board",
signature = (game_board, remark)
signature = (game_board, remark = false)
)]

@@ -406,0 +406,0 @@ fn py_mark_board(mut game_board: Vec<Vec<i32>>, remark: bool) -> PyResult<Vec<Vec<i32>>> {