package hitimes; import java.lang.Math; import java.lang.System; import org.jruby.anno.JRubyClass; import org.jruby.anno.JRubyMethod; import org.jruby.anno.JRubyModule; import org.jruby.anno.JRubyConstant; import org.jruby.runtime.Visibility; import org.jruby.Ruby; import org.jruby.RubyClass; import org.jruby.RubyException; import org.jruby.RubyModule; import org.jruby.RubyObject; import org.jruby.exceptions.RaiseException; import org.jruby.runtime.builtin.IRubyObject; /** * @author Jeremy Hinegardner */ @JRubyModule( name = "Hitimes" ) public class Hitimes { public static final double INSTANT_CONVERSION_FACTOR = 1000000000d; private static final Ruby __ruby__ = Ruby.getGlobalRuntime(); public static RubyClass hitimesIntervalClass; /** * Create the Hitimes module and add it to the Ruby runtime. */ public static RubyModule createHitimesModule( Ruby runtime ) { RubyModule mHitimes = runtime.defineModule("Hitimes"); mHitimes.defineConstant("INSTANT_CONVERSION_FACTOR", __ruby__.newFloat(INSTANT_CONVERSION_FACTOR)); mHitimes.defineAnnotatedMethods( Hitimes.class ); RubyClass cStandardError = runtime.getStandardError(); RubyClass cHitimesError = mHitimes.defineClassUnder("Error", cStandardError, cStandardError.getAllocator()); RubyClass cHitimesStats = mHitimes.defineClassUnder("Stats", runtime.getObject(), HitimesStats.ALLOCATOR ); cHitimesStats.defineAnnotatedMethods( HitimesStats.class ); RubyClass cHitimesInterval = mHitimes.defineClassUnder("Interval", runtime.getObject(), HitimesInterval.ALLOCATOR ); Hitimes.hitimesIntervalClass = cHitimesInterval; cHitimesInterval.defineAnnotatedMethods( HitimesInterval.class ); return mHitimes; } static RaiseException newHitimesError( Ruby runtime, String message ) { RubyClass errorClass = runtime.getModule("Hitimes").getClass( "Error" ); return new RaiseException( RubyException.newException( runtime, errorClass, message ), true ); } @JRubyMethod( name = "raw_instant", module = true ) public static IRubyObject rawInstant(IRubyObject self) { return __ruby__.newFixnum( System.nanoTime() ); } }