Class: Sparkey::LogIterator

Inherits:
Object
  • Object
show all
Includes:
Errors
Defined in:
lib/sparkey/log_iterator.rb

Direct Known Subclasses

HashIterator

Instance Method Summary collapse

Methods included from Errors

#handle_status

Constructor Details

#initialize(log_reader) ⇒ LogIterator

Returns a new instance of LogIterator.



4
5
6
7
8
9
10
11
12
# File 'lib/sparkey/log_iterator.rb', line 4

def initialize(log_reader)
  @log_reader = log_reader

  ptr = FFI::MemoryPointer.new(:pointer)

  handle_status Sparkey::Native.logiter_create(ptr, @log_reader.ptr)

  @log_iter_ptr = ptr.read_pointer
end

Instance Method Details

#<=>(iterator) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/sparkey/log_iterator.rb', line 34

def <=>(iterator)
  ptr = FFI::MemoryPointer.new(:int)

  handle_status Sparkey::Native.logiter_keycmp(@log_iter_ptr, iterator.ptr, @log_reader.ptr, ptr)

  ptr.read_int
end

#active?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/sparkey/log_iterator.rb', line 46

def active?
  state == :iter_active
end

#closeObject



124
125
126
127
128
# File 'lib/sparkey/log_iterator.rb', line 124

def close
  ptr = FFI::MemoryPointer.new(:pointer).write_pointer(@log_iter_ptr)

  Sparkey::Native.logiter_close(ptr)
end

#closed?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/sparkey/log_iterator.rb', line 54

def closed?
  state == :iter_closed
end

#entry_delete?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/sparkey/log_iterator.rb', line 62

def entry_delete?
  type == :entry_delete
end

#entry_put?Boolean

Returns:

  • (Boolean)


58
59
60
# File 'lib/sparkey/log_iterator.rb', line 58

def entry_put?
  type == :entry_put
end

#get_keyObject



74
75
76
77
78
79
80
81
82
# File 'lib/sparkey/log_iterator.rb', line 74

def get_key
  max_key_length = @log_reader.max_key_length
  buffer_ptr = FFI::MemoryPointer.new(:uint8, max_key_length)
  buffer_length_ptr = FFI::MemoryPointer.new(:uint64)

  handle_status Sparkey::Native.logiter_fill_key(@log_iter_ptr, @log_reader.ptr, max_key_length, buffer_ptr, buffer_length_ptr)

  buffer_ptr.read_bytes(buffer_length_ptr.read_uint64)
end

#get_key_chunk(chunk_size = 1024) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/sparkey/log_iterator.rb', line 84

def get_key_chunk(chunk_size = 1024)
  buffer = FFI::Buffer.alloc_out(:uint8, chunk_size)
  buffer_length_ptr = FFI::MemoryPointer.new(:uint64)

  loop do
    handle_status Sparkey::Native.logiter_keychunk(@log_iter_ptr, @log_reader.ptr, chunk_size, buffer, buffer_length_ptr)

    buffer_length = buffer_length_ptr.read_uint64

    break if buffer_length.zero?

    yield buffer.read_pointer.read_bytes(buffer_length)
  end
end

#get_valueObject



99
100
101
102
103
104
105
106
107
# File 'lib/sparkey/log_iterator.rb', line 99

def get_value
  max_value_length = @log_reader.max_value_length
  buffer_ptr = FFI::MemoryPointer.new(:uint8, max_value_length)
  buffer_length_ptr = FFI::MemoryPointer.new(:uint64)

  handle_status Sparkey::Native.logiter_fill_value(@log_iter_ptr, @log_reader.ptr, max_value_length, buffer_ptr, buffer_length_ptr)

  buffer_ptr.read_bytes(buffer_length_ptr.read_uint64)
end

#get_value_chunk(chunk_size = 1024) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/sparkey/log_iterator.rb', line 109

def get_value_chunk(chunk_size = 1024)
  buffer = FFI::Buffer.alloc_out(:uint8, chunk_size)
  buffer_length_ptr = FFI::MemoryPointer.new(:uint64)

  loop do
    handle_status Sparkey::Native.logiter_valuechunk(@log_iter_ptr, @log_reader.ptr, chunk_size, buffer, buffer_length_ptr)

    buffer_length = buffer_length_ptr.read_uint64

    break if buffer_length.zero?

    yield buffer.read_pointer.read_bytes(buffer_length)
  end
end

#invalid?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/sparkey/log_iterator.rb', line 50

def invalid?
  state == :iter_invalid
end

#key_lengthObject



66
67
68
# File 'lib/sparkey/log_iterator.rb', line 66

def key_length
  Sparkey::Native.logiter_keylen(@log_iter_ptr)
end

#new?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/sparkey/log_iterator.rb', line 42

def new?
  state == :iter_new
end

#nextObject



14
15
16
# File 'lib/sparkey/log_iterator.rb', line 14

def next
  handle_status Sparkey::Native.logiter_next(@log_iter_ptr, @log_reader.ptr)
end

#ptrObject



130
131
132
# File 'lib/sparkey/log_iterator.rb', line 130

def ptr
  @log_iter_ptr
end

#resetObject



22
23
24
# File 'lib/sparkey/log_iterator.rb', line 22

def reset
  handle_status Sparkey::Native.logiter_reset(@log_iter_ptr, @log_reader.ptr)
end

#skip(count) ⇒ Object



18
19
20
# File 'lib/sparkey/log_iterator.rb', line 18

def skip(count)
  handle_status Sparkey::Native.logiter_skip(@log_iter_ptr, @log_reader.ptr, count)
end

#stateObject



26
27
28
# File 'lib/sparkey/log_iterator.rb', line 26

def state
  Sparkey::Native.logiter_state(@log_iter_ptr)
end

#typeObject



30
31
32
# File 'lib/sparkey/log_iterator.rb', line 30

def type
  Sparkey::Native.logiter_type(@log_iter_ptr)
end

#value_lengthObject



70
71
72
# File 'lib/sparkey/log_iterator.rb', line 70

def value_length
  Sparkey::Native.logiter_valuelen(@log_iter_ptr)
end