Methods
Attributes
[R] default Default value.
[R] display_name Display name of field (used for printing).
[R] format Format for printed value of field.
[R] length Length of field in bits.
[R] name Name of field (used for its accessors).
[R] offset Offset of field in bits.
[R] options Options, such as :default (varies for each field subclass). In general, options can be provided as strings or as symbols.
Public Class methods
class_name()

Used in describe.

# File lib/bit-struct/bit-struct.rb, line 47
    def self.class_name
      @class_name ||= name[/\w+$/]
    end
default()

Subclasses can override this to define a default for all fields of this class, not just the one currently being added to a BitStruct class, a "default default" if you will. The global default, if default returns nil, is to fill the field with zero. Most field classes just let this default stand. The default can be overridden per-field when a BitStruct class is defined.

# File lib/bit-struct/bit-struct.rb, line 44
    def self.default; nil; end
new(offset, length, name, opts = {})

Options are display_name, default, and format (subclasses of Field may add other options).

# File lib/bit-struct/bit-struct.rb, line 78
    def initialize(offset, length, name, opts = {})
      @offset, @length, @name, @options =
        offset, length, name, opts
      
      @display_name = opts[:display_name] || opts["display_name"]
      @default      = opts[:default] || opts["default"] || self.class.default
      @format       = opts[:format] || opts["format"]
    end
Public Instance methods
class_name()

Used in describe. Can be overridden per-subclass, as in NestedField.

# File lib/bit-struct/bit-struct.rb, line 52
    def class_name
      self.class.class_name
    end
describe(opts) {|["@%d" % byte_offset, class_name, name, len_str, display_name]| ...}

Yield the description of this field, as an array of 5 strings: byte offset, type, name, size, and description. The opts hash may have:

:expand :if the value is true, expand complex fields

(Subclass implementations may yield more than once for complex fields.)

# File lib/bit-struct/bit-struct.rb, line 63
    def describe opts
      bits = size
      if bits > 32 and bits % 8 == 0
        len_str = "%dB" % (bits/8)
      else
        len_str = "%db" % bits
      end
      
      byte_offset = offset / 8 + (opts[:byte_offset] || 0)

      yield ["@%d" % byte_offset, class_name, name, len_str, display_name]
    end
inspect_in_object(obj, opts)

Inspect the value of this field in the specified obj.

# File lib/bit-struct/bit-struct.rb, line 88
    def inspect_in_object(obj, opts)
      val = obj.send(name)
      str =
        begin
          val.inspect(opts)
        rescue ArgumentError # assume: "wrong number of arguments (1 for 0)"
          val.inspect
        end
      (f=@format) ? (f % str) : str
    end
inspectable?()

Normally, all fields show up in inspect, but some, such as padding, should not.

# File lib/bit-struct/bit-struct.rb, line 101
    def inspectable?; true; end