Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
1c5a657
unfinshed overhual of c's fwrite/fread etc
trcrsired Jun 12, 2025
35aa4f4
done
trcrsired Jun 12, 2025
418ccc0
self-reference for pyobject_file
trcrsired Jun 12, 2025
bb6e9e5
Merge remote-tracking branch 'parent/next' into next
trcrsired Jun 12, 2025
f1a7868
No exemption of ANY devices for this library for anti-tivo
trcrsired Jun 13, 2025
0d67eb2
[Qt] qiodevice uses new mechanism
trcrsired Jun 13, 2025
745a89c
qiodevice
trcrsired Jun 13, 2025
14f1975
initial_attempt for strbset
trcrsired Jun 16, 2025
c91541a
initial attempt for str_btreeset.h
trcrsired Jun 16, 2025
e31d5c5
btree
trcrsired Jun 16, 2025
6222c2e
btreeset
trcrsired Jun 16, 2025
bf8fca8
[btree_set] testing
trcrsired Jun 16, 2025
1407b2c
[str_btree_set] move the example to test
trcrsired Jun 16, 2025
71e41fe
set
trcrsired Jun 16, 2025
c34be7a
Merge remote-tracking branch 'parent/next' into next
trcrsired Jun 18, 2025
dd08783
[btree] root needs to change in the case when node->parent == nullptr
trcrsired Jun 24, 2025
1afe329
str
trcrsired Jun 24, 2025
3cab6b4
[btree] set nullptr for root?
trcrsired Jun 24, 2025
aef287a
Merge remote-tracking branch 'parent/next' into next
trcrsired Jun 25, 2025
1db24fe
Merge remote-tracking branch 'parent/next' into next
trcrsired Jun 28, 2025
90b1b94
str_btree_set
trcrsired Jun 29, 2025
f879629
Merge remote-tracking branch 'parent/next' into next
trcrsired Jul 1, 2025
e1c83bc
str_btree_set2.h
trcrsired Jul 1, 2025
313b6d4
put debugging information in it first
trcrsired Jul 6, 2025
771b5ab
[str_btree_set] implement more logic for btree
trcrsired Jul 8, 2025
15f909e
[btreeset] more logic for fix up
trcrsired Jul 8, 2025
f8287ed
[BTree] Fix & missing in str_btree_set.h
trcrsired Jul 9, 2025
ad7653f
btree
trcrsired Jul 9, 2025
e76e82e
[str_btree_set] Fix str_btree_set.h
trcrsired Jul 9, 2025
0b77c15
[str_btree_set] Some changes to fuzz the code
trcrsired Jul 9, 2025
1fe6f44
[btree] Fix btree
trcrsired Jul 9, 2025
1329622
[btree] add fuzzing to debug the code
trcrsired Jul 9, 2025
89a8d5f
rd
trcrsired Jul 11, 2025
b05a40b
fix bug in str_bree_set
trcrsired Jul 11, 2025
7263363
fix branch in str_btree_set.h
trcrsired Jul 11, 2025
ea31a40
fix str_btree_set
trcrsired Jul 11, 2025
274ae08
update test
trcrsired Jul 11, 2025
2eeda2f
clang-format for str_btree_set_reverse.cc
trcrsired Jul 11, 2025
9cba140
str_btree_set
trcrsired Jul 11, 2025
c389fda
add a test for str_btree_set_input
trcrsired Jul 11, 2025
d07206f
[btree] fix one more bug here
trcrsired Jul 12, 2025
47fadd9
[str_btree_set] add fast_io_dsal/str_btree_set.h
trcrsired Jul 12, 2025
a0ac2a1
[str_btree_set] fix str_btree_set.h
trcrsired Jul 12, 2025
d73eb78
[str_btree_set] add a benchmark for str_btree_set
trcrsired Jul 12, 2025
f9f88c2
[str_btree_set] add contains
trcrsired Jul 12, 2025
3a4ccc6
[str_btree_set] add ::std::unordered_set bench
trcrsired Jul 12, 2025
c249561
[str_btree_set] fix up str btree set
trcrsired Jul 12, 2025
7c381aa
[str_tree_set] btree should only allow even numbers of key
trcrsired Jul 12, 2025
e37dc7b
[str_btree_set] add some benchmarks
trcrsired Jul 12, 2025
50c1669
[str_btree_set] fix main.rs in rustbtree bench
trcrsired Jul 12, 2025
59e7dcd
[str_btree_set] fix main.rs
trcrsired Jul 13, 2025
77ea259
[str_btree_set] rust is a bs lang
trcrsired Jul 13, 2025
37c2efc
[str_btree_set] use two string types
trcrsired Jul 13, 2025
14f148b
disable benchmark for str_btree_set
trcrsired Jul 13, 2025
c287d9d
[str_btree_set] Fix the test CI
trcrsired Jul 13, 2025
3c77f6b
[str_tree_set] add iterator implementation for str_btree_set
trcrsired Jul 13, 2025
a3ef4f9
[str_btree_set] str_btree_set add leftmost and rightmost
trcrsired Jul 13, 2025
3429902
[str_tree_set] implement str_btree iterator
trcrsired Jul 14, 2025
78aaf15
[str_btree_set] add benchmarks for iteration
trcrsired Jul 14, 2025
93101a2
[str_btree_set] remove nullptr check for -- iterator
trcrsired Jul 14, 2025
cac1b39
[str_btree_set] fix operator-- for iterator
trcrsired Jul 14, 2025
9bdb2bb
[str_btree_set] add iteration bench for abseil
trcrsired Jul 14, 2025
f638c41
[btree] add the bench to rust code
trcrsired Jul 14, 2025
6e9aff9
[btree] add iteration bench for abseil_btree_set_fast_io
trcrsired Jul 14, 2025
f9905d1
[str_btree_set] add find method
trcrsired Jul 14, 2025
29e2bfa
[str_btree_set] implement find()
trcrsired Jul 14, 2025
b6d5beb
[str_btree_set] put a placeholder for erase
trcrsired Jul 14, 2025
bdb2cd4
[str_btree_set] fix around str_btree_set
Jul 18, 2025
72115c7
[str_btree_set] merge code
trcrsired Jul 26, 2025
e0f682f
Merge remote-tracking branch 'refs/remotes/origin/next' into next
trcrsired Jul 26, 2025
a5fd098
Merge remote-tracking branch 'parent/next' into next
trcrsired Aug 3, 2025
bc6f5a0
Add sock_protocol QUIC
trcrsired Aug 3, 2025
0fb8804
Merge remote-tracking branch 'parent/next' into next
trcrsired Aug 5, 2025
a1882bb
Merge remote-tracking branch 'parent/next' into next
trcrsired Aug 5, 2025
951067d
add some content to str_btree_set
trcrsired Aug 6, 2025
93469bc
btree
trcrsired Aug 12, 2025
ebe94cc
add a simple wifianalyzer
trcrsired Aug 14, 2025
c853a84
add scanning logic
trcrsired Aug 14, 2025
c1d0fc0
add logic to print out even after scanning timeout
trcrsired Aug 14, 2025
385e9b5
wifi quality
trcrsired Aug 14, 2025
e227c1c
win32
trcrsired Aug 14, 2025
e5e77f9
add covers
trcrsired Aug 14, 2025
2b31a38
remove ln
trcrsired Aug 14, 2025
871ce42
Merge remote-tracking branch 'parent/next' into next
trcrsired Aug 17, 2025
049cb6b
pin12
trcrsired Sep 13, 2025
67fc49d
Fix warnings for char32_t casting
trcrsired Sep 23, 2025
e84e9ff
correctly ignore wifianalyzer example
trcrsired Sep 23, 2025
d5ed92b
remove unused variable
trcrsired Sep 23, 2025
edeeefd
Use reverse_iterator instead of reverse_view since CI does not suppor…
trcrsired Sep 23, 2025
7541ee0
Fix str_btree_set.cc
trcrsired Sep 23, 2025
8fd92d0
Merge remote-tracking branch 'parent/next' into next
trcrsired Sep 23, 2025
e77453e
fix ifdef issue for printf
trcrsired Sep 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions benchmark/0011.containers/.test_prop.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
["str_btree_set"]
ignore = true

54 changes: 54 additions & 0 deletions benchmark/0011.containers/str_btree_set/abseil_btree_set.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#include <unordered_set>
#include <string>
#include <absl/container/btree_set.h>
#include <fast_io.h>
#include <fast_io_dsal/string.h>
#include <fast_io_driver/timer.h>
#include "gentest.h"

int main()
{
auto vec{::gentest<::std::string>()};
::fast_io::timer t(u8"str_btree_set");
::absl::btree_set<typename decltype(vec)::value_type> bset;
{
::fast_io::timer t(u8"insert");
for (auto const &e : vec)
{
bset.insert(e);
}
}
{
::std::size_t count{};
{
::fast_io::timer t(u8"contains");
for (auto const &e : vec)
{
count += static_cast<::std::size_t>(bset.contains(e));
}
}
::fast_io::io::perrln("count=", count);
}
{
::std::size_t total_size{};
{
::fast_io::timer t(u8"iteration");
for (auto const &e : bset)
{
total_size += e.size();
}
}
::fast_io::io::perrln("total_size=", total_size);
}
{
::std::size_t total_size{};
{
::fast_io::timer t(u8"reverse iteration");
for (auto const &e : ::std::ranges::reverse_view(bset))
{
total_size += e.size();
}
}
::fast_io::io::perrln("total_size=", total_size);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#include <unordered_set>
#include <string>
#include <absl/container/btree_set.h>
#include <fast_io.h>
#include <fast_io_dsal/string.h>
#include <fast_io_driver/timer.h>
#include "gentest.h"

int main()
{
auto vec{::gentest()};
::fast_io::timer t(u8"str_btree_set");
::absl::btree_set<::fast_io::string> bset;
{
::fast_io::timer t(u8"insert");
for (auto const &e : vec)
{
bset.insert(e);
}
}
{
::std::size_t count{};
{
::fast_io::timer t(u8"contains");
for (auto const &e : vec)
{
count += static_cast<::std::size_t>(bset.contains(e));
}
}
::fast_io::io::perrln("count=", count);
}
{
::std::size_t total_size{};
{
::fast_io::timer t(u8"iteration");
for (auto const &e : bset)
{
total_size += e.size();
}
}
::fast_io::io::perrln("total_size=", total_size);
}
{
::std::size_t total_size{};
{
::fast_io::timer t(u8"reverse iteration");
for (auto const &e : ::std::ranges::reverse_view(bset))
{
total_size += e.size();
}
}
::fast_io::io::perrln("total_size=", total_size);
}
}
39 changes: 39 additions & 0 deletions benchmark/0011.containers/str_btree_set/gentest.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#pragma once

#include <fast_io_dsal/vector.h>
#include <fast_io_dsal/string.h>
#include <random>

template <typename T = ::fast_io::string>
inline ::fast_io::vector<T> gentest()
{
::fast_io::vector<T> vec;
::std::mt19937_64 eng;
::std::uniform_int_distribution<std::size_t> ud(0, 61);
::std::uniform_int_distribution<std::size_t> rlen(25, 30);
for (::std::size_t i{}; i != 1000000; ++i)
{
T tempstr;
::std::size_t n{rlen(eng)};
tempstr.reserve(n);
for (::std::size_t j{}; j != n; ++j)
{
char8_t ch(static_cast<char8_t>(ud(eng)));
if (ch < 10u)
{
ch += u8'0';
}
else if (ch < 36u)
{
ch = ch - 10u + u8'a';
}
else
{
ch = ch - 36u + u8'A';
}
tempstr.push_back(ch);
}
vec.emplace_back(::std::move(tempstr));
}
return vec;
}
7 changes: 7 additions & 0 deletions benchmark/0011.containers/str_btree_set/rustbtree/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[package]
name = "rustbtree"
version = "0.1.0"
edition = "2024"

[dependencies]
rand = "0.9.1"
77 changes: 77 additions & 0 deletions benchmark/0011.containers/str_btree_set/rustbtree/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
use rand::rngs::StdRng;
use rand::{Rng, SeedableRng};
use std::collections::BTreeSet;
use std::time::Instant;

fn generate_test_data() -> Vec<String> {
let mut vec = Vec::with_capacity(1_000_000);
let mut rng = StdRng::seed_from_u64(0xDEADBEEF); // deterministic seed

for _ in 0..1_000_000 {
let len = rng.random_range(25..=30); // replaces Uniform(8, 20)
let mut s = String::with_capacity(len);

for _ in 0..len {
let x = rng.random_range(0..=61); // replaces Uniform(0, 61)
let ch = match x {
x if x < 10 => (b'0' + x as u8) as char,
x if x < 36 => (b'a' + (x - 10) as u8) as char,
_ => (b'A' + (x - 36) as u8) as char,
};
s.push(ch);
}

vec.push(s);
}

vec
}

fn main() {
let vec = generate_test_data();
let start_total = Instant::now();
println!("str_btree_set test started");

let mut bset = BTreeSet::new();

let start_insert = Instant::now();
for s in &vec {
bset.insert(s.clone()); // cloning to move into BTreeSet
}
println!("insert_key: {:.2?}", start_insert.elapsed());

let mut count = 0;
let start_contains = Instant::now();
for s in &vec {
if bset.contains(s) {
count += 1;
}
}
println!("contains: {:.2?}", start_contains.elapsed());
// 🚀 Forward iteration benchmark
let mut total_size = 0;
let start_iter = Instant::now();
for s in &bset {
total_size += s.len();
}
println!(
"forward iteration total_size = {}, elapsed: {:.2?}",
total_size,
start_iter.elapsed()
);

// 🔄 Reverse iteration benchmark
let mut total_size = 0;
let start_rev_iter = Instant::now();
for s in bset.iter().rev() {
total_size += s.len();
}
println!(
"reverse iteration total_size = {}, elapsed: {:.2?}",
total_size,
start_rev_iter.elapsed()
);

println!("count = {}", count);
println!("total time: {:.2?}", start_total.elapsed());
}
52 changes: 52 additions & 0 deletions benchmark/0011.containers/str_btree_set/std_set.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#include <set>
#include <string>
#include <fast_io.h>
#include <fast_io_driver/timer.h>
#include "gentest.h"

int main()
{
auto vec{::gentest<::std::string>()};
::fast_io::timer t(u8"str_btree_set");
::std::set<typename decltype(vec)::value_type> bset;
{
::fast_io::timer t(u8"insert");
for (auto const &e : vec)
{
bset.insert(e);
}
}
{
::std::size_t count{};
{
::fast_io::timer t(u8"contains");
for (auto const &e : vec)
{
count += static_cast<::std::size_t>(bset.contains(e));
}
}
::fast_io::io::perrln("count=", count);
}
{
::std::size_t total_size{};
{
::fast_io::timer t(u8"iteration");
for (auto const &e : bset)
{
total_size += e.size();
}
}
::fast_io::io::perrln("total_size=", total_size);
}
{
::std::size_t total_size{};
{
::fast_io::timer t(u8"reverse iteration");
for (auto const &e : ::std::ranges::reverse_view(bset))
{
total_size += e.size();
}
}
::fast_io::io::perrln("total_size=", total_size);
}
}
52 changes: 52 additions & 0 deletions benchmark/0011.containers/str_btree_set/std_set_fast_io.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#include <set>
#include <string>
#include <fast_io.h>
#include <fast_io_driver/timer.h>
#include "gentest.h"

int main()
{
auto vec{::gentest()};
::fast_io::timer t(u8"str_btree_set");
::std::set<::fast_io::string> bset;
{
::fast_io::timer t(u8"insert");
for (auto const &e : vec)
{
bset.insert(e);
}
}
{
::std::size_t count{};
{
::fast_io::timer t(u8"contains");
for (auto const &e : vec)
{
count += static_cast<::std::size_t>(bset.contains(e));
}
}
::fast_io::io::perrln("count=", count);
}
{
::std::size_t total_size{};
{
::fast_io::timer t(u8"iteration");
for (auto const &e : bset)
{
total_size += e.size();
}
}
::fast_io::io::perrln("total_size=", total_size);
}
{
::std::size_t total_size{};
{
::fast_io::timer t(u8"reverse iteration");
for (auto const &e : ::std::ranges::reverse_view(bset))
{
total_size += e.size();
}
}
::fast_io::io::perrln("total_size=", total_size);
}
}
30 changes: 30 additions & 0 deletions benchmark/0011.containers/str_btree_set/std_unordered_set.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include <unordered_set>
#include <string>
#include <fast_io.h>
#include <fast_io_driver/timer.h>
#include "gentest.h"

int main()
{
auto vec{::gentest<std::string>()};
::fast_io::timer t(u8"str_btree_set");
::std::unordered_set<::std::string> bset;
{
::fast_io::timer t(u8"insert");
for (auto const &e : vec)
{
bset.insert(e);
}
}
{
::std::size_t count{};
{
::fast_io::timer t(u8"contains");
for (auto const &e : vec)
{
count += static_cast<::std::size_t>(bset.contains(e));
}
}
::fast_io::io::perrln("count=", count);
}
}
Loading