roaring 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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