Class: PacketGen::Types::Array Abstract
- Inherits:
-
Object
- Object
- PacketGen::Types::Array
- Extended by:
- Forwardable
- Includes:
- Enumerable, LengthFrom
- Defined in:
- lib/packetgen/types/array.rb
Overview
Base class to define set of Fields subclasses.
#record_from_hash
Subclasses should define private method #record_from_hash. This method is called by #push to add an object to the set.
A default method is defined by Array: it calls constructor of class defined by Array.set_of.
#real_type
Subclasses should define private method #real_type if Array.set_of type may be subclassed. This method should return real class to use. It takes an only argument, which is of type given by Array.set_of.
Default behaviour of this method is to return argument’s class.
Direct Known Subclasses
Header::DHCP::Options, Header::DHCPv6::Options, Header::DHCPv6::RequestedOptions, Header::DNS::ArrayOfOptions, Header::DNS::Name, Header::DNS::RRSection, Header::Dot11::ArrayOfElements, Header::IGMPv3::GroupRecords, Header::IP::ArrayOfAddr, Header::IP::Options, Header::IPv6::ArrayOfAddr, Header::IPv6::Options, Header::MLDv2::McastAddressRecords, Header::OSPFv2::ArrayOfExternal, Header::OSPFv2::ArrayOfLSA, Header::OSPFv2::ArrayOfLSR, Header::OSPFv2::ArrayOfLink, Header::OSPFv2::ArrayOfTosMetric, Header::OSPFv3::ArrayOfIPv6Prefix, Header::OSPFv3::ArrayOfLSA, Header::OSPFv3::ArrayOfLSR, Header::OSPFv3::ArrayOfLink, Header::TCP::Options, ArrayOfInt16, ArrayOfInt16le, ArrayOfInt32, ArrayOfInt32le, ArrayOfInt8
Constant Summary collapse
- HUMAN_SEPARATOR =
Separator used in #to_human. May be ovverriden by subclasses
','
Class Method Summary collapse
-
.set_of(klass) ⇒ void
Define type of objects in set.
-
.set_of_klass ⇒ Class
Get class set with Array.set_of.
Instance Method Summary collapse
-
#<<(obj) ⇒ Array
abstract
Add an object to this array, and increment associated counter, if any.
- #==(other) ⇒ Object
-
#[](index) ⇒ Object
Return the element at
index. -
#clear ⇒ void
Clear array.
-
#clear! ⇒ void
Clear array.
-
#delete(obj) ⇒ Object
Delete an object from this array.
-
#delete_at(index) ⇒ Object?
Delete element at
index. -
#each ⇒ Array
Calls the given block once for each element in self, passing that element as a parameter.
-
#empty? ⇒ Booelan
Return
trueif contains no element. -
#first ⇒ Object
Return first element.
-
#initialize(options = {}) ⇒ Array
constructor
A new instance of Array.
-
#initialize_copy(_other) ⇒ Object
Initialize array for copy: * duplicate internal array.
-
#last ⇒ Object
Return last element.
-
#push(obj) ⇒ Array
abstract
Add an object to this array.
-
#read(str) ⇒ self
Populate object from a string.
-
#size ⇒ Integer
(also: #length)
Get number of element in array.
-
#sz ⇒ Integer
Get size in bytes.
-
#to_a ⇒ ::Array
Return an Array.
-
#to_human ⇒ String
Get a human readable string.
-
#to_s ⇒ String
Get binary string.
Methods included from LengthFrom
#initialize_length_from, #read_with_length_from
Constructor Details
#initialize(options = {}) ⇒ Array
Returns a new instance of Array.
84 85 86 87 88 |
# File 'lib/packetgen/types/array.rb', line 84 def initialize(={}) @counter = [:counter] @array = [] initialize_length_from() end |
Class Method Details
.set_of(klass) ⇒ void
76 77 78 |
# File 'lib/packetgen/types/array.rb', line 76 def set_of(klass) @klass = klass end |
.set_of_klass ⇒ Class
Get class set with set_of.
69 70 71 |
# File 'lib/packetgen/types/array.rb', line 69 def set_of_klass @klass end |
Instance Method Details
#<<(obj) ⇒ Array
depend on private method #record_from_hash which should be declared by subclasses.
Add an object to this array, and increment associated counter, if any
151 152 153 154 155 |
# File 'lib/packetgen/types/array.rb', line 151 def <<(obj) push obj @counter.read(@counter.to_i + 1) if @counter self end |
#==(other) ⇒ Object
96 97 98 99 100 101 102 103 |
# File 'lib/packetgen/types/array.rb', line 96 def ==(other) @array == case other when Array other.to_a else other end end |
#[](index) ⇒ Object
Return the element at index.
54 |
# File 'lib/packetgen/types/array.rb', line 54 def_delegators :@array, :[], :clear, :each, :empty?, :first, :last, :size |
#clear ⇒ void
This method returns an undefined value.
Clear array.
54 |
# File 'lib/packetgen/types/array.rb', line 54 def_delegators :@array, :[], :clear, :each, :empty?, :first, :last, :size |
#clear! ⇒ void
This method returns an undefined value.
Clear array. Reset associated counter, if any.
107 108 109 110 |
# File 'lib/packetgen/types/array.rb', line 107 def clear! @array.clear @counter.read(0) if @counter end |
#delete(obj) ⇒ Object
Delete an object from this array. Update associated counter if any
115 116 117 118 119 |
# File 'lib/packetgen/types/array.rb', line 115 def delete(obj) deleted = @array.delete(obj) @counter.read(@counter.to_i - 1) if @counter && deleted deleted end |
#delete_at(index) ⇒ Object?
Delete element at index.
124 125 126 127 128 |
# File 'lib/packetgen/types/array.rb', line 124 def delete_at(index) deleted = @array.delete_at(index) @counter.read(@counter.to_i - 1) if @counter && deleted deleted end |
#each ⇒ Array
Calls the given block once for each element in self, passing that element as a parameter. Returns the array itself.
54 |
# File 'lib/packetgen/types/array.rb', line 54 def_delegators :@array, :[], :clear, :each, :empty?, :first, :last, :size |
#empty? ⇒ Booelan
Return true if contains no element.
54 |
# File 'lib/packetgen/types/array.rb', line 54 def_delegators :@array, :[], :clear, :each, :empty?, :first, :last, :size |
#first ⇒ Object
Return first element
54 |
# File 'lib/packetgen/types/array.rb', line 54 def_delegators :@array, :[], :clear, :each, :empty?, :first, :last, :size |
#initialize_copy(_other) ⇒ Object
Initialize array for copy:
-
duplicate internal array.
92 93 94 |
# File 'lib/packetgen/types/array.rb', line 92 def initialize_copy(_other) @array = @array.dup end |
#last ⇒ Object
Return last element.
54 |
# File 'lib/packetgen/types/array.rb', line 54 def_delegators :@array, :[], :clear, :each, :empty?, :first, :last, :size |
#push(obj) ⇒ Array
depend on private method #record_from_hash which should be declared by subclasses.
Add an object to this array
135 136 137 138 139 140 141 142 143 144 |
# File 'lib/packetgen/types/array.rb', line 135 def push(obj) obj = case obj when Hash record_from_hash obj else obj end @array << obj self end |
#read(str) ⇒ self
Populate object from a string
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/packetgen/types/array.rb', line 160 def read(str) clear return self if str.nil? return self if @counter && @counter.to_i.zero? str = read_with_length_from(str) klass = self.class.set_of_klass until str.empty? obj = klass.new.read(str) real_klass = real_type(obj) obj = real_klass.new.read(str) unless real_klass == klass @array << obj str.slice!(0, obj.sz) break if @counter && self.size == @counter.to_i end self end |
#size ⇒ Integer Also known as: length
Get number of element in array
54 |
# File 'lib/packetgen/types/array.rb', line 54 def_delegators :@array, :[], :clear, :each, :empty?, :first, :last, :size |
#sz ⇒ Integer
Get size in bytes
180 181 182 |
# File 'lib/packetgen/types/array.rb', line 180 def sz to_s.size end |
#to_a ⇒ ::Array
Return an Array
186 187 188 |
# File 'lib/packetgen/types/array.rb', line 186 def to_a @array end |
#to_human ⇒ String
Get a human readable string
198 199 200 |
# File 'lib/packetgen/types/array.rb', line 198 def to_human @array.map(&:to_human).join(self.class::HUMAN_SEPARATOR) end |
#to_s ⇒ String
Get binary string
192 193 194 |
# File 'lib/packetgen/types/array.rb', line 192 def to_s @array.map(&:to_s).join end |