blob: 6f415c2569af69af2cc29ab3d897b20a2e19fe27 [file] [log] [blame]
/*
* 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();
}
}
}