jruby-mmap 0.2.0-java
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/LICENSE +13 -0
- data/README.md +67 -0
- data/jruby-mmap.gemspec +28 -0
- data/lib/jruby-mmap.rb +3 -0
- data/lib/jruby-mmap/jruby-mmap-0.2.0.jar +0 -0
- data/lib/jruby-mmap/jruby-mmap.rb +17 -0
- data/lib/jruby-mmap/version.rb +4 -0
- data/spec/jruby-mmap/mmap_spec.rb +147 -0
- data/spec/spec_helper.rb +5 -0
- metadata +81 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7c7bf167de5d4de80bf87ca85cc506dfeb8ef238
|
4
|
+
data.tar.gz: 0eb9ebd6fdfd47ca7c6cc6fb4e441a3088ddaa20
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 65e536cadfa5713e0e57bbeb2c43a329c53d0845567eee2834020e78a5b6689a334d25629116e5c831e83ea563291e25be7bfff5afa0d3332f06f5416c798111
|
7
|
+
data.tar.gz: 1f72791aba1c476c6f68190430d0e7231e16eaa197e7686f26570ab1dc1d6663db43c0759ead059b27a66b935e06e70e8898b7c4f5f9b7fb37bb34abae7205b7
|
data/LICENSE
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Copyright (c) 2015–2016 Colin Surprenant colin.surprenant@gmail.com
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
data/README.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# JRuby Mmap
|
2
|
+
|
3
|
+
This gem only supports [JRuby](http://jruby.org/).
|
4
|
+
|
5
|
+
JRuby Mmap is a Java JRuby extension wrapper over the Java NIO memory mapping.
|
6
|
+
|
7
|
+
See also
|
8
|
+
- [JRuby Mmap Queues](https://github.com/colinsurprenant/jruby-mmap-queues)
|
9
|
+
- [JRuby Mmap Benchmarks](https://github.com/colinsurprenant/jruby-mmap-benchmark)
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
This gem only supports [JRuby](http://jruby.org/).
|
14
|
+
|
15
|
+
Add this line to your application's Gemfile:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
gem 'jruby-mmap'
|
19
|
+
```
|
20
|
+
|
21
|
+
And then execute:
|
22
|
+
|
23
|
+
$ bundle
|
24
|
+
|
25
|
+
Or install it yourself as:
|
26
|
+
|
27
|
+
$ gem install jruby-mmap
|
28
|
+
|
29
|
+
## Building
|
30
|
+
|
31
|
+
Building uses Gradle. The build process compiles the Java classes, produces a jar file and copies the jar file in the project `lib/jruby-mmap` dir.
|
32
|
+
|
33
|
+
```sh
|
34
|
+
$ ./gradlew build
|
35
|
+
```
|
36
|
+
|
37
|
+
## Usage
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
require "jruby-mmap"
|
41
|
+
|
42
|
+
BYTE_SIZE = 2048
|
43
|
+
FILE_PATH = "mmap-file-path"
|
44
|
+
|
45
|
+
mmap = Mmap::ByteBuffer.new(FILE_PATH, BYTE_SIZE)
|
46
|
+
mmap.put_bytes("foobar")
|
47
|
+
mmap.close
|
48
|
+
```
|
49
|
+
|
50
|
+
## Tests
|
51
|
+
|
52
|
+
```sh
|
53
|
+
$ bundle install
|
54
|
+
$ bundle exec rspec
|
55
|
+
```
|
56
|
+
|
57
|
+
## Author
|
58
|
+
|
59
|
+
**Colin Surprenant** on [GitHub](https://github.com/colinsurprenant) and [Twitter](https://twitter.com/colinsurprenant).
|
60
|
+
|
61
|
+
## Contributing
|
62
|
+
|
63
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/colinsurprenant/jruby-mmap.
|
64
|
+
|
65
|
+
## License and Copyright
|
66
|
+
|
67
|
+
*JRuby Mmap* is released under the Apache License, Version 2.0. See [LICENSE](https://github.com/colinsurprenant/jruby-mmap/blob/master/LICENSE).
|
data/jruby-mmap.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'jruby-mmap/version'
|
6
|
+
|
7
|
+
raise("JRuby required") unless defined?(JRUBY_VERSION)
|
8
|
+
|
9
|
+
Gem::Specification.new do |s|
|
10
|
+
s.name = "jruby-mmap"
|
11
|
+
s.version = Mmap::VERSION
|
12
|
+
|
13
|
+
s.authors = ["Colin Surprenant"]
|
14
|
+
s.email = ["colin.surprenant@gmail.com"]
|
15
|
+
|
16
|
+
s.summary = "JRuby extension to Java NIO Mmap"
|
17
|
+
s.description = s.summary
|
18
|
+
s.homepage = "http://github.com/colinsurprenant/jruby-mmap"
|
19
|
+
s.licenses = ["Apache-2.0"]
|
20
|
+
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
s.files += Dir.glob(["jruby-mmap.gemspec", "lib/**/*.jar", "lib/**/*.rb", "spec/**/*.rb", "README.md", "LICENSE"])
|
23
|
+
|
24
|
+
s.platform = "java"
|
25
|
+
|
26
|
+
s.add_development_dependency "rspec", "~> 3"
|
27
|
+
s.add_development_dependency "rake", "~> 10"
|
28
|
+
end
|
data/lib/jruby-mmap.rb
ADDED
Binary file
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "java"
|
4
|
+
require "jruby-mmap/version"
|
5
|
+
|
6
|
+
# local dev setup
|
7
|
+
classes_dir = File.expand_path("../../../build/classes/main", __FILE__)
|
8
|
+
|
9
|
+
if File.directory?(classes_dir)
|
10
|
+
# if in local dev setup, add target to classpath
|
11
|
+
$CLASSPATH << classes_dir unless $CLASSPATH.include?(classes_dir)
|
12
|
+
else
|
13
|
+
# otherwise use included jar
|
14
|
+
require "jruby-mmap/jruby-mmap-#{Mmap::VERSION}.jar"
|
15
|
+
end
|
16
|
+
|
17
|
+
require "mmap"
|
@@ -0,0 +1,147 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
# require "tempfile"
|
3
|
+
|
4
|
+
describe Mmap do
|
5
|
+
INT_BYTES = 4
|
6
|
+
LONG_BYTES = 8
|
7
|
+
|
8
|
+
before(:all) do
|
9
|
+
@path = "spec_mmap_file.dat"
|
10
|
+
@size = 2048
|
11
|
+
File.delete(@path) if File.exist?(@path)
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:each) do
|
15
|
+
File.delete(@path) if File.exist?(@path)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should create a file with specified size" do
|
19
|
+
mmap = Mmap::ByteBuffer.new(@path, 2048)
|
20
|
+
expect(File.size(@path)).to eq(mmap.size)
|
21
|
+
mmap.close
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should be at position 0 upon initialize" do
|
25
|
+
mmap = Mmap::ByteBuffer.new(@path, @size)
|
26
|
+
expect(mmap.position).to eq(0)
|
27
|
+
mmap.close
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should relative put/get integer" do
|
31
|
+
mmap = Mmap::ByteBuffer.new(@path, 2048)
|
32
|
+
mmap.put_int(1967)
|
33
|
+
expect(mmap.position).to eq(INT_BYTES)
|
34
|
+
mmap.position = 0
|
35
|
+
expect(mmap.get_int).to eq(1967)
|
36
|
+
mmap.close
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should absolute put/get integer" do
|
40
|
+
mmap = Mmap::ByteBuffer.new(@path, 2048)
|
41
|
+
mmap.put_int(1, 1 * INT_BYTES)
|
42
|
+
expect(mmap.position).to eq(0)
|
43
|
+
mmap.put_int(Java::java.lang.Integer::MAX_VALUE, 3 * INT_BYTES)
|
44
|
+
expect(mmap.position).to eq(0)
|
45
|
+
mmap.put_int(2, 2 * INT_BYTES)
|
46
|
+
expect(mmap.position).to eq(0)
|
47
|
+
mmap.put_int(0, 0 * INT_BYTES)
|
48
|
+
expect(mmap.position).to eq(0)
|
49
|
+
|
50
|
+
expect(mmap.get_int(3 * INT_BYTES)).to eq(Java::java.lang.Integer::MAX_VALUE)
|
51
|
+
expect(mmap.position).to eq(0)
|
52
|
+
expect(mmap.get_int(0 * INT_BYTES)).to eq(0)
|
53
|
+
expect(mmap.position).to eq(0)
|
54
|
+
expect(mmap.get_int(2 * INT_BYTES)).to eq(2)
|
55
|
+
expect(mmap.position).to eq(0)
|
56
|
+
expect(mmap.get_int(1 * INT_BYTES)).to eq(1)
|
57
|
+
expect(mmap.position).to eq(0)
|
58
|
+
|
59
|
+
expect{mmap.put_int(Java::java.lang.Integer::MAX_VALUE + 1, 0)}.to raise_error(RangeError)
|
60
|
+
|
61
|
+
mmap.close
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should relative put/get long" do
|
65
|
+
mmap = Mmap::ByteBuffer.new(@path, 2048)
|
66
|
+
mmap.put_long(1967)
|
67
|
+
expect(mmap.position).to eq(LONG_BYTES)
|
68
|
+
mmap.position = 0
|
69
|
+
expect(mmap.get_long).to eq(1967)
|
70
|
+
mmap.close
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should absolute put/get long" do
|
74
|
+
mmap = Mmap::ByteBuffer.new(@path, 2048)
|
75
|
+
mmap.put_long(1, 1 * LONG_BYTES)
|
76
|
+
expect(mmap.position).to eq(0)
|
77
|
+
mmap.put_long(Java::java.lang.Long::MAX_VALUE, 3 * LONG_BYTES)
|
78
|
+
expect(mmap.position).to eq(0)
|
79
|
+
mmap.put_long(2, 2 * LONG_BYTES)
|
80
|
+
expect(mmap.position).to eq(0)
|
81
|
+
mmap.put_long(0, 0 * LONG_BYTES)
|
82
|
+
expect(mmap.position).to eq(0)
|
83
|
+
|
84
|
+
expect(mmap.get_long(3 * LONG_BYTES)).to eq(Java::java.lang.Long::MAX_VALUE)
|
85
|
+
expect(mmap.position).to eq(0)
|
86
|
+
expect(mmap.get_long(0 * LONG_BYTES)).to eq(0)
|
87
|
+
expect(mmap.position).to eq(0)
|
88
|
+
expect(mmap.get_long(2 * LONG_BYTES)).to eq(2)
|
89
|
+
expect(mmap.position).to eq(0)
|
90
|
+
expect(mmap.get_long(1 * LONG_BYTES)).to eq(1)
|
91
|
+
expect(mmap.position).to eq(0)
|
92
|
+
|
93
|
+
expect{mmap.put_long(Java::java.lang.Long::MAX_VALUE + 1, 0)}.to raise_error(RangeError)
|
94
|
+
|
95
|
+
mmap.close
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should relative put/get bytes" do
|
99
|
+
mmap = Mmap::ByteBuffer.new(@path, 2048)
|
100
|
+
s = "hello world"
|
101
|
+
expect(s.size).to eq(11)
|
102
|
+
expect(s.bytesize).to eq(11)
|
103
|
+
mmap.put_bytes(s)
|
104
|
+
expect(mmap.position).to eq(11)
|
105
|
+
|
106
|
+
s = "foobar"
|
107
|
+
expect(s.size).to eq(6)
|
108
|
+
expect(s.bytesize).to eq(6)
|
109
|
+
mmap.put_bytes(s)
|
110
|
+
expect(mmap.position).to eq(17)
|
111
|
+
|
112
|
+
mmap.position = 0
|
113
|
+
expect(mmap.get_bytes(11)).to eq("hello world")
|
114
|
+
expect(mmap.get_bytes(6)).to eq("foobar")
|
115
|
+
mmap.close
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should relative put/get bytes copy" do
|
119
|
+
mmap = Mmap::ByteBuffer.new(@path, 2048)
|
120
|
+
s = "hello world"
|
121
|
+
expect(s.size).to eq(11)
|
122
|
+
expect(s.bytesize).to eq(11)
|
123
|
+
mmap.put_bytes_copy(s)
|
124
|
+
expect(mmap.position).to eq(11)
|
125
|
+
|
126
|
+
s = "foobar"
|
127
|
+
expect(s.size).to eq(6)
|
128
|
+
expect(s.bytesize).to eq(6)
|
129
|
+
mmap.put_bytes_copy(s)
|
130
|
+
expect(mmap.position).to eq(17)
|
131
|
+
|
132
|
+
mmap.position = 0
|
133
|
+
expect(mmap.get_bytes(11)).to eq("hello world")
|
134
|
+
expect(mmap.get_bytes(6)).to eq("foobar")
|
135
|
+
mmap.close
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should mmap when opening existing file" do
|
139
|
+
mmap = Mmap::ByteBuffer.new(@path, 2048)
|
140
|
+
mmap.put_bytes("hello foo bar baz")
|
141
|
+
expect(mmap.position).to eq(17)
|
142
|
+
mmap.close
|
143
|
+
mmap = Mmap::ByteBuffer.new(@path, 2048)
|
144
|
+
expect(mmap.get_bytes(17)).to eq("hello foo bar baz")
|
145
|
+
mmap.close
|
146
|
+
end
|
147
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jruby-mmap
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: java
|
6
|
+
authors:
|
7
|
+
- Colin Surprenant
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '3'
|
19
|
+
name: rspec
|
20
|
+
prerelease: false
|
21
|
+
type: :development
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '10'
|
33
|
+
name: rake
|
34
|
+
prerelease: false
|
35
|
+
type: :development
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10'
|
41
|
+
description: JRuby extension to Java NIO Mmap
|
42
|
+
email:
|
43
|
+
- colin.surprenant@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- LICENSE
|
49
|
+
- README.md
|
50
|
+
- jruby-mmap.gemspec
|
51
|
+
- lib/jruby-mmap.rb
|
52
|
+
- lib/jruby-mmap/jruby-mmap-0.2.0.jar
|
53
|
+
- lib/jruby-mmap/jruby-mmap.rb
|
54
|
+
- lib/jruby-mmap/version.rb
|
55
|
+
- spec/jruby-mmap/mmap_spec.rb
|
56
|
+
- spec/spec_helper.rb
|
57
|
+
homepage: http://github.com/colinsurprenant/jruby-mmap
|
58
|
+
licenses:
|
59
|
+
- Apache-2.0
|
60
|
+
metadata: {}
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options: []
|
63
|
+
require_paths:
|
64
|
+
- lib
|
65
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
requirements: []
|
76
|
+
rubyforge_project:
|
77
|
+
rubygems_version: 2.4.8
|
78
|
+
signing_key:
|
79
|
+
specification_version: 4
|
80
|
+
summary: JRuby extension to Java NIO Mmap
|
81
|
+
test_files: []
|