2005-12-17 06:46:23 +00:00
|
|
|
#!/usr/bin/env ruby
|
2005-03-26 16:52:59 +00:00
|
|
|
|
|
|
|
# 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
|