/* | |
* Licensed to the Apache Software Foundation (ASF) under one or more | |
* contributor license agreements. See the NOTICE file distributed with | |
* this work for additional information regarding copyright ownership. | |
* The ASF licenses this file to You under the Apache License, Version 2.0 | |
* (the "License"); you may not use this file except in compliance with | |
* the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
using System; | |
using IndexReader = Lucene.Net.Index.IndexReader; | |
using Term = Lucene.Net.Index.Term; | |
using TermDocs = Lucene.Net.Index.TermDocs; | |
using TermEnum = Lucene.Net.Index.TermEnum; | |
namespace Lucene.Net.Search | |
{ | |
/// <summary> | |
/// | |
/// | |
/// </summary> | |
public class ExtendedFieldCacheImpl : FieldCacheImpl, ExtendedFieldCache | |
{ | |
public ExtendedFieldCacheImpl() | |
{ | |
InitBlock(); | |
} | |
public class AnonymousClassLongParser : LongParser | |
{ | |
public virtual long ParseLong(System.String value_Renamed) | |
{ | |
return System.Int64.Parse(value_Renamed); | |
} | |
} | |
public class AnonymousClassDoubleParser : DoubleParser | |
{ | |
public virtual double ParseDouble(System.String value_Renamed) | |
{ | |
return System.Double.Parse(value_Renamed); | |
} | |
} | |
new internal class AnonymousClassCache : Cache | |
{ | |
public AnonymousClassCache(Lucene.Net.Search.FieldCacheImpl enclosingInstance) | |
{ | |
InitBlock(enclosingInstance); | |
} | |
private void InitBlock(Lucene.Net.Search.FieldCacheImpl enclosingInstance) | |
{ | |
this.enclosingInstance = enclosingInstance; | |
} | |
private Lucene.Net.Search.FieldCacheImpl enclosingInstance; | |
public Lucene.Net.Search.FieldCacheImpl Enclosing_Instance | |
{ | |
get | |
{ | |
return enclosingInstance; | |
} | |
} | |
protected internal override System.Object CreateValue(IndexReader reader, System.Object entryKey) | |
{ | |
Entry entry = (Entry) entryKey; | |
System.String field = entry.field; | |
LongParser parser = (LongParser) entry.custom; | |
long[] retArray = new long[reader.MaxDoc()]; | |
TermDocs termDocs = reader.TermDocs(); | |
TermEnum termEnum = reader.Terms(new Term(field, "")); | |
try | |
{ | |
do | |
{ | |
Term term = termEnum.Term(); | |
if (term == null || (System.Object) term.Field() != (System.Object) field) | |
break; | |
long termval = parser.ParseLong(term.Text()); | |
termDocs.Seek(termEnum); | |
while (termDocs.Next()) | |
{ | |
retArray[termDocs.Doc()] = termval; | |
} | |
} | |
while (termEnum.Next()); | |
} | |
finally | |
{ | |
termDocs.Close(); | |
termEnum.Close(); | |
} | |
return retArray; | |
} | |
} | |
new internal class AnonymousClassCache1:Cache | |
{ | |
public AnonymousClassCache1(Lucene.Net.Search.FieldCacheImpl enclosingInstance) | |
{ | |
InitBlock(enclosingInstance); | |
} | |
private void InitBlock(Lucene.Net.Search.FieldCacheImpl enclosingInstance) | |
{ | |
this.enclosingInstance = enclosingInstance; | |
} | |
private Lucene.Net.Search.FieldCacheImpl enclosingInstance; | |
public Lucene.Net.Search.FieldCacheImpl Enclosing_Instance | |
{ | |
get | |
{ | |
return enclosingInstance; | |
} | |
} | |
protected internal override System.Object CreateValue(IndexReader reader, System.Object entryKey) | |
{ | |
Entry entry = (Entry) entryKey; | |
System.String field = entry.field; | |
DoubleParser parser = (DoubleParser) entry.custom; | |
double[] retArray = new double[reader.MaxDoc()]; | |
TermDocs termDocs = reader.TermDocs(); | |
TermEnum termEnum = reader.Terms(new Term(field, "")); | |
try | |
{ | |
do | |
{ | |
Term term = termEnum.Term(); | |
if (term == null || (System.Object) term.Field() != (System.Object) field) | |
break; | |
double termval = parser.ParseDouble(term.Text()); | |
termDocs.Seek(termEnum); | |
while (termDocs.Next()) | |
{ | |
retArray[termDocs.Doc()] = termval; | |
} | |
} | |
while (termEnum.Next()); | |
} | |
finally | |
{ | |
termDocs.Close(); | |
termEnum.Close(); | |
} | |
return retArray; | |
} | |
} | |
new internal class AnonymousClassCache2:Cache | |
{ | |
public AnonymousClassCache2(Lucene.Net.Search.FieldCacheImpl enclosingInstance) | |
{ | |
InitBlock(enclosingInstance); | |
} | |
private void InitBlock(Lucene.Net.Search.FieldCacheImpl enclosingInstance) | |
{ | |
this.enclosingInstance = enclosingInstance; | |
} | |
private Lucene.Net.Search.FieldCacheImpl enclosingInstance; | |
public Lucene.Net.Search.FieldCacheImpl Enclosing_Instance | |
{ | |
get | |
{ | |
return enclosingInstance; | |
} | |
} | |
protected internal override System.Object CreateValue(IndexReader reader, System.Object fieldKey) | |
{ | |
System.String field = String.Intern(((System.String) fieldKey)); | |
TermEnum enumerator = reader.Terms(new Term(field, "")); | |
try | |
{ | |
Term term = enumerator.Term(); | |
if (term == null) | |
{ | |
throw new System.SystemException("no terms in field " + field + " - cannot determine sort type"); | |
} | |
System.Object ret = null; | |
if ((System.Object) term.Field() == (System.Object) field) | |
{ | |
System.String termtext = term.Text().Trim(); | |
/** | |
* Java 1.4 level code: | |
if (pIntegers.matcher(termtext).matches()) | |
return IntegerSortedHitQueue.comparator (reader, enumerator, field); | |
else if (pFloats.matcher(termtext).matches()) | |
return FloatSortedHitQueue.comparator (reader, enumerator, field); | |
*/ | |
// Java 1.3 level code: | |
try | |
{ | |
int parsedIntValue; | |
long parsedLongValue; | |
if (int.TryParse(termtext, out parsedIntValue)) | |
{ | |
ret = Enclosing_Instance.GetInts(reader, field); | |
} | |
else if (long.TryParse(termtext, out parsedLongValue)) | |
{ | |
ret = ((ExtendedFieldCacheImpl)Enclosing_Instance).GetLongs(reader, field); | |
} | |
else | |
{ | |
float f = 0.0f; | |
if (SupportClass.Single.TryParse(termtext, out f)) | |
{ | |
ret = Enclosing_Instance.GetFloats(reader, field); | |
} | |
else | |
{ | |
ret = Enclosing_Instance.GetStringIndex(reader, field); | |
} | |
} | |
} | |
catch (System.Exception) | |
{ | |
ret = Enclosing_Instance.GetStringIndex(reader, field); | |
} | |
} | |
else | |
{ | |
throw new System.SystemException("field \"" + field + "\" does not appear to be indexed"); | |
} | |
return ret; | |
} | |
finally | |
{ | |
enumerator.Close(); | |
} | |
} | |
} | |
private void InitBlock() | |
{ | |
longsCache = new AnonymousClassCache(this); | |
doublesCache = new AnonymousClassCache1(this); | |
autoCache = new AnonymousClassCache2(this); | |
} | |
private static readonly LongParser LONG_PARSER; | |
private static readonly DoubleParser DOUBLE_PARSER; | |
public virtual long[] GetLongs(IndexReader reader, System.String field) | |
{ | |
return GetLongs(reader, field, LONG_PARSER); | |
} | |
// inherit javadocs | |
public virtual long[] GetLongs(IndexReader reader, System.String field, LongParser parser) | |
{ | |
return (long[]) longsCache.Get(reader, new Entry(field, parser)); | |
} | |
internal Cache longsCache; | |
// inherit javadocs | |
public virtual double[] GetDoubles(IndexReader reader, System.String field) | |
{ | |
return GetDoubles(reader, field, DOUBLE_PARSER); | |
} | |
// inherit javadocs | |
public virtual double[] GetDoubles(IndexReader reader, System.String field, DoubleParser parser) | |
{ | |
return (double[]) doublesCache.Get(reader, new Entry(field, parser)); | |
} | |
internal Cache doublesCache; | |
// inherit javadocs | |
public override System.Object GetAuto(IndexReader reader, System.String field) | |
{ | |
return autoCache.Get(reader, field); | |
} | |
new internal Cache autoCache; | |
static ExtendedFieldCacheImpl() | |
{ | |
LONG_PARSER = new AnonymousClassLongParser(); | |
DOUBLE_PARSER = new AnonymousClassDoubleParser(); | |
} | |
} | |
} |