metasploit-framework/lib/rex/struct2/element.rb

44 lines
915 B
Ruby

#!/usr/bin/env ruby
# Rex::Struct2
module Rex
module Struct2
module Element
# elements should have to_s, but we don't define it here because
# it will just overlap with inheritence and cause issues
attr_reader :value, :restraint, :container
attr_writer :restraint, :container
# update the restraints on any value change
def value=(newval)
@value = newval
self.update_restraint
end
# avoid conflicting with normal namespace length()
def slength
to_s().length()
end
def update_restraint
if self.restraint
# Sort of a hack, but remove the restraint before we update, so we aren't using
# the old restraint during calculating the restraint update value
old_restraint, self.restraint = self.restraint, nil
old_restraint.update(self.slength)
self.restraint = old_restraint
end
if self.container
self.container.update_restraint
end
end
end
# end Rex::Struct2
end
end