Sha256: 87ba1de9d79209f397c31d8fcb3acb1a4f61ab2c1a2ee0480e9c31681c28f522

Contents?: true

Size: 1.46 KB

Versions: 21

Compression:

Stored size: 1.46 KB

Contents

# -*- coding: binary -*-

# Rex::Struct2
module Rex
module Struct2

class Generic

  require 'rex/struct2/element'
  include Rex::Struct2::Element

  attr_reader  :default
  attr_writer  :default

  attr_accessor :mask, :check_mask

  def initialize(packspec, signed=false, default=nil)
    @packspec = packspec
    @default  = default

    bytelen = [ -1 ].pack(@packspec).length
    self.mask = (1 << (8 * bytelen)) - 1

    if signed
      self.check_mask = 1 << (8 * bytelen - 1)
    else
      self.check_mask = 0
    end

    reset()
  end

  def reset
    self.value = @default
  end

  def to_s
    # I realize this will bomb out if this isn't an integer, for
    # example if it is nil.  That should only happen for a user
    # error so that's what I want it to do...
    string = [ @value ].pack(@packspec)

    if restraint && restraint.max
      return string.slice(0, restraint.max)
    else
      return string
    end
    # what to do for restraint.min?!?
  end

  def from_s(bytes)
    value = bytes.unpack(@packspec)[0]
    # return nil on unpack error
    return if !value
    len = slength()
    # error on any restraint issues
    return if restraint && restraint.max && len > restraint.max
    return if restraint && restraint.min && len < restraint.min
    # else set our value and return length used for this element

    if (value & check_mask) != 0
      value = -((~value & mask) + 1)
    end

    self.value = value
    return(len)
  end

end

# end Rex::Struct2
end
end

Version data entries

21 entries across 21 versions & 4 rubygems

Version Path
rex-struct2-0.1.5 lib/rex/struct2/generic.rb
rex-struct2-0.1.4 lib/rex/struct2/generic.rb
rex-struct2-0.1.3 lib/rex/struct2/generic.rb
rex-2.0.13 lib/rex/struct2/generic.rb
rex-2.0.12 lib/rex/struct2/generic.rb
rex-2.0.11 lib/rex/struct2/generic.rb
rex-struct2-0.1.2 lib/rex/struct2/generic.rb
rex-struct2-0.1.1 lib/rex/struct2/generic.rb
rex-struct2-0.1.0 lib/rex/struct2/generic.rb
rex-2.0.10 lib/rex/struct2/generic.rb
rex-2.0.9 lib/rex/struct2/generic.rb
rex-2.0.8 lib/rex/struct2/generic.rb
rex-2.0.7 lib/rex/struct2/generic.rb
rex-2.0.5 lib/rex/struct2/generic.rb
rex-2.0.4 lib/rex/struct2/generic.rb
dstruct-0.0.1 lib/rex/struct2/generic.rb
rex-2.0.3 lib/rex/struct2/generic.rb
librex-0.0.999 lib/rex/struct2/generic.rb
rex-2.0.2 lib/rex/struct2/generic.rb
librex-0.0.71 lib/rex/struct2/generic.rb