예제 #1
0
 @Override
 public boolean eq(final ANode node) {
   // no database node
   if (!(node instanceof DBNode)) return false;
   // ensure that the pre value is contained in the target documents
   final DBNode db = (DBNode) node;
   return data == db.data() && pres.contains(db.pre());
 }
예제 #2
0
  /**
   * Returns a document test. This test will be called by {@link AxisPath#index} if the context
   * value only consists of database nodes.
   *
   * @param rt root value
   * @return document test
   */
  static Test get(final Value rt) {
    // use simple test if database contains only one document
    final Data data = rt.data();
    if (data.meta.ndocs == 1) return Test.DOC;

    // adopt nodes from existing sequence
    if (rt instanceof DBNodeSeq) {
      final DBNodeSeq seq = (DBNodeSeq) rt;
      return seq.all() ? Test.DOC : new InvDocTest(new IntList(seq.pres()), data);
    }

    // loop through all documents and add pre values of documents
    // not more than 2^31 documents supported
    final IntList il = new IntList((int) rt.size());
    for (final Item it : rt) il.add(((DBNode) it).pre());
    return new InvDocTest(il, data);
  }