/*
 * @author Ranides Atterwim <ranides@gmail.com>
 * @copyright Ranides Atterwim
 * @license WTFPL
 * @url http://ranides.net/projects/assira.drafts
 */
package net.ranides.assira.index;

import java.util.Comparator;
import java.util.function.Consumer;
import java.util.function.Function;
import net.ranides.assira.collection.query.CQuery;

/**
 *
 * @author Ranides Atterwim <ranides@gmail.com>
 */
public interface IQuery<V> extends CQuery<V> {
    
    
    IQuery<V> require();
    
    IQuery<V> optional();
    
    

    IQuery<V> eq(Comparator<V> index, V value);
    
    <T> IQuery<V> eq(Function<V,T> index, T value);

    IQuery<V> eq(String index, Object value);
    

    
    IQuery<V> gt(Comparator<V> index, V value);
    
    <T> IQuery<V> gt(Function<V,T> index, T value);

    IQuery<V> gt(String index, Object value);
    
    
    
    IQuery<V> lt(Comparator<V> index, V value);
    
    <T> IQuery<V> lt(Function<V,T> index, T value);

    IQuery<V> lt(String index, Object value);
    
    

    IQuery<V> in(Comparator<V> index, V begin, V end);
    
    <T> IQuery<V> in(Function<V,T> index, T begin, T end);

    IQuery<V> in(String index, Object begin, Object end);

    
    
    void remove();

    void update(Consumer<? super V> consumer);
    
}
