roaring 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,17 @@
1
+ #ifndef ROARING_RUBY_H
2
+ #define ROARING_RUBY_H
3
+
4
+ #include <ruby.h>
5
+
6
+ #include "roaring.h"
7
+
8
+ #ifndef RBOOL
9
+ #define RBOOL(x) ((x) ? Qtrue : Qfalse)
10
+ #endif
11
+
12
+ extern VALUE rb_mRoaring;
13
+
14
+ void rb_roaring32_init();
15
+ void rb_roaring64_init();
16
+
17
+ #endif
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Roaring
4
- VERSION = "0.1.0"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/roaring.rb CHANGED
@@ -7,36 +7,71 @@ require "set"
7
7
  module Roaring
8
8
  class Error < StandardError; end
9
9
 
10
- class Bitmap
11
- include Enumerable
10
+ module BitmapCommon
11
+ def self.included(base)
12
+ super
13
+
14
+ base.extend ClassMethods
15
+
16
+ base.alias_method :size, :cardinality
17
+ base.alias_method :length, :cardinality
18
+ base.alias_method :count, :cardinality
19
+
20
+ base.alias_method :+, :|
21
+ base.alias_method :union, :|
22
+ base.alias_method :intersection, :&
23
+ base.alias_method :difference, :-
24
+
25
+ base.alias_method :delete, :remove
26
+ base.alias_method :delete?, :remove?
12
27
 
13
- alias size cardinality
14
- alias length cardinality
15
- alias count cardinality
28
+ base.alias_method :first, :min
29
+ base.alias_method :last, :max
16
30
 
17
- alias + |
31
+ base.alias_method :eql?, :==
18
32
 
19
- alias first min
20
- alias last max
33
+ base.alias_method :===, :include?
34
+
35
+ base.alias_method :subset?, :<=
36
+ base.alias_method :proper_subset?, :<
37
+ base.alias_method :superset?, :>=
38
+ base.alias_method :proper_superset?, :>
39
+ end
40
+
41
+ module ClassMethods
42
+ def [](*args)
43
+ if args.size == 0
44
+ new
45
+ elsif args.size == 1 && !(Integer === args[0])
46
+ new(args[0])
47
+ else
48
+ new(args)
49
+ end
50
+ end
51
+
52
+ def _load args
53
+ deserialize(args)
54
+ end
55
+ end
56
+
57
+ include Enumerable
21
58
 
22
59
  def initialize(enum = nil)
23
60
  return unless enum
24
61
 
25
- if enum.instance_of?(Roaring::Bitmap)
26
- initialize_copy(enum)
62
+ if enum.instance_of?(self.class)
63
+ replace(enum)
27
64
  else
28
65
  enum.each { |x| self << x }
29
66
  end
30
67
  end
31
68
 
32
- def self.[](*args)
33
- if args.size == 0
34
- new
35
- elsif args.size == 1 && !(Integer === args[0])
36
- new(args[0])
37
- else
38
- new(args)
39
- end
69
+ def hash
70
+ to_a.hash
71
+ end
72
+
73
+ def initialize_copy(other)
74
+ replace(other)
40
75
  end
41
76
 
42
77
  def >(other)
@@ -47,12 +82,24 @@ module Roaring
47
82
  other <= self
48
83
  end
49
84
 
50
- def _dump level
51
- serialize
85
+ def <=>(other)
86
+ if self == other
87
+ 0
88
+ elsif subset?(other)
89
+ -1
90
+ elsif superset?(other)
91
+ 1
92
+ else
93
+ nil
94
+ end
52
95
  end
53
96
 
54
- def self._load args
55
- deserialize(args)
97
+ def disjoint?(other)
98
+ !intersect?(other)
99
+ end
100
+
101
+ def _dump level
102
+ serialize
56
103
  end
57
104
 
58
105
  def to_a
@@ -64,7 +111,28 @@ module Roaring
64
111
  end
65
112
 
66
113
  def inspect
67
- "#<#{self.class} cardinality=#{cardinality}>"
114
+ cardinality = self.cardinality
115
+ if cardinality < 64
116
+ "#<#{self.class} {#{to_a.join(", ")}}>"
117
+ else
118
+ "#<#{self.class} (#{cardinality} values)>"
119
+ end
68
120
  end
69
121
  end
122
+
123
+ class Bitmap32
124
+ include BitmapCommon
125
+
126
+ MIN = 0
127
+ MAX = (2**32) - 1
128
+ RANGE = MIN..MAX
129
+ end
130
+
131
+ class Bitmap64
132
+ include BitmapCommon
133
+
134
+ MIN = 0
135
+ MAX = (2**64) - 1
136
+ RANGE = MIN..MAX
137
+ end
70
138
  end
data/roaring.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  # Specify which files should be added to the gem when it is released.
20
20
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
21
21
  spec.files = Dir.chdir(__dir__) do
22
- `git ls-files -z`.split("\x0").reject do |f|
22
+ `git ls-files --recurse-submodules -z`.split("\x0").reject do |f|
23
23
  (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
24
24
  end
25
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roaring
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Hawthorn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-16 00:00:00.000000000 Z
11
+ date: 2024-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prime
@@ -38,8 +38,13 @@ files:
38
38
  - LICENSE.txt
39
39
  - README.md
40
40
  - Rakefile
41
+ - ext/roaring/bitmap32.c
42
+ - ext/roaring/bitmap64.c
41
43
  - ext/roaring/cext.c
42
44
  - ext/roaring/extconf.rb
45
+ - ext/roaring/roaring.c
46
+ - ext/roaring/roaring.h
47
+ - ext/roaring/roaring_ruby.h
43
48
  - lib/roaring.rb
44
49
  - lib/roaring/version.rb
45
50
  - roaring.gemspec
@@ -66,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
71
  - !ruby/object:Gem::Version
67
72
  version: '0'
68
73
  requirements: []
69
- rubygems_version: 3.3.3
74
+ rubygems_version: 3.5.9
70
75
  signing_key:
71
76
  specification_version: 4
72
77
  summary: Roaring bitmaps for Ruby