Sha256: 6855804de5da2b8723cb3a82550eb0da3cd07b4f8f4a5191c25e1a0044b72f97

Contents?: true

Size: 1.2 KB

Versions: 6

Compression:

Stored size: 1.2 KB

Contents

require "bindata/base"

module BinData
  # A virtual field is one that is neither read, written nor occupies space in
  # the data stream.  It is used to make assertions or as a convenient label
  # for determining offsets or storing values.
  #
  #   require 'bindata'
  #
  #   class A < BinData::Record
  #     string  :a, :read_length => 5
  #     string  :b, :read_length => 5
  #     virtual :c, :assert => lambda { a == b }
  #   end
  #
  #   obj = A.read("abcdeabcde")
  #   obj.a #=> "abcde"
  #   obj.c.offset #=> 10
  #
  #   obj = A.read("abcdeABCDE") #=> BinData::ValidityError: assertion failed for obj.c
  #
  # == Parameters
  #
  # Parameters may be provided at initialisation to control the behaviour of
  # an object.  These params include those for BinData::Base as well as:
  #
  # [<tt>:assert</tt>]    Raise an error when reading or assigning if the value
  #                       of this evaluated parameter is false.
  # [<tt>:value</tt>]     The virtual object will always have this value.
  #
  class Virtual < BinData::BasePrimitive

    def value_to_binary_string(val)
      ""
    end

    def read_and_return_value(io)
      nil
    end

    def sensible_default
      nil
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
bindata-2.3.0 lib/bindata/virtual.rb
bindata-2.2.0 lib/bindata/virtual.rb
bindata-2.1.0 lib/bindata/virtual.rb
bindata-1.8.3 lib/bindata/virtual.rb
bindata-2.0.0 lib/bindata/virtual.rb
bindata-1.8.2 lib/bindata/virtual.rb