Class: Bitmap

Inherits:
Object
  • Object
show all
Defined in:
lib/bitmap.rb

Overview

         DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
                 Version 2, December 2004

         DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. You just DO WHAT THE FUCK YOU WANT TO.

++

Defined Under Namespace

Classes: Value

Instance Method Summary collapse

Constructor Details

#initialize(data) ⇒ Bitmap

Returns a new instance of Bitmap.



54
55
56
57
58
59
60
61
# File 'lib/bitmap.rb', line 54

def initialize (data)
	if data.first.first.is_a? Integer
		data = Hash[data.map(&:reverse)]
	end

	@bits = data
	@bits.freeze
end

Instance Method Details

#[](*args) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/bitmap.rb', line 63

def [] (*args)
	args.flatten!
	args.compact!

	if args.length == 1 && args.first.is_a?(Integer)
		Value.new(self, args.first, args.first.to_s(2).reverse.chars.each_with_index.map {|bit, index|
			next if bit.to_i.zero?

			@bits.key("#{bit}#{'0' * index}".to_i(2)) or raise ArgumentError, "unknown bit at #{index}"
		}.compact)
	else
		Value.new(self, args.map {|arg|
			@bits[arg] or @bits[arg.to_s.to_sym] or raise ArgumentError, "unknown symbol #{arg}"
		}.inject {|a, b|
			a | b
		}, args)
	end
end

#allObject



82
83
84
85
86
# File 'lib/bitmap.rb', line 82

def all
	Value.new(self, @bits.values.inject {|a, b|
		a | b
	}, @bits.keys)
end

#fieldsObject



88
89
90
# File 'lib/bitmap.rb', line 88

def fields
	@bits.keys
end

#inspectObject



92
93
94
# File 'lib/bitmap.rb', line 92

def inspect
	"#<#{self.class.name}: #{@bits.map { |name, bit| "#{bit.to_s(16)}=#{name}" }.join ' '}>"
end