001        package com.croftsoft.core.sim;
002    
003        import com.croftsoft.core.lang.lifecycle.Startable;
004        import com.croftsoft.core.lang.lifecycle.Updatable;
005        import com.croftsoft.core.math.MathConstants;
006    
007        /***********************************************************************
008        * DeltaClock implementation.
009        * 
010        * @version
011        *   $Id: NanoDeltaClock.java,v 1.3 2008/08/17 22:39:46 croft Exp $
012        * @since
013        *   2008-07-06
014        * @author
015        *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
016        ***********************************************************************/
017    
018        public final class  NanoDeltaClock
019          implements Startable, Updatable, DeltaClock
020        ////////////////////////////////////////////////////////////////////////
021        ////////////////////////////////////////////////////////////////////////
022        {
023          
024        private long    nanoTime;
025          
026        private double  deltaTime;
027          
028        ////////////////////////////////////////////////////////////////////////
029        ////////////////////////////////////////////////////////////////////////
030        
031        public  NanoDeltaClock ( final long  nanoTime )
032        ////////////////////////////////////////////////////////////////////////
033        {
034          this.nanoTime = nanoTime;
035        }
036        
037        public  NanoDeltaClock ( )
038        ////////////////////////////////////////////////////////////////////////
039        {
040          this ( System.nanoTime ( ) );
041        }
042        
043        ////////////////////////////////////////////////////////////////////////
044        // accessor methods
045        ////////////////////////////////////////////////////////////////////////
046        
047        public long  getNanoTime ( )
048        ////////////////////////////////////////////////////////////////////////
049        {
050          return nanoTime;
051        }
052        
053        public double  getDeltaTime ( )
054        ////////////////////////////////////////////////////////////////////////
055        {
056          return deltaTime;
057        }
058        
059        ////////////////////////////////////////////////////////////////////////
060        // mutator methods
061        ////////////////////////////////////////////////////////////////////////
062        
063        public void  setNanoTime ( final long  nanoTime )
064        ////////////////////////////////////////////////////////////////////////
065        {
066          this.nanoTime = nanoTime;
067        }
068        
069        public void  setDeltaTime ( final double  deltaTime )
070        ////////////////////////////////////////////////////////////////////////
071        {
072          this.deltaTime = deltaTime;
073        }
074        
075        ////////////////////////////////////////////////////////////////////////
076        // lifecycle methods
077        ////////////////////////////////////////////////////////////////////////
078        
079        public void  start ( )
080        ////////////////////////////////////////////////////////////////////////
081        {
082          nanoTime = System.nanoTime ( );
083        }
084        
085        public void  update ( )
086        ////////////////////////////////////////////////////////////////////////
087        {
088          final long  oldNanoTime = nanoTime;
089          
090          nanoTime = System.nanoTime ( );
091          
092          deltaTime = ( double ) ( nanoTime - oldNanoTime )
093            / MathConstants.NANOSECONDS_PER_SECOND;
094        }
095        
096        ////////////////////////////////////////////////////////////////////////
097        ////////////////////////////////////////////////////////////////////////
098        }