You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2016/10/23 13:02:13 UTC
[27/50] [abbrv] lucenenet git commit: Fixed bugs with keeping track
of the current position in Core.Support.MemoryMappedFileByteBuffer
Fixed bugs with keeping track of the current position in Core.Support.MemoryMappedFileByteBuffer
Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/302c7ada
Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/302c7ada
Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/302c7ada
Branch: refs/heads/master
Commit: 302c7adaf9c2e7ce52042d3d24847b4bd64f2f32
Parents: cd60689
Author: Shad Storhaug <sh...@shadstorhaug.com>
Authored: Wed Oct 19 07:04:46 2016 +0700
Committer: Shad Storhaug <sh...@shadstorhaug.com>
Committed: Thu Oct 20 18:20:58 2016 +0700
----------------------------------------------------------------------
.../Support/MemoryMappedFileByteBuffer.cs | 294 ++++++++++---------
1 file changed, 162 insertions(+), 132 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/302c7ada/src/Lucene.Net.Core/Support/MemoryMappedFileByteBuffer.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Support/MemoryMappedFileByteBuffer.cs b/src/Lucene.Net.Core/Support/MemoryMappedFileByteBuffer.cs
index 1726bd7..1b388f1 100644
--- a/src/Lucene.Net.Core/Support/MemoryMappedFileByteBuffer.cs
+++ b/src/Lucene.Net.Core/Support/MemoryMappedFileByteBuffer.cs
@@ -6,6 +6,8 @@ namespace Lucene.Net.Support
internal sealed class MemoryMappedFileByteBuffer : ByteBuffer, IDisposable
{
private MemoryMappedViewAccessor _accessor;
+ private readonly int offset; // always 0 (add constructors to fix this)
+ new private bool bigEndian = true;
public MemoryMappedFileByteBuffer(MemoryMappedViewAccessor accessor, int mark, int pos, int lim, int cap)
: base(mark, pos, lim, cap)
@@ -13,60 +15,56 @@ namespace Lucene.Net.Support
_accessor = accessor;
}
- internal override byte _get(int i)
+ public override ByteBuffer Slice()
{
- throw new NotImplementedException();
+ return new MemoryMappedFileByteBuffer(_accessor, -1, 0, Remaining, Remaining);
}
- internal override void _put(int i, byte b)
+ public override ByteBuffer Duplicate()
{
- throw new NotImplementedException();
+ return new MemoryMappedFileByteBuffer(_accessor, MarkValue, Position, Limit, Capacity);
}
- public override bool IsDirect
+ public override ByteBuffer AsReadOnlyBuffer()
{
- get { return true; }
+ throw new NotImplementedException();
}
- public override bool IsReadOnly
+
+ private int Ix(int i)
{
- get { return false; }
+ return i + offset;
}
- public override ByteBuffer Slice()
+ public override byte Get()
{
- return new MemoryMappedFileByteBuffer(_accessor, -1, 0, Remaining, Remaining);
+ return _accessor.ReadByte(Ix(NextGetIndex()));
}
- public override ByteBuffer Duplicate()
+ public override byte Get(int index)
{
- return new MemoryMappedFileByteBuffer(_accessor, MarkValue, Position, Limit, Capacity);
+ return _accessor.ReadByte(Ix(CheckIndex(index)));
}
- public override ByteBuffer AsReadOnlyBuffer()
+ public override bool IsDirect
{
- throw new NotImplementedException();
+ get { return false; }
}
- public override byte Get()
+ public override bool IsReadOnly
{
- return _accessor.ReadByte(Position++);
+ get { return false; }
}
public override ByteBuffer Put(byte b)
{
- _accessor.Write(Position++, b);
+ _accessor.Write(Ix(NextPutIndex()), b);
return this;
}
- public override byte Get(int index)
- {
- return _accessor.ReadByte(index);
- }
-
public override ByteBuffer Put(int index, byte b)
{
- _accessor.Write(index, b);
+ _accessor.Write(Ix(CheckIndex(index)), b);
return this;
}
@@ -75,206 +73,238 @@ namespace Lucene.Net.Support
throw new NotSupportedException();
}
- public override char GetChar()
+ internal override byte _get(int i)
{
- char c = _accessor.ReadChar(Position);
- Position += 2;
-
- //conform to how the index was written
- return Number.FlipEndian(c);
+ throw new NotSupportedException();
}
- public override ByteBuffer PutChar(char value)
+ internal override void _put(int i, byte b)
{
- //conform to how the index was written
- _accessor.Write(Position, Number.FlipEndian(value));
- Position += 2;
+ throw new NotSupportedException();
+ }
- return this;
+
+ public override char GetChar()
+ {
+ var littleEndian = _accessor.ReadChar(Ix(NextGetIndex(2)));
+ if (bigEndian)
+ {
+ return Number.FlipEndian(littleEndian);
+ }
+ return littleEndian;
}
public override char GetChar(int index)
{
- var c = _accessor.ReadChar(index);
+ var littleEndian = _accessor.ReadChar(Ix(CheckIndex(index, 2)));
+ if (bigEndian)
+ {
+ return Number.FlipEndian(littleEndian);
+ }
+ return littleEndian;
+ }
- //conform to how the index was written
- return Number.FlipEndian(c);
+ public override ByteBuffer PutChar(char value)
+ {
+ _accessor.Write(Ix(NextPutIndex(2)), bigEndian ? Number.FlipEndian(value) : value);
+ return this;
}
+
+
public override ByteBuffer PutChar(int index, char value)
{
- _accessor.Write(index, Number.FlipEndian(value));
-
+ _accessor.Write(Ix(CheckIndex(index, 2)), bigEndian ? Number.FlipEndian(value) : value);
return this;
}
public override short GetShort()
{
- var c = _accessor.ReadInt16(Position);
- Position += 2;
-
- //conform to how the index was written
- return Number.FlipEndian(c);
+ var littleEndian = _accessor.ReadInt16(Ix(NextGetIndex(2)));
+ if (bigEndian)
+ {
+ return Number.FlipEndian(littleEndian);
+ }
+ return littleEndian;
}
- public override ByteBuffer PutShort(short value)
+ public override short GetShort(int index)
{
- //conform to how the index was written
- _accessor.Write(Position, Number.FlipEndian(value));
- Position += 2;
-
- return this;
+ var littleEndian = _accessor.ReadInt16(Ix(CheckIndex(index, 2)));
+ if (bigEndian)
+ {
+ return Number.FlipEndian(littleEndian);
+ }
+ return littleEndian;
}
- public override short GetShort(int index)
+ public override ByteBuffer PutShort(short value)
{
- var c = _accessor.ReadInt16(index);
-
- //conform to how the index was written
- return Number.FlipEndian(c);
+ _accessor.Write(Ix(NextPutIndex(2)), bigEndian ? Number.FlipEndian(value) : value);
+ return this;
}
public override ByteBuffer PutShort(int index, short value)
{
- //conform to how the index was written
- _accessor.Write(index, Number.FlipEndian(value));
-
+ _accessor.Write(Ix(CheckIndex(index, 2)), bigEndian ? Number.FlipEndian(value) : value);
return this;
}
public override int GetInt()
{
- var c = _accessor.ReadInt32(Position);
- Position += 4;
+ var littleEndian = _accessor.ReadInt32(Ix(NextGetIndex(4)));
+ if (bigEndian)
+ {
+ return Number.FlipEndian(littleEndian);
+ }
+ return littleEndian;
+ }
- //conform to how the index was written
- return Number.FlipEndian(c);
+ public override int GetInt(int index)
+ {
+ var littleEndian = _accessor.ReadInt32(Ix(CheckIndex(index, 4)));
+ if (bigEndian)
+ {
+ return Number.FlipEndian(littleEndian);
+ }
+ return littleEndian;
}
public override ByteBuffer PutInt(int value)
{
- //conform to how the index was written
- _accessor.Write(Position, Number.FlipEndian(value));
- Position += 4;
-
+ _accessor.Write(Ix(NextPutIndex(4)), bigEndian ? Number.FlipEndian(value) : value);
return this;
}
- public override int GetInt(int index)
- {
- var c = _accessor.ReadInt32(index);
-
- //conform to how the index was written
- return Number.FlipEndian(c);
- }
+
public override ByteBuffer PutInt(int index, int value)
{
- //conform to how the index was written
- _accessor.Write(index, Number.FlipEndian(value));
-
+ _accessor.Write(Ix(CheckIndex(index, 4)), bigEndian ? Number.FlipEndian(value) : value);
return this;
}
public override long GetLong()
{
- var c = _accessor.ReadInt64(Position);
- Position += 8;
-
- //conform to how the index was written
- return Number.FlipEndian(c);
+ var littleEndian = _accessor.ReadInt64(Ix(NextGetIndex(8)));
+ if (bigEndian)
+ {
+ return Number.FlipEndian(littleEndian);
+ }
+ return littleEndian;
}
- public override ByteBuffer PutLong(long value)
+ public override long GetLong(int index)
{
- //conform to how the index was written
- _accessor.Write(Position, Number.FlipEndian(value));
- Position += 8;
-
- return this;
+ var littleEndian = _accessor.ReadInt64(Ix(CheckIndex(index, 8)));
+ if (bigEndian)
+ {
+ return Number.FlipEndian(littleEndian);
+ }
+ return littleEndian;
}
- public override long GetLong(int index)
+ public override ByteBuffer PutLong(long value)
{
- var c = _accessor.ReadInt64(index);
-
- //conform to how the index was written
- return Number.FlipEndian(c);
+ _accessor.Write(Ix(NextPutIndex(8)), bigEndian ? Number.FlipEndian(value) : value);
+ return this;
}
public override ByteBuffer PutLong(int index, long value)
{
- //conform to how the index was written
- _accessor.Write(index, Number.FlipEndian(value));
-
+ _accessor.Write(Ix(CheckIndex(index, 8)), bigEndian ? Number.FlipEndian(value) : value);
return this;
}
public override float GetFloat()
{
- var c = _accessor.ReadSingle(Position);
- Position += 4;
-
- //conform to how the index was written
- return Number.FlipEndian(c);
+ byte[] temp = new byte[4];
+ temp[0] = _accessor.ReadByte(Ix(NextGetIndex()));
+ temp[1] = _accessor.ReadByte(Ix(NextGetIndex()));
+ temp[2] = _accessor.ReadByte(Ix(NextGetIndex()));
+ temp[3] = _accessor.ReadByte(Ix(NextGetIndex()));
+ if (bigEndian)
+ {
+ System.Array.Reverse(temp);
+ }
+ return BitConverter.ToSingle(temp, 0);
}
- public override ByteBuffer PutFloat(float value)
+ public override float GetFloat(int index)
{
- //conform to how the index was written
- _accessor.Write(Position, Number.FlipEndian(value));
- Position += 4;
-
- return this;
+ byte[] temp = new byte[4];
+ temp[0] = _accessor.ReadByte(Ix(NextGetIndex(index)));
+ temp[1] = _accessor.ReadByte(Ix(NextGetIndex()));
+ temp[2] = _accessor.ReadByte(Ix(NextGetIndex()));
+ temp[3] = _accessor.ReadByte(Ix(NextGetIndex()));
+ if (bigEndian)
+ {
+ System.Array.Reverse(temp);
+ }
+ return BitConverter.ToSingle(temp, 0);
}
- public override float GetFloat(int index)
+ public override ByteBuffer PutFloat(float value)
{
- var c = _accessor.ReadSingle(index);
+ var bytes = BitConverter.GetBytes(value);
- //conform to how the index was written
- return Number.FlipEndian(c);
+ if (bigEndian)
+ {
+ System.Array.Reverse(bytes);
+ }
+
+ _accessor.Write(Ix(NextPutIndex()), bytes[0]);
+ _accessor.Write(Ix(NextPutIndex()), bytes[1]);
+ _accessor.Write(Ix(NextPutIndex()), bytes[2]);
+ _accessor.Write(Ix(NextPutIndex()), bytes[3]);
+ return this;
}
public override ByteBuffer PutFloat(int index, float value)
{
- //conform to how the index was written
- _accessor.Write(index, Number.FlipEndian(value));
+ var bytes = BitConverter.GetBytes(value);
+
+ if (bigEndian)
+ {
+ System.Array.Reverse(bytes);
+ }
+ _accessor.Write(Ix(NextPutIndex(index)), bytes[0]);
+ _accessor.Write(Ix(NextPutIndex()), bytes[1]);
+ _accessor.Write(Ix(NextPutIndex()), bytes[2]);
+ _accessor.Write(Ix(NextPutIndex()), bytes[3]);
return this;
}
public override double GetDouble()
{
- var c = _accessor.ReadDouble(Position);
- Position += 4;
-
- //conform to how the index was written
- return Number.FlipEndian(c);
+ var littleEndian = _accessor.ReadDouble(Ix(NextGetIndex(8)));
+ if (bigEndian)
+ {
+ return Number.FlipEndian(littleEndian);
+ }
+ return littleEndian;
}
- public override ByteBuffer PutDouble(double value)
+ public override double GetDouble(int index)
{
- //conform to how the index was written
- _accessor.Write(Position, Number.FlipEndian(value));
- Position += 8;
-
- return this;
+ var littleEndian = _accessor.ReadDouble(Ix(CheckIndex(index, 8)));
+ if (bigEndian)
+ {
+ return Number.FlipEndian(littleEndian);
+ }
+ return littleEndian;
}
- public override double GetDouble(int index)
+ public override ByteBuffer PutDouble(double value)
{
- var c = _accessor.ReadDouble(index);
-
- //conform to how the index was written
- return Number.FlipEndian(c);
+ _accessor.Write(Ix(NextPutIndex(8)), bigEndian ? Number.FlipEndian(value) : value);
+ return this;
}
public override ByteBuffer PutDouble(int index, double value)
{
- //conform to how the index was written
- _accessor.Write(index, Number.FlipEndian(value));
-
+ _accessor.Write(Ix(CheckIndex(index, 8)), bigEndian ? Number.FlipEndian(value) : value);
return this;
}
@@ -288,7 +318,7 @@ namespace Lucene.Net.Support
public override LongBuffer AsLongBuffer()
{
- throw new NotImplementedException();
+ throw new NotSupportedException();
}
}
}
\ No newline at end of file