Commit Graph

49 Commits

Author SHA1 Message Date
Yukihiro "Matz" Matsumoto d41d477e22 mruby-set: add type checking helper functions
Add two helper functions to improve code clarity and maintainability:
- set_check_type: Checks if a value is a Set and raises an error if not
- set_is_set: Checks if a value is a Set and returns a boolean result

Update all relevant methods to use these helper functions, reducing
code duplication and centralizing type checking logic.
2025-06-23 17:07:27 +09:00
Yukihiro "Matz" Matsumoto deb5c47fc6 mruby-set: implement comparison methods in C for better performance
Reimplemented the following methods in C for improved efficiency:
- superset? and proper_superset? (>= and >)
- subset? and proper_subset? (<= and <)
- intersect? and disjoint?
- <=> comparison operator
2025-06-23 17:07:27 +09:00
Yukihiro "Matz" Matsumoto 60f06e7a0f mruby-set: Add comprehensive method documentation 2025-06-23 17:07:27 +09:00
Yukihiro "Matz" Matsumoto 091e48159a mruby-set: Use numbered parameters for block arguments 2025-06-23 17:07:27 +09:00
Yukihiro "Matz" Matsumoto 04b38c2c47 mruby-set: rename internal methods
Renaming all internal C methods from __set_* to a cleaner __* convention
(e.g., __set_merge is now __merge), and updating their call sites in the
Ruby code accordingly.
2025-06-23 17:07:26 +09:00
Yukihiro "Matz" Matsumoto e096eeed1a mruby-set: reimplement #initialize in Ruby again
And we have eliminated mrb_funcall* from set.c.
2025-06-23 17:07:26 +09:00
Yukihiro "Matz" Matsumoto 5e2a7568e2 mruby-set: move #replace to Ruby again
Since it does only clear() and merge(), there is little use of the C
implemented fast path. This change also reduce memory consumption.
2025-06-23 17:07:26 +09:00
Yukihiro "Matz" Matsumoto 100ba913f2 mruby-set: extensive refactor in set.c
We refactor out loop by set_khash_foreach() function, so that we don't
need to repeat for loop. it makes the code simpler. The code is written
by Atlassian Rovodev.
2025-06-23 17:07:26 +09:00
Yukihiro "Matz" Matsumoto f210772465 mruby-set: optimize Set operations to use mrb_get_arg1()
Replace mrb_get_args() with more efficient mrb_get_arg1() for
single-argument functions. The code is written by Atlassian Rovodev.
2025-06-23 17:07:26 +09:00
Yukihiro "Matz" Matsumoto c117674cfe mruby-set: refactor Set#replace
The code is written by Atlassian Rovodev.
2025-06-23 17:07:25 +09:00
Yukihiro "Matz" Matsumoto 8538c79f3f mruby-set: refactor Set#merge
The code is written by Atlassian Rovodev.
2025-06-23 17:07:25 +09:00
Yukihiro "Matz" Matsumoto 169654ad9b mruby-set: refactor Set#subtract
The code is written by Atlassian Rovodev.
2025-06-23 17:07:25 +09:00
Yukihiro "Matz" Matsumoto c188b9a1aa mruby-set: refactor Set#difference
The code is written by Atlassian Rovodev.
2025-06-23 17:07:25 +09:00
Yukihiro "Matz" Matsumoto 10ea05d3aa mruby-set: refactor Set#union (+, |)
The code is written by Atlassian Rovodev.
2025-06-23 17:07:24 +09:00
Yukihiro "Matz" Matsumoto d9f0c5a3a4 mruby-set: refactor Set#xor (^)
According to the similar strategy as Set#intersection.
The code is mostly written by Atlassian Rovodev.
2025-06-23 17:07:24 +09:00
Yukihiro "Matz" Matsumoto 56a41b844e mruby-set: refactor Set#intersection
Define generic operation method in Ruby, then prepare fast-path function
in C as a general structure. Some methods will follow this pattern.
The code is generated by Atlassian Rovodev.
2025-06-23 17:07:24 +09:00
Yukihiro "Matz" Matsumoto 4ae3068b2a mruby-set: replace mrb_funcall_id() by set_to_a() 2025-06-23 17:07:24 +09:00
Yukihiro "Matz" Matsumoto 73a1eb03e8 mruby-set: remove mrb_funcall_id() from set_join() 2025-06-23 17:07:24 +09:00
Yukihiro "Matz" Matsumoto abae5a5ff5 mruby-set: remove __equal_fallback that no longer used 2025-06-23 17:07:23 +09:00
Yukihiro "Matz" Matsumoto a2339a7fde mruby-set: refactor set_equal() function
Made not to use mrb_funcall() as well.
2025-06-23 17:07:23 +09:00
Yukihiro "Matz" Matsumoto 72b51c4e92 mruby-set: I prefer newline before else keyword 2025-06-23 17:07:23 +09:00
Yukihiro "Matz" Matsumoto 655981c6ed mruby-set: remove unused object allocation
AI added this allocation to avoid memory leaks, but actually this extra
allocation does nothing useful. We see more room for AI improvement.
2025-06-23 17:07:23 +09:00
Yukihiro "Matz" Matsumoto e4ed04ba8b mruby-set (set_init): adjust a local variable declaration 2025-06-23 17:07:23 +09:00
Yukihiro "Matz" Matsumoto 52285161e7 mruby-set: remove methods added by AI hallucination 2025-06-23 17:07:22 +09:00
Yukihiro "Matz" Matsumoto 1238fb2808 mruby-set (flatten_merge): remove unnecessary assignment 2025-06-23 17:07:22 +09:00
Yukihiro "Matz" Matsumoto f44a7bc5db mruby-set: remove statistic measurement code 2025-06-23 17:07:22 +09:00
Yukihiro "Matz" Matsumoto 7a1732d438 mruby-set: make #initialize_copy private 2025-06-23 17:07:22 +09:00
Yukihiro "Matz" Matsumoto 11106525c4 mruby-set (__get_hash): remove no longer used method 2025-06-23 17:07:22 +09:00
Yukihiro "Matz" Matsumoto 7ffe6a3a9a mruby-set: re-implement Set class in C
The code is mostly developed by Atlassian Rovodev.
2025-06-23 17:07:21 +09:00
Yukihiro "Matz" Matsumoto e87bd7fcc1 mruby-set: update README.md
The document is written by Google Jules.
2025-06-23 17:07:21 +09:00
Yukihiro "Matz" Matsumoto 10c40c4e87 mruby-set: make Set#initialize_copy private 2025-06-16 12:41:54 +09:00
John Bampton a83d7d3510 Fix indentation in two Ruby files 2023-10-14 18:52:30 +10:00
Yukihiro "Matz" Matsumoto 0713f2a840 mruby-set/set.rb (inspect): add recursive inspect check to Set#inspect 2023-06-20 11:25:49 +09:00
Yukihiro "Matz" Matsumoto a800988239 mruby-set: remove files needed for an independent gem 2023-01-10 10:51:23 +09:00
Yukihiro "Matz" Matsumoto ba3541bbc4 mruby-set/set.rb (reset): add reset method defined in Ruby 2.5 2022-12-14 07:38:38 +09:00
Yukihiro "Matz" Matsumoto fe5191398a mruby-set: rename mrb_set.rb to set.rb. 2022-10-25 16:59:49 +09:00
Yukihiro "Matz" Matsumoto e3f74074ba mruby-set: remove intialize_{dup,clone}. 2022-10-25 16:58:31 +09:00
Yukihiro "Matz" Matsumoto 1152c43039 mruby-set: remove taint/untaint which are no longer exist. 2022-10-25 16:57:24 +09:00
Yukihiro "Matz" Matsumoto 7cf3b57cba mruby-set/mrb_set.rb (<=>): update definition.
Set#<=> needs to be comparing sets to be subset/superset relation.
2022-10-24 07:53:52 +09:00
Yukihiro "Matz" Matsumoto 7acf756b6f mruby-set/mrb_set.rb: add __ prefix to internal methods. 2022-10-24 07:44:21 +09:00
Yukihiro "Matz" Matsumoto ca0db4a161 mruby-set/README.md: more cleanup after #5814 2022-10-24 07:42:53 +09:00
Yukihiro "Matz" Matsumoto b1fd3dc160 mruby-set/mrbgem.rake; remove test dependency to mruby-metaprog.
mruby-set no longer depends on mruby-metaprog by introducing the
internal `_hash` method.
2022-10-24 07:42:52 +09:00
Yukihiro "Matz" Matsumoto e9ee0f2953 mruby-set/set.rb (_hash): add utility function to access internal hash.
Since `instance_variable_get` is no longer in the core.
2022-10-24 07:42:52 +09:00
Yukihiro "Matz" Matsumoto d5e13a7f2a mruby-set/set.rb (do_with_enum): prefix _ to internal method. 2022-10-24 07:41:30 +09:00
fn ⌃ ⌥ b0a494c414 mrb_set.rb: improve ruby/spec compliance.
- Alias `#===` to `#include?`
- Alias `#filter!` to `#select!`
- Fix `#subset?` and `#proper_subset?` for Set-like objects.
- Fix `#==`
- Fix `#inspect` for self-referencing sets.
- Add `#<=>` and `#join`
2022-10-23 07:42:25 -07:00
John Bampton f78fdecfc8 Clean up the mruby-set README 2022-10-22 12:25:29 +10:00
John Bampton 2ebb001e76 gha: fix pre-commit
Run `pre-commit run --all-files`
2022-10-22 08:31:38 +10:00
Yukihiro "Matz" Matsumoto dad0852944 mruby-set/mrbgem.rake: add test dependency.
The `instance_variable_get` has been separated to `mruby-metaprog` gem,
so we need to specify the gem as test dependency.
2022-10-21 14:12:10 +09:00
Yukihiro "Matz" Matsumoto 4c86a7a5c3 Add 'mrbgems/mruby-set/' from commit '68334311ac7386eef84f3034a256e7135a87625d'
git-subtree-dir: mrbgems/mruby-set
git-subtree-mainline: 3b55a09f91
git-subtree-split: 68334311ac
2022-10-21 13:56:07 +09:00