@Override public void addTriplePath(TriplePath tPath) { pattern.add(tPath) ; }
@Override public boolean equalTo(Element el2, NodeIsomorphismMap isoMap) { if ( ! ( el2 instanceof ElementPathBlock) ) return false ; ElementPathBlock eg2 = (ElementPathBlock)el2 ; return this.pattern.equiv(eg2.pattern, isoMap) ; }
public boolean equiv(PathBlock other, NodeIsomorphismMap isoMap) { if ( this.triplePaths.size() != other.triplePaths.size() ) return false ; for ( int i = 0 ; i < this.triplePaths.size() ; i++ ) { TriplePath tp1 = get(i) ; TriplePath tp2 = other.get(i) ; if ( ! Iso.triplePathIso(tp1, tp2, isoMap) ) return false ; } return true ; }
@Override public void visit(ElementPathBlock e) { for (TriplePath t:e.getPattern().getList()) { addVars(t); } } @Override
public PathBlock reduce(Node start, Path path, Node finish) { PathBlock x = new PathBlock() ; reduce(x, varAlloc, start, path, finish) ; return x ; }
@Override public int mark() { return pattern.size() ; }
@Override public int hashCode() { int calcHashCode = Element.HashBasicGraphPattern ; calcHashCode ^= pattern.hashCode() ; return calcHashCode ; }
public boolean isEmpty() { return pattern.isEmpty() ; }
public Iterator<TriplePath> patternElts() { return pattern.iterator(); }
protected void add(ElementPathBlock targetPathBlock, ElementPathBlock newPaths) { for (TriplePath tp:newPaths.getPattern().getList()) { targetPathBlock.addTriple(tp); } } protected void add(ElementPathBlock targetPathBlock, ElementTriplesBlock newTriples) {
public PathBlock reduce(Node start, Path path, Node finish) { PathBlock x = new PathBlock() ; reduce(x, varAlloc, start, path, finish) ; return x ; }
public int mark() { return pattern.size() ; }
@Override public int hashCode() { int calcHashCode = Element.HashBasicGraphPattern ; calcHashCode ^= pattern.hashCode() ; return calcHashCode ; }
public boolean isEmpty() { return pattern.isEmpty() ; }
public Iterator<TriplePath> patternElts() { return pattern.iterator(); }
@Override public void addTriplePath(int index, TriplePath tPath) { pattern.add(index, tPath) ; }
public static ElementTriplesBlock toTriples(ElementPathBlock pb) { ElementTriplesBlock ret = new ElementTriplesBlock(); for (TriplePath tp :pb.getPattern().getList()) { if (tp.isTriple()) { ret.addTriple(tp.asTriple()); } else { throw new RuntimeException("Path query not supported"); } } return ret; } public static Set<String> getVars(Set<Var> vars) {
/** Simplify : turns constructs in simple triples and simpler TriplePaths where possible */ public PathBlock reduce(PathBlock pathBlock) { PathBlock x = new PathBlock() ; // No context during algebra generation time. // VarAlloc varAlloc = VarAlloc.get(context, ARQConstants.sysVarAllocNamed) ; // if ( varAlloc == null ) // // Panic // throw new ARQInternalErrorException("No execution-scope allocator for variables") ; // Translate one into another. reduce(x, pathBlock, varAlloc) ; return x ; }