Parent

Included Modules

Files

Class/Module Index [+]

Quicksearch

BinData::Primitive

A Primitive is a declarative way to define a new BinData data type. The data type must contain a primitive value only, i.e numbers or strings. For new data types that contain multiple values see BinData::Record.

To define a new data type, set fields as if for Record and add a get and set method to extract / convert the data between the fields and the value of the object.

require 'bindata'

class PascalString < BinData::Primitive
  uint8  :len,  :value => lambda { data.length }
  string :data, :read_length => :len

  def get
    self.data
  end

  def set(v)
    self.data = v
  end
end

ps = PascalString.new(:initial_value => "hello")
ps.to_binary_s #=> "\005hello"
ps.read("\003abcde")
ps #=> "abc"

# Unsigned 24 bit big endian integer
class Uint24be < BinData::Primitive
  uint8 :byte1
  uint8 :byte2
  uint8 :byte3

  def get
    (self.byte1 << 16) | (self.byte2 << 8) | self.byte3
  end

  def set(v)
    v = 0 if v < 0
    v = 0xffffff if v > 0xffffff

    self.byte1 = (v >> 16) & 0xff
    self.byte2 = (v >>  8) & 0xff
    self.byte3 =  v        & 0xff
  end
end

u24 = Uint24be.new
u24.read("\x12\x34\x56")
"0x%x" % u24 #=> 0x123456

Parameters

Primitive objects accept all the parameters that BinData::BasePrimitive do.

Public Class Methods

bit_aligned() click to toggle source
# File lib/bindata/alignment.rb, line 75
def Primitive.bit_aligned
  fail "'bit_aligned' is not needed for BinData::Primitives"
end

Public Instance Methods

assign(val) click to toggle source
# File lib/bindata/primitive.rb, line 92
def assign(val)
  super(val)
  set(_value)
  @value = get
end
do_num_bytes() click to toggle source
# File lib/bindata/primitive.rb, line 107
def do_num_bytes
  set(_value)
  @struct.do_num_bytes
end
do_write(io) click to toggle source
# File lib/bindata/primitive.rb, line 102
def do_write(io)
  set(_value)
  @struct.do_write(io)
end
initialize_instance() click to toggle source
# File lib/bindata/primitive.rb, line 76
def initialize_instance
  @struct = BinData::Struct.new(get_parameter(:struct_params), self)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.