/* Copyright 2012, Sebastian Reichel * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ public struct Timer { private Posix.timespec time_old; public void start() { Posix.clock_gettime(Posix.CLOCK_MONOTONIC, out time_old); } public ulong ellapsed() { ulong result; Posix.timespec time_new; Posix.clock_gettime(Posix.CLOCK_MONOTONIC, out time_new); if(time_new.tv_sec < time_old.tv_sec) result = 0; else if(time_new.tv_sec == time_old.tv_sec) result = (time_new.tv_nsec - time_old.tv_nsec) / 1000; else result = (time_new.tv_sec - time_old.tv_sec) * 1000 - (time_old.tv_nsec/1000) + (time_new.tv_nsec/1000); time_old = time_new; return result; } }