Class: Silhouette::BinaryEmitter
- Defined in:
- lib/silhouette/emitters.rb
Defined Under Namespace
Classes: DoneParsing
Constant Summary collapse
- MAGIC =
"<>"
- FIXED_SIZE =
{ ?c => 20, ?r => 20, ?@ => 8 }
Instance Attribute Summary
Attributes inherited from Emitter
Instance Method Summary collapse
-
#initialize(file, processor = nil) ⇒ BinaryEmitter
constructor
A new instance of BinaryEmitter.
- #next_cmd ⇒ Object
- #parse ⇒ Object
Constructor Details
#initialize(file, processor = nil) ⇒ BinaryEmitter
Returns a new instance of BinaryEmitter.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/silhouette/emitters.rb', line 60 def initialize(file, processor=nil) if file.kind_of? String raise "Unknown file" unless File.exists?(file) @io = File.open(file) else @io = file end magic = @io.read(2) raise InvalidFormat unless magic == MAGIC @method_size = "S" @file_size = "S" @ret_call_fmt = "i#{@method_size}#{@file_size}ii" @ret_call_size = 16 super(processor) end |
Instance Method Details
#next_cmd ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/silhouette/emitters.rb', line 93 def next_cmd str = @io.read(1) raise DoneParsing unless str cmd = str[0] if [?!, ?*, ?&].include? cmd size = @io.read(4).unpack("i").first else size = FIXED_SIZE[cmd] end [cmd, size, @io.read(size)] end |
#parse ⇒ Object
80 81 82 83 84 85 |
# File 'lib/silhouette/emitters.rb', line 80 def parse begin loop { emit } rescue DoneParsing end end |