You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by cc...@apache.org on 2012/02/28 23:43:28 UTC
[Lucene.Net] svn commit: r1294875 [19/45] - in /incubator/lucene.net/trunk: ./ build/
build/vs2010/contrib/ build/vs2010/test/ doc/ src/ src/contrib/Analyzers/
src/contrib/Analyzers/AR/ src/contrib/Analyzers/BR/
src/contrib/Analyzers/CJK/ src/contrib/Analyzers/Cn/ ...
Modified: incubator/lucene.net/trunk/src/core/Index/ReadOnlyDirectoryReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/ReadOnlyDirectoryReader.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/ReadOnlyDirectoryReader.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/ReadOnlyDirectoryReader.cs Tue Feb 28 22:43:08 2012
@@ -27,12 +27,13 @@ namespace Lucene.Net.Index
internal ReadOnlyDirectoryReader(Directory directory, SegmentInfos sis, IndexDeletionPolicy deletionPolicy, int termInfosIndexDivisor):base(directory, sis, deletionPolicy, true, termInfosIndexDivisor)
{
}
-
- internal ReadOnlyDirectoryReader(Directory directory, SegmentInfos infos, SegmentReader[] oldReaders, int[] oldStarts, System.Collections.IDictionary oldNormsCache, bool doClone, int termInfosIndexDivisor):base(directory, infos, oldReaders, oldStarts, oldNormsCache, true, doClone, termInfosIndexDivisor)
- {
- }
-
- internal ReadOnlyDirectoryReader(IndexWriter writer, SegmentInfos infos, int termInfosIndexDivisor):base(writer, infos, termInfosIndexDivisor)
+
+ internal ReadOnlyDirectoryReader(Directory directory, SegmentInfos infos, SegmentReader[] oldReaders, int[] oldStarts, System.Collections.Generic.IDictionary<string, byte[]> oldNormsCache, bool doClone, int termInfosIndexDivisor)
+ : base(directory, infos, oldReaders, oldStarts, oldNormsCache, true, doClone, termInfosIndexDivisor)
+ {
+ }
+
+ internal ReadOnlyDirectoryReader(IndexWriter writer, SegmentInfos infos, int termInfosIndexDivisor):base(writer, infos, termInfosIndexDivisor)
{
}
Modified: incubator/lucene.net/trunk/src/core/Index/ReusableStringReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/ReusableStringReader.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/ReusableStringReader.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/ReusableStringReader.cs Tue Feb 28 22:43:08 2012
@@ -16,6 +16,7 @@
*/
using System;
+using Lucene.Net.Support;
namespace Lucene.Net.Index
{
@@ -35,38 +36,43 @@ namespace Lucene.Net.Index
left = s.Length;
this.upto = 0;
}
+
public int Read(char[] c)
{
return Read(c, 0, c.Length);
}
+
public override int Read(System.Char[] c, int off, int len)
{
if (left > len)
{
- SupportClass.TextSupport.GetCharsFromString(s, upto, upto + len, c, off);
+ TextSupport.GetCharsFromString(s, upto, upto + len, c, off);
upto += len;
left -= len;
return len;
}
else if (0 == left)
{
+ // don't keep a reference (s could have been very large)
s = null;
return 0;
}
else
{
- SupportClass.TextSupport.GetCharsFromString(s, upto, upto + left, c, off);
+ TextSupport.GetCharsFromString(s, upto, upto + left, c, off);
int r = left;
left = 0;
upto = s.Length;
return r;
}
}
+
+ [Obsolete("Use Dispose() instead")]
public override void Close()
{
+ Dispose();
}
-
public override int Read()
{
if (left > 0)
Modified: incubator/lucene.net/trunk/src/core/Index/SegmentInfo.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/SegmentInfo.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/SegmentInfo.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/SegmentInfo.cs Tue Feb 28 22:43:08 2012
@@ -16,7 +16,8 @@
*/
using System;
-
+using System.Collections.Generic;
+using Lucene.Net.Support;
using Directory = Lucene.Net.Store.Directory;
using IndexInput = Lucene.Net.Store.IndexInput;
using IndexOutput = Lucene.Net.Store.IndexOutput;
@@ -34,59 +35,59 @@ namespace Lucene.Net.Index
public sealed class SegmentInfo : System.ICloneable
{
- internal const int NO = - 1; // e.g. no norms; no deletes;
- internal const int YES = 1; // e.g. have norms; have deletes;
- internal const int CHECK_DIR = 0; // e.g. must check dir to see if there are norms/deletions
- internal const int WITHOUT_GEN = 0; // a file name that has no GEN in it.
-
- public System.String name; // unique name in dir
- public int docCount; // number of docs in seg
- public Directory dir; // where segment resides
-
- private bool preLockless; // true if this is a segments file written before
- // lock-less commits (2.1)
-
- private long delGen; // current generation of del file; NO if there
- // are no deletes; CHECK_DIR if it's a pre-2.1 segment
- // (and we must check filesystem); YES or higher if
- // there are deletes at generation N
-
- private long[] normGen; // current generation of each field's norm file.
- // If this array is null, for lockLess this means no
- // separate norms. For preLockLess this means we must
- // check filesystem. If this array is not null, its
- // values mean: NO says this field has no separate
- // norms; CHECK_DIR says it is a preLockLess segment and
- // filesystem must be checked; >= YES says this field
- // has separate norms with the specified generation
-
- private sbyte isCompoundFile; // NO if it is not; YES if it is; CHECK_DIR if it's
- // pre-2.1 (ie, must check file system to see
- // if <name>.cfs and <name>.nrm exist)
-
- private bool hasSingleNormFile; // true if this segment maintains norms in a single file;
- // false otherwise
- // this is currently false for segments populated by DocumentWriter
- // and true for newly created merged segments (both
- // compound and non compound).
-
- private System.Collections.Generic.IList<string> files; // cached list of files that this segment uses
- // in the Directory
-
- internal long sizeInBytes = - 1; // total byte size of all of our files (computed on demand)
-
- private int docStoreOffset; // if this segment shares stored fields & vectors, this
- // offset is where in that file this segment's docs begin
- private System.String docStoreSegment; // name used to derive fields/vectors file we share with
- // other segments
- private bool docStoreIsCompoundFile; // whether doc store files are stored in compound file (*.cfx)
+ internal const int NO = - 1; // e.g. no norms; no deletes;
+ internal const int YES = 1; // e.g. have norms; have deletes;
+ internal const int CHECK_DIR = 0; // e.g. must check dir to see if there are norms/deletions
+ internal const int WITHOUT_GEN = 0; // a file name that has no GEN in it.
+
+ public System.String name; // unique name in dir
+ public int docCount; // number of docs in seg
+ public Directory dir; // where segment resides
+
+ private bool preLockless; // true if this is a segments file written before
+ // lock-less commits (2.1)
+
+ private long delGen; // current generation of del file; NO if there
+ // are no deletes; CHECK_DIR if it's a pre-2.1 segment
+ // (and we must check filesystem); YES or higher if
+ // there are deletes at generation N
+
+ private long[] normGen; // current generation of each field's norm file.
+ // If this array is null, for lockLess this means no
+ // separate norms. For preLockLess this means we must
+ // check filesystem. If this array is not null, its
+ // values mean: NO says this field has no separate
+ // norms; CHECK_DIR says it is a preLockLess segment and
+ // filesystem must be checked; >= YES says this field
+ // has separate norms with the specified generation
+
+ private sbyte isCompoundFile; // NO if it is not; YES if it is; CHECK_DIR if it's
+ // pre-2.1 (ie, must check file system to see
+ // if <name>.cfs and <name>.nrm exist)
+
+ private bool hasSingleNormFile; // true if this segment maintains norms in a single file;
+ // false otherwise
+ // this is currently false for segments populated by DocumentWriter
+ // and true for newly created merged segments (both
+ // compound and non compound).
+
+ private IList<string> files; // cached list of files that this segment uses
+ // in the Directory
+
+ internal long sizeInBytes = - 1; // total byte size of all of our files (computed on demand)
+
+ private int docStoreOffset; // if this segment shares stored fields & vectors, this
+ // offset is where in that file this segment's docs begin
+ private System.String docStoreSegment; // name used to derive fields/vectors file we share with
+ // other segments
+ private bool docStoreIsCompoundFile; // whether doc store files are stored in compound file (*.cfx)
- private int delCount; // How many deleted docs in this segment, or -1 if not yet known
- // (if it's an older index)
+ private int delCount; // How many deleted docs in this segment, or -1 if not yet known
+ // (if it's an older index)
- private bool hasProx; // True if this segment has any fields with omitTermFreqAndPositions==false
+ private bool hasProx; // True if this segment has any fields with omitTermFreqAndPositions==false
- private System.Collections.Generic.IDictionary<string, string> diagnostics;
+ private IDictionary<string, string> diagnostics;
public override System.String ToString()
{
@@ -151,14 +152,12 @@ namespace Lucene.Net.Index
delCount = src.delCount;
}
- // must be Map<String, String>
- internal void SetDiagnostics(System.Collections.Generic.IDictionary<string, string> diagnostics)
+ internal void SetDiagnostics(IDictionary<string, string> diagnostics)
{
this.diagnostics = diagnostics;
}
- // returns Map<String, String>
- public System.Collections.Generic.IDictionary<string, string> GetDiagnostics()
+ public IDictionary<string, string> GetDiagnostics()
{
return diagnostics;
}
@@ -242,7 +241,7 @@ namespace Lucene.Net.Index
}
else
{
- diagnostics = new System.Collections.Generic.Dictionary<string,string>();
+ diagnostics = new Dictionary<string,string>();
}
}
else
@@ -257,7 +256,7 @@ namespace Lucene.Net.Index
docStoreSegment = null;
delCount = - 1;
hasProx = true;
- diagnostics = new System.Collections.Generic.Dictionary<string,string>();
+ diagnostics = new Dictionary<string,string>();
}
}
@@ -294,12 +293,12 @@ namespace Lucene.Net.Index
{
if (sizeInBytes == - 1)
{
- System.Collections.Generic.IList<string> files = Files();
+ IList<string> files = Files();
int size = files.Count;
sizeInBytes = 0;
for (int i = 0; i < size; i++)
{
- System.String fileName = (System.String) files[i];
+ System.String fileName = files[i];
// We don't count bytes used by a shared doc store
// against this segment:
if (docStoreOffset == - 1 || !IndexFileNames.IsDocStoreFile(fileName))
@@ -368,6 +367,7 @@ namespace Lucene.Net.Index
si.hasProx = hasProx;
si.preLockless = preLockless;
si.hasSingleNormFile = hasSingleNormFile;
+ si.diagnostics = new HashMap<string, string>(this.diagnostics);
if (this.diagnostics != null)
{
si.diagnostics = new System.Collections.Generic.Dictionary<string, string>();
@@ -450,18 +450,20 @@ namespace Lucene.Net.Index
// This means this segment was saved with pre-LOCKLESS
// code. So we must fallback to the original
// directory list check:
- System.String[] result = dir.List();
+ System.String[] result = dir.ListAll();
if (result == null)
{
- throw new System.IO.IOException("cannot read directory " + dir + ": list() returned null");
+ throw new System.IO.IOException("cannot read directory " + dir + ": ListAll() returned null");
}
-
+
+ IndexFileNameFilter filter = IndexFileNameFilter.GetFilter();
System.String pattern;
pattern = name + ".s";
int patternLength = pattern.Length;
for (int i = 0; i < result.Length; i++)
{
- if (result[i].StartsWith(pattern) && System.Char.IsDigit(result[i][patternLength]))
+ string fileName = result[i];
+ if (filter.Accept(null, fileName) && fileName.StartsWith(pattern) && char.IsDigit(fileName[patternLength]))
return true;
}
return false;
@@ -690,7 +692,7 @@ namespace Lucene.Net.Index
return hasProx;
}
- private void AddIfExists(System.Collections.Generic.IList<string> files, System.String fileName)
+ private void AddIfExists(IList<string> files, System.String fileName)
{
if (dir.FileExists(fileName))
files.Add(fileName);
@@ -702,7 +704,7 @@ namespace Lucene.Net.Index
* modify it.
*/
- public System.Collections.Generic.IList<string> Files()
+ public IList<string> Files()
{
if (files != null)
@@ -711,7 +713,7 @@ namespace Lucene.Net.Index
return files;
}
- System.Collections.Generic.List<string> fileList = new System.Collections.Generic.List<string>();
+ var fileList = new System.Collections.Generic.List<string>();
bool useCompoundFile = GetUseCompoundFile();
@@ -865,16 +867,14 @@ namespace Lucene.Net.Index
/// </summary>
public override bool Equals(System.Object obj)
{
- SegmentInfo other;
- try
- {
- other = (SegmentInfo) obj;
- }
- catch (System.InvalidCastException cce)
- {
- return false;
- }
- return other.dir == dir && other.name.Equals(name);
+ if (this == obj) return true;
+
+ if (obj is SegmentInfo)
+ {
+ SegmentInfo other = (SegmentInfo) obj;
+ return other.dir == dir && other.name.Equals(name);
+ }
+ return false;
}
public override int GetHashCode()
Modified: incubator/lucene.net/trunk/src/core/Index/SegmentInfos.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/SegmentInfos.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/SegmentInfos.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/SegmentInfos.cs Tue Feb 28 22:43:08 2012
@@ -16,7 +16,8 @@
*/
using System;
-
+using System.Collections.Generic;
+using Lucene.Net.Support;
using ChecksumIndexInput = Lucene.Net.Store.ChecksumIndexInput;
using ChecksumIndexOutput = Lucene.Net.Store.ChecksumIndexOutput;
using Directory = Lucene.Net.Store.Directory;
@@ -34,7 +35,7 @@ namespace Lucene.Net.Index
/// (subject to change suddenly in the next release)<p/>
/// </summary>
[Serializable]
- public sealed class SegmentInfos:System.Collections.ArrayList
+ public sealed class SegmentInfos : List<SegmentInfo>, ICloneable
{
private class AnonymousClassFindSegmentsFile:FindSegmentsFile
{
@@ -126,7 +127,7 @@ namespace Lucene.Net.Index
// or wrote; this is normally the same as generation except if
// there was an IOException that had interrupted a commit
- private System.Collections.Generic.IDictionary<string, string> userData = new System.Collections.Generic.Dictionary<string, string>(); // Opaque Map<String, String> that user can specify during IndexWriter.commit
+ private IDictionary<string, string> userData = new HashMap<string, string>(); // Opaque Map<String, String> that user can specify during IndexWriter.commit
/// <summary> If non-null, information about loading segments_N files</summary>
/// <seealso cref="SetInfoStream">
@@ -224,7 +225,7 @@ namespace Lucene.Net.Index
}
else if (fileName.StartsWith(IndexFileNames.SEGMENTS))
{
- return SupportClass.Number.ToInt64(fileName.Substring(1 + IndexFileNames.SEGMENTS.Length));
+ return Number.ToInt64(fileName.Substring(1 + IndexFileNames.SEGMENTS.Length));
}
else
{
@@ -314,22 +315,25 @@ namespace Lucene.Net.Index
}
else if (0 != input.ReadByte())
{
- userData = new System.Collections.Generic.Dictionary<string,string>();
+ // TODO: Should be read-only map
+ userData = new HashMap<string,string>();
userData.Add("userData", input.ReadString());
}
else
{
- userData = new System.Collections.Generic.Dictionary<string, string>();
+ // TODO: Should be empty read-only map
+ userData = new HashMap<string, string>();
}
}
else
{
- userData = new System.Collections.Generic.Dictionary<string, string>();
+ // TODO: Should be empty read-only map
+ userData = new HashMap<string, string>();
}
if (format <= FORMAT_CHECKSUM)
{
- long checksumNow = input.GetChecksum();
+ long checksumNow = input.Checksum;
long checksumThen = input.ReadLong();
if (checksumNow != checksumThen)
throw new CorruptIndexException("checksum mismatch in segments file");
@@ -432,18 +436,18 @@ namespace Lucene.Net.Index
/// SegmentInfo.
/// </summary>
- public override System.Object Clone()
+ public System.Object Clone()
{
SegmentInfos sis = new SegmentInfos();
for (int i = 0; i < this.Count; i++)
{
- sis.Add(((SegmentInfo) this[i]).Clone());
+ sis.Add((SegmentInfo)this[i].Clone());
}
sis.counter = this.counter;
sis.generation = this.generation;
sis.lastGeneration = this.lastGeneration;
// sis.pendingSegnOutput = this.pendingSegnOutput; // {{Aroush-2.9}} needed?
- sis.userData = new System.Collections.Generic.Dictionary<string, string>(userData);
+ sis.userData = new HashMap<string, string>(userData);
sis.version = this.version;
return sis;
}
@@ -563,7 +567,7 @@ namespace Lucene.Net.Index
{
if (infoStream != null)
{
- infoStream.WriteLine("SIS [" + SupportClass.ThreadClass.Current().Name + "]: " + message);
+ infoStream.WriteLine("SIS [" + ThreadClass.Current().Name + "]: " + message);
}
}
@@ -579,8 +583,8 @@ namespace Lucene.Net.Index
{
internal Directory directory;
-
- public FindSegmentsFile(Directory directory)
+
+ protected FindSegmentsFile(Directory directory)
{
this.directory = directory;
}
@@ -701,10 +705,11 @@ namespace Lucene.Net.Index
}
catch (System.Threading.ThreadInterruptedException ie)
{
- // In 3.0 we will change this to throw
- // InterruptedException instead
- SupportClass.ThreadClass.Current().Interrupt();
- throw new System.SystemException(ie.Message, ie);
+ //// In 3.0 we will change this to throw
+ //// InterruptedException instead
+ //SupportClass.ThreadClass.Current().Interrupt();
+ //throw new System.SystemException(ie.Message, ie);
+ throw;
}
}
@@ -718,17 +723,7 @@ namespace Lucene.Net.Index
if (gen == - 1)
{
- // Neither approach found a generation
- System.String s;
- if (files != null)
- {
- s = "";
- for (int i = 0; i < files.Length; i++)
- s += (" " + files[i]);
- }
- else
- s = " null";
- throw new System.IO.FileNotFoundException("no segments* file found in " + directory + ": files:" + s);
+ throw new System.IO.FileNotFoundException("no segments* file found in " + directory + ": files:" + string.Join(" ", files));
}
}
@@ -850,7 +845,7 @@ namespace Lucene.Net.Index
public SegmentInfos Range(int first, int last)
{
SegmentInfos infos = new SegmentInfos();
- infos.AddRange((System.Collections.IList) ((System.Collections.ArrayList) this).GetRange(first, last - first));
+ infos.AddRange(this.GetRange(first, last - first));
return infos;
}
@@ -913,11 +908,10 @@ namespace Lucene.Net.Index
/// </summary>
public System.Collections.Generic.ICollection<string> Files(Directory dir, bool includeSegmentsFile)
{
- System.Collections.Generic.Dictionary<string, string> files = new System.Collections.Generic.Dictionary<string, string>();
+ System.Collections.Generic.HashSet<string> files = new System.Collections.Generic.HashSet<string>();
if (includeSegmentsFile)
{
- string tmp = GetCurrentSegmentFileName();
- files.Add(tmp, tmp);
+ files.Add(GetCurrentSegmentFileName());
}
int size = Count;
for (int i = 0; i < size; i++)
@@ -925,10 +919,10 @@ namespace Lucene.Net.Index
SegmentInfo info = Info(i);
if (info.dir == dir)
{
- SupportClass.CollectionsHelper.AddAllIfNotContains(files, Info(i).Files());
+ files.UnionWith(Info(i).Files());
}
}
- return files.Keys;
+ return files;
}
internal void FinishCommit(Directory dir)
@@ -1043,7 +1037,7 @@ namespace Lucene.Net.Index
{
if (data == null)
{
- userData = new System.Collections.Generic.Dictionary<string,string>();
+ userData = new HashMap<string, string>();
}
else
{
Modified: incubator/lucene.net/trunk/src/core/Index/SegmentMergeInfo.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/SegmentMergeInfo.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/SegmentMergeInfo.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/SegmentMergeInfo.cs Tue Feb 28 22:43:08 2012
@@ -20,7 +20,7 @@ using System;
namespace Lucene.Net.Index
{
- sealed class SegmentMergeInfo
+ sealed class SegmentMergeInfo : IDisposable
{
internal Term term;
internal int base_Renamed;
@@ -30,6 +30,8 @@ namespace Lucene.Net.Index
internal int delCount;
private TermPositions postings; // use getPositions()
private int[] docMap; // use getDocMap()
+
+ private bool isDisposed;
internal SegmentMergeInfo(int b, TermEnum te, IndexReader r)
{
@@ -88,14 +90,19 @@ namespace Lucene.Net.Index
return false;
}
}
-
- internal void Close()
- {
- termEnum.Close();
- if (postings != null)
- {
- postings.Close();
- }
- }
+
+ public void Dispose()
+ {
+ if (isDisposed) return;
+
+ // Move to protected method if class becomes unsealed
+ termEnum.Close();
+ if (postings != null)
+ {
+ postings.Close();
+ }
+
+ isDisposed = true;
+ }
}
}
\ No newline at end of file
Modified: incubator/lucene.net/trunk/src/core/Index/SegmentMergeQueue.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/SegmentMergeQueue.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/SegmentMergeQueue.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/SegmentMergeQueue.cs Tue Feb 28 22:43:08 2012
@@ -16,34 +16,32 @@
*/
using System;
-
-using PriorityQueue = Lucene.Net.Util.PriorityQueue;
+using Lucene.Net.Util;
namespace Lucene.Net.Index
{
- sealed class SegmentMergeQueue:PriorityQueue
+ sealed class SegmentMergeQueue : PriorityQueue<SegmentMergeInfo>, IDisposable
{
internal SegmentMergeQueue(int size)
{
Initialize(size);
}
-
- public override bool LessThan(System.Object a, System.Object b)
+
+ public override bool LessThan(SegmentMergeInfo stiA, SegmentMergeInfo stiB)
{
- SegmentMergeInfo stiA = (SegmentMergeInfo) a;
- SegmentMergeInfo stiB = (SegmentMergeInfo) b;
int comparison = stiA.term.CompareTo(stiB.term);
if (comparison == 0)
return stiA.base_Renamed < stiB.base_Renamed;
else
return comparison < 0;
}
-
- internal void Close()
- {
- while (Top() != null)
- ((SegmentMergeInfo) Pop()).Close();
- }
+
+ public void Dispose()
+ {
+ // Move to protected method if class becomes unsealed
+ while (Top() != null)
+ Pop().Dispose();
+ }
}
}
\ No newline at end of file
Modified: incubator/lucene.net/trunk/src/core/Index/SegmentMerger.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/SegmentMerger.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/SegmentMerger.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/SegmentMerger.cs Tue Feb 28 22:43:08 2012
@@ -16,7 +16,7 @@
*/
using System;
-
+using System.Collections.Generic;
using Document = Lucene.Net.Documents.Document;
using FieldSelector = Lucene.Net.Documents.FieldSelector;
using FieldSelectorResult = Lucene.Net.Documents.FieldSelectorResult;
@@ -91,31 +91,7 @@ namespace Lucene.Net.Index
// do nothing
}
}
- [Serializable]
- private class AnonymousClassFieldSelector : FieldSelector
- {
- public AnonymousClassFieldSelector(SegmentMerger enclosingInstance)
- {
- InitBlock(enclosingInstance);
- }
- private void InitBlock(SegmentMerger enclosingInstance)
- {
- this.enclosingInstance = enclosingInstance;
- }
- private SegmentMerger enclosingInstance;
- public SegmentMerger Enclosing_Instance
- {
- get
- {
- return enclosingInstance;
- }
-
- }
- public FieldSelectorResult Accept(System.String fieldName)
- {
- return FieldSelectorResult.LOAD_FOR_MERGE;
- }
- }
+
private void InitBlock()
{
termIndexInterval = IndexWriter.DEFAULT_TERM_INDEX_INTERVAL;
@@ -128,7 +104,7 @@ namespace Lucene.Net.Index
private System.String segment;
private int termIndexInterval;
- private System.Collections.IList readers = new System.Collections.ArrayList();
+ private IList<IndexReader> readers = new List<IndexReader>();
private FieldInfos fieldInfos;
private int mergedDocs;
@@ -197,7 +173,7 @@ namespace Lucene.Net.Index
/// </returns>
internal IndexReader SegmentReader(int i)
{
- return (IndexReader) readers[i];
+ return readers[i];
}
/// <summary> Merges the readers specified by the <see cref="Add" /> method into the directory passed to the constructor</summary>
@@ -246,17 +222,17 @@ namespace Lucene.Net.Index
/// Should not be called before merge().
/// </summary>
/// <throws> IOException </throws>
- public /*internal*/ void CloseReaders()
+ internal void CloseReaders()
{
- for (System.Collections.IEnumerator iter = readers.GetEnumerator(); iter.MoveNext(); )
+ foreach(IndexReader reader in readers)
{
- ((IndexReader) iter.Current).Close();
+ reader.Dispose();
}
}
- public /*internal*/ System.Collections.Generic.ICollection<string> GetMergedFiles()
+ public /*internal*/ ICollection<string> GetMergedFiles()
{
- System.Collections.Generic.IDictionary<string,string> fileSet = new System.Collections.Generic.Dictionary<string,string>();
+ ISet<string> fileSet = new HashSet<string>();
// Basic files
for (int i = 0; i < IndexFileNames.COMPOUND_EXTENSIONS.Length; i++)
@@ -267,7 +243,7 @@ namespace Lucene.Net.Index
continue;
if (mergeDocStores || (!ext.Equals(IndexFileNames.FIELDS_EXTENSION) && !ext.Equals(IndexFileNames.FIELDS_INDEX_EXTENSION)))
- fileSet[segment + "." + ext] = segment + "." + ext;
+ fileSet.Add(segment + "." + ext);
}
// Fieldable norm files
@@ -276,7 +252,7 @@ namespace Lucene.Net.Index
FieldInfo fi = fieldInfos.FieldInfo(i);
if (fi.isIndexed && !fi.omitNorms)
{
- fileSet[segment + "." + IndexFileNames.NORMS_EXTENSION]=segment + "." + IndexFileNames.NORMS_EXTENSION;
+ fileSet.Add(segment + "." + IndexFileNames.NORMS_EXTENSION);
break;
}
}
@@ -286,23 +262,22 @@ namespace Lucene.Net.Index
{
for (int i = 0; i < IndexFileNames.VECTOR_EXTENSIONS.Length; i++)
{
- fileSet[segment + "." + IndexFileNames.VECTOR_EXTENSIONS[i]] = segment + "." + IndexFileNames.VECTOR_EXTENSIONS[i];
+ fileSet.Add(segment + "." + IndexFileNames.VECTOR_EXTENSIONS[i]);
}
}
- return fileSet.Keys;
+ return fileSet;
}
- public /*internal*/ System.Collections.Generic.ICollection<string> CreateCompoundFile(System.String fileName)
+ public /*internal*/ ICollection<string> CreateCompoundFile(System.String fileName)
{
- System.Collections.Generic.ICollection<string> files = GetMergedFiles();
+ ICollection<string> files = GetMergedFiles();
CompoundFileWriter cfsWriter = new CompoundFileWriter(directory, fileName, checkAbort);
// Now merge all added files
- System.Collections.IEnumerator it = files.GetEnumerator();
- while (it.MoveNext())
+ foreach(var file in files)
{
- cfsWriter.AddFile((System.String) it.Current);
+ cfsWriter.AddFile(file);
}
// Perform the merge
@@ -311,17 +286,16 @@ namespace Lucene.Net.Index
return files;
}
- private void AddIndexed(IndexReader reader, FieldInfos fInfos, System.Collections.Generic.ICollection<string> names, bool storeTermVectors, bool storePositionWithTermVector, bool storeOffsetWithTermVector, bool storePayloads, bool omitTFAndPositions)
- {
- System.Collections.Generic.IEnumerator<string> i = names.GetEnumerator();
- while (i.MoveNext())
- {
- System.String field = i.Current;
- fInfos.Add(field, true, storeTermVectors, storePositionWithTermVector, storeOffsetWithTermVector, !reader.HasNorms(field), storePayloads, omitTFAndPositions);
- }
- }
-
- private SegmentReader[] matchingSegmentReaders;
+ private void AddIndexed(IndexReader reader, FieldInfos fInfos, ICollection<string> names, bool storeTermVectors, bool storePositionWithTermVector, bool storeOffsetWithTermVector, bool storePayloads, bool omitTFAndPositions)
+ {
+ foreach (var field in names)
+ {
+ fInfos.Add(field, true, storeTermVectors, storePositionWithTermVector, storeOffsetWithTermVector,
+ !reader.HasNorms(field), storePayloads, omitTFAndPositions);
+ }
+ }
+
+ private SegmentReader[] matchingSegmentReaders;
private int[] rawDocLengths;
private int[] rawDocLengths2;
@@ -339,7 +313,7 @@ namespace Lucene.Net.Index
// stored fields:
for (int i = 0; i < numReaders; i++)
{
- IndexReader reader = (IndexReader) readers[i];
+ IndexReader reader = readers[i];
if (reader is SegmentReader)
{
SegmentReader segmentReader = (SegmentReader) reader;
@@ -372,9 +346,7 @@ namespace Lucene.Net.Index
if (!mergeDocStores)
{
- // When we are not merging by doc stores, that means
- // all segments were written as part of a single
- // autoCommit=false IndexWriter session, so their field
+ // When we are not merging by doc stores, their field
// name -> number mapping are the same. So, we start
// with the fieldInfos of the last segment in this
// case, to keep that numbering.
@@ -386,9 +358,8 @@ namespace Lucene.Net.Index
fieldInfos = new FieldInfos(); // merge field names
}
- for (System.Collections.IEnumerator iter = readers.GetEnumerator(); iter.MoveNext(); )
+ foreach(IndexReader reader in readers)
{
- IndexReader reader = (IndexReader) iter.Current;
if (reader is SegmentReader)
{
SegmentReader segmentReader = (SegmentReader) reader;
@@ -420,20 +391,14 @@ namespace Lucene.Net.Index
if (mergeDocStores)
{
-
- // for merging we don't want to compress/uncompress the data, so to tell the FieldsReader that we're
- // in merge mode, we use this FieldSelector
- FieldSelector fieldSelectorMerge = new AnonymousClassFieldSelector(this);
-
// merge field values
FieldsWriter fieldsWriter = new FieldsWriter(directory, segment, fieldInfos);
try
{
int idx = 0;
- for (System.Collections.IEnumerator iter = readers.GetEnumerator(); iter.MoveNext(); )
+ foreach(IndexReader reader in readers)
{
- IndexReader reader = (IndexReader) iter.Current;
SegmentReader matchingSegmentReader = matchingSegmentReaders[idx++];
FieldsReader matchingFieldsReader = null;
if (matchingSegmentReader != null)
@@ -446,17 +411,17 @@ namespace Lucene.Net.Index
}
if (reader.HasDeletions())
{
- docCount += CopyFieldsWithDeletions(fieldSelectorMerge, fieldsWriter, reader, matchingFieldsReader);
+ docCount += CopyFieldsWithDeletions(fieldsWriter, reader, matchingFieldsReader);
}
else
{
- docCount += CopyFieldsNoDeletions(fieldSelectorMerge, fieldsWriter, reader, matchingFieldsReader);
+ docCount += CopyFieldsNoDeletions(fieldsWriter, reader, matchingFieldsReader);
}
}
}
finally
{
- fieldsWriter.Close();
+ fieldsWriter.Dispose();
}
System.String fileName = segment + "." + IndexFileNames.FIELDS_INDEX_EXTENSION;
@@ -475,16 +440,16 @@ namespace Lucene.Net.Index
// just sum numDocs() of each segment to get total docCount
else
{
- for (System.Collections.IEnumerator iter = readers.GetEnumerator(); iter.MoveNext(); )
+ foreach(IndexReader reader in readers)
{
- docCount += ((IndexReader) iter.Current).NumDocs();
+ docCount += reader.NumDocs();
}
}
return docCount;
}
- private int CopyFieldsWithDeletions(FieldSelector fieldSelectorMerge, FieldsWriter fieldsWriter, IndexReader reader, FieldsReader matchingFieldsReader)
+ private int CopyFieldsWithDeletions(FieldsWriter fieldsWriter, IndexReader reader, FieldsReader matchingFieldsReader)
{
int docCount = 0;
int maxDoc = reader.MaxDoc();
@@ -533,7 +498,7 @@ namespace Lucene.Net.Index
}
// NOTE: it's very important to first assign to doc then pass it to
// termVectorsWriter.addAllDocVectors; see LUCENE-1282
- Document doc = reader.Document(j, fieldSelectorMerge);
+ Document doc = reader.Document(j);
fieldsWriter.AddDocument(doc);
docCount++;
checkAbort.Work(300);
@@ -542,7 +507,7 @@ namespace Lucene.Net.Index
return docCount;
}
- private int CopyFieldsNoDeletions(FieldSelector fieldSelectorMerge, FieldsWriter fieldsWriter, IndexReader reader, FieldsReader matchingFieldsReader)
+ private int CopyFieldsNoDeletions(FieldsWriter fieldsWriter, IndexReader reader, FieldsReader matchingFieldsReader)
{
int maxDoc = reader.MaxDoc();
int docCount = 0;
@@ -564,7 +529,7 @@ namespace Lucene.Net.Index
{
// NOTE: it's very important to first assign to doc then pass it to
// termVectorsWriter.addAllDocVectors; see LUCENE-1282
- Document doc = reader.Document(docCount, fieldSelectorMerge);
+ Document doc = reader.Document(docCount);
fieldsWriter.AddDocument(doc);
checkAbort.Work(300);
}
@@ -581,7 +546,7 @@ namespace Lucene.Net.Index
try
{
int idx = 0;
- for (System.Collections.IEnumerator iter = readers.GetEnumerator(); iter.MoveNext(); )
+ foreach(IndexReader reader in readers)
{
SegmentReader matchingSegmentReader = matchingSegmentReaders[idx++];
TermVectorsReader matchingVectorsReader = null;
@@ -595,7 +560,6 @@ namespace Lucene.Net.Index
matchingVectorsReader = vectorsReader;
}
}
- IndexReader reader = (IndexReader) iter.Current;
if (reader.HasDeletions())
{
CopyVectorsWithDeletions(termVectorsWriter, matchingVectorsReader, reader);
@@ -608,7 +572,7 @@ namespace Lucene.Net.Index
}
finally
{
- termVectorsWriter.Close();
+ termVectorsWriter.Dispose();
}
System.String fileName = segment + "." + IndexFileNames.VECTORS_INDEX_EXTENSION;
@@ -726,7 +690,7 @@ namespace Lucene.Net.Index
{
consumer.Finish();
if (queue != null)
- queue.Close();
+ queue.Dispose();
}
}
@@ -738,7 +702,7 @@ namespace Lucene.Net.Index
int readerCount = readers.Count;
for (int i = 0; i < readerCount; i++)
{
- IndexReader reader = (IndexReader) readers[i];
+ IndexReader reader = readers[i];
TermEnum termEnum = reader.Terms();
SegmentMergeInfo smi = new SegmentMergeInfo(base_Renamed, termEnum, reader);
int[] docMap = smi.GetDocMap();
@@ -761,7 +725,7 @@ namespace Lucene.Net.Index
queue.Add(smi);
// initialize queue
else
- smi.Close();
+ smi.Dispose();
}
SegmentMergeInfo[] match = new SegmentMergeInfo[readers.Count];
@@ -772,14 +736,14 @@ namespace Lucene.Net.Index
while (queue.Size() > 0)
{
int matchSize = 0; // pop matching terms
- match[matchSize++] = (SegmentMergeInfo) queue.Pop();
+ match[matchSize++] = queue.Pop();
Term term = match[0].term;
- SegmentMergeInfo top = (SegmentMergeInfo) queue.Top();
+ SegmentMergeInfo top = queue.Top();
while (top != null && term.CompareTo(top.term) == 0)
{
- match[matchSize++] = (SegmentMergeInfo) queue.Pop();
- top = (SegmentMergeInfo) queue.Top();
+ match[matchSize++] = queue.Pop();
+ top = queue.Top();
}
if ((System.Object) currentField != (System.Object) term.field)
@@ -803,7 +767,7 @@ namespace Lucene.Net.Index
queue.Add(smi);
// restore queue
else
- smi.Close(); // done with a segment
+ smi.Dispose(); // done with a segment
}
}
}
@@ -898,9 +862,8 @@ namespace Lucene.Net.Index
output = directory.CreateOutput(segment + "." + IndexFileNames.NORMS_EXTENSION);
output.WriteBytes(NORMS_HEADER, NORMS_HEADER.Length);
}
- for (System.Collections.IEnumerator iter = readers.GetEnumerator(); iter.MoveNext(); )
+ foreach(IndexReader reader in readers)
{
- IndexReader reader = (IndexReader) iter.Current;
int maxDoc = reader.MaxDoc();
if (normBuffer == null || normBuffer.Length < maxDoc)
{
Modified: incubator/lucene.net/trunk/src/core/Index/SegmentReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/SegmentReader.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/SegmentReader.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/SegmentReader.cs Tue Feb 28 22:43:08 2012
@@ -16,7 +16,8 @@
*/
using System;
-
+using Lucene.Net.Support;
+using Lucene.Net.Util;
using Document = Lucene.Net.Documents.Document;
using FieldSelector = Lucene.Net.Documents.FieldSelector;
using BufferedIndexInput = Lucene.Net.Store.BufferedIndexInput;
@@ -24,7 +25,6 @@ using Directory = Lucene.Net.Store.Direc
using IndexInput = Lucene.Net.Store.IndexInput;
using IndexOutput = Lucene.Net.Store.IndexOutput;
using BitVector = Lucene.Net.Util.BitVector;
-using CloseableThreadLocal = Lucene.Net.Util.CloseableThreadLocal;
using DefaultSimilarity = Lucene.Net.Search.DefaultSimilarity;
namespace Lucene.Net.Index
@@ -35,7 +35,7 @@ namespace Lucene.Net.Index
/// <summary> <p/><b>NOTE:</b> This API is new and still experimental
/// (subject to change suddenly in the next release)<p/>
/// </summary>
- public class SegmentReader:IndexReader, System.ICloneable
+ public class SegmentReader : IndexReader, System.ICloneable
{
public SegmentReader()
{
@@ -50,8 +50,8 @@ namespace Lucene.Net.Index
private SegmentInfo si;
private int readBufferSize;
- internal CloseableThreadLocal fieldsReaderLocal;
- internal CloseableThreadLocal termVectorsLocal = new CloseableThreadLocal();
+ internal CloseableThreadLocal<FieldsReader> fieldsReaderLocal;
+ internal CloseableThreadLocal<TermVectorsReader> termVectorsLocal = new CloseableThreadLocal<TermVectorsReader>();
internal BitVector deletedDocs = null;
internal Ref deletedDocsRef = null;
@@ -265,14 +265,14 @@ namespace Lucene.Net.Index
// close everything, nothing is shared anymore with other readers
if (tis != null)
{
- tis.Close();
+ tis.Dispose();
// null so if an app hangs on to us we still free most ram
tis = null;
}
if (tisNoIndex != null)
{
- tisNoIndex.Close();
+ tisNoIndex.Dispose();
}
if (freqStream != null)
@@ -287,12 +287,12 @@ namespace Lucene.Net.Index
if (termVectorsReaderOrig != null)
{
- termVectorsReaderOrig.Close();
+ termVectorsReaderOrig.Dispose();
}
if (fieldsReaderOrig != null)
{
- fieldsReaderOrig.Close();
+ fieldsReaderOrig.Dispose();
}
if (cfsReader != null)
@@ -391,7 +391,7 @@ namespace Lucene.Net.Index
}
/// <summary> Sets the initial value </summary>
- private class FieldsReaderLocal:CloseableThreadLocal
+ private class FieldsReaderLocal : CloseableThreadLocal<FieldsReader>
{
public FieldsReaderLocal(SegmentReader enclosingInstance)
{
@@ -410,9 +410,9 @@ namespace Lucene.Net.Index
}
}
- public /*protected internal*/ override System.Object InitialValue()
+ public /*protected internal*/ override FieldsReader InitialValue()
{
- return Enclosing_Instance.core.GetFieldsReaderOrig().Clone();
+ return (FieldsReader) Enclosing_Instance.core.GetFieldsReaderOrig().Clone();
}
}
@@ -517,7 +517,7 @@ namespace Lucene.Net.Index
if (in_Renamed != Enclosing_Instance.singleNormStream)
{
// It's private to us -- just close it
- in_Renamed.Close();
+ in_Renamed.Dispose();
}
else
{
@@ -525,7 +525,7 @@ namespace Lucene.Net.Index
// maybe close the shared norm stream
if (Enclosing_Instance.singleNormRef.DecRef() == 0)
{
- Enclosing_Instance.singleNormStream.Close();
+ Enclosing_Instance.singleNormStream.Dispose();
Enclosing_Instance.singleNormStream = null;
}
}
@@ -768,24 +768,7 @@ namespace Lucene.Net.Index
}
}
- internal System.Collections.IDictionary norms = new System.Collections.Hashtable();
-
- /// <summary>The class which implements SegmentReader. </summary>
- // @deprecated (LUCENE-1677)
- private static System.Type IMPL;
-
- // @deprecated (LUCENE-1677)
- private static System.Type READONLY_IMPL;
-
- /// <throws> CorruptIndexException if the index is corrupt </throws>
- /// <throws> IOException if there is a low-level IO error </throws>
- /// <deprecated>
- /// </deprecated>
- [Obsolete]
- public static SegmentReader Get(SegmentInfo si)
- {
- return Get(false, si.dir, si, BufferedIndexInput.BUFFER_SIZE, true, IndexReader.DEFAULT_TERMS_INDEX_DIVISOR);
- }
+ internal System.Collections.Generic.IDictionary<string, Norm> norms = new HashMap<string, Norm>();
/// <throws> CorruptIndexException if the index is corrupt </throws>
/// <throws> IOException if there is a low-level IO error </throws>
@@ -796,30 +779,9 @@ namespace Lucene.Net.Index
/// <throws> CorruptIndexException if the index is corrupt </throws>
/// <throws> IOException if there is a low-level IO error </throws>
- /// <deprecated>
- /// </deprecated>
- [Obsolete]
- internal static SegmentReader Get(SegmentInfo si, int readBufferSize, bool doOpenStores, int termInfosIndexDivisor)
- {
- return Get(false, si.dir, si, readBufferSize, doOpenStores, termInfosIndexDivisor);
- }
-
- /// <throws> CorruptIndexException if the index is corrupt </throws>
- /// <throws> IOException if there is a low-level IO error </throws>
public static SegmentReader Get(bool readOnly, Directory dir, SegmentInfo si, int readBufferSize, bool doOpenStores, int termInfosIndexDivisor)
{
- SegmentReader instance;
- try
- {
- if (readOnly)
- instance = (SegmentReader) System.Activator.CreateInstance(READONLY_IMPL);
- else
- instance = (SegmentReader) System.Activator.CreateInstance(IMPL);
- }
- catch (System.Exception e)
- {
- throw new System.SystemException("cannot load SegmentReader class: " + e, e);
- }
+ SegmentReader instance = readOnly ? new ReadOnlySegmentReader() : new SegmentReader();
instance.readOnly = readOnly;
instance.si = si;
instance.readBufferSize = readBufferSize;
@@ -962,18 +924,7 @@ namespace Lucene.Net.Index
System.Diagnostics.Debug.Assert(!doClone ||(normsUpToDate && deletionsUpToDate));
// clone reader
- SegmentReader clone;
- try
- {
- if (openReadOnly)
- clone = (SegmentReader) System.Activator.CreateInstance(READONLY_IMPL);
- else
- clone = (SegmentReader) System.Activator.CreateInstance(IMPL);
- }
- catch (System.Exception e)
- {
- throw new System.SystemException("cannot load SegmentReader class: " + e, e);
- }
+ SegmentReader clone = openReadOnly ? new ReadOnlySegmentReader() : new SegmentReader();
bool success = false;
try
@@ -1019,8 +970,7 @@ namespace Lucene.Net.Index
}
}
- clone.SetDisableFakeNorms(GetDisableFakeNorms());
- clone.norms = new System.Collections.Hashtable();
+ clone.norms = new HashMap<string, Norm>();
// Clone norms
for (int i = 0; i < fieldNormsChanged.Length; i++)
@@ -1030,9 +980,9 @@ namespace Lucene.Net.Index
if (doClone || !fieldNormsChanged[i])
{
System.String curField = core.fieldInfos.FieldInfo(i).name;
- Norm norm = (Norm) this.norms[curField];
+ Norm norm = this.norms[curField];
if (norm != null)
- clone.norms[curField] = norm.Clone();
+ clone.norms[curField] = (Norm)norm.Clone();
}
}
@@ -1055,14 +1005,6 @@ namespace Lucene.Net.Index
return clone;
}
}
-
- /// <deprecated>
- /// </deprecated>
- [Obsolete]
- protected internal override void DoCommit()
- {
- DoCommit(null);
- }
protected internal override void DoCommit(System.Collections.Generic.IDictionary<string, string> commitUserData)
{
@@ -1129,17 +1071,14 @@ namespace Lucene.Net.Index
if (normsDirty)
{ // re-write norms
si.SetNumFields(core.fieldInfos.Size());
- System.Collections.IEnumerator it = norms.Values.GetEnumerator();
- while (it.MoveNext())
+ foreach (Norm norm in norms.Values)
{
- Norm norm = (Norm)it.Current;
if (norm.dirty)
{
norm.ReWrite(si);
}
}
}
-
deletedDocsDirty = false;
normsDirty = false;
hasChanges = false;
@@ -1147,7 +1086,7 @@ namespace Lucene.Net.Index
internal virtual FieldsReader GetFieldsReader()
{
- return (FieldsReader) fieldsReaderLocal.Get();
+ return fieldsReaderLocal.Get();
}
protected internal override void DoClose()
@@ -1162,10 +1101,9 @@ namespace Lucene.Net.Index
deletedDocs = null;
}
- System.Collections.IEnumerator it = norms.Values.GetEnumerator();
- while (it.MoveNext())
+ foreach(Norm norm in norms.Values)
{
- ((Norm) it.Current).DecRef();
+ norm.DecRef();
}
if (core != null)
{
@@ -1328,56 +1266,56 @@ namespace Lucene.Net.Index
{
EnsureOpen();
- System.Collections.Generic.IDictionary<string, string> fieldSet = new System.Collections.Generic.Dictionary<string, string>();
+ System.Collections.Generic.ISet<string> fieldSet = new System.Collections.Generic.HashSet<string>();
for (int i = 0; i < core.fieldInfos.Size(); i++)
{
FieldInfo fi = core.fieldInfos.FieldInfo(i);
if (fieldOption == IndexReader.FieldOption.ALL)
{
- fieldSet[fi.name] = fi.name;
+ fieldSet.Add(fi.name);
}
else if (!fi.isIndexed && fieldOption == IndexReader.FieldOption.UNINDEXED)
- {
- fieldSet[fi.name] = fi.name;
+ {
+ fieldSet.Add(fi.name);
}
else if (fi.omitTermFreqAndPositions && fieldOption == IndexReader.FieldOption.OMIT_TERM_FREQ_AND_POSITIONS)
- {
- fieldSet[fi.name] = fi.name;
+ {
+ fieldSet.Add(fi.name);
}
else if (fi.storePayloads && fieldOption == IndexReader.FieldOption.STORES_PAYLOADS)
- {
- fieldSet[fi.name] = fi.name;
+ {
+ fieldSet.Add(fi.name);
}
else if (fi.isIndexed && fieldOption == IndexReader.FieldOption.INDEXED)
- {
- fieldSet[fi.name] = fi.name;
+ {
+ fieldSet.Add(fi.name);
}
else if (fi.isIndexed && fi.storeTermVector == false && fieldOption == IndexReader.FieldOption.INDEXED_NO_TERMVECTOR)
- {
- fieldSet[fi.name] = fi.name;
+ {
+ fieldSet.Add(fi.name);
}
else if (fi.storeTermVector == true && fi.storePositionWithTermVector == false && fi.storeOffsetWithTermVector == false && fieldOption == IndexReader.FieldOption.TERMVECTOR)
- {
- fieldSet[fi.name] = fi.name;
+ {
+ fieldSet.Add(fi.name);
}
else if (fi.isIndexed && fi.storeTermVector && fieldOption == IndexReader.FieldOption.INDEXED_WITH_TERMVECTOR)
- {
- fieldSet[fi.name] = fi.name;
+ {
+ fieldSet.Add(fi.name);
}
else if (fi.storePositionWithTermVector && fi.storeOffsetWithTermVector == false && fieldOption == IndexReader.FieldOption.TERMVECTOR_WITH_POSITION)
- {
- fieldSet[fi.name] = fi.name;
+ {
+ fieldSet.Add(fi.name);
}
else if (fi.storeOffsetWithTermVector && fi.storePositionWithTermVector == false && fieldOption == IndexReader.FieldOption.TERMVECTOR_WITH_OFFSET)
- {
- fieldSet[fi.name] = fi.name;
- }
- else if ((fi.storeOffsetWithTermVector && fi.storePositionWithTermVector) && fieldOption == IndexReader.FieldOption.TERMVECTOR_WITH_POSITION_OFFSET)
- {
- fieldSet[fi.name] = fi.name;
+ {
+ fieldSet.Add(fi.name);
}
+ else if ((fi.storeOffsetWithTermVector && fi.storePositionWithTermVector) && fieldOption == IndexReader.FieldOption.TERMVECTOR_WITH_POSITION_OFFSET)
+ {
+ fieldSet.Add(fi.name);
+ }
}
- return fieldSet.Keys;
+ return fieldSet;
}
@@ -1386,36 +1324,16 @@ namespace Lucene.Net.Index
lock (this)
{
EnsureOpen();
- return norms.Contains(field);
+ return norms.ContainsKey(field);
}
}
- internal static byte[] CreateFakeNorms(int size)
- {
- byte[] ones = new byte[size];
- byte val = (byte) DefaultSimilarity.EncodeNorm(1.0f);
- for (int i = 0; i < ones.Length; i++)
- {
- ones[i] = val;
- }
- return ones;
- }
-
- private byte[] ones;
- private byte[] FakeNorms()
- {
- System.Diagnostics.Debug.Assert(!GetDisableFakeNorms());
- if (ones == null)
- ones = CreateFakeNorms(MaxDoc());
- return ones;
- }
-
// can return null if norms aren't stored
protected internal virtual byte[] GetNorms(System.String field)
{
lock (this)
{
- Norm norm = (Norm) norms[field];
+ Norm norm = norms[field];
if (norm == null)
return null; // not indexed, or norms not stored
return norm.Bytes();
@@ -1429,15 +1347,13 @@ namespace Lucene.Net.Index
{
EnsureOpen();
byte[] bytes = GetNorms(field);
- if (bytes == null && !GetDisableFakeNorms())
- bytes = FakeNorms();
return bytes;
}
}
protected internal override void DoSetNorm(int doc, System.String field, byte value_Renamed)
{
- Norm norm = (Norm) norms[field];
+ Norm norm = norms[field];
if (norm == null)
// not an indexed field
return ;
@@ -1447,13 +1363,13 @@ namespace Lucene.Net.Index
}
/// <summary>Read norms into a pre-allocated array. </summary>
- public override void Norms(System.String field, byte[] bytes, int offset)
+ public override void Norms(System.String field, byte[] bytes, int offset)
{
lock (this)
{
EnsureOpen();
- Norm norm = (Norm) norms[field];
+ Norm norm = norms[field];
if (norm == null)
{
for (int i = offset; i < bytes.Length; i++)
@@ -1475,7 +1391,7 @@ namespace Lucene.Net.Index
for (int i = 0; i < core.fieldInfos.Size(); i++)
{
FieldInfo fi = core.fieldInfos.FieldInfo(i);
- if (norms.Contains(fi.name))
+ if (norms.ContainsKey(fi.name))
{
// in case this SegmentReader is being re-opened, we might be able to
// reuse some norm instances and skip loading them here
@@ -1546,10 +1462,8 @@ namespace Lucene.Net.Index
{
return false;
}
- System.Collections.IEnumerator it = norms.Values.GetEnumerator();
- while (it.MoveNext())
+ foreach(Norm norm in norms.Values)
{
- Norm norm = (Norm) it.Current;
if (norm.refCount > 0)
{
return false;
@@ -1561,8 +1475,7 @@ namespace Lucene.Net.Index
// for testing only
public /*internal*/ virtual bool NormsClosed(System.String field)
{
- Norm norm = (Norm) norms[field];
- return norm.refCount == 0;
+ return norms[field].refCount == 0;
}
/// <summary> Create a clone from the initial TermVectorsReader and store it in the ThreadLocal.</summary>
@@ -1570,7 +1483,7 @@ namespace Lucene.Net.Index
/// </returns>
internal virtual TermVectorsReader GetTermVectorsReader()
{
- TermVectorsReader tvReader = (TermVectorsReader) termVectorsLocal.Get();
+ TermVectorsReader tvReader = termVectorsLocal.Get();
if (tvReader == null)
{
TermVectorsReader orig = core.GetTermVectorsReaderOrig();
@@ -1626,15 +1539,13 @@ namespace Lucene.Net.Index
EnsureOpen();
FieldInfo fi = core.fieldInfos.FieldInfo(field);
if (fi == null || !fi.storeTermVector)
- return ;
+ return;
TermVectorsReader termVectorsReader = GetTermVectorsReader();
if (termVectorsReader == null)
{
- return ;
+ return;
}
-
-
termVectorsReader.Get(docNumber, field, mapper);
}
@@ -1692,10 +1603,8 @@ namespace Lucene.Net.Index
rollbackDeletedDocsDirty = deletedDocsDirty;
rollbackNormsDirty = normsDirty;
rollbackPendingDeleteCount = pendingDeleteCount;
- System.Collections.IEnumerator it = norms.Values.GetEnumerator();
- while (it.MoveNext())
- {
- Norm norm = (Norm) it.Current;
+ foreach(Norm norm in norms.Values)
+ {
norm.rollbackDirty = norm.dirty;
}
}
@@ -1707,10 +1616,8 @@ namespace Lucene.Net.Index
deletedDocsDirty = rollbackDeletedDocsDirty;
normsDirty = rollbackNormsDirty;
pendingDeleteCount = rollbackPendingDeleteCount;
- System.Collections.IEnumerator it = norms.Values.GetEnumerator();
- while (it.MoveNext())
- {
- Norm norm = (Norm) it.Current;
+ foreach(Norm norm in norms.Values)
+ {
norm.dirty = norm.rollbackDirty;
}
}
@@ -1727,7 +1634,6 @@ namespace Lucene.Net.Index
// This is necessary so that cloned SegmentReaders (which
// share the underlying postings data) will map to the
// same entry in the FieldCache. See LUCENE-1579.
- [Obsolete("Lucene.Net-2.9.1. This method overrides obsolete member Lucene.Net.Index.IndexReader.GetFieldCacheKey()")]
public override System.Object GetFieldCacheKey()
{
return core.freqStream;
@@ -1747,10 +1653,12 @@ namespace Lucene.Net.Index
/// <summary> Lotsa tests did hacks like:<br/>
/// SegmentReader reader = (SegmentReader) IndexReader.open(dir);<br/>
/// They broke. This method serves as a hack to keep hacks working
+ /// We do it with R/W access for the tests (BW compatibility)
/// </summary>
+ [Obsolete("Remove this when tests are fixed!")]
public /*internal*/ static SegmentReader GetOnlySegmentReader(Directory dir)
{
- return GetOnlySegmentReader(IndexReader.Open(dir));
+ return GetOnlySegmentReader(IndexReader.Open(dir,false));
}
public /*internal*/ static SegmentReader GetOnlySegmentReader(IndexReader reader)
@@ -1776,55 +1684,8 @@ namespace Lucene.Net.Index
{
return core.termsIndexDivisor;
}
- static SegmentReader()
- {
- {
- try
- {
- System.String name = SupportClass.AppSettings.Get("Lucene.Net.SegmentReader.class", typeof(SegmentReader).FullName);
- IMPL = System.Type.GetType(name);
- }
- catch (System.Security.SecurityException se)
- {
- try
- {
- IMPL = System.Type.GetType(typeof(SegmentReader).FullName);
- }
- catch (System.Exception e)
- {
- throw new System.SystemException("cannot load default SegmentReader class: " + e, e);
- }
- }
- catch (System.Exception e)
- {
- throw new System.SystemException("cannot load SegmentReader class: " + e, e);
- }
- }
- {
- try
- {
- System.String name = SupportClass.AppSettings.Get("Lucene.Net.ReadOnlySegmentReader.class", typeof(ReadOnlySegmentReader).FullName);
- READONLY_IMPL = System.Type.GetType(name);
- }
- catch (System.Security.SecurityException se)
- {
- try
- {
- READONLY_IMPL = System.Type.GetType(typeof(ReadOnlySegmentReader).FullName);
- }
- catch (System.Exception e)
- {
- throw new System.SystemException("cannot load default ReadOnlySegmentReader class: " + e, e);
- }
- }
- catch (System.Exception e)
- {
- throw new System.SystemException("cannot load ReadOnlySegmentReader class: " + e, e);
- }
- }
- }
-
- public System.Collections.IDictionary norms_ForNUnit
+
+ public System.Collections.Generic.IDictionary<string, Norm> norms_ForNUnit
{
get { return norms; }
}
Modified: incubator/lucene.net/trunk/src/core/Index/SegmentTermDocs.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/SegmentTermDocs.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/SegmentTermDocs.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/SegmentTermDocs.cs Tue Feb 28 22:43:08 2012
@@ -16,14 +16,14 @@
*/
using System;
-
+using Lucene.Net.Support;
using IndexInput = Lucene.Net.Store.IndexInput;
using BitVector = Lucene.Net.Util.BitVector;
namespace Lucene.Net.Index
{
- public class SegmentTermDocs : TermDocs
+ internal class SegmentTermDocs : TermDocs
{
protected internal SegmentReader parent;
protected internal IndexInput freqStream;
@@ -45,6 +45,8 @@ namespace Lucene.Net.Index
protected internal bool currentFieldStoresPayloads;
protected internal bool currentFieldOmitTermFreqAndPositions;
+
+ private bool isDisposed;
public /*protected internal*/ SegmentTermDocs(SegmentReader parent)
{
@@ -108,13 +110,28 @@ namespace Lucene.Net.Index
haveSkipped = false;
}
}
-
- public virtual void Close()
- {
- freqStream.Close();
- if (skipListReader != null)
- skipListReader.Close();
- }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ }
+
+ [Obsolete("Use Dispose() instead")]
+ public void Close()
+ {
+ Dispose();
+ }
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (isDisposed) return;
+
+ freqStream.Dispose();
+ if (skipListReader != null)
+ skipListReader.Dispose();
+
+ isDisposed = true;
+ }
public int Doc()
{
@@ -144,7 +161,7 @@ namespace Lucene.Net.Index
}
else
{
- doc += SupportClass.Number.URShift(docCode, 1); // shift off low bit
+ doc += Number.URShift(docCode, 1); // shift off low bit
if ((docCode & 1) != 0)
// if low bit is set
freq = 1;
@@ -177,7 +194,7 @@ namespace Lucene.Net.Index
{
// manually inlined call to next() for speed
int docCode = freqStream.ReadVInt();
- doc += SupportClass.Number.URShift(docCode, 1); // shift off low bit
+ doc += Number.URShift(docCode, 1); // shift off low bit
if ((docCode & 1) != 0)
// if low bit is set
freq = 1;
@@ -261,7 +278,7 @@ namespace Lucene.Net.Index
return true;
}
- public IndexInput freqStream_ForNUnit
+ public IndexInput freqStream_ForNUnit
{
get { return freqStream; }
set { freqStream = value; }
Modified: incubator/lucene.net/trunk/src/core/Index/SegmentTermEnum.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/SegmentTermEnum.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/SegmentTermEnum.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/SegmentTermEnum.cs Tue Feb 28 22:43:08 2012
@@ -21,8 +21,7 @@ using IndexInput = Lucene.Net.Store.Inde
namespace Lucene.Net.Index
{
-
- public sealed class SegmentTermEnum:TermEnum, System.ICloneable
+ internal sealed class SegmentTermEnum : TermEnum, System.ICloneable
{
private IndexInput input;
internal FieldInfos fieldInfos;
@@ -242,9 +241,9 @@ namespace Lucene.Net.Index
}
/// <summary>Closes the enumeration to further activity, freeing resources. </summary>
- public override void Close()
- {
- input.Close();
- }
+ protected override void Dispose(bool disposing)
+ {
+ input.Dispose();
+ }
}
}
\ No newline at end of file
Modified: incubator/lucene.net/trunk/src/core/Index/SegmentTermPositions.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/SegmentTermPositions.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/SegmentTermPositions.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/SegmentTermPositions.cs Tue Feb 28 22:43:08 2012
@@ -16,13 +16,12 @@
*/
using System;
-
+using Lucene.Net.Support;
using IndexInput = Lucene.Net.Store.IndexInput;
namespace Lucene.Net.Index
{
-
- public sealed class SegmentTermPositions:SegmentTermDocs, TermPositions
+ internal sealed class SegmentTermPositions : SegmentTermDocs, TermPositions
{
private IndexInput proxStream;
private int proxCount;
@@ -56,12 +55,12 @@ namespace Lucene.Net.Index
needToLoadPayload = false;
}
- public override void Close()
- {
- base.Close();
- if (proxStream != null)
- proxStream.Close();
- }
+ protected override void Dispose(bool disposing)
+ {
+ base.Dispose(disposing);
+ if (proxStream != null)
+ proxStream.Dispose();
+ }
public int NextPosition()
{
@@ -87,7 +86,7 @@ namespace Lucene.Net.Index
{
payloadLength = proxStream.ReadVInt();
}
- delta = SupportClass.Number.URShift(delta, 1);
+ delta = Number.URShift(delta, 1);
needToLoadPayload = true;
}
return delta;
Modified: incubator/lucene.net/trunk/src/core/Index/SegmentWriteState.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/SegmentWriteState.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/SegmentWriteState.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/SegmentWriteState.cs Tue Feb 28 22:43:08 2012
@@ -31,7 +31,7 @@ namespace Lucene.Net.Index
internal int numDocs;
internal int termIndexInterval;
internal int numDocsInStore;
- internal System.Collections.Hashtable flushedFiles;
+ internal System.Collections.Generic.ICollection<string> flushedFiles;
public SegmentWriteState(DocumentsWriter docWriter, Directory directory, System.String segmentName, System.String docStoreSegmentName, int numDocs, int numDocsInStore, int termIndexInterval)
{
@@ -42,7 +42,7 @@ namespace Lucene.Net.Index
this.numDocs = numDocs;
this.numDocsInStore = numDocsInStore;
this.termIndexInterval = termIndexInterval;
- flushedFiles = new System.Collections.Hashtable();
+ flushedFiles = new System.Collections.Generic.HashSet<string>();
}
public virtual System.String SegmentFileName(System.String ext)
Modified: incubator/lucene.net/trunk/src/core/Index/SerialMergeScheduler.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/SerialMergeScheduler.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/SerialMergeScheduler.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/SerialMergeScheduler.cs Tue Feb 28 22:43:08 2012
@@ -34,7 +34,6 @@ namespace Lucene.Net.Index
{
lock (this)
{
-
while (true)
{
MergePolicy.OneMerge merge = writer.GetNextMerge();
@@ -44,9 +43,9 @@ namespace Lucene.Net.Index
}
}
}
-
- public override void Close()
- {
- }
+
+ protected override void Dispose(bool disposing)
+ {
+ }
}
}
\ No newline at end of file
Modified: incubator/lucene.net/trunk/src/core/Index/SnapshotDeletionPolicy.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/SnapshotDeletionPolicy.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/SnapshotDeletionPolicy.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/SnapshotDeletionPolicy.cs Tue Feb 28 22:43:08 2012
@@ -16,7 +16,7 @@
*/
using System;
-
+using System.Collections.Generic;
using Directory = Lucene.Net.Store.Directory;
namespace Lucene.Net.Index
@@ -53,21 +53,21 @@ namespace Lucene.Net.Index
this.primary = primary;
}
- public virtual void OnInit(System.Collections.IList commits)
+ public virtual void OnInit<T>(IList<T> commits) where T : IndexCommit
{
lock (this)
{
primary.OnInit(WrapCommits(commits));
- lastCommit = (IndexCommit) commits[commits.Count - 1];
+ lastCommit = commits[commits.Count - 1];
}
}
- public virtual void OnCommit(System.Collections.IList commits)
+ public virtual void OnCommit<T>(IList<T> commits) where T : IndexCommit
{
lock (this)
{
primary.OnCommit(WrapCommits(commits));
- lastCommit = (IndexCommit) commits[commits.Count - 1];
+ lastCommit = commits[commits.Count - 1];
}
}
@@ -81,8 +81,7 @@ namespace Lucene.Net.Index
/// consume an extra 1X of your total index size, until
/// you release the snapshot.
/// </summary>
- // TODO 3.0: change this to return IndexCommit instead
- public virtual IndexCommitPoint Snapshot()
+ public virtual IndexCommit Snapshot()
{
lock (this)
{
@@ -90,6 +89,7 @@ namespace Lucene.Net.Index
{
throw new System.SystemException("no index commits to snapshot !");
}
+
if (snapshot == null)
snapshot = lastCommit.GetSegmentsFileName();
else
@@ -110,7 +110,7 @@ namespace Lucene.Net.Index
}
}
- private class MyCommitPoint:IndexCommit
+ private class MyCommitPoint : IndexCommit
{
private void InitBlock(SnapshotDeletionPolicy enclosingInstance)
{
@@ -141,7 +141,7 @@ namespace Lucene.Net.Index
{
return cp.GetSegmentsFileName();
}
- public override System.Collections.Generic.ICollection<string> GetFileNames()
+ public override ICollection<string> GetFileNames()
{
return cp.GetFileNames();
}
@@ -171,7 +171,7 @@ namespace Lucene.Net.Index
{
return cp.GetGeneration();
}
- public override System.Collections.Generic.IDictionary<string, string> GetUserData()
+ public override IDictionary<string, string> GetUserData()
{
return cp.GetUserData();
}
@@ -182,13 +182,15 @@ namespace Lucene.Net.Index
}
}
- private System.Collections.IList WrapCommits(System.Collections.IList commits)
+ private IList<IndexCommit> WrapCommits<T>(IList<T> commits) where T : IndexCommit
{
int count = commits.Count;
- System.Collections.IList myCommits = new System.Collections.ArrayList(count);
- for (int i = 0; i < count; i++)
- myCommits.Add(new MyCommitPoint(this, (IndexCommit) commits[i]));
- return myCommits;
+ var myCommits = new List<IndexCommit>(count);
+ for (int i = 0; i < count; i++)
+ {
+ myCommits.Add(new MyCommitPoint(this, commits[i]));
+ }
+ return myCommits;
}
}
}
\ No newline at end of file
Modified: incubator/lucene.net/trunk/src/core/Index/SortedTermVectorMapper.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/SortedTermVectorMapper.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/SortedTermVectorMapper.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/SortedTermVectorMapper.cs Tue Feb 28 22:43:08 2012
@@ -16,6 +16,8 @@
*/
using System;
+using System.Collections.Generic;
+using Lucene.Net.Support;
namespace Lucene.Net.Index
{
@@ -30,10 +32,8 @@ namespace Lucene.Net.Index
/// </summary>
public class SortedTermVectorMapper:TermVectorMapper
{
-
-
- private System.Collections.Generic.SortedDictionary<System.Object, System.Object> currentSet;
- private System.Collections.IDictionary termToTVE = new System.Collections.Hashtable();
+ private SortedSet<TermVectorEntry> currentSet;
+ private IDictionary<string, TermVectorEntry> termToTVE = new HashMap<string, TermVectorEntry>();
private bool storeOffsets;
private bool storePositions;
/// <summary> Stand-in name for the field in <see cref="TermVectorEntry" />.</summary>
@@ -42,14 +42,16 @@ namespace Lucene.Net.Index
/// <summary> </summary>
/// <param name="comparator">A Comparator for sorting <see cref="TermVectorEntry" />s
/// </param>
- public SortedTermVectorMapper(System.Collections.Generic.IComparer<System.Object> comparator):this(false, false, comparator)
+ public SortedTermVectorMapper(IComparer<TermVectorEntry> comparator)
+ : this(false, false, comparator)
{
}
-
-
- public SortedTermVectorMapper(bool ignoringPositions, bool ignoringOffsets, System.Collections.Generic.IComparer<System.Object> comparator):base(ignoringPositions, ignoringOffsets)
+
+
+ public SortedTermVectorMapper(bool ignoringPositions, bool ignoringOffsets, IComparer<TermVectorEntry> comparator)
+ : base(ignoringPositions, ignoringOffsets)
{
- currentSet = new System.Collections.Generic.SortedDictionary<System.Object, System.Object>(comparator);
+ currentSet = new SortedSet<TermVectorEntry>(comparator);
}
/// <summary> </summary>
@@ -64,12 +66,12 @@ namespace Lucene.Net.Index
//We need to combine any previous mentions of the term
public override void Map(System.String term, int frequency, TermVectorOffsetInfo[] offsets, int[] positions)
{
- TermVectorEntry entry = (TermVectorEntry) termToTVE[term];
+ TermVectorEntry entry = termToTVE[term];
if (entry == null)
{
entry = new TermVectorEntry(ALL, term, frequency, storeOffsets == true?offsets:null, storePositions == true?positions:null);
termToTVE[term] = entry;
- currentSet.Add(entry, entry);
+ currentSet.Add(entry);
}
else
{
@@ -124,7 +126,7 @@ namespace Lucene.Net.Index
/// </summary>
/// <returns> The SortedSet of <see cref="TermVectorEntry" />.
/// </returns>
- public virtual System.Collections.Generic.SortedDictionary<Object, Object> GetTermVectorEntrySet()
+ public virtual SortedSet<TermVectorEntry> GetTermVectorEntrySet()
{
return currentSet;
}
Modified: incubator/lucene.net/trunk/src/core/Index/StoredFieldsWriter.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/StoredFieldsWriter.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/StoredFieldsWriter.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/StoredFieldsWriter.cs Tue Feb 28 22:43:08 2012
@@ -102,12 +102,12 @@ namespace Lucene.Net.Index
if (fieldsWriter != null)
{
- fieldsWriter.Close();
+ fieldsWriter.Dispose();
fieldsWriter = null;
lastDocID = 0;
System.Diagnostics.Debug.Assert(state.docStoreSegmentName != null);
- SupportClass.CollectionsHelper.AddIfNotContains(state.flushedFiles, state.docStoreSegmentName + "." + IndexFileNames.FIELDS_EXTENSION);
- SupportClass.CollectionsHelper.AddIfNotContains(state.flushedFiles, state.docStoreSegmentName + "." + IndexFileNames.FIELDS_INDEX_EXTENSION);
+ state.flushedFiles.Add(state.docStoreSegmentName + "." + IndexFileNames.FIELDS_EXTENSION);
+ state.flushedFiles.Add(state.docStoreSegmentName + "." + IndexFileNames.FIELDS_INDEX_EXTENSION);
state.docWriter.RemoveOpenFile(state.docStoreSegmentName + "." + IndexFileNames.FIELDS_EXTENSION);
state.docWriter.RemoveOpenFile(state.docStoreSegmentName + "." + IndexFileNames.FIELDS_INDEX_EXTENSION);
@@ -152,7 +152,7 @@ namespace Lucene.Net.Index
{
try
{
- fieldsWriter.Close();
+ fieldsWriter.Dispose();
}
catch (System.Exception t)
{
Modified: incubator/lucene.net/trunk/src/core/Index/Term.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/Term.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/Term.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/Term.cs Tue Feb 28 22:43:08 2012
@@ -30,7 +30,7 @@ namespace Lucene.Net.Index
/// </summary>
[Serializable]
- public sealed class Term : System.IComparable
+ public sealed class Term : System.IComparable<Term>
{
internal System.String field;
internal System.String text;
@@ -128,11 +128,6 @@ namespace Lucene.Net.Index
return result;
}
- public int CompareTo(System.Object other)
- {
- return CompareTo((Term) other);
- }
-
/// <summary>Compares two terms, returning a negative integer if this
/// term belongs before the argument, zero if this term is equal to the
/// argument, and a positive integer if this term belongs after the argument.
Modified: incubator/lucene.net/trunk/src/core/Index/TermBuffer.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/TermBuffer.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/TermBuffer.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/TermBuffer.cs Tue Feb 28 22:43:08 2012
@@ -16,7 +16,7 @@
*/
using System;
-
+using Lucene.Net.Support;
using IndexInput = Lucene.Net.Store.IndexInput;
using UnicodeUtil = Lucene.Net.Util.UnicodeUtil;
@@ -111,7 +111,7 @@ namespace Lucene.Net.Index
System.String termText = term.Text();
int termLen = termText.Length;
text.SetLength(termLen);
- SupportClass.TextSupport.GetCharsFromString(termText, 0, termLen, text.result, 0);
+ TextSupport.GetCharsFromString(termText, 0, termLen, text.result, 0);
dirty = true;
field = term.Field();
this.term = term;
Modified: incubator/lucene.net/trunk/src/core/Index/TermDocs.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/TermDocs.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/TermDocs.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/TermDocs.cs Tue Feb 28 22:43:08 2012
@@ -19,17 +19,14 @@ using System;
namespace Lucene.Net.Index
{
-
/// <summary>TermDocs provides an interface for enumerating <document, frequency>
/// pairs for a term. <p/> The document portion names each document containing
/// the term. Documents are indicated by number. The frequency portion gives
/// the number of times the term occurred in each document. <p/> The pairs are
/// ordered by document number.
/// </summary>
- /// <seealso cref="IndexReader.TermDocs()">
- /// </seealso>
-
- public interface TermDocs
+ /// <seealso cref="IndexReader.TermDocs()" />
+ public interface TermDocs : IDisposable
{
/// <summary>Sets this to the data for a term.
/// The enumeration is reset to the start of the data for this term.
@@ -81,7 +78,9 @@ namespace Lucene.Net.Index
/// </summary>
bool SkipTo(int target);
+ // TODO: Determine which release this will be removed from
/// <summary>Frees associated resources. </summary>
+ [Obsolete("Use Dispose() instead")]
void Close();
}
}
\ No newline at end of file
Modified: incubator/lucene.net/trunk/src/core/Index/TermEnum.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/TermEnum.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/TermEnum.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/TermEnum.cs Tue Feb 28 22:43:08 2012
@@ -24,8 +24,7 @@ namespace Lucene.Net.Index
/// <p/>Term enumerations are always ordered by Term.compareTo(). Each term in
/// the enumeration is greater than all that precede it.
/// </summary>
-
- public abstract class TermEnum
+ public abstract class TermEnum : IDisposable
{
/// <summary>Increments the enumeration to the next element. True if one exists.</summary>
public abstract bool Next();
@@ -35,38 +34,20 @@ namespace Lucene.Net.Index
/// <summary>Returns the docFreq of the current Term in the enumeration.</summary>
public abstract int DocFreq();
-
- /// <summary>Closes the enumeration to further activity, freeing resources. </summary>
- public abstract void Close();
-
- /// <summary>Skips terms to the first beyond the current whose value is
- /// greater or equal to <i>target</i>. <p/>Returns true iff there is such
- /// an entry. <p/>Behaves as if written: <code>
- /// public boolean skipTo(Term target) {
- /// do {
- /// if (!next())
- /// return false;
- /// } while (target > term());
- /// return true;
- /// }
- /// </code>
- /// Some implementations *could* be considerably more efficient than a linear scan.
- /// Check the implementation to be sure.
- /// </summary>
- /// <deprecated> This method is not performant and will be removed in Lucene 3.0.
- /// Use <see cref="IndexReader.Terms(Term)" /> to create a new TermEnum positioned at a
- /// given term.
- /// </deprecated>
- [Obsolete("This method is not performant and will be removed in Lucene 3.0.Use IndexReader.Terms(Term) to create a new TermEnum positioned at a given term.")]
- public virtual bool SkipTo(Term target)
- {
- do
- {
- if (!Next())
- return false;
- }
- while (target.CompareTo(Term()) > 0);
- return true;
- }
+
+ /// <summary>Closes the enumeration to further activity, freeing resources. </summary>
+ [Obsolete("Use Dispose() instead")]
+ public void Close()
+ {
+ Dispose();
+ }
+
+ /// <summary>Closes the enumeration to further activity, freeing resources. </summary>
+ public void Dispose()
+ {
+ Dispose(true);
+ }
+
+ protected abstract void Dispose(bool disposing);
}
}
\ No newline at end of file
Modified: incubator/lucene.net/trunk/src/core/Index/TermInfosReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/core/Index/TermInfosReader.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/src/core/Index/TermInfosReader.cs (original)
+++ incubator/lucene.net/trunk/src/core/Index/TermInfosReader.cs Tue Feb 28 22:43:08 2012
@@ -16,10 +16,10 @@
*/
using System;
-
+using Lucene.Net.Support;
+using Lucene.Net.Util;
+using Lucene.Net.Util.Cache;
using Directory = Lucene.Net.Store.Directory;
-using CloseableThreadLocal = Lucene.Net.Util.CloseableThreadLocal;
-using SimpleLRUCache = Lucene.Net.Util.Cache.SimpleLRUCache;
namespace Lucene.Net.Index
{
@@ -29,13 +29,15 @@ namespace Lucene.Net.Index
/// set.
/// </summary>
- sealed class TermInfosReader
+ sealed class TermInfosReader : IDisposable
{
private Directory directory;
private System.String segment;
private FieldInfos fieldInfos;
-
- private CloseableThreadLocal threadResources = new CloseableThreadLocal();
+
+ private bool isDisposed;
+
+ private CloseableThreadLocal<ThreadResources> threadResources = new CloseableThreadLocal<ThreadResources>();
private SegmentTermEnum origEnum;
private long size;
@@ -53,7 +55,7 @@ namespace Lucene.Net.Index
internal SegmentTermEnum termEnum;
// Used for caching the least recently looked-up Terms
- internal Lucene.Net.Util.Cache.Cache termInfoCache;
+ internal Lucene.Net.Util.Cache.Cache<Term, TermInfo> termInfoCache;
}
internal TermInfosReader(Directory dir, System.String seg, FieldInfos fis, int readBufferSize, int indexDivisor)
@@ -124,7 +126,7 @@ namespace Lucene.Net.Index
// wait for a GC to do so.
if (!success)
{
- Close();
+ Dispose();
}
}
}
@@ -138,13 +140,18 @@ namespace Lucene.Net.Index
{
return origEnum.maxSkipLevels;
}
-
- internal void Close()
- {
- if (origEnum != null)
- origEnum.Close();
- threadResources.Close();
- }
+
+ public void Dispose()
+ {
+ if (isDisposed) return;
+
+ // Move to protected method if class becomes unsealed
+ if (origEnum != null)
+ origEnum.Dispose();
+ threadResources.Dispose();
+
+ isDisposed = true;
+ }
/// <summary>Returns the number of term/value pairs in the set. </summary>
internal long Size()
@@ -154,13 +161,13 @@ namespace Lucene.Net.Index
private ThreadResources GetThreadResources()
{
- ThreadResources resources = (ThreadResources) threadResources.Get();
+ ThreadResources resources = threadResources.Get();
if (resources == null)
{
resources = new ThreadResources();
resources.termEnum = Terms();
// Cache does not have to be thread-safe, it is only used by one thread at the same time
- resources.termInfoCache = new SimpleLRUCache(DEFAULT_CACHE_SIZE);
+ resources.termInfoCache = new SimpleLRUCache<Term,TermInfo>(DEFAULT_CACHE_SIZE);
threadResources.Set(resources);
}
return resources;
@@ -175,7 +182,7 @@ namespace Lucene.Net.Index
while (hi >= lo)
{
- int mid = SupportClass.Number.URShift((lo + hi), 1);
+ int mid = Number.URShift((lo + hi), 1);
int delta = term.CompareTo(indexTerms[mid]);
if (delta < 0)
hi = mid - 1;
@@ -208,13 +215,13 @@ namespace Lucene.Net.Index
TermInfo ti;
ThreadResources resources = GetThreadResources();
- Lucene.Net.Util.Cache.Cache cache = null;
+ Lucene.Net.Util.Cache.Cache<Term, TermInfo> cache = null;
if (useCache)
{
cache = resources.termInfoCache;
// check the cache first if the term was recently looked up
- ti = (TermInfo) cache.Get(term);
+ ti = cache.Get(term);
if (ti != null)
{
return ti;