roaring 0.0.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Roaring
4
- VERSION = "0.0.0"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/roaring.rb CHANGED
@@ -1,8 +1,115 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "roaring/version"
4
+ require_relative "roaring/roaring"
5
+ require "set"
4
6
 
5
7
  module Roaring
6
8
  class Error < StandardError; end
7
- # Your code goes here...
9
+
10
+ class Bitmap
11
+ include Enumerable
12
+
13
+ alias size cardinality
14
+ alias length cardinality
15
+ alias count cardinality
16
+
17
+ alias + |
18
+ alias union |
19
+ alias intersection &
20
+ alias difference -
21
+
22
+ alias delete remove
23
+ alias delete? remove?
24
+
25
+ alias first min
26
+ alias last max
27
+
28
+ alias === include?
29
+
30
+ def initialize(enum = nil)
31
+ return unless enum
32
+
33
+ if enum.instance_of?(Roaring::Bitmap)
34
+ initialize_copy(enum)
35
+ else
36
+ enum.each { |x| self << x }
37
+ end
38
+ end
39
+
40
+ def hash
41
+ to_a.hash
42
+ end
43
+
44
+ alias eql? ==
45
+
46
+ def replace(other)
47
+ # FIXME: this should probably be initialize_copy and replace should be in C
48
+ initialize_copy(other)
49
+ end
50
+
51
+ def self.[](*args)
52
+ if args.size == 0
53
+ new
54
+ elsif args.size == 1 && !(Integer === args[0])
55
+ new(args[0])
56
+ else
57
+ new(args)
58
+ end
59
+ end
60
+
61
+ def >(other)
62
+ other < self
63
+ end
64
+
65
+ def >=(other)
66
+ other <= self
67
+ end
68
+
69
+ alias subset? <=
70
+ alias proper_subset? <
71
+ alias superset? >=
72
+ alias proper_superset? >
73
+
74
+ def <=>(other)
75
+ if self == other
76
+ 0
77
+ elsif subset?(other)
78
+ -1
79
+ elsif superset?(other)
80
+ 1
81
+ else
82
+ nil
83
+ end
84
+ end
85
+
86
+ def disjoint?(other)
87
+ !intersect?(other)
88
+ end
89
+
90
+ def _dump level
91
+ serialize
92
+ end
93
+
94
+ def self._load args
95
+ deserialize(args)
96
+ end
97
+
98
+ def to_a
99
+ map(&:itself)
100
+ end
101
+
102
+ def to_set
103
+ ::Set.new(to_a)
104
+ end
105
+
106
+ def inspect
107
+ cardinality = self.cardinality
108
+ if cardinality < 64
109
+ "#<#{self.class} {#{to_a.join(", ")}}>"
110
+ else
111
+ "#<#{self.class} (#{cardinality} values)>"
112
+ end
113
+ end
114
+ end
8
115
  end
data/roaring.gemspec CHANGED
@@ -8,30 +8,25 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["John Hawthorn"]
9
9
  spec.email = ["john@hawthorn.email"]
10
10
 
11
- spec.summary = "placeholder"
12
- spec.description = "placeholder"
11
+ spec.summary = "Roaring bitmaps for Ruby"
12
+ spec.description = spec.summary
13
13
  spec.homepage = "https://github.com/jhawthorn/roaring-ruby"
14
- spec.license = "MIT"
14
+ spec.license = "Apache-2.0"
15
15
  spec.required_ruby_version = ">= 2.6.0"
16
16
 
17
- spec.metadata["homepage_uri"] = spec.homepage
18
- spec.metadata["source_code_uri"] = spec.homepage
19
- spec.metadata["changelog_uri"] = spec.homepage
17
+ spec.metadata["source_code_uri"] = spec.metadata["changelog_uri"] = spec.metadata["homepage_uri"] = spec.homepage
20
18
 
21
19
  # Specify which files should be added to the gem when it is released.
22
20
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
24
- `git ls-files -z`.split("\x0").reject do |f|
25
- (f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
21
+ spec.files = Dir.chdir(__dir__) do
22
+ `git ls-files --recurse-submodules -z`.split("\x0").reject do |f|
23
+ (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
26
24
  end
27
25
  end
28
26
  spec.bindir = "exe"
29
27
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
30
28
  spec.require_paths = ["lib"]
29
+ spec.extensions = ["ext/roaring/extconf.rb"]
31
30
 
32
- # Uncomment to register a new dependency of your gem
33
- # spec.add_dependency "example-gem", "~> 1.0"
34
-
35
- # For more information and examples about making a new gem, check out our
36
- # guide at: https://bundler.io/guides/creating_gem.html
31
+ spec.add_development_dependency "prime"
37
32
  end
data/sig/roaring.rbs ADDED
@@ -0,0 +1,4 @@
1
+ module Roaring
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata CHANGED
@@ -1,20 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roaring
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.2.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-14 00:00:00.000000000 Z
12
- dependencies: []
13
- description: placeholder
11
+ date: 2023-02-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: prime
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Roaring bitmaps for Ruby
14
28
  email:
15
29
  - john@hawthorn.email
16
30
  executables: []
17
- extensions: []
31
+ extensions:
32
+ - ext/roaring/extconf.rb
18
33
  extra_rdoc_files: []
19
34
  files:
20
35
  - CODE_OF_CONDUCT.md
@@ -23,18 +38,24 @@ files:
23
38
  - LICENSE.txt
24
39
  - README.md
25
40
  - Rakefile
26
- - bin/console
27
- - bin/setup
41
+ - ext/roaring/cext.c
42
+ - ext/roaring/extconf.rb
43
+ - ext/roaring/roaring/LICENSE
44
+ - ext/roaring/roaring/README.md
45
+ - ext/roaring/roaring/roaring.c
46
+ - ext/roaring/roaring/roaring.h
47
+ - ext/roaring/roaring/roaring.hh
28
48
  - lib/roaring.rb
29
49
  - lib/roaring/version.rb
30
50
  - roaring.gemspec
51
+ - sig/roaring.rbs
31
52
  homepage: https://github.com/jhawthorn/roaring-ruby
32
53
  licenses:
33
- - MIT
54
+ - Apache-2.0
34
55
  metadata:
35
56
  homepage_uri: https://github.com/jhawthorn/roaring-ruby
36
- source_code_uri: https://github.com/jhawthorn/roaring-ruby
37
57
  changelog_uri: https://github.com/jhawthorn/roaring-ruby
58
+ source_code_uri: https://github.com/jhawthorn/roaring-ruby
38
59
  post_install_message:
39
60
  rdoc_options: []
40
61
  require_paths:
@@ -50,8 +71,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
50
71
  - !ruby/object:Gem::Version
51
72
  version: '0'
52
73
  requirements: []
53
- rubygems_version: 3.3.3
74
+ rubygems_version: 3.4.6
54
75
  signing_key:
55
76
  specification_version: 4
56
- summary: placeholder
77
+ summary: Roaring bitmaps for Ruby
57
78
  test_files: []
data/bin/console DELETED
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require "bundler/setup"
5
- require "roaring"
6
-
7
- # You can add fixtures and/or initialization code here to make experimenting
8
- # with your gem easier. You can also use a different console, if you like.
9
-
10
- # (If you use this, don't forget to add pry to your Gemfile!)
11
- # require "pry"
12
- # Pry.start
13
-
14
- require "irb"
15
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here