Class: ProcessShared::SharedMemoryIO
- Inherits:
-
Object
- Object
- ProcessShared::SharedMemoryIO
- Defined in:
- lib/process_shared/shared_memory_io.rb
Overview
Does some bounds checking for EOF, but assumes underlying memory object (FFI::Pointer) will do bounds checking, in particular the #_putbytes method relies on this.
Note: an unbounded FFI::Pointer may be converted into a bounded pointer using ptr.slice(0, size).
Instance Attribute Summary collapse
-
#mem ⇒ Object
readonly
Returns the value of attribute mem.
-
#pos ⇒ Object
(also: #tell)
Returns the value of attribute pos.
Instance Method Summary collapse
- #<<(*args) ⇒ Object
- #advise(*args) ⇒ Object
- #autoclose=(*args) ⇒ Object
- #autoclose? ⇒ Boolean
- #binmode ⇒ Object
- #binmode? ⇒ Boolean
- #bytes ⇒ Object (also: #each_byte)
- #chars ⇒ Object (also: #each_char)
- #close ⇒ Object
- #close_on_exec=(bool) ⇒ Object
- #close_on_exec? ⇒ Boolean
- #close_read ⇒ Object
- #close_write ⇒ Object
- #closed? ⇒ Boolean
- #codepoints ⇒ Object (also: #each_codepoint)
- #each ⇒ Object (also: #each_line, #lines)
- #eof? ⇒ Boolean (also: #eof)
- #external_encoding ⇒ Object
- #fcntl ⇒ Object
- #fdatasync ⇒ Object
- #fileno ⇒ Object (also: #to_i)
- #flush ⇒ Object
- #fsync ⇒ Object
- #getbyte ⇒ Object
-
#getc19 ⇒ Object
(also: #getc)
#getc in Ruby 1.9 returns String or nil.
- #gets ⇒ Object
-
#initialize(mem) ⇒ SharedMemoryIO
constructor
A new instance of SharedMemoryIO.
- #internal_encoding ⇒ Object
- #ioctl ⇒ Object
- #lineno ⇒ Object
- #lineno= ⇒ Object
- #pid ⇒ Object
- #print(*args) ⇒ Object
- #printf(*args) ⇒ Object
- #putc(arg) ⇒ Object
- #puts(*args) ⇒ Object
-
#read(length = nil, buffer = nil) ⇒ Object
FIXME: this doesn’t match IO#read exactly (corner cases about EOF and whether length was nil or not), but it’s enough for Marshal::load.
- #read_nonblock(*args) ⇒ Object
- #readbyte ⇒ Object
- #readchar ⇒ Object
- #readline ⇒ Object
- #readlines ⇒ Object
- #readpartial ⇒ Object
- #reopen ⇒ Object
- #rewind ⇒ Object
- #seek(amount, whence = IO::SEEK_SET) ⇒ Object
- #set_encoding ⇒ Object
- #stat ⇒ Object
- #sync ⇒ Object
- #sync= ⇒ Object
- #sysread(*args) ⇒ Object
- #sysseek(*args) ⇒ Object
- #syswrite(*args) ⇒ Object
- #to_io ⇒ Object
- #tty? ⇒ Boolean (also: #isatty)
- #ungetbyte ⇒ Object
- #ungetc ⇒ Object
- #write(str) ⇒ Object
- #write_nonblock(str) ⇒ Object
Constructor Details
#initialize(mem) ⇒ SharedMemoryIO
Returns a new instance of SharedMemoryIO.
13 14 15 16 17 |
# File 'lib/process_shared/shared_memory_io.rb', line 13 def initialize(mem) @mem = mem @pos = 0 @closed = false # TODO: actually pay attention to this end |
Instance Attribute Details
#mem ⇒ Object (readonly)
Returns the value of attribute mem.
11 12 13 |
# File 'lib/process_shared/shared_memory_io.rb', line 11 def mem @mem end |
#pos ⇒ Object Also known as: tell
Returns the value of attribute pos.
10 11 12 |
# File 'lib/process_shared/shared_memory_io.rb', line 10 def pos @pos end |
Instance Method Details
#<<(*args) ⇒ Object
19 20 21 |
# File 'lib/process_shared/shared_memory_io.rb', line 19 def <<(*args) raise NotImplementedError end |
#advise(*args) ⇒ Object
23 24 25 |
# File 'lib/process_shared/shared_memory_io.rb', line 23 def advise(*args) # no-op end |
#autoclose=(*args) ⇒ Object
27 28 29 |
# File 'lib/process_shared/shared_memory_io.rb', line 27 def autoclose=(*args) raise NotImplementedError end |
#autoclose? ⇒ Boolean
31 32 33 |
# File 'lib/process_shared/shared_memory_io.rb', line 31 def autoclose? raise NotImplementedError end |
#binmode ⇒ Object
35 36 37 |
# File 'lib/process_shared/shared_memory_io.rb', line 35 def binmode # no-op; always in binmode end |
#binmode? ⇒ Boolean
39 40 41 |
# File 'lib/process_shared/shared_memory_io.rb', line 39 def binmode? true end |
#bytes ⇒ Object Also known as: each_byte
43 44 45 46 47 48 49 50 51 |
# File 'lib/process_shared/shared_memory_io.rb', line 43 def bytes if block_given? until eof? yield _getbyte end else raise NotImplementedError end end |
#chars ⇒ Object Also known as: each_char
54 55 56 |
# File 'lib/process_shared/shared_memory_io.rb', line 54 def chars raise NotImplementedError end |
#close ⇒ Object
59 60 61 |
# File 'lib/process_shared/shared_memory_io.rb', line 59 def close @closed = true end |
#close_on_exec=(bool) ⇒ Object
63 64 65 |
# File 'lib/process_shared/shared_memory_io.rb', line 63 def close_on_exec=(bool) raise NotImplementedError end |
#close_on_exec? ⇒ Boolean
67 68 69 |
# File 'lib/process_shared/shared_memory_io.rb', line 67 def close_on_exec? raise NotImplementedError end |
#close_read ⇒ Object
71 72 73 |
# File 'lib/process_shared/shared_memory_io.rb', line 71 def close_read raise NotImplementedError end |
#close_write ⇒ Object
75 76 77 |
# File 'lib/process_shared/shared_memory_io.rb', line 75 def close_write raise NotImplementedError end |
#closed? ⇒ Boolean
79 80 81 |
# File 'lib/process_shared/shared_memory_io.rb', line 79 def closed? @closed end |
#codepoints ⇒ Object Also known as: each_codepoint
83 84 85 |
# File 'lib/process_shared/shared_memory_io.rb', line 83 def codepoints raise NotImplementedError end |
#each ⇒ Object Also known as: each_line, lines
88 89 90 |
# File 'lib/process_shared/shared_memory_io.rb', line 88 def each raise NotImplementedError end |
#eof? ⇒ Boolean Also known as: eof
94 95 96 |
# File 'lib/process_shared/shared_memory_io.rb', line 94 def eof? pos == mem.size end |
#external_encoding ⇒ Object
99 100 101 |
# File 'lib/process_shared/shared_memory_io.rb', line 99 def external_encoding raise NotImplementedError end |
#fcntl ⇒ Object
103 104 105 |
# File 'lib/process_shared/shared_memory_io.rb', line 103 def fcntl raise NotImplementedError end |
#fdatasync ⇒ Object
107 108 109 |
# File 'lib/process_shared/shared_memory_io.rb', line 107 def fdatasync raise NotImplementedError end |
#fileno ⇒ Object Also known as: to_i
111 112 113 |
# File 'lib/process_shared/shared_memory_io.rb', line 111 def fileno raise NotImplementedError end |
#flush ⇒ Object
116 117 118 |
# File 'lib/process_shared/shared_memory_io.rb', line 116 def flush # no-op end |
#fsync ⇒ Object
120 121 122 |
# File 'lib/process_shared/shared_memory_io.rb', line 120 def fsync raise NotImplementedError end |
#getbyte ⇒ Object
124 125 126 127 |
# File 'lib/process_shared/shared_memory_io.rb', line 124 def getbyte return nil if eof? _getbyte end |
#getc19 ⇒ Object Also known as: getc
#getc in Ruby 1.9 returns String or nil. In 1.8, it returned Fixnum of nil (identical to getbyte).
FIXME: should this be encoding/character aware?
133 134 135 136 137 |
# File 'lib/process_shared/shared_memory_io.rb', line 133 def getc19 if b = getbyte '' << b end end |
#gets ⇒ Object
145 146 147 |
# File 'lib/process_shared/shared_memory_io.rb', line 145 def gets raise NotImplementedError end |
#internal_encoding ⇒ Object
149 150 151 |
# File 'lib/process_shared/shared_memory_io.rb', line 149 def internal_encoding raise NotImplementedError end |
#ioctl ⇒ Object
153 154 155 |
# File 'lib/process_shared/shared_memory_io.rb', line 153 def ioctl raise NotImplementedError end |
#lineno ⇒ Object
162 163 164 |
# File 'lib/process_shared/shared_memory_io.rb', line 162 def lineno raise NotImplementedError end |
#lineno= ⇒ Object
166 167 168 |
# File 'lib/process_shared/shared_memory_io.rb', line 166 def lineno= raise NotImplementedError end |
#pid ⇒ Object
174 175 176 |
# File 'lib/process_shared/shared_memory_io.rb', line 174 def pid raise NotImplementedError end |
#print(*args) ⇒ Object
180 181 182 |
# File 'lib/process_shared/shared_memory_io.rb', line 180 def print(*args) raise NotImplementedError end |
#printf(*args) ⇒ Object
183 184 185 |
# File 'lib/process_shared/shared_memory_io.rb', line 183 def printf(*args) raise NotImplementedError end |
#putc(arg) ⇒ Object
187 188 189 |
# File 'lib/process_shared/shared_memory_io.rb', line 187 def putc(arg) raise NotImplementedError end |
#puts(*args) ⇒ Object
191 192 193 |
# File 'lib/process_shared/shared_memory_io.rb', line 191 def puts(*args) raise NotImplementedError end |
#read(length = nil, buffer = nil) ⇒ Object
FIXME: this doesn’t match IO#read exactly (corner cases about EOF and whether length was nil or not), but it’s enough for Marshal::load.
198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/process_shared/shared_memory_io.rb', line 198 def read(length = nil, buffer = nil) length ||= (mem.size - pos) buffer ||= '' buffer.force_encoding('ASCII-8BIT') unless RUBY_VERSION.start_with?('1.8') actual_length = [(mem.size - pos), length].min actual_length.times do buffer << _getbyte end buffer end |
#read_nonblock(*args) ⇒ Object
210 211 212 |
# File 'lib/process_shared/shared_memory_io.rb', line 210 def read_nonblock(*args) raise NotImplementedError end |
#readbyte ⇒ Object
214 215 216 217 |
# File 'lib/process_shared/shared_memory_io.rb', line 214 def readbyte raise EOFError if eof? _getbyte end |
#readchar ⇒ Object
219 220 221 |
# File 'lib/process_shared/shared_memory_io.rb', line 219 def readchar raise NotImplementedError end |
#readline ⇒ Object
223 224 225 |
# File 'lib/process_shared/shared_memory_io.rb', line 223 def readline raise NotImplementedError end |
#readlines ⇒ Object
227 228 229 |
# File 'lib/process_shared/shared_memory_io.rb', line 227 def readlines raise NotImplementedError end |
#readpartial ⇒ Object
231 232 233 |
# File 'lib/process_shared/shared_memory_io.rb', line 231 def readpartial raise NotImplementedError end |
#reopen ⇒ Object
235 236 237 |
# File 'lib/process_shared/shared_memory_io.rb', line 235 def reopen raise NotImplementedError end |
#rewind ⇒ Object
239 240 241 |
# File 'lib/process_shared/shared_memory_io.rb', line 239 def rewind pos = 0 end |
#seek(amount, whence = IO::SEEK_SET) ⇒ Object
243 244 245 246 247 248 249 250 251 252 253 254 |
# File 'lib/process_shared/shared_memory_io.rb', line 243 def seek(amount, whence = IO::SEEK_SET) case whence when IO::SEEK_CUR self.pos += amount when IO::SEEK_END self.pos = (mem.size + amount) when IO::SEEK_SET self.pos = amount else raise ArgumentError, "bad seek whence #{whence}" end end |
#set_encoding ⇒ Object
256 257 258 |
# File 'lib/process_shared/shared_memory_io.rb', line 256 def set_encoding raise NotImplementedError end |
#stat ⇒ Object
260 261 262 |
# File 'lib/process_shared/shared_memory_io.rb', line 260 def stat raise NotImplementedError end |
#sync ⇒ Object
264 265 266 |
# File 'lib/process_shared/shared_memory_io.rb', line 264 def sync true end |
#sync= ⇒ Object
268 269 270 |
# File 'lib/process_shared/shared_memory_io.rb', line 268 def sync= raise NotImplementedError end |
#sysread(*args) ⇒ Object
272 273 274 |
# File 'lib/process_shared/shared_memory_io.rb', line 272 def sysread(*args) raise NotImplementedError end |
#sysseek(*args) ⇒ Object
276 277 278 |
# File 'lib/process_shared/shared_memory_io.rb', line 276 def sysseek(*args) raise NotImplementedError end |
#syswrite(*args) ⇒ Object
280 281 282 |
# File 'lib/process_shared/shared_memory_io.rb', line 280 def syswrite(*args) raise NotImplementedError end |
#to_io ⇒ Object
284 285 286 |
# File 'lib/process_shared/shared_memory_io.rb', line 284 def to_io raise NotImplementedError end |
#tty? ⇒ Boolean Also known as: isatty
157 158 159 |
# File 'lib/process_shared/shared_memory_io.rb', line 157 def tty? false end |
#ungetbyte ⇒ Object
288 289 290 291 |
# File 'lib/process_shared/shared_memory_io.rb', line 288 def ungetbyte raise IOError if pos == 0 pos -= 1 end |
#ungetc ⇒ Object
293 294 295 |
# File 'lib/process_shared/shared_memory_io.rb', line 293 def ungetc raise NotImplementedError end |
#write(str) ⇒ Object
297 298 299 300 301 |
# File 'lib/process_shared/shared_memory_io.rb', line 297 def write(str) s = str.to_s _putbytes(s) s.size end |
#write_nonblock(str) ⇒ Object
303 304 305 |
# File 'lib/process_shared/shared_memory_io.rb', line 303 def write_nonblock(str) raise NotImplementedError end |