jit_buffer 1.0.2 → 1.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4be349fa4c465e35b8ef2bd1af1c80d26591146805978803b77ce24487c10724
4
- data.tar.gz: 175b24a10629507a105dd34670c1eae51537ceccc2eae60c3fc907a9c16ffb33
3
+ metadata.gz: e21eec19f328c27e2b584d6c4644d405086e042126be6f295c27e38b2b228429
4
+ data.tar.gz: c5a8593f5f8f800c495af6020e59a356edab4fca5ffbe82b57baef0f7781eb09
5
5
  SHA512:
6
- metadata.gz: 23302857f3b5646d1c403cfbced18a4f7a98e8af0b93c070a9bc5a0e7c112be3a59bfbfad1952c41991213ad626becc4a36b43ca5040a751518c9d1c23d66be2
7
- data.tar.gz: 22690c0bbbc23340c6bbfce56399861834d8960337180f2cc25cfeddee2573887da491aa9e92daf985617b42c30e5e816b2ce38e7564e7bef4c0b42af4331989
6
+ metadata.gz: ad0deb2b19ea936057da4c21a2d06f3ccbf9c84204cd51e0776e9d1f93a99417a068836c0a9d595acec5084776e52d685929167021e6182bac275cc0022a5c88
7
+ data.tar.gz: 017c1de99e6be6734445a1ec1474eb3ee640533f7d72906f5838c36724b03b27d183c75037befbd676f1beed065aaf0d3a6334456c92ce58f7ff1860c2f03dcc
data/lib/jit_buffer.rb CHANGED
@@ -8,7 +8,7 @@ class Fiddle::Function
8
8
  end unless Fiddle::Function.method_defined?(:to_proc)
9
9
 
10
10
  class JITBuffer
11
- VERSION = '1.0.2'
11
+ VERSION = '1.0.4'
12
12
 
13
13
  class Exception < StandardError
14
14
  end
@@ -26,6 +26,7 @@ class JITBuffer
26
26
  PROT_WRITE = 0x02
27
27
  PROT_EXEC = 0x04
28
28
 
29
+ MAP_SHARED = 0x01
29
30
  MAP_PRIVATE = 0x02
30
31
 
31
32
  if RUBY_PLATFORM =~ /darwin/
@@ -93,7 +94,7 @@ class JITBuffer
93
94
  super(MMAP.mmap_buffer(size), size)
94
95
  end
95
96
 
96
- attr_reader :pos
97
+ attr_reader :pos, :size
97
98
 
98
99
  def initialize memory, size
99
100
  @writeable = false
@@ -103,6 +104,10 @@ class JITBuffer
103
104
  executable!
104
105
  end
105
106
 
107
+ def [] a, b
108
+ @memory[a, b]
109
+ end
110
+
106
111
  def putc byte
107
112
  raise(ReadOnlyException, "Buffer is read only!") unless @writeable
108
113
  raise(OutOfBoundsException, "Buffer full! #{pos} - #{@size}") if pos >= @size
@@ -112,7 +117,7 @@ class JITBuffer
112
117
 
113
118
  def write bytes
114
119
  raise(ReadOnlyException, "Buffer is read only!") unless @writeable
115
- raise OutOfBoundsException if pos + bytes.bytesize >= @size
120
+ raise OutOfBoundsException if pos + bytes.bytesize > @size
116
121
  @memory[pos, bytes.length] = bytes
117
122
  @pos += bytes.bytesize
118
123
  end
@@ -125,7 +130,7 @@ class JITBuffer
125
130
  end
126
131
 
127
132
  def read len
128
- raise(OutOfBoundsException, "You've gone too far!") if pos + len >= @size
133
+ raise(OutOfBoundsException, "You've gone too far!") if pos + len > @size
129
134
  x = @memory[pos, pos + len]
130
135
  @pos += len
131
136
  x
@@ -2,6 +2,49 @@ require "helper"
2
2
  require "jit_buffer"
3
3
 
4
4
  class JITBufferTest < Minitest::Test
5
+ def test_fill_buffer_with_putc
6
+ jit = JITBuffer.new 4096
7
+ str = [0xCC] * 4096
8
+ jit.writeable!
9
+ str.each { |c| jit.putc c }
10
+ assert_equal 4096, jit.pos
11
+ jit.seek 0
12
+
13
+ bytes = []
14
+ 4096.times { bytes << (jit.getc & 0xFF) }
15
+ assert_equal 4096, jit.pos
16
+ assert_equal str, bytes
17
+ end
18
+
19
+ def test_fill_buffer_read_with_getc
20
+ jit = JITBuffer.new 4096
21
+ str = ([0xCC] * 4096).pack("C*")
22
+ jit.writeable!
23
+ jit.write(str)
24
+ assert_equal 4096, jit.pos
25
+ jit.seek 0
26
+
27
+ bytes = []
28
+ 4096.times { bytes << jit.getc }
29
+ assert_equal 4096, jit.pos
30
+ assert_equal str, bytes.pack("C*")
31
+ end
32
+
33
+ def test_fill_buffer
34
+ jit = JITBuffer.new 4096
35
+ str = ([0xCC] * 4096).pack("C*")
36
+ jit.writeable!
37
+ jit.write(str)
38
+ assert_equal 4096, jit.pos
39
+ jit.seek 0
40
+ assert_equal str, jit.read(4096)
41
+ end
42
+
43
+ def test_size
44
+ jit = JITBuffer.new 4096
45
+ assert_equal 4096, jit.size
46
+ end
47
+
5
48
  def test_make_writeable
6
49
  jit = JITBuffer.new 4096
7
50
  jit.writeable!
@@ -60,7 +103,7 @@ class JITBufferTest < Minitest::Test
60
103
 
61
104
  jit.executable!
62
105
  func = Fiddle::Function.new(jit.to_i + 8, [], Fiddle::TYPE_INT)
63
- assert_equal 43, func.call
106
+ assert_equal 0x2b, func.call
64
107
  end
65
108
 
66
109
  def test_invalid_write
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jit_buffer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Patterson
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-04 00:00:00.000000000 Z
11
+ date: 2023-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -72,7 +72,7 @@ homepage: https://github.com/tenderlove/jit_buffer
72
72
  licenses:
73
73
  - Apache-2.0
74
74
  metadata: {}
75
- post_install_message:
75
+ post_install_message:
76
76
  rdoc_options: []
77
77
  require_paths:
78
78
  - lib
@@ -87,8 +87,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  requirements: []
90
- rubygems_version: 3.0.3.1
91
- signing_key:
90
+ rubygems_version: 3.5.0.dev
91
+ signing_key:
92
92
  specification_version: 4
93
93
  summary: A JIT Buffer object for Ruby.
94
94
  test_files: