mmap_ffi 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/mmap_ffi.rb +38 -0
- data/lib/version.rb +3 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5d4aab72f93f3f92164386674266783dd7d5bcc5
|
4
|
+
data.tar.gz: 990e7c8ac30c71bee1aeafcfeb448bfcd7f23b97
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: '06978f2e02a25d34cb7250f72cfaf703fd97bf045588e9c828ec74a64a555892944f02b8f12040267572ee8bbaf87d62538aa4a44ba40c78232fecb51d6f4dae'
|
7
|
+
data.tar.gz: 8f538b5ba69a3be93236149a0e9f99398627f1ad328f62a125b3e79be28fde3f5fca66d6b1b6e5169aebbadf7435561b3a5de7978b598cb88d6a107403d598d1
|
data/lib/mmap_ffi.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
|
3
|
+
class MMap
|
4
|
+
|
5
|
+
PROT_READ = 0x01
|
6
|
+
PROT_WRITE = 0x02
|
7
|
+
PROT_EXEC = 0x04
|
8
|
+
|
9
|
+
MAP_SHARED = 0x01
|
10
|
+
MAP_PRIVATE = 0x02
|
11
|
+
|
12
|
+
attr_accessor :size
|
13
|
+
|
14
|
+
module FFIMMap
|
15
|
+
extend FFI::Library
|
16
|
+
ffi_lib 'c'
|
17
|
+
attach_function :mmap, [ :pointer, :size_t, :int, :int, :int, :int ], :pointer
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize(file, size = nil, prot = PROT_READ | PROT_WRITE, map = MAP_SHARED)
|
21
|
+
@size = file.size
|
22
|
+
@ptr = FFIMMap.mmap( FFI::Pointer.new(:void,0), @size, prot, map , file.fileno, 0 )
|
23
|
+
end
|
24
|
+
|
25
|
+
def [](range)
|
26
|
+
raise "expected to index mmap reads with ranges, got #{range.class}" unless range.is_a? Range
|
27
|
+
range = range.min..[range.max, @size-1].min
|
28
|
+
return nil unless range.min # nil if min > max
|
29
|
+
(@ptr+range.min).read_bytes(range.size)
|
30
|
+
end
|
31
|
+
|
32
|
+
def []=(key, value)
|
33
|
+
raise "expected to index mmap writes with ints, got #{key.class}" unless key.is_a? Integer
|
34
|
+
return nil if(key >= @size)
|
35
|
+
endoffset = [value.size, @size-1-key].min
|
36
|
+
(@ptr+key).write_bytes( value[0..endoffset] )
|
37
|
+
end
|
38
|
+
end
|
data/lib/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mmap_ffi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Cornelius Aschermann
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-12 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A simple ffi wrappe to use mmap for IPC
|
14
|
+
email: coco@hexgolems.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/mmap_ffi.rb
|
20
|
+
- lib/version.rb
|
21
|
+
homepage: https://github.com/eqv/mmap_ffi
|
22
|
+
licenses:
|
23
|
+
- MIT
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 2.2.2
|
42
|
+
signing_key:
|
43
|
+
specification_version: 4
|
44
|
+
summary: FFI wrapper to mmap
|
45
|
+
test_files: []
|