001         package com.croftsoft.core.math;
002    
003         import java.io.Serializable;
004         import java.math.BigInteger;
005    
006         import com.croftsoft.core.lang.NullArgumentException;
007    
008         /*********************************************************************
009         * An incrementable integer counter with no maximum limit.
010         *
011         * <p />
012         *    
013         * @version
014         *   2001-03-30
015         * @since
016         *   2001-03-30
017         * @author
018         *   <a href="https://www.croftsoft.com/">David W. Croft</a>
019         *********************************************************************/
020    
021         public final class  Counter
022           implements Serializable
023         //////////////////////////////////////////////////////////////////////
024         //////////////////////////////////////////////////////////////////////
025         {
026    
027         private static final long  serialVersionUID = 1L;
028    
029         private BigInteger  count;
030    
031         //////////////////////////////////////////////////////////////////////
032         //////////////////////////////////////////////////////////////////////
033    
034         public  Counter ( BigInteger  count )
035         //////////////////////////////////////////////////////////////////////
036         {
037           NullArgumentException.check ( this.count = count );
038         }
039    
040         public  Counter ( )
041         //////////////////////////////////////////////////////////////////////
042         {
043           this ( BigInteger.ZERO );
044         }
045    
046         //////////////////////////////////////////////////////////////////////
047         //////////////////////////////////////////////////////////////////////
048    
049         public BigInteger  getCount ( )
050         //////////////////////////////////////////////////////////////////////
051         {
052           return count;
053         }
054    
055         /*********************************************************************
056         * Synchronized.
057         *********************************************************************/
058         public synchronized BigInteger  increment ( )
059         //////////////////////////////////////////////////////////////////////
060         {
061           return ( count = count.add ( BigInteger.ONE ) );
062         }
063    
064         //////////////////////////////////////////////////////////////////////
065         //////////////////////////////////////////////////////////////////////
066         }