Class StructFu::IntString
In: lib/packetfu/structfu.rb
Parent: Struct.new(:int, :string, :mode)

Provides a primitive for creating strings, preceeded by an Int type of length. By default, a string of length zero with a one-byte length is presumed.

Note that IntStrings aren‘t used for much, but it seemed like a good idea at the time.

Methods

calc   len   len=   new   parse   read   string=   to_s  

Public Class methods

Public Instance methods

Calculates the size of a string, and sets it as the value.

Shorthand for querying a length. Note that the usual "length" and "size" refer to the number of elements of this struct.

Override the size, if you must.

parse() is like read(), except that it interprets the string, either based on the declared length, or the actual length. Which strategy is used is dependant on which :mode is set (with self.mode).

:parse : Read the length, and then read in that many bytes of the string.

         The string may be truncated or padded out with nulls, as dictated by the value.

:fix : Skip the length, read the rest of the string, then set the length to what it ought to be. else : If neither of these modes are set, just perfom a normal read(). This is the default.

Read takes a string, assumes an int width as previously defined upon initialization, but makes no guarantees the int value isn‘t lying. You‘re on your own to test for that (or use parse() with a :mode set).

By redefining string=, we can ensure the correct value is calculated upon assignment. If you‘d prefer to have an incorrect value, use the syntax, obj[:string]="value" instead. Note, by using the alternate form, you must calc before you can trust the int‘s value. Think of the

assignment as "set to equal," while the []= assignment

as "boxing in" the value. Maybe.

Returns the object as a string, depending on the mode set upon object creation.

[Validate]