// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.mojo.bindings;
import org.chromium.mojo.system.Core;
/** Base class for all mojo unions. */
public abstract class Union {
/** They type of object that has been set. */
protected int mTag;
/** Returns the type of object being held by this union. */
public int which() {
return mTag;
}
/** Returns whether the type of object in this union is known. */
public boolean isUnknown() {
return mTag == -1;
}
/**
* Returns the serialization of the union. This method can close Handles.
*
* @param core the |Core| implementation used to generate handles. Only used if the data
* structure being encoded contains interfaces, can be |null| otherwise.
*/
public Message serialize(Core core) {
Encoder encoder = new Encoder(core, BindingsHelper.UNION_SIZE);
encoder.claimMemory(16);
encode(encoder, 0);
return encoder.getMessage();
}
/** Serializes this data structure using the given encoder. */
protected abstract void encode(Encoder encoder, int offset);
}