class Ignite::Request
Constants
- MAX_LONG
- MIN_LONG
Public Class Methods
new(op_code)
click to toggle source
# File lib/ignite/request.rb, line 6 def initialize(op_code) @format = String.new @values = [] int 0 # length placeholder if op_code != OP_HANDSHAKE short op_code long rand(MIN_LONG..MAX_LONG) # request id end end
Public Instance Methods
array(type_code, value, pack)
click to toggle source
# File lib/ignite/request.rb, line 112 def array(type_code, value, pack) byte type_code int value.size @format << "#{pack}#{value.size}" @values.concat(value) end
array_object(value)
click to toggle source
# File lib/ignite/request.rb, line 99 def array_object(value) # empty arrays take first path for now if value.all? { |v| v.is_a?(Integer) } array(TYPE_LONG_ARRAY, value, PACK_LONG) elsif value.all? { |v| v.is_a?(Float) } array(TYPE_DOUBLE_ARRAY, value, PACK_DOUBLE) elsif value.all? { |v| v == true || v == false } array(TYPE_BOOL_ARRAY, value.map { |v| v ? 1 : 0 }, PACK_CHAR) else raise Error, "Unable to cache array of #{value.map { |v| v.class.name }.uniq.join(", ")}" end end
bool(value)
click to toggle source
# File lib/ignite/request.rb, line 28 def bool(value) byte(value ? 1 : 0) end
byte(value)
click to toggle source
# File lib/ignite/request.rb, line 32 def byte(value) @format << PACK_BYTE @values << value end
data_object(value)
click to toggle source
# File lib/ignite/request.rb, line 69 def data_object(value) case value when Integer byte TYPE_LONG long value when Float byte TYPE_DOUBLE double value when TrueClass, FalseClass byte TYPE_BOOL bool value when String string value when Date byte TYPE_DATE time = value.to_time long(time.to_i * 1000 + (time.nsec / 1000000)) when Array array_object(value) when Time byte TYPE_TIMESTAMP long(value.to_i * 1000 + (value.nsec / 1000000)) int value.nsec % 1000000 when NilClass byte TYPE_NULL else raise Error, "Unable to cache #{value.class.name}" end end
double(value)
click to toggle source
# File lib/ignite/request.rb, line 57 def double(value) @format << PACK_DOUBLE @values << value end
float(value)
click to toggle source
# File lib/ignite/request.rb, line 52 def float(value) @format << PACK_FLOAT @values << value end
int(value)
click to toggle source
# File lib/ignite/request.rb, line 42 def int(value) @format << PACK_INT @values << value end
long(value)
click to toggle source
# File lib/ignite/request.rb, line 47 def long(value) @format << PACK_LONG @values << value end
short(value)
click to toggle source
# File lib/ignite/request.rb, line 37 def short(value) @format << PACK_SHORT @values << value end
string(value)
click to toggle source
# File lib/ignite/request.rb, line 62 def string(value) byte TYPE_STRING int value.bytesize @format << "a#{value.bytesize}" @values << value end
to_bytes()
click to toggle source
reduce allocations by packing together but need to make sure values aren't modified between when they are added and packed
# File lib/ignite/request.rb, line 21 def to_bytes buffer = @values.pack(@format) # update length buffer[0..3] = [buffer.bytesize - 4].pack(PACK_INT) buffer end