IGNITE-1770: Read raw-only flag.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ea23354e Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ea23354e Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ea23354e Branch: refs/heads/ignite-1770 Commit: ea23354ea602f3ed935522f0c5986b44654ae923 Parents: 39cc376 Author: vozerov-gridgain <[email protected]> Authored: Tue Oct 27 15:36:52 2015 +0300 Committer: vozerov-gridgain <[email protected]> Committed: Tue Oct 27 15:36:52 2015 +0300 ---------------------------------------------------------------------- .../portable/PortablePositionReadable.java | 8 ++++++++ .../ignite/internal/portable/PortableUtils.java | 5 +++-- .../portable/builder/PortableBuilderReader.java | 12 +++++++----- .../streams/PortableAbstractInputStream.java | 18 ++++++++++++++++++ .../portable/streams/PortableHeapInputStream.java | 10 ++++++++++ .../streams/PortableOffheapInputStream.java | 10 ++++++++++ .../memory/PlatformBigEndianInputStreamImpl.java | 5 +++++ .../platform/memory/PlatformInputStreamImpl.java | 10 ++++++++++ 8 files changed, 71 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePositionReadable.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePositionReadable.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePositionReadable.java index 8536f70..7e8d9d3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePositionReadable.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePositionReadable.java @@ -22,6 +22,14 @@ package org.apache.ignite.internal.portable; */ public interface PortablePositionReadable { /** + * Read short at the given position. + * + * @param pos Position. + * @return Value. + */ + public short readShortPositioned(int pos); + + /** * Read integer at the given position. * * @param pos Position. http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java index 56b81af..823b0e1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java @@ -626,9 +626,10 @@ public class PortableUtils { */ public static int rawOffsetAbsolute(PortablePositionReadable in, int start) { int len = length(in, start); - int schemaId = in.readIntPositioned(start + GridPortableMarshaller.SCHEMA_ID_POS); - if (schemaId == 0) + short flags = in.readShortPositioned(start + GridPortableMarshaller.FLAGS_POS); + + if (PortableUtils.isRawOnly(flags)) // No schema, raw offset is located on schema offset position. return in.readIntPositioned(start + GridPortableMarshaller.SCHEMA_OR_RAW_OFF_POS); else { http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java index ab3c2a6..b999cde 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java @@ -131,11 +131,13 @@ public class PortableBuilderReader implements PortablePositionReadable { return PRIM.readByte(arr, pos); } - /** - * @param pos Position in the source array. - * @return Read int value. - */ - public int readIntPositioned(int pos) { + /** {@inheritDoc} */ + @Override public short readShortPositioned(int pos) { + return PRIM.readShort(arr, pos); + } + + /** {@inheritDoc} */ + @Override public int readIntPositioned(int pos) { return PRIM.readInt(arr, pos); } http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractInputStream.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractInputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractInputStream.java index 00d5658..7dbee92 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractInputStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractInputStream.java @@ -158,6 +158,16 @@ public abstract class PortableAbstractInputStream extends PortableAbstractStream } /** {@inheritDoc} */ + @Override public short readShortPositioned(int pos) { + int delta = pos + 2 - this.pos; + + if (delta > 0) + ensureEnoughData(delta); + + return readShortPositioned0(pos); + } + + /** {@inheritDoc} */ @Override public int readIntPositioned(int pos) { int delta = pos + 4 - this.pos; @@ -334,6 +344,14 @@ public abstract class PortableAbstractInputStream extends PortableAbstractStream protected abstract long readLongFast(); /** + * Internal routine for positioned short value read. + * + * @param pos Position. + * @return Int value. + */ + protected abstract short readShortPositioned0(int pos); + + /** * Internal routine for positioned int value read. * * @param pos Position. http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapInputStream.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapInputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapInputStream.java index d5618b3..adfeaad 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapInputStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapInputStream.java @@ -123,6 +123,16 @@ public final class PortableHeapInputStream extends PortableAbstractInputStream { } /** {@inheritDoc} */ + @Override protected short readShortPositioned0(int pos) { + short res = UNSAFE.getShort(data, BYTE_ARR_OFF + pos); + + if (!LITTLE_ENDIAN) + res = Short.reverseBytes(res); + + return res; + } + + /** {@inheritDoc} */ @Override protected int readIntPositioned0(int pos) { int res = UNSAFE.getInt(data, BYTE_ARR_OFF + pos); http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapInputStream.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapInputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapInputStream.java index 187ded5..75bffb9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapInputStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapInputStream.java @@ -113,6 +113,16 @@ public class PortableOffheapInputStream extends PortableAbstractInputStream { } /** {@inheritDoc} */ + @Override protected short readShortPositioned0(int pos) { + short res = UNSAFE.getShort(ptr + pos); + + if (!LITTLE_ENDIAN) + res = Short.reverseBytes(res); + + return res; + } + + /** {@inheritDoc} */ @Override protected int readIntPositioned0(int pos) { int res = UNSAFE.getInt(ptr + pos); http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianInputStreamImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianInputStreamImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianInputStreamImpl.java index b25471d..a4d711e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianInputStreamImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianInputStreamImpl.java @@ -65,6 +65,11 @@ public class PlatformBigEndianInputStreamImpl extends PlatformInputStreamImpl { } /** {@inheritDoc} */ + @Override public short readShortPositioned(int pos) { + return Short.reverseBytes(super.readShortPositioned(pos)); + } + + /** {@inheritDoc} */ @Override public int readIntPositioned(int pos) { return Integer.reverseBytes(super.readIntPositioned(pos)); } http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java index 68af0e7..68b4141 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java @@ -146,6 +146,16 @@ public class PlatformInputStreamImpl implements PlatformInputStream { } /** {@inheritDoc} */ + @Override public short readShortPositioned(int pos) { + int delta = pos + 2 - this.pos; + + if (delta > 0) + ensureEnoughData(delta); + + return UNSAFE.getShort(data + pos); + } + + /** {@inheritDoc} */ @Override public int readIntPositioned(int pos) { int delta = pos + 4 - this.pos;
