class Exonum::ArrayT

Attributes

value_type[RW]

Public Class Methods

new(value_type) click to toggle source
# File lib/exonum/types/array.rb, line 5
def initialize value_type
  raise 'String arrays are not supported yet' if value_type.is_a?(StringT) 
  self.value_type = value_type
end

Public Instance Methods

fixed?() click to toggle source
# File lib/exonum/types/array.rb, line 14
def fixed?
  false
end
serialize(data, buffer, from=0, shift=0) click to toggle source
# File lib/exonum/types/array.rb, line 18
def serialize data, buffer, from=0, shift=0
  raise "Expecting array" unless data.is_a?(Array)
  UInt32T.serialize buffer.length, buffer, from
  UInt32T.serialize data.length, buffer, from + 4
  if value_type.is_a?(StringT)
    start = buffer.length
    (start..(data.length*8-1)).each do |i|
      buffer[i] = 0
    end
    (0..(data.length-1)).each do |i|
      index = start + i*8
      finish = buffer.length
      UInt32T.serialize finish - shift, buffer, index
      value_type.serialize data[i], buffer, finish
      UInt32T.serialize buffer.length - finish, buffer, index + 4
    end
  elsif value_type.is_a?(ArrayT)
    start = buffer.length
    (start..(data.length*8-1)).each do |i|
      buffer[i] = 0
    end
    (0..(data.length-1)).each do |i|
      index = start + i*8
      value_type.serialize data[i], buffer, shift
    end
  else
    data.each do |item|
      bufferLength = buffer.length
      value_type.serialize item, buffer, bufferLength, bufferLength + value_type.size
    end
  end
end
size() click to toggle source
# File lib/exonum/types/array.rb, line 10
def size
  8
end