clock (empty) → 0.1
raw patch · 11 files changed
+253/−0 lines, 11 filesdep +basesetup-changed
Dependencies added: base
Files
- AUTHORS +1/−0
- COPYING +31/−0
- LICENSE +31/−0
- README +5/−0
- Setup.hs +2/−0
- System/CPUTime/Clock.hs +87/−0
- clean +2/−0
- clock.cabal +20/−0
- csec/clock.c +68/−0
- csec/clock.h +5/−0
- edit +1/−0
+ AUTHORS view
@@ -0,0 +1,1 @@+Cetin Sert <cetin@sertcom.de>
+ COPYING view
@@ -0,0 +1,31 @@+Copyright (c) 2009, Cetin Sert++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are+met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * The names of contributors may not be used to endorse or promote+ products derived from this software without specific prior+ written permission. ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ LICENSE view
@@ -0,0 +1,31 @@+Copyright (c) 2009, Cetin Sert++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are+met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * The names of contributors may not be used to endorse or promote+ products derived from this software without specific prior+ written permission. ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README view
@@ -0,0 +1,5 @@+dedicated to An Le Thi Thanh++----------------++bindings to time.h: clock_gettime and clock_getres
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ System/CPUTime/Clock.hs view
@@ -0,0 +1,87 @@+module System.CPUTime.Clock (++ Clock (Monotonic, Realtime, ProcessTime, ThreadTime),+ TimeSpec (Time),++ clock_gettime,+ clock_getres,++ sec,+ nsec, ++) where++import GHC.Ptr+--import System.IO.Unsafe+import Foreign.Storable+import Foreign.Marshal.Alloc (free)+import Foreign.Marshal.Array++-- Reader function+type ReaderFunc = Ptr Int → IO ()++-- Readers+-- | +foreign import ccall clock_readtime_monotonic :: ReaderFunc+foreign import ccall clock_readtime_realtime :: ReaderFunc+foreign import ccall clock_readtime_processtime :: ReaderFunc+foreign import ccall clock_readtime_threadtime :: ReaderFunc++foreign import ccall clock_readres_monotonic :: ReaderFunc+foreign import ccall clock_readres_realtime :: ReaderFunc+foreign import ccall clock_readres_processtime :: ReaderFunc+foreign import ccall clock_readres_threadtime :: ReaderFunc+++-- Clock types+data Clock = Monotonic | Realtime | ProcessTime | ThreadTime++-- Clock-to-time reading+time :: Clock → ReaderFunc+time Monotonic = clock_readtime_monotonic+time Realtime = clock_readtime_realtime+time ProcessTime = clock_readtime_processtime+time ThreadTime = clock_readtime_threadtime++-- Clock-to-res reading+res :: Clock → ReaderFunc+res Monotonic = clock_readres_monotonic+res Realtime = clock_readres_realtime+res ProcessTime = clock_readres_processtime+res ThreadTime = clock_readres_threadtime++-- TimeSpec structure+data TimeSpec = Time Int Int deriving (Show, Read)+sec :: TimeSpec → Int+nsec :: TimeSpec → Int+sec (Time s _) = s+nsec (Time _ n) = n++-- clock_gettime+clock_gettime :: Clock → IO TimeSpec+clock_gettime = call . time++-- clock_getres+clock_getres :: Clock → IO TimeSpec+clock_getres = call . res++-- core function+call :: ReaderFunc → IO TimeSpec+call read_ = do+ t ← (2 ↑≣)+ read_ t+ s ← (t ≣→ 0)+ n ← (t ≣→ 1)+ (t ≣⊠)+ return $ Time s n++---------------------------------------------++(↑≣) :: Storable a ⇒ Int → IO (Ptr a)+(↑≣) = mallocArray++(≣→) :: Storable a ⇒ Ptr a → Int → IO a+(≣→) = peekElemOff++(≣⊠) :: Ptr a → IO ()+(≣⊠) = Foreign.Marshal.Alloc.free
+ clean view
@@ -0,0 +1,2 @@+cabal clean+find | grep -iE ~$ | xargs -n 1 rm
+ clock.cabal view
@@ -0,0 +1,20 @@+Name: clock+Version: 0.1+License: BSD3+License-file: COPYING+Copyright: (c) 2009 Cetin Sert+Author: Cetin Sert <cetin@sertcom.de>+Maintainer: Cetin Sert <cetin@sertcom.de>+Homepage: http://sert.homedns.org/hs/clock/+Category: System+Synopsis: bindings to time.h: clock_gettime and clock_getres+Description: bindings to time.h: clock_gettime and clock_getres+Stability: Experimental+Build-type: Simple+Build-depends: base >= 2 && < 4.2+Exposed-Modules: System.CPUTime.Clock+Extensions: ForeignFunctionInterface+C-sources: csec/clock.c+Include-dirs: csec+Install-includes: clock.h+ghc-options: -O2 -Wall -fglasgow-exts
+ csec/clock.c view
@@ -0,0 +1,68 @@+#include "clock.h"+#include <time.h>++void time_(clockid_t clock, long* t)+{++ struct timespec a;++ clock_gettime(clock, &a);++ t[0] = a.tv_sec ;+ t[1] = a.tv_nsec;++}++void clock_readtime_monotonic(long* t)+{+ time_(CLOCK_MONOTONIC, t);+}++void clock_readtime_realtime(long* t)+{+ time_(CLOCK_REALTIME, t);+}++void clock_readtime_processtime(long* t)+{+ time_(CLOCK_PROCESS_CPUTIME_ID , t);+}++void clock_readtime_threadtime(long* t)+{+ time_(CLOCK_THREAD_CPUTIME_ID , t);+}+++void res_(clockid_t clock, long* t)+{++ struct timespec a;++ clock_getres(clock, &a);++ t[0] = a.tv_sec ;+ t[1] = a.tv_nsec; ++}++void clock_readres_monotonic(long* t)+{+ res_(CLOCK_MONOTONIC, t);+}++void clock_readres_realtime(long* t)+{+ res_(CLOCK_REALTIME, t);+}++void clock_readres_processtime(long* t)+{+ res_(CLOCK_PROCESS_CPUTIME_ID , t);+}++void clock_readres_threadtime(long* t)+{+ res_(CLOCK_THREAD_CPUTIME_ID , t);+}+
+ csec/clock.h view
@@ -0,0 +1,5 @@+void clock_readtime_monotonic(long* t);+void clock_readtime_realtime(long* t);+void clock_readtime_processtime(long* t);+void clock_readtime_threadtime(long* t);+void clock_readres(long* t);
+ edit view
@@ -0,0 +1,1 @@+gedit COPYING clock.cabal csec/*.c csec/*.h System/CPUTime/*.hs &