source: Dev/branches/rest-dojo-ui/server/rdfapi/util/FindIterator.php @ 303

Last change on this file since 303 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

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.