source: Dev/branches/rest-dojo-ui/Demo/rdfapi/util/FindIterator.php @ 312

Last change on this file since 312 was 312, checked in by jkraaijeveld, 13 years ago
File size: 2.7 KB
Line 
1<?php
2
3// ----------------------------------------------------------------------------------
4// Class: FindIterator
5// ----------------------------------------------------------------------------------
6
7/**
8 * Iterator for traversing statements matching a searchpattern.
9 * FindIterators are returned by model->findAsIterator()
10 * Using a find iterator is significantly faster than using model->find() which returns
11 * a new result model.
12 *
13 *
14 * @version  $Id: FindIterator.php 268 2006-05-15 05:28:09Z tgauss $
15 * @author Tobias Gauß <tobias.gauss@web.de>
16 *
17 * @package utility
18 * @access      public
19 *
20 */
21 class FindIterator extends Object {
22
23        /**
24        * Reference to the MemModel
25        * @var          object MemModel
26        * @access       private
27        */     
28    var $model;
29   
30
31
32        /**
33        * Current position
34        * FindIterator does not use the build in PHP array iterator,
35        * so you can use serveral iterators on a single MemModel.
36        * @var          integer
37        * @access       private
38        */     
39    var $position;
40   
41   
42    /**
43        * Searchpattern
44        *
45        * @var          Object Subject,Predicate,Object
46        * @access       private
47        */     
48
49    var $subject;
50    var $predicate;
51    var $object;
52   
53   
54   /**
55    * Constructor
56    *
57    * @param    object  MemModel
58    * @param    object  Subject
59    * @param    object  Predicate
60    * @param    object  Object
61        * @access       public
62    */
63    function FindIterator(&$model,$sub,$pred,$obj) {
64                $this->model = &$model;
65                $this->subject=$sub;
66                $this->predicate=$pred;
67                $this->object=$obj;
68                $this->position=-1;
69        }
70       
71       
72        /**
73    * Returns TRUE if there are more matching statements.
74    * @return   boolean
75    * @access   public 
76    */
77    function hasNext() {
78                if($this->model->findFirstMatchOff($this->subject,$this->predicate,$this->object,$this->position+1)>-1){
79                        return TRUE;
80                }else{
81                        return FALSE;
82                }
83    }
84
85   
86    /**
87    * Returns the next matching statement.
88    * @return   statement or NULL if there is no next matching statement.
89    * @access   public 
90    */
91    function next() {
92                        $res=$this->model->findFirstMatchOff($this->subject,$this->predicate,$this->object,$this->position+1); 
93                        if($res>-1){
94                                $this->position=$res;
95                                return $this->model->triples[$res];
96                        }else{
97                                return Null;
98                        }               
99    }
100   
101   
102 
103
104    /**
105    * Returns the current matching statement.
106    * @return   statement or NULL if there is no current matching statement.
107    * @access   public 
108    */
109    function current() {
110                if (($this->position >= -1)&&(isset($this->model->triples[$this->position]))) {
111                        return $this->model->triples[$this->position];
112                } else {
113                        return NULL;
114                }
115    } 
116 
117 }
118
119?>
Note: See TracBrowser for help on using the repository browser.