bitmap 0.0.2 → 0.0.3.1

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.
Files changed (2) hide show
  1. data/lib/bitmap.rb +24 -9
  2. metadata +28 -20
@@ -12,25 +12,40 @@
12
12
 
13
13
  class Bitmap < Hash
14
14
  class Value
15
- def initialize (value, names)
16
- @value = value.to_i
17
- @names = names
15
+ attr_reader :bitmap
16
+
17
+ def initialize (bitmap, value, names)
18
+ @bitmap = bitmap
19
+ @value = value.to_i
20
+ @names = names
18
21
  end
19
22
 
20
- def has? (name)
21
- @names.member?(name)
23
+ def has? (mask)
24
+ if mask.is_a?(Value)
25
+ (@names.to_a & mask.to_a) == mask.to_a
26
+ else
27
+ @names.member?(mask.to_s.to_sym)
28
+ end
22
29
  end
23
30
 
24
31
  def to_a
25
32
  @names
26
33
  end
27
34
 
35
+ def + (*what)
36
+ bitmap[*(@names + what.flatten.compact)]
37
+ end
38
+
39
+ def - (*what)
40
+ bitmap[*(@names - what.flatten.compact)]
41
+ end
42
+
28
43
  def to_i
29
44
  @value
30
45
  end
31
46
 
32
47
  def to_s
33
- to_a.join(' | ')
48
+ to_a.join '|'
34
49
  end
35
50
  end
36
51
 
@@ -44,13 +59,13 @@ class Bitmap < Hash
44
59
  args.compact!
45
60
 
46
61
  if args.length == 1 && args.first.is_a?(Integer)
47
- Value.new(args.first, args.first.to_s(2).reverse.chars.each_with_index.map {|bit, index|
62
+ Value.new(self, args.first, args.first.to_s(2).reverse.chars.each_with_index.map {|bit, index|
48
63
  next if bit.to_i.zero?
49
64
 
50
65
  key("#{bit}#{'0' * index}".to_i(2)) or raise ArgumentError, "unknown bit at #{index}"
51
66
  }.compact)
52
67
  else
53
- Value.new(args.map {|arg|
68
+ Value.new(self, args.map {|arg|
54
69
  super(arg) or super(arg.to_s.to_sym) or raise ArgumentError, "unknown symbol #{arg}"
55
70
  }.inject {|a, b|
56
71
  a | b
@@ -59,7 +74,7 @@ class Bitmap < Hash
59
74
  end
60
75
 
61
76
  def all
62
- Value.new(values.inject {|a, b|
77
+ Value.new(self, values.inject {|a, b|
63
78
  a | b
64
79
  }, keys)
65
80
  end
metadata CHANGED
@@ -1,46 +1,54 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: bitmap
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.2
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 0.0.3.1
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - meh.
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-11 00:00:00.000000000Z
12
+
13
+ date: 2011-08-21 00:00:00 Z
13
14
  dependencies: []
15
+
14
16
  description:
15
17
  email: meh@paranoici.org
16
18
  executables: []
19
+
17
20
  extensions: []
21
+
18
22
  extra_rdoc_files: []
19
- files:
23
+
24
+ files:
20
25
  - lib/bitmap.rb
21
26
  homepage: http://github.com/meh/ruby-bitmap
22
27
  licenses: []
28
+
23
29
  post_install_message:
24
30
  rdoc_options: []
25
- require_paths:
31
+
32
+ require_paths:
26
33
  - lib
27
- required_ruby_version: !ruby/object:Gem::Requirement
34
+ required_ruby_version: !ruby/object:Gem::Requirement
28
35
  none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: '0'
33
- required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: "0"
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
41
  none: false
35
- requirements:
36
- - - ! '>='
37
- - !ruby/object:Gem::Version
38
- version: '0'
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
39
46
  requirements: []
47
+
40
48
  rubyforge_project:
41
- rubygems_version: 1.8.6
49
+ rubygems_version: 1.8.5
42
50
  signing_key:
43
51
  specification_version: 3
44
- summary: Simple and stupid bitmap implementation (bitmap as in bitset, not bitmap
45
- image)
52
+ summary: Simple and stupid bitmap implementation (bitmap as in bitset, not bitmap image)
46
53
  test_files: []
54
+