// Copyright 1997 The Open Group Research Institute.  All rights reserved.

package krb5.lib;

import krb5.lib.crypto.Confounder;

/**
 * It defines/manages sequence number
 */
public class LocalSeqNumber implements SeqNumber {
    
    /**
	 * Last sequence number
	 */
	private int lastSeqNumber;


	/**
	 * Class constructor
	 * @see #randInit
	 */
	public LocalSeqNumber() {
		randInit();
	}

	/**
	 * Class constructor specifying a starting value
	 *
	 * @param start is of type int
	 * @see #init
	 */
	public LocalSeqNumber(int start) {
		lastSeqNumber = start;
	}


	/**
	 * Class constructor specifying a starting value
	 *
	 * @param start is of type Integer
	 * @see java.lang.Integer
	 * @see #init
	 */
	public LocalSeqNumber(Integer start) {
		this(start.intValue());
	}

	/**
	 * Intializes the sequence number
	 */
	public synchronized void randInit() {
		lastSeqNumber = Confounder.intValue();
	}

	/**
	 * This returns current sequence number
	 *
	 * @return int is a result
	 */
	public synchronized int current() {
		return lastSeqNumber;
	}


	/**
	 * Returns next sequence number
	 *
	 * @return int is a result
	 */
	public synchronized int next() {
		return lastSeqNumber + 1;
	}

	/**
	 * Increments the sequence number and returns the new value
	 *
	 * @return int is a result
	 */
	public synchronized int step() {
		return ++lastSeqNumber;
	}

}

