All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.unimi.dsi.util.AbstractPrefixMap Maven / Gradle / Ivy

Go to download

Blazegraph Modifications to the DSI utils. This are forked from version 1.10.0 under LGPLv2.1.

There is a newer version: 2.1.4
Show newest version
package it.unimi.dsi.util;

/*		 
 * DSI utilities
 *
 * Copyright (C) 2007-2009 Sebastiano Vigna 
 *
 *  This library is free software; you can redistribute it and/or modify it
 *  under the terms of the GNU Lesser General Public License as published by the Free
 *  Software Foundation; either version 2.1 of the License, or (at your option)
 *  any later version.
 *
 *  This library is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 *  for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *
 */

import it.unimi.dsi.fastutil.objects.AbstractObject2LongFunction;
import it.unimi.dsi.fastutil.objects.AbstractObject2ObjectFunction;
import it.unimi.dsi.fastutil.objects.AbstractObjectList;
import it.unimi.dsi.fastutil.objects.Object2ObjectFunction;
import it.unimi.dsi.fastutil.objects.ObjectList;
import it.unimi.dsi.lang.MutableString;

import java.io.Serializable;

/** An abstract implementation of a prefix map.
 * 
 * 

This class provides the full serives of a {@link PrefixMap} by implementing just * {@link #getInterval(CharSequence)} and {@link #getTerm(int, MutableString)} */ public abstract class AbstractPrefixMap extends AbstractObject2LongFunction implements PrefixMap, Serializable { private static final long serialVersionUID = 1L; protected Object2ObjectFunction rangeMap; protected Object2ObjectFunction prefixMap; protected ObjectList list; // We must guarantee that, unless the user says otherwise, the default return value is -1. { defaultReturnValue( -1 ); } /** Returns the range of strings having a given prefix. * * @param prefix a prefix. * @return the corresponding range of strings as an interval. */ protected abstract Interval getInterval( CharSequence prefix ); /** Writes a string specified by index into a {@link MutableString}. * * @param index the index of a string. * @param string a mutable string. * @return string. */ protected abstract MutableString getTerm( int index, MutableString string ); public Object2ObjectFunction rangeMap() { if ( rangeMap == null ) rangeMap = new AbstractObject2ObjectFunction() { private static final long serialVersionUID = 1L; public boolean containsKey( final Object o ) { return get( o ) != Intervals.EMPTY_INTERVAL; } public int size() { return -1; } public Interval get( final Object o ) { return getInterval( (CharSequence)o ); } }; return rangeMap; } public Object2ObjectFunction prefixMap() { if ( prefixMap == null ) prefixMap = new AbstractObject2ObjectFunction() { private static final long serialVersionUID = 1L; public MutableString get( final Object o ) { final Interval interval = (Interval)o; final MutableString prefix = new MutableString(); if ( interval == Intervals.EMPTY_INTERVAL || interval.left < 0 || interval.right < 0 ) throw new IllegalArgumentException(); getTerm( interval.left, prefix ); if ( interval.length() == 1 ) return prefix; final MutableString s = getTerm( interval.right, new MutableString() ); final int l = Math.min( prefix.length(), s.length() ); int i; for( i = 0; i < l; i++ ) if ( s.charAt( i ) != prefix.charAt( i ) ) break; return prefix.length( i ); } public boolean containsKey( final Object o ) { Interval interval = (Interval)o; return interval != Intervals.EMPTY_INTERVAL && interval.left >= 0 && interval.right < AbstractPrefixMap.this.size(); } public int size() { return -1; } }; return prefixMap; } public ObjectList list() { if ( list == null ) list = new AbstractObjectList() { public int size() { return AbstractPrefixMap.this.size(); } public MutableString get( int index ) { return getTerm( index, new MutableString() ); } }; return list; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy