| Index: third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Encoder.java
|
| diff --git a/third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Encoder.java b/third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Encoder.java
|
| index c820ac5284583ae93f103bc981d22cfac3dacbbc..4f9535111bca635a196ed79415016445007e08c4 100644
|
| --- a/third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Encoder.java
|
| +++ b/third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Encoder.java
|
| @@ -5,7 +5,6 @@
|
| package org.chromium.mojo.bindings;
|
|
|
| import org.chromium.mojo.bindings.Interface.AbstractProxy.HandlerImpl;
|
| -import org.chromium.mojo.bindings.Struct.DataHeader;
|
| import org.chromium.mojo.system.Core;
|
| import org.chromium.mojo.system.Handle;
|
| import org.chromium.mojo.system.MessagePipeHandle;
|
| @@ -50,8 +49,8 @@ public class Encoder {
|
| public int dataEnd;
|
|
|
| /**
|
| - * @param core the |Core| implementation used to generate handles. Only used if the |Struct|
|
| - * being encoded contains interfaces, can be |null| otherwise.
|
| + * @param core the |Core| implementation used to generate handles. Only used if the data
|
| + * structure being encoded contains interfaces, can be |null| otherwise.
|
| * @param bufferSize A hint on the size of the message. Used to build the initial byte
|
| * buffer.
|
| */
|
| @@ -119,8 +118,8 @@ public class Encoder {
|
| /**
|
| * Constructor.
|
| *
|
| - * @param core the |Core| implementation used to generate handles. Only used if the |Struct|
|
| - * being encoded contains interfaces, can be |null| otherwise.
|
| + * @param core the |Core| implementation used to generate handles. Only used if the data
|
| + * structure being encoded contains interfaces, can be |null| otherwise.
|
| * @param sizeHint A hint on the size of the message. Used to build the initial byte buffer.
|
| */
|
| public Encoder(Core core, int sizeHint) {
|
| @@ -220,6 +219,22 @@ public class Encoder {
|
| }
|
|
|
| /**
|
| + * Encode a {@link Union} at the given offset.
|
| + */
|
| + public void encode(Union v, int offset, boolean nullable) {
|
| + if (v == null && !nullable) {
|
| + throw new SerializationException(
|
| + "Trying to encode a null pointer for a non-nullable type.");
|
| + }
|
| + if (v == null) {
|
| + encode(0L, offset);
|
| + encode(0L, offset + DataHeader.HEADER_SIZE);
|
| + return;
|
| + }
|
| + v.encode(this, offset);
|
| + }
|
| +
|
| + /**
|
| * Encodes a String.
|
| */
|
| public void encode(String v, int offset, boolean nullable) {
|
| @@ -300,6 +315,13 @@ public class Encoder {
|
| }
|
|
|
| /**
|
| + * Returns an {@link Encoder} suitable for encoding an array of union of the given length.
|
| + */
|
| + public Encoder encodeUnionArray(int length, int offset, int expectedLength) {
|
| + return encoderForArray(BindingsHelper.UNION_SIZE, length, offset, expectedLength);
|
| + }
|
| +
|
| + /**
|
| * Encodes an array of booleans.
|
| */
|
| public void encode(boolean[] v, int offset, int arrayNullability, int expectedLength) {
|
| @@ -432,6 +454,17 @@ public class Encoder {
|
| }
|
|
|
| /**
|
| + * Encodes a pointer to the next unclaimed memory and returns an encoder suitable to encode an
|
| + * union at this location.
|
| + */
|
| + public Encoder encoderForUnionPointer(int offset) {
|
| + encodePointerToNextUnclaimedData(offset);
|
| + Encoder result = new Encoder(mEncoderState);
|
| + result.mEncoderState.claimMemory(16);
|
| + return result;
|
| + }
|
| +
|
| + /**
|
| * Encodes an array of {@link InterfaceRequest}.
|
| */
|
| public <I extends Interface> void encode(InterfaceRequest<I>[] v, int offset,
|
| @@ -471,6 +504,13 @@ public class Encoder {
|
| mEncoderState.byteBuffer.putInt(mBaseOffset + offset, -1);
|
| }
|
|
|
| + /**
|
| + * Claim the given amount of memory at the end of the buffer, resizing it if needed.
|
| + */
|
| + void claimMemory(int size) {
|
| + mEncoderState.claimMemory(BindingsHelper.align(size));
|
| + }
|
| +
|
| private void encodePointerToNextUnclaimedData(int offset) {
|
| encode((long) mEncoderState.dataEnd - (mBaseOffset + offset), offset);
|
| }
|
|
|