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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/mmap_ffi.rb +38 -0
  3. data/lib/version.rb +3 -0
  4. 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
@@ -0,0 +1,3 @@
1
+ class MMap
2
+ Version = '0.0.1'
3
+ end
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: []