diff options
author | Marcus Boerger <helly@php.net> | 2003-07-16 21:52:03 +0000 |
---|---|---|
committer | Marcus Boerger <helly@php.net> | 2003-07-16 21:52:03 +0000 |
commit | d8943e513c2c74ee3bf2c6e1c283ff40079b326a (patch) | |
tree | 97404b634764e1148c411d9cf4da50d9452e34d3 | |
parent | a86eff216267eaf388d11e46adf522461d6364e4 (diff) | |
download | php-git-d8943e513c2c74ee3bf2c6e1c283ff40079b326a.tar.gz |
Update examples
-rwxr-xr-x | ext/spl/examples/dba_dump.php | 56 | ||||
-rwxr-xr-x | ext/spl/examples/dba_reader.inc | 83 | ||||
-rwxr-xr-x | ext/spl/examples/filter.inc | 4 | ||||
-rwxr-xr-x | ext/spl/examples/ini_groups.php | 65 | ||||
-rwxr-xr-x | ext/spl/examples/key_filter.inc | 102 | ||||
-rwxr-xr-x | ext/spl/examples/sub_dir.inc | 4 |
6 files changed, 263 insertions, 51 deletions
diff --git a/ext/spl/examples/dba_dump.php b/ext/spl/examples/dba_dump.php index 0481d15a92..77ea2008bd 100755 --- a/ext/spl/examples/dba_dump.php +++ b/ext/spl/examples/dba_dump.php @@ -2,63 +2,25 @@ /* dba dump utility * - * Usage php dba_dump <file> <handler> + * Usage: php dba_dump <file> <handler> [<regex>] + * + * Show all groups in the ini file specified by <file>. + * The regular expression <regex> is used to filter the by setting name. * * Note: configure with --enable-dba * * (c) Marcus Boerger */ -class dba_reader implements spl_sequence_assoc -{ - - private $db = NULL; - private $key = false; - private $val = false; - - function __construct($file, $handler) { - $this->db = dba_open($file, 'r', $handler); - } - - function __destruct() { - if ($this->db) { - dba_close($this->db); - } - } - - function rewind() { - if ($this->db) { - $this->key = dba_firstkey($this->db); - } - } +require_once("dba_reader.inc"); +require_once("key_filter.inc"); - function current() { - return $this->val; - } - - function next() { - if ($this->db) { - $this->key = dba_nextkey($this->db); - if ($this->key !== false) { - $this->val = dba_fetch($this->key, $this->db); - } - } - } - - function has_more() { - if ($this->db && $this->key !== false) { - return true; - } else { - return false; - } - } +$db = new dba_reader($argv[1], $argv[2]); - function key() { - return $this->key; - } +if ($argc>3) { + $db = new key_filter($db, $argv[3]); } -$db = new dba_reader($argv[1], $argv[2]); foreach($db as $key => $val) { echo "'$key' => '$val'\n"; } diff --git a/ext/spl/examples/dba_reader.inc b/ext/spl/examples/dba_reader.inc new file mode 100755 index 0000000000..e31960a54d --- /dev/null +++ b/ext/spl/examples/dba_reader.inc @@ -0,0 +1,83 @@ +<?php + +/** + * @brief This implements an dba iterator. + * @author Marcus Boerger + * @version 1.0 + */ +class dba_reader implements spl_sequence_assoc +{ + + private $db = NULL; + private $key = false; + private $val = false; + + /** + * Open database $file with $handler in read only mode. + * + * @param file Database file to open. + * @param handler Handler to use for database access. + */ + function __construct($file, $handler) { + $this->db = dba_open($file, 'r', $handler); + } + + /** + * Close database. + */ + function __destruct() { + if ($this->db) { + dba_close($this->db); + } + } + + /** + * Rewind to first element. + */ + function rewind() { + if ($this->db) { + $this->key = dba_firstkey($this->db); + } + } + + /** + * @return Current data. + */ + function current() { + return $this->val; + } + + /** + * Move to next element. + * + * @return void + */ + function next() { + if ($this->db) { + $this->key = dba_nextkey($this->db); + if ($this->key !== false) { + $this->val = dba_fetch($this->key, $this->db); + } + } + } + + /** + * @return Whether more elements are available. + */ + function has_more() { + if ($this->db && $this->key !== false) { + return true; + } else { + return false; + } + } + + /** + * @return Current key. + */ + function key() { + return $this->key; + } +} + +?>
\ No newline at end of file diff --git a/ext/spl/examples/filter.inc b/ext/spl/examples/filter.inc index 23fe38cbae..5aae419caf 100755 --- a/ext/spl/examples/filter.inc +++ b/ext/spl/examples/filter.inc @@ -1,8 +1,8 @@ <?php /** - * @brief Regular expression filter for string iterators - * @author Marcus Boerger + * @brief Regular expression filter for string iterators + * @author Marcus Boerger * @version 1.0 * * Instances of this class act as a filter around iterators whose elements diff --git a/ext/spl/examples/ini_groups.php b/ext/spl/examples/ini_groups.php new file mode 100755 index 0000000000..1909e87c2d --- /dev/null +++ b/ext/spl/examples/ini_groups.php @@ -0,0 +1,65 @@ +<?php + +/* List groups within an ini file + * + * Usage: php dba_dump <file> [<regex>] + * + * Show all groups in the ini file specified by <file>. + * The regular expression <regex> is used to filter the result. + * + * Note: configure with --enable-dba + * + * (c) Marcus Boerger + */ + +require_once("dba_reader.inc"); +require_once("key_filter.inc"); + +/** + * @brief Class to iterate all groups within an ini file. + * @author Marcus Boerger + * @version 1.0 + * + * Using this class you can iterator over all groups of a ini file. + * + * This class uses a 'is-a' relation to key_filter in contrast to a 'has-a' + * relation. Doing so both current() and key() methods must be overwritten. + * If it would use a 'has-a' relation there would be much more to type... + * but for puritists that would allow correctness in so far as then no + * key() would be needed. + */ +class ini_groups extends key_filter +{ + /** + * Construct an ini file group iterator from a filename. + * + * @param file Ini file to open. + */ + function __construct($file) { + parent::__construct(new dba_reader($file, 'inifile'), '^\[.*\]$'); + } + + /** + * @return The current group. + */ + function current() { + return substr(parent::key(),1,-1); + } + + /** + * @return The current group. + */ + function key() { + return substr(parent::key(),1,-1); + } +} + +$it = new ini_groups($argv[1]); +if ($argc>2) { + $it = new key_filter($it, $argv[2]); +} +foreach($it as $group) { + echo "$group\n"; +} + +?>
\ No newline at end of file diff --git a/ext/spl/examples/key_filter.inc b/ext/spl/examples/key_filter.inc new file mode 100755 index 0000000000..e8c4e42edc --- /dev/null +++ b/ext/spl/examples/key_filter.inc @@ -0,0 +1,102 @@ +<?php + +/** + * @brief Regular expression filter for string iterators + * @author Marcus Boerger + * @version 1.0 + * + * Instances of this class act as a filter around iterators whose elements + * are strings. In other words you can put an iterator into the constructor + * and the instance will only return elements which match the given regular + * expression. + */ +class key_filter implements spl_forward_assoc +{ + protected $it; + protected $regex; + protected $key; + protected $curr; + + /** + * Constructs a filter around an iterator whose elemnts are strings. + * If the given iterator is of type spl_sequence then its rewind() + * method is called. + * + * @param it Object that implements at least spl_forward + * @patam regex Regular expression used as a filter. + */ + function __construct(spl_forward $it, $regex) { + if ($it instanceof spl_sequence) { + $it->rewind(); + } + $this->it = $it; + $this->regex = $regex; + $this->fetch(); + } + + /** + * Destruct the iterator. + */ + function __destruct() { + unset($this->it); + } + + /** + * Fetch next element and store it. + * + * @return void + */ + protected function fetch() { + $this->key = false; + $this->curr = false; + while ($this->it->has_more()) { + $key = $this->it->key(); + if (ereg($this->regex, $key)) { + $this->key = $key; + $this->curr = $this->it->current(); + return; + } + $this->it->next(); + }; + } + + /** + * Move to next element + * + * @return void + */ + function next() { + $this->it->next(); + $this->fetch(); + } + + /** + * @return Whether more elements are available + */ + function has_more() { + return $this->key !== false; + } + + /** + * @return The current key + */ + function key() { + return $this->key; + } + + /** + * @return The current value + */ + function current() { + return $this->curr; + } + + /** + * hidden __clone + */ + protected function __clone() { + // disallow clone + } +} + +?>
\ No newline at end of file diff --git a/ext/spl/examples/sub_dir.inc b/ext/spl/examples/sub_dir.inc index 74477c82eb..b18ddbfe41 100755 --- a/ext/spl/examples/sub_dir.inc +++ b/ext/spl/examples/sub_dir.inc @@ -1,8 +1,8 @@ <?php /** - * @brief Subdirectory aware directory iterator. - * @author Marcus Boerger + * @brief Subdirectory aware directory iterator. + * @author Marcus Boerger * @version 1.0 * * This directory iterator recursively returns all files and directories |