bitmap 0.0.2 → 0.0.3.1

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