Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/Lucene.Net.Light.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/Store/NIOFSDirectory.cs')
-rw-r--r--src/core/Store/NIOFSDirectory.cs269
1 files changed, 269 insertions, 0 deletions
diff --git a/src/core/Store/NIOFSDirectory.cs b/src/core/Store/NIOFSDirectory.cs
new file mode 100644
index 0000000..190a533
--- /dev/null
+++ b/src/core/Store/NIOFSDirectory.cs
@@ -0,0 +1,269 @@
+/*
+ * 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;
+namespace Lucene.Net.Store
+{
+ /// <summary>
+ /// Not implemented. Waiting for volunteers.
+ /// </summary>
+ public class NIOFSDirectory : Lucene.Net.Store.FSDirectory
+ {
+ public NIOFSDirectory(System.IO.DirectoryInfo dir, LockFactory lockFactory)
+ : base(dir, lockFactory)
+ {
+ throw new System.NotImplementedException("Waiting for volunteers to implement this class");
+ }
+
+ /// <summary>
+ /// Not implemented. Waiting for volunteers.
+ /// </summary>
+ public class NIOFSIndexInput
+ {
+ public NIOFSIndexInput()
+ {
+ throw new System.NotImplementedException("Waiting for volunteers to implement this class");
+ }
+ }
+
+ public override IndexOutput CreateOutput(string name)
+ {
+ throw new System.NotImplementedException("Waiting for volunteers to implement this class");
+ }
+ }
+}
+
+
+//namespace Lucene.Net.Store
+//{
+
+// /// <summary> An <see cref="FSDirectory" /> implementation that uses
+// /// java.nio's FileChannel's positional read, which allows
+// /// multiple threads to read from the same file without
+// /// synchronizing.
+// ///
+// /// <p/>This class only uses FileChannel when reading; writing
+// /// is achieved with <see cref="SimpleFSDirectory.SimpleFSIndexOutput" />.
+// ///
+// /// <p/><b>NOTE</b>: NIOFSDirectory is not recommended on Windows because of a bug
+// /// in how FileChannel.read is implemented in Sun's JRE.
+// /// Inside of the implementation the position is apparently
+// /// synchronized. See <a
+// /// href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6265734">here</a>
+// /// for details.
+// /// </summary>
+// public class NIOFSDirectory:FSDirectory
+// {
+
+// /// <summary>Create a new NIOFSDirectory for the named location.
+// ///
+// /// </summary>
+// /// <param name="path">the path of the directory
+// /// </param>
+// /// <param name="lockFactory">the lock factory to use, or null for the default.
+// /// </param>
+// /// <throws> IOException </throws>
+// [System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
+// public NIOFSDirectory(System.IO.FileInfo path, LockFactory lockFactory):base(new System.IO.DirectoryInfo(path.FullName), lockFactory)
+// {
+// }
+
+// /// <summary>Create a new NIOFSDirectory for the named location.
+// ///
+// /// </summary>
+// /// <param name="path">the path of the directory
+// /// </param>
+// /// <param name="lockFactory">the lock factory to use, or null for the default.
+// /// </param>
+// /// <throws> IOException </throws>
+// public NIOFSDirectory(System.IO.DirectoryInfo path, LockFactory lockFactory) : base(path, lockFactory)
+// {
+// }
+
+// /// <summary>Create a new NIOFSDirectory for the named location and the default lock factory.
+// ///
+// /// </summary>
+// /// <param name="path">the path of the directory
+// /// </param>
+// /// <throws> IOException </throws>
+// [System.Obsolete("Use the constructor that takes a DirectoryInfo, this will be removed in the 3.0 release")]
+// public NIOFSDirectory(System.IO.FileInfo path):base(new System.IO.DirectoryInfo(path.FullName), null)
+// {
+// }
+
+// /// <summary>Create a new NIOFSDirectory for the named location and the default lock factory.
+// ///
+// /// </summary>
+// /// <param name="path">the path of the directory
+// /// </param>
+// /// <throws> IOException </throws>
+// public NIOFSDirectory(System.IO.DirectoryInfo path) : base(path, null)
+// {
+// }
+
+// // back compatibility so FSDirectory can instantiate via reflection
+// /// <deprecated>
+// /// </deprecated>
+// [Obsolete]
+// internal NIOFSDirectory()
+// {
+// }
+
+// /// <summary>Creates an IndexInput for the file with the given name. </summary>
+// public override IndexInput OpenInput(System.String name, int bufferSize)
+// {
+// EnsureOpen();
+// return new NIOFSIndexInput(new System.IO.FileInfo(System.IO.Path.Combine(GetFile().FullName, name)), bufferSize, GetReadChunkSize());
+// }
+
+// /// <summary>Creates an IndexOutput for the file with the given name. </summary>
+// public override IndexOutput CreateOutput(System.String name)
+// {
+// InitOutput(name);
+// return new SimpleFSDirectory.SimpleFSIndexOutput(new System.IO.FileInfo(System.IO.Path.Combine(directory.FullName, name)));
+// }
+
+// public /*protected internal*/ class NIOFSIndexInput:SimpleFSDirectory.SimpleFSIndexInput
+// {
+
+// private System.IO.MemoryStream byteBuf; // wraps the buffer for NIO
+
+// private byte[] otherBuffer;
+// private System.IO.MemoryStream otherByteBuf;
+
+// internal System.IO.BinaryReader channel;
+
+// /// <deprecated> Please use ctor taking chunkSize
+// /// </deprecated>
+// [Obsolete("Please use ctor taking chunkSize")]
+// public NIOFSIndexInput(System.IO.FileInfo path, int bufferSize):this(path, bufferSize, FSDirectory.DEFAULT_READ_CHUNK_SIZE)
+// {
+// }
+
+// public NIOFSIndexInput(System.IO.FileInfo path, int bufferSize, int chunkSize):base(path, bufferSize, chunkSize)
+// {
+// channel = (System.IO.BinaryReader) file;
+// }
+
+// protected internal override void NewBuffer(byte[] newBuffer)
+// {
+// base.NewBuffer(newBuffer);
+// // {{Aroush-2.9}} byteBuf = ByteBuffer.wrap(newBuffer);
+// System.Diagnostics.Debug.Fail("Port issue:", "byteBuf = ByteBuffer.wrap(newBuffer)"); // {{Aroush-2.9}}
+// }
+
+// public override void Close()
+// {
+// if (!isClone && file.isOpen)
+// {
+// // Close the channel & file
+// try
+// {
+// channel.Close();
+// }
+// finally
+// {
+// file.Close();
+// }
+// }
+// }
+
+// public override void ReadInternal(byte[] b, int offset, int len)
+// {
+
+// System.IO.MemoryStream bb;
+
+// // Determine the ByteBuffer we should use
+// if (b == buffer && 0 == offset)
+// {
+// // Use our own pre-wrapped byteBuf:
+// System.Diagnostics.Debug.Assert(byteBuf != null);
+// byteBuf.Position = 0;
+// byteBuf.Capacity = len;
+// bb = byteBuf;
+// }
+// else
+// {
+// if (offset == 0)
+// {
+// if (otherBuffer != b)
+// {
+// // Now wrap this other buffer; with compound
+// // file, we are repeatedly called with its
+// // buffer, so we wrap it once and then re-use it
+// // on subsequent calls
+// otherBuffer = b;
+// // otherByteBuf = ByteBuffer.wrap(b); {{Aroush-2.9}}
+// System.Diagnostics.Debug.Fail("Port issue:", "otherByteBuf = ByteBuffer.wrap(b)"); // {{Aroush-2.9}}
+// }
+// else
+// otherByteBuf.Position = 0;
+// otherByteBuf.Capacity = len;
+// bb = otherByteBuf;
+// }
+// else
+// {
+// // Always wrap when offset != 0
+// bb = null; // bb = ByteBuffer.wrap(b, offset, len); {{Aroush-2.9}}
+// System.Diagnostics.Debug.Fail("Port issue:", "bb = ByteBuffer.wrap(b, offset, len)"); // {{Aroush-2.9}}
+// }
+// }
+
+// int readOffset = (int) bb.Position;
+// int readLength = bb.Capacity - readOffset;
+// System.Diagnostics.Debug.Assert(readLength == len);
+
+// long pos = GetFilePointer();
+
+// try
+// {
+// while (readLength > 0)
+// {
+// int limit;
+// if (readLength > chunkSize)
+// {
+// // LUCENE-1566 - work around JVM Bug by breaking
+// // very large reads into chunks
+// limit = readOffset + chunkSize;
+// }
+// else
+// {
+// limit = readOffset + readLength;
+// }
+// bb.Capacity = limit;
+// int i = -1; // int i = channel.Read(bb, pos, limit); // {{Aroush-2.9}} must read from 'channel' into 'bb'
+// System.Diagnostics.Debug.Fail("Port issue:", "channel.Read(bb, pos, limit)"); // {{Aroush-2.9}}
+// if (i == - 1)
+// {
+// throw new System.IO.IOException("read past EOF");
+// }
+// pos += i;
+// readOffset += i;
+// readLength -= i;
+// }
+// }
+// catch (System.OutOfMemoryException e)
+// {
+// // propagate OOM up and add a hint for 32bit VM Users hitting the bug
+// // with a large chunk size in the fast path.
+// System.OutOfMemoryException outOfMemoryError = new System.OutOfMemoryException("OutOfMemoryError likely caused by the Sun VM Bug described in " + "https://issues.apache.org/jira/browse/LUCENE-1566; try calling FSDirectory.setReadChunkSize " + "with a a value smaller than the current chunk size (" + chunkSize + ")", e);
+// throw outOfMemoryError;
+// }
+// }
+// }
+// }
+//} \ No newline at end of file