Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id A0976200BB9 for ; Sun, 23 Oct 2016 15:01:57 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 9F7D7160B00; Sun, 23 Oct 2016 13:01:57 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id A0668160B04 for ; Sun, 23 Oct 2016 15:01:56 +0200 (CEST) Received: (qmail 5538 invoked by uid 500); 23 Oct 2016 13:01:54 -0000 Mailing-List: contact commits-help@lucenenet.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: lucene-net-dev@lucenenet.apache.org Delivered-To: mailing list commits@lucenenet.apache.org Received: (qmail 3468 invoked by uid 99); 23 Oct 2016 13:01:48 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 23 Oct 2016 13:01:48 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 0043DF16B4; Sun, 23 Oct 2016 13:01:47 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: nightowl888@apache.org To: commits@lucenenet.apache.org Date: Sun, 23 Oct 2016 13:02:13 -0000 Message-Id: In-Reply-To: <8416623a27914fd195213e3a8d36fe03@git.apache.org> References: <8416623a27914fd195213e3a8d36fe03@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [27/50] [abbrv] lucenenet git commit: Fixed bugs with keeping track of the current position in Core.Support.MemoryMappedFileByteBuffer archived-at: Sun, 23 Oct 2016 13:01:57 -0000 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 Authored: Wed Oct 19 07:04:46 2016 +0700 Committer: Shad Storhaug 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