iobuffer 1.0.0 → 1.1.0
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.
- data/README.md +96 -0
- data/ext/iobuffer.c +490 -366
- data/lib/iobuffer/version.rb +5 -0
- metadata +57 -116
- data/CHANGES +0 -18
- data/Gemfile +0 -12
- data/Gemfile.lock +0 -26
- data/LICENSE +0 -19
- data/README.rdoc +0 -83
- data/Rakefile +0 -74
- data/VERSION +0 -1
- data/ext/.gitignore +0 -4
- data/iobuffer.gemspec +0 -66
- data/lib/.gitignore +0 -1
- data/spec/buffer_spec.rb +0 -144
data/README.md
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
IO::Buffer
|
2
|
+
==========
|
3
|
+
[](http://travis-ci.org/tarcieri/iobuffer)
|
4
|
+
|
5
|
+
IO::Buffer is a fast byte queue which is primarily intended for non-blocking
|
6
|
+
I/O applications but is suitable wherever buffering is required. IO::Buffer
|
7
|
+
is compatible with Ruby 1.8/1.9 and Rubinius.
|
8
|
+
|
9
|
+
Usage
|
10
|
+
-----
|
11
|
+
|
12
|
+
IO::Buffer provides a subset of the methods available in Strings:
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
>> buf = IO::Buffer.new
|
16
|
+
=> #<IO::Buffer:0x12fc708>
|
17
|
+
>> buf << "foo"
|
18
|
+
=> "foo"
|
19
|
+
>> buf << "bar"
|
20
|
+
=> "bar"
|
21
|
+
>> buf.to_str
|
22
|
+
=> "foobar"
|
23
|
+
>> buf.size
|
24
|
+
=> 6
|
25
|
+
```
|
26
|
+
|
27
|
+
The IO::Buffer#<< method is an alias for IO::Buffer#append. A prepend method
|
28
|
+
is also available:
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
>> buf = IO::Buffer.new
|
32
|
+
=> #<IO::Buffer:0x12f5250>
|
33
|
+
>> buf.append "bar"
|
34
|
+
=> "bar"
|
35
|
+
>> buf.prepend "foo"
|
36
|
+
=> "foo"
|
37
|
+
>> buf.append "baz"
|
38
|
+
=> "baz"
|
39
|
+
>> buf.to_str
|
40
|
+
=> "foobarbaz"
|
41
|
+
```
|
42
|
+
|
43
|
+
IO::Buffer#read can be used to retrieve the contents of a buffer. You can mix
|
44
|
+
reads alongside adding more data to the buffer:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
>> buf = IO::Buffer.new
|
48
|
+
=> #<IO::Buffer:0x12fc5f0>
|
49
|
+
>> buf << "foo"
|
50
|
+
=> "foo"
|
51
|
+
>> buf.read 2
|
52
|
+
=> "fo"
|
53
|
+
>> buf << "bar"
|
54
|
+
=> "bar"
|
55
|
+
>> buf.read 2
|
56
|
+
=> "ob"
|
57
|
+
>> buf << "baz"
|
58
|
+
=> "baz"
|
59
|
+
>> buf.read 3
|
60
|
+
=> "arb"
|
61
|
+
```
|
62
|
+
|
63
|
+
Finally, IO::Buffer provides methods for performing non-blocking I/O with the
|
64
|
+
contents of the buffer. The IO::Buffer#read_from(IO) method will read as much
|
65
|
+
data as possible from the given IO object until the read would block.
|
66
|
+
|
67
|
+
The IO::Buffer#write_to(IO) method writes the contents of the buffer to the
|
68
|
+
given IO object until either the buffer is empty or the write would block:
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
>> buf = IO::Buffer.new
|
72
|
+
=> #<IO::Buffer:0x12fc5c8>
|
73
|
+
>> file = File.open("README")
|
74
|
+
=> #<File:README>
|
75
|
+
>> buf.read_from(file)
|
76
|
+
=> 1713
|
77
|
+
>> buf.to_str
|
78
|
+
=> "= IO::Buffer\n\nIO::Buffer is a fast byte queue...
|
79
|
+
```
|
80
|
+
|
81
|
+
If the file descriptor is not ready for I/O, the Errno::EAGAIN exception is
|
82
|
+
raised indicating no I/O was performed.
|
83
|
+
|
84
|
+
Contributing
|
85
|
+
------------
|
86
|
+
|
87
|
+
* Fork this repository on github
|
88
|
+
* Make your changes and send me a pull request
|
89
|
+
* If I like them I'll merge them
|
90
|
+
* If I've accepted a patch, feel free to ask for commit access
|
91
|
+
|
92
|
+
License
|
93
|
+
-------
|
94
|
+
|
95
|
+
Copyright (c) 2007-12 Tony Arcieri. Distributed under the MIT License. See
|
96
|
+
LICENSE.txt for further details.
|