Struct.java revision 645501c2ab19a559ce82a1d5a29ced159a4c30fb
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5package org.chromium.mojo.bindings; 6 7import org.chromium.mojo.system.Core; 8 9/** 10 * Base class for all mojo structs. 11 */ 12public abstract class Struct { 13 /** 14 * The base size of the encoded struct. 15 */ 16 private final int mEncodedBaseSize; 17 18 /** 19 * The version of the struct. 20 */ 21 private final int mVersion; 22 23 /** 24 * Constructor. 25 */ 26 protected Struct(int encodedBaseSize, int version) { 27 mEncodedBaseSize = encodedBaseSize; 28 mVersion = version; 29 } 30 31 /** 32 * Returns the version of the struct. It is the max version of the struct in the mojom if it has 33 * been created locally, and the version of the received struct if it has been deserialized. 34 */ 35 public int getVersion() { 36 return mVersion; 37 } 38 39 /** 40 * Returns the serialization of the struct. This method can close Handles. 41 * 42 * @param core the |Core| implementation used to generate handles. Only used if the data 43 * structure being encoded contains interfaces, can be |null| otherwise. 44 */ 45 public Message serialize(Core core) { 46 Encoder encoder = new Encoder(core, mEncodedBaseSize); 47 encode(encoder); 48 return encoder.getMessage(); 49 } 50 51 /** 52 * Returns the serialization of the struct prepended with the given header. 53 * 54 * @param header the header to prepend to the returned message. 55 * @param core the |Core| implementation used to generate handles. Only used if the |Struct| 56 * being encoded contains interfaces, can be |null| otherwise. 57 */ 58 public ServiceMessage serializeWithHeader(Core core, MessageHeader header) { 59 Encoder encoder = new Encoder(core, mEncodedBaseSize + header.getSize()); 60 header.encode(encoder); 61 encode(encoder); 62 return new ServiceMessage(encoder.getMessage(), header); 63 } 64 65 /** 66 * Use the given encoder to serialize this data structure. 67 */ 68 protected abstract void encode(Encoder encoder); 69} 70