
package org.jgroups;

import org.jgroups.util.Streamable;
import org.jgroups.util.UUID;

import java.io.Externalizable;

/**
 * Address identifies cluster member. For example, whenever a unicast message is sent in a cluster
 * an Address of a cluster member message recipient needs to be specified. Similarly a cluster
 * member can use Address to check its own identity, request a state from a particular member and so
 * on. Addresses are mostly generated by the bottom-most (transport) layers (e.g. UDP, TCP,
 * LOOPBACK).
 * 
 * @author Bela Ban
 * @since 2.0
 * @see PhysicalAddress
 * @see UUID
 */
public interface Address extends Streamable, Comparable<Address>, Externalizable {
    // flags used for marshalling
    public static final byte NULL        = 1 << 0;
    public static final byte UUID_ADDR   = 1 << 1;
    public static final byte SITE_UUID   = 1 << 2;
    public static final byte SITE_MASTER = 1 << 3;
    public static final byte IP_ADDR     = 1 << 4;


    /** Returns serialized size of this address */
    int size();
}
