Module: MemoryBuffer
- Defined in:
- lib/memory_buffer.rb,
lib/memory_buffer/version.rb
Constant Summary collapse
- PACK_MIN =
size after which performance of pack is better than the * operator
152- PACK_MAX =
size after which pack completely fails
545259518- VERSION =
"0.1.0"
Class Method Summary collapse
- .create(size) ⇒ Object
- .create_aligned(ralign, rlen) ⇒ Object
- .create_long ⇒ Object
- .create_quad ⇒ Object
- .create_short ⇒ Object
Class Method Details
.create(size) ⇒ Object
10 11 12 |
# File 'lib/memory_buffer.rb', line 10 def self.create(size) return size >= PACK_MIN && size <= PACK_MAX ? [""].pack("a#{size}") : "\0" * size end |
.create_aligned(ralign, rlen) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'ext/memory_buffer/memory_buffer.c', line 17 static VALUE mb_create_aligned(VALUE self, VALUE ralign, VALUE rlen) { size_t align = (size_t)NUM2INT(ralign); size_t len = (size_t)NUM2INT(rlen); char *abuf; int rc; VALUE asb; #ifdef __linux__ abuf = memalign(align, len); #elif __APPLE__ rc = posix_memalign((void **)&abuf, align, len); if (0 != rc) { abuf = NULL; } #endif if (NULL == abuf) { rb_raise(rb_eNoMemError, "Could not allocate %d bytes of aligned memory\n", (int)len); } asb = rb_str_new(NULL, 0); RBASIC(asb)->flags |= RSTRING_NOEMBED; RSTRING(asb)->as.heap.ptr = abuf; RSTRING(asb)->as.heap.aux.capa = len; return(asb); } |
.create_long ⇒ Object
18 19 20 |
# File 'lib/memory_buffer.rb', line 18 def self.create_long "\000\000\000\000" end |
.create_quad ⇒ Object
14 15 16 |
# File 'lib/memory_buffer.rb', line 14 def self.create_quad "\000\000\000\000\000\000\000\000" end |
.create_short ⇒ Object
22 23 24 |
# File 'lib/memory_buffer.rb', line 22 def self.create_short "\000\000" end |