Class: Expanse::Map

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/expanse.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMap

Returns a new instance of Map.



204
205
206
207
# File 'lib/expanse.rb', line 204

def initialize
  @ptr = Native.expanse_map_new
  ObjectSpace.define_finalizer(self, self.class.finalize(@ptr))
end

Class Method Details

.finalize(ptr) ⇒ Object



209
210
211
# File 'lib/expanse.rb', line 209

def self.finalize(ptr)
  proc { Native.expanse_map_free(ptr) if ptr && !ptr.null? }
end

Instance Method Details

#[](key) ⇒ Object Also known as: get



219
220
221
222
223
224
# File 'lib/expanse.rb', line 219

def [](key)
  buf = Fiddle::Pointer.malloc(8)
  if Native.expanse_map_get(@ptr, key, buf) != 0
    buf.to_str(8).unpack1("Q<")
  end
end

#[]=(key, val) ⇒ Object Also known as: set



213
214
215
216
# File 'lib/expanse.rb', line 213

def []=(key, val)
  Native.expanse_map_insert(@ptr, key, val, nil)
  val
end

#clearObject



244
245
246
247
# File 'lib/expanse.rb', line 244

def clear
  Native.expanse_map_clear(@ptr)
  self
end

#delete(key) ⇒ Object



227
228
229
230
231
232
# File 'lib/expanse.rb', line 227

def delete(key)
  buf = Fiddle::Pointer.malloc(8)
  if Native.expanse_map_remove(@ptr, key, buf) != 0
    buf.to_str(8).unpack1("Q<")
  end
end

#eachObject



265
266
267
268
269
270
271
272
# File 'lib/expanse.rb', line 265

def each
  return enum_for(:each) unless block_given?
  pair = first
  while pair
    yield pair[0], pair[1]
    pair = self.next(pair[0])
  end
end

#firstObject



249
250
251
252
253
254
255
# File 'lib/expanse.rb', line 249

def first
  k_buf = Fiddle::Pointer.malloc(8)
  v_buf = Fiddle::Pointer.malloc(8)
  if Native.expanse_map_first(@ptr, k_buf, v_buf) != 0
    [k_buf.to_str(8).unpack1("Q<"), v_buf.to_str(8).unpack1("Q<")]
  end
end

#key?(key) ⇒ Boolean Also known as: include?

Returns:

  • (Boolean)


234
235
236
# File 'lib/expanse.rb', line 234

def key?(key)
  !self[key].nil?
end

#next(key) ⇒ Object



257
258
259
260
261
262
263
# File 'lib/expanse.rb', line 257

def next(key)
  k_buf = Fiddle::Pointer.malloc(8)
  v_buf = Fiddle::Pointer.malloc(8)
  if Native.expanse_map_next_after(@ptr, key, k_buf, v_buf) != 0
    [k_buf.to_str(8).unpack1("Q<"), v_buf.to_str(8).unpack1("Q<")]
  end
end

#sizeObject Also known as: length



239
240
241
# File 'lib/expanse.rb', line 239

def size
  Native.expanse_map_len(@ptr)
end