Add interfaces for File and Directory wrappers

This commit is contained in:
Robin Appelman 2014-07-30 23:51:55 +02:00
commit b876cef7f2
5 changed files with 124 additions and 3 deletions

View file

@ -62,7 +62,7 @@ class CallbackWrapper extends Wrapper {
return $wrapped; return $wrapped;
} }
public function stream_open() { public function stream_open($path, $mode, $options, &$opened_path) {
$context = $this->loadContext('callback'); $context = $this->loadContext('callback');
if (isset($context['read']) and is_callable($context['read'])) { if (isset($context['read']) and is_callable($context['read'])) {

35
src/Directory.php Normal file
View file

@ -0,0 +1,35 @@
<?php
/**
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Licensed under the MIT license:
* http://opensource.org/licenses/MIT
*/
namespace Icewind\Streams;
/**
* Interface for stream wrappers that implements a directory
*/
interface Directory {
/**
* @param string $path
* @param array $options
* @return bool
*/
public function dir_opendir($path, $options);
/**
* @return string
*/
public function dir_readdir();
/**
* @return bool
*/
public function dir_closedir();
/**
* @return bool
*/
public function dir_rewinddir();
}

86
src/File.php Normal file
View file

@ -0,0 +1,86 @@
<?php
/**
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Licensed under the MIT license:
* http://opensource.org/licenses/MIT
*/
namespace Icewind\Streams;
/**
* Interface for stream wrappers that implements a file
*/
interface File {
/**
* @param string $path
* @param string $mode
* @param int $options
* @param string &$opened_path
* @return bool
*/
public function stream_open($path, $mode, $options, &$opened_path);
/**
* @param string $offset
* @param int $whence
* @return bool
*/
public function stream_seek($offset, $whence = SEEK_SET);
/**
* @return int
*/
public function stream_tell();
/**
* @param int $count
* @return string
*/
public function stream_read($count);
/**
* @param string $data
* @return int
*/
public function stream_write($data);
/**
* @param int $option
* @param int $arg1
* @param int $arg2
* @return bool
*/
public function stream_set_option($option, $arg1, $arg2);
/**
* @param int $size
* @return bool
*/
public function stream_truncate($size);
/**
* @return array
*/
public function stream_stat();
/**
* @param int $operation
* @return bool
*/
public function stream_lock($operation);
/**
* @return bool
*/
public function stream_flush();
/**
* @return bool
*/
public function stream_eof();
/**
* @return bool
*/
public function stream_close();
}

View file

@ -28,7 +28,7 @@ class NullWrapper extends Wrapper {
return $wrapped; return $wrapped;
} }
public function stream_open() { public function stream_open($path, $mode, $options, &$opened_path) {
$this->loadContext('null'); $this->loadContext('null');
return true; return true;
} }

View file

@ -12,7 +12,7 @@ namespace Icewind\Streams;
* *
* This wrapper itself doesn't implement any functionality but is just a base class for other wrappers to extend * This wrapper itself doesn't implement any functionality but is just a base class for other wrappers to extend
*/ */
abstract class Wrapper { abstract class Wrapper implements File {
/** /**
* The wrapped stream * The wrapped stream
* *