All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jgroups.util.Seqno Maven / Gradle / Ivy

Go to download

This artifact provides a single jar that contains all classes required to use remote EJB and JMS, including all dependencies. It is intended for use by those not using maven, maven users should just import the EJB and JMS BOM's instead (shaded JAR's cause lots of problems with maven, as it is very easy to inadvertently end up with different versions on classes on the class path).

There is a newer version: 33.0.2.Final
Show newest version
package org.jgroups.util;

import java.util.ArrayList;
import java.util.Collection;


/**
 * Keeps track of a single message to retransmit
 * @author Bela Ban
 */
public class Seqno {
    final long low;
    byte flags=0;

    public static final byte DUMMY    = 1 << 0;
    public static final byte RECEIVED = 1 << 1;
    

    public Seqno(long low) {
        this.low=low;
    }

    /**
     * Only used to compare a long against a range in a TreeSet / TreeMap. Used to find a range given a seqno
     * @param num
     * @param dummy
     */
    public Seqno(long num, boolean dummy) {
        low=num;
        if(dummy)
            flags=Util.setFlag(flags, DUMMY);
    }

    public boolean isDummy() {
        return Util.isFlagSet(flags, DUMMY);
    }

    public long getLow() {
        return low;
    }

    public boolean contains(long num) {
        return low == num;
    }

    public boolean get(long num) {
        return low == num && received();
    }

    public void set(long num) {
        if(low == num)
            flags=Util.setFlag(flags, RECEIVED);
    }

    public void clear(long num) {
        if(low == num)
            flags=Util.clearFlags(flags, RECEIVED);
    }

    public int getNumberOfReceivedMessages() {
        return received()? 1 : 0;
    }

    public int getNumberOfMissingMessages() {
        return received()? 0 : 1;
    }

    public int size() {
        return 1;
    }

    public Collection getMessagesToRetransmit() {
        final Collection retval=new ArrayList<>(1);
        if(!received())
            retval.add(new Range(low, low));
        return retval;
    }

    public int hashCode() {
        return (int)low;
    }

    public boolean equals(Object obj) {
        return obj instanceof Seqno && low == ((Seqno)obj).low;
    }

    public String toString() {
        if(isDummy())
            return low + " (dummy)";
        return Long.toString(low);
    }

    public String print() {
        if(isDummy())
            return Long.toString(low);
        return Long.toString(low);
    }



    protected boolean received() {
        return Util.isFlagSet(flags, RECEIVED);
    }
    
  
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy