001: /*
002: (c) Copyright 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
003: All rights reserved - see end of file.
004: $Id: TripleBunch.java,v 1.9 2008/01/02 12:09:51 andy_seaborne Exp $
005: */
006: package com.hp.hpl.jena.mem;
007:
008: import com.hp.hpl.jena.graph.Triple;
009: import com.hp.hpl.jena.graph.query.Domain;
010: import com.hp.hpl.jena.graph.query.StageElement;
011:
012: import com.hp.hpl.jena.util.iterator.ExtendedIterator;
013:
014: /**
015: A bunch of triples - a strippled-down set with specialised methods. A
016: bunch is expected tos tore triples that share some useful property
017: (such as having the same subject or predicate).
018:
019: @author kers
020: */
021: public interface TripleBunch {
022: /**
023: Answer true iff this TripleBunch contains a triple .equals to <code>t</code>.
024: */
025: public abstract boolean contains(Triple t);
026:
027: /**
028: Answer true iff this TripleBunch contains a triple with .sameValueAs
029: subject, predicate, and object. (Typically this only matters for the
030: object. For example, integer literals with different numbers of leading
031: zeroes can be .sameValueAs but not .equals).
032: */
033: public abstract boolean containsBySameValueAs(Triple t);
034:
035: /**
036: Answer the number of triples in this bunch.
037: */
038: public abstract int size();
039:
040: /**
041: Add <code>t</code> to the triples in this bunch. If <code>t</code>
042: is already a member, nothing happens. The bunch now .contains this
043: triple.
044: */
045: public abstract void add(Triple t);
046:
047: /**
048: Remove <code>t</code> from the triples in this bunch. If it wasn't
049: a member, nothing happens. The bunch no longer .contains this triple.
050: */
051: public abstract void remove(Triple t);
052:
053: /**
054: Answer an iterator over all the triples in this bunch. It is unwise to
055: .remove from this iterator. (It may become illegal.)
056: */
057: public abstract ExtendedIterator iterator();
058:
059: /**
060: Answer an iterator over all the triples in this bunch. If use of .remove on
061: this iterator empties the bunch, the <code>emptied</code> method of
062: <code>container</code> is invoked.
063: */
064: public abstract ExtendedIterator iterator(
065: HashCommon.NotifyEmpty container);
066:
067: /**
068: For every triple t in this bunch that matches <code>s<code>, invoke
069: <code>next.run(d)</code>. <code>d</code> may have been
070: side-effected by the match. <code>app</code> is the main reason
071: that TripleBunch exists at all: it's a way to iterate as fast as possible
072: over the triples in the context of a graph query, without having to
073: construct an Iterator object which has to maintain the iteration state
074: in instance variables.
075: */
076: public abstract void app(Domain d, StageElement next, MatchOrBind s);
077: }
078: /*
079: * (c) Copyright 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: * 1. Redistributions of source code must retain the above copyright
086: * notice, this list of conditions and the following disclaimer.
087: * 2. Redistributions in binary form must reproduce the above copyright
088: * notice, this list of conditions and the following disclaimer in the
089: * documentation and/or other materials provided with the distribution.
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: */
|