summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2003-07-16 21:52:03 +0000
committerMarcus Boerger <helly@php.net>2003-07-16 21:52:03 +0000
commitd8943e513c2c74ee3bf2c6e1c283ff40079b326a (patch)
tree97404b634764e1148c411d9cf4da50d9452e34d3
parenta86eff216267eaf388d11e46adf522461d6364e4 (diff)
downloadphp-git-d8943e513c2c74ee3bf2c6e1c283ff40079b326a.tar.gz
Update examples
-rwxr-xr-xext/spl/examples/dba_dump.php56
-rwxr-xr-xext/spl/examples/dba_reader.inc83
-rwxr-xr-xext/spl/examples/filter.inc4
-rwxr-xr-xext/spl/examples/ini_groups.php65
-rwxr-xr-xext/spl/examples/key_filter.inc102
-rwxr-xr-xext/spl/examples/sub_dir.inc4
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