001: /******************************************************************
002: * File: TripleMatchFrame.java
003: * Created by: Dave Reynolds
004: * Created on: 23-Jul-2003
005: *
006: * (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
007: * [See end of file]
008: * $Id: TripleMatchFrame.java,v 1.7 2008/01/02 12:06:16 andy_seaborne Exp $
009: *****************************************************************/package com.hp.hpl.jena.reasoner.rulesys.impl;
010:
011: import com.hp.hpl.jena.graph.*;
012: import com.hp.hpl.jena.util.iterator.ExtendedIterator;
013:
014: /**
015: * Frame on the choice point stack used to represent the state of a direct
016: * graph triple match.
017: * <p>
018: * This is used in the inner loop of the interpreter and so is a pure data structure
019: * not an abstract data type and assumes privileged access to the interpreter state.
020: * </p>
021: *
022: * @author <a href="mailto:der@hplb.hpl.hp.com">Dave Reynolds</a>
023: * @version $Revision: 1.7 $ on $Date: 2008/01/02 12:06:16 $
024: */
025: public class TripleMatchFrame extends GenericTripleMatchFrame {
026:
027: /** An iterator over triples matching a goal */
028: ExtendedIterator matchIterator;
029:
030: /**
031: * Constructor.
032: * Initialize the triple match to preserve the current context of the given
033: * LPInterpreter and search for the match defined by the current argument registers
034: * @param intepreter the interpreter instance whose env, trail and arg values are to be preserved
035: */
036: public TripleMatchFrame(LPInterpreter interpreter) {
037: init(interpreter);
038: }
039:
040: /**
041: * Find the next result triple and bind the result vars appropriately.
042: * @param interpreter the calling interpreter whose trail should be used
043: * @return false if there are no more matches in the iterator.
044: */
045: public boolean nextMatch(LPInterpreter interpreter) {
046: while (matchIterator.hasNext()) {
047: if (bindResult((Triple) matchIterator.next(), interpreter)) {
048: return true;
049: }
050: }
051: return false;
052: }
053:
054: /**
055: * Initialize the triple match to preserve the current context of the given
056: * LPInterpreter and search for the match defined by the current argument registers
057: * @param intepreter the interpreter instance whose env, trail and arg values are to be preserved
058: */
059: public void init(LPInterpreter interpreter) {
060: super .init(interpreter);
061: this .matchIterator = interpreter.getEngine().getInfGraph()
062: .findDataMatches(goal);
063: }
064:
065: /**
066: * Override close method to reclaim the iterator.
067: */
068: public void close() {
069: if (matchIterator != null)
070: matchIterator.close();
071: }
072:
073: }
074:
075: /*
076: (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
077: All rights reserved.
078:
079: Redistribution and use in source and binary forms, with or without
080: modification, are permitted provided that the following conditions
081: are met:
082:
083: 1. Redistributions of source code must retain the above copyright
084: notice, this list of conditions and the following disclaimer.
085:
086: 2. Redistributions in binary form must reproduce the above copyright
087: notice, this list of conditions and the following disclaimer in the
088: documentation and/or other materials provided with the distribution.
089:
090: 3. The name of the author may not be used to endorse or promote products
091: derived from this software without specific prior written permission.
092:
093: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
094: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
095: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
096: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
097: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
098: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
099: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
100: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
101: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
102: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
103: */
|