Skip to content

Commit 83c1fcc

Browse files
committed
Add a ISeekableStream interface
1 parent c6f3c20 commit 83c1fcc

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

src/Core/Streams/ISeekableStream.php

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<?php
2+
3+
/**
4+
* Streams
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in all
14+
* copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
*
24+
* @category Library
25+
* @package Streams
26+
* @author Axel Nana <ax.lnana@outlook.com>
27+
* @copyright 2019 Aliens Group.
28+
* @license MIT <https://github.com/ElementaryFramework/Streams/blob/master/LICENSE>
29+
* @version GIT: 0.0.1
30+
*/
31+
32+
namespace ElementaryFramework\Core\Streams;
33+
34+
/**
35+
* Seekable Stream Interface
36+
*
37+
* Interface with base methods to implement a
38+
* stream with seekable cursor capabilities.
39+
*
40+
* @package Streams
41+
* @author Axel Nana <ax.lnana@outlook.com>
42+
*/
43+
interface ISeekableStream extends IStream
44+
{
45+
/**
46+
* Seeks the stream cursor to the given position.
47+
*
48+
* @param int $offset The offset to move the cursor.
49+
*
50+
* The stream cursor's final position will depend of `$whence`.
51+
* - If `$whence` is equal to `SEEK_SET`, `$offset` will represent
52+
* the amount of bytes from the start of the stream.
53+
* - If `$whence` is equal to `SEEK_CUR`, the final cursor position
54+
* will be the current position plus `$offset`.
55+
* - If `$whence` is equal to `SEEK_END`, the final cursor position
56+
* will be the last possible position in the stream plus `$offset`.
57+
*
58+
* To move backward from the end of the stream, set `$offset` to an
59+
* negative number and `$whence` to `SEEK_END`.
60+
*
61+
* @param int $whence The origin of `$offset`.
62+
*
63+
* Possible values are:
64+
* - `SEEK_SET` to start from the beginning.
65+
* - `SEEK_CUR` to start from the current position.
66+
* - `SEEK_END` to start from the last position.
67+
*
68+
* @return void
69+
*/
70+
function seekTo(int $offset, int $whence = SEEK_SET) : void;
71+
72+
/**
73+
* Seeks the stream cursor to the beginning.
74+
*
75+
* @return void
76+
*/
77+
function seekToStart() : void;
78+
79+
/**
80+
* Seeks the stream cursor to the end.
81+
*
82+
* @return void
83+
*/
84+
function seekToEnd() : void;
85+
}

0 commit comments

Comments
 (0)