package proj.zoie.perf.indexing; import org.apache.log4j.Logger; import proj.zoie.api.indexing.ZoieIndexable; import proj.zoie.api.indexing.ZoieIndexableInterpreter; public class LoopingIndexableInterpreter<V> implements ZoieIndexableInterpreter<V> { private static final Logger log = Logger.getLogger(LoopingIndexableInterpreter.class); protected int maxUID; private final ZoieIndexableInterpreter<V> _inner; public LoopingIndexableInterpreter(ZoieIndexableInterpreter<V> inner,int max) { maxUID = max; _inner = inner; } public ZoieIndexable convertAndInterpret(V src) { ZoieIndexable innerIndexable = _inner.convertAndInterpret(src); long uid = innerIndexable.getUID(); uid = uid %= maxUID; return new LocalWrapperIndexable(uid, innerIndexable); } private static class LocalWrapperIndexable implements ZoieIndexable{ private final ZoieIndexable _inner; private final long _uid; LocalWrapperIndexable(long uid,ZoieIndexable inner){ _inner = inner; _uid = uid; } public IndexingReq[] buildIndexingReqs() { return _inner.buildIndexingReqs(); } public long getUID() { return _uid; } public boolean isDeleted() { return _inner.isDeleted(); } public boolean isSkip() { return _inner.isSkip(); } } }