[ 
https://issues.apache.org/jira/browse/LUCENE-3312?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13398446#comment-13398446
 ] 

Nikola Tankovic commented on LUCENE-3312:
-----------------------------------------

I think this is now OK, I'll put in util.*

{code}
  public Iterator<StorableField> storedFieldsIterator() {
    return new FilterIterator<StorableField, Field>(fields.iterator()) {
      @Override
      protected boolean predicateFunction(Field field) {
        return field.type.stored();
      }
    };
  }
  
  public Iterator<IndexableField> indexedFieldsIterator() {
    return new FilterIterator<IndexableField, Field>(fields.iterator()) {
      @Override
      protected boolean predicateFunction(Field field) {
        return field.type.indexed();
      }
    };
  }
  
  private abstract class FilterIterator<T, U extends T> implements Iterator<T> {

    private Iterator<U> iterator;
    private T next = null;
    private boolean nextIsSet = false;
    
    protected abstract boolean predicateFunction(U field);

    public FilterIterator(Iterator<U> baseIterator) {
      this.iterator = baseIterator;
    }
    
    public boolean hasNext() {
      if (nextIsSet) {
        return true;
      } else {
        return setNext();
      }
    }
    
    public T next() {
      if (!nextIsSet) {
        if (!setNext()) { 
          throw new NoSuchElementException();
        }
      }
      nextIsSet = false;
      return next;
    }

    public void remove() {
      throw new UnsupportedOperationException();
    }

    private boolean setNext() {
      while (iterator.hasNext()) {
        U object = iterator.next();
        if (predicateFunction(object)) {
          next = object;
          nextIsSet = true;
          return true;
        }
      }
      return false;
    }
  }
{code}
                
> Break out StorableField from IndexableField
> -------------------------------------------
>
>                 Key: LUCENE-3312
>                 URL: https://issues.apache.org/jira/browse/LUCENE-3312
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: core/index
>            Reporter: Michael McCandless
>            Assignee: Nikola Tankovic
>              Labels: gsoc2012, lucene-gsoc-12
>             Fix For: Field Type branch
>
>         Attachments: lucene-3312-patch-01.patch, lucene-3312-patch-02.patch, 
> lucene-3312-patch-03.patch, lucene-3312-patch-04.patch, 
> lucene-3312-patch-05.patch
>
>
> In the field type branch we have strongly decoupled
> Document/Field/FieldType impl from the indexer, by having only a
> narrow API (IndexableField) passed to IndexWriter.  This frees apps up
> use their own "documents" instead of the "user-space" impls we provide
> in oal.document.
> Similarly, with LUCENE-3309, we've done the same thing on the
> doc/field retrieval side (from IndexReader), with the
> StoredFieldsVisitor.
> But, maybe we should break out StorableField from IndexableField,
> such that when you index a doc you provide two Iterables -- one for the
> IndexableFields and one for the StorableFields.  Either can be null.
> One downside is possible perf hit for fields that are both indexed &
> stored (ie, we visit them twice, lookup their name in a hash twice,
> etc.).  But the upside is a cleaner separation of concerns in API....

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to