package net.onrc.onos.apps.bgproute;

import java.util.Iterator;

public interface IPatriciaTrie<V> {
	public V put(Prefix prefix, V value);
	
	public V lookup(Prefix prefix);
	
	public V match(Prefix prefix);
	
	public boolean remove(Prefix prefix, V value);
	
	public Iterator<Entry<V>> iterator();
	
	interface Entry<V> {
		public Prefix getPrefix();
		public V getValue();
	}
}
