001: /******************************************************************
002: * File: LPEnvironment.java
003: * Created by: Dave Reynolds
004: * Created on: 22-Jul-2003
005: *
006: * (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
007: * [See end of file]
008: * $Id: EnvironmentFrame.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.reasoner.rulesys.Rule;
013:
014: /**
015: * Represents a single frame in the LP interpreter's environment stack. The
016: * environment stack represents the AND part of the search tree - it is a sequence
017: * of nested predicate calls.
018: * <p>
019: * This is used in the inner loop of the interpreter and so is a pure data structure
020: * not an abstract data type and assumes privileged access to the interpreter state.
021: * </p>
022: *
023: * @author <a href="mailto:der@hplb.hpl.hp.com">Dave Reynolds</a>
024: * @version $Revision: 1.7 $ on $Date: 2008/01/02 12:06:16 $
025: */
026: public class EnvironmentFrame extends FrameObject {
027:
028: /** The set of permanent variables Y(i) in use by this frame. */
029: Node[] pVars;
030:
031: /** The code the the clause currently being processed */
032: RuleClauseCode clause;
033:
034: /** The continuation program counter offet in the parent clause's byte code */
035: int cpc;
036:
037: /** The continuation argument counter offset in the parent clause's arg stream */
038: int cac;
039:
040: /**
041: * Constructor
042: * @param clause the compiled code being interpreted by this env frame
043: */
044: public EnvironmentFrame(RuleClauseCode clause) {
045: this .clause = clause;
046: }
047:
048: /**
049: * Allocate a vector of permanent variables for use in the rule execution.
050: */
051: public void allocate(int n) {
052: pVars = new Node[n];
053: }
054:
055: /**
056: * Return the rule associated with this environment, null if no such rule.
057: */
058: public Rule getRule() {
059: if (clause != null) {
060: return clause.rule;
061: } else {
062: return null;
063: }
064: }
065:
066: /**
067: * Printable string for debugging.
068: */
069: public String toString() {
070: if (clause == null || clause.rule == null) {
071: return "[anon]";
072: } else {
073: return "[" + clause.rule.toShortString() + "]";
074: }
075: }
076: }
077:
078: /*
079: (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
080: All rights reserved.
081:
082: Redistribution and use in source and binary forms, with or without
083: modification, are permitted provided that the following conditions
084: are met:
085:
086: 1. Redistributions of source code must retain the above copyright
087: notice, this list of conditions and the following disclaimer.
088:
089: 2. Redistributions in binary form must reproduce the above copyright
090: notice, this list of conditions and the following disclaimer in the
091: documentation and/or other materials provided with the distribution.
092:
093: 3. The name of the author may not be used to endorse or promote products
094: derived from this software without specific prior written permission.
095:
096: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
097: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
098: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
099: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
100: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
101: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
102: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
103: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
104: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
105: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
106: */
|