Sha256: 48fb7f523e49659a6c876f5a5bbff6ebe90f5f7ba6d98689266de60f1a920f4c

Contents?: true

Size: 941 Bytes

Versions: 2

Compression:

Stored size: 941 Bytes

Contents

#!/usr/bin/env ruby
# -*- coding: binary -*-

# 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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
librex-0.0.68 lib/rex/struct2/element.rb
librex-0.0.66 lib/rex/struct2/element.rb