OSDN Git Service

first
[psychlops/cpp.git] / psychlops / platform / osx / psychlops_io_clock_OSX.cpp
1 /*
2  *  psychlops_io_clock_OSX.cpp
3  *  Psychlops Standard Library (MacOSX)
4  *
5  *  Last Modified 2005/12/19 by Kenchi HOSOKAWA
6  *  (C) 2005 Kenchi HOSOKAWA, Kazushi MARUYA, Takao SATO
7  */
8
9 #include <stdlib.h>
10 #include <Math.h>
11 #include <time.h>
12 #include <iostream>
13
14 #include <ApplicationServices/ApplicationServices.h>
15 #include <CoreServices/CoreServices.h>
16 #include <mach/mach.h>
17 #include <mach/mach_time.h>
18
19 #include "psychlops_io_clock_OSX.h"
20 #include "../../core/devices/psychlops_io_clock.h"
21
22
23 namespace Psychlops {
24
25
26         void Clock::initialize() {
27         }
28         Clock::Clock() {
29                 update();
30         }
31         Clock::Clock(CLOCK_UNIT nativeclock_) {
32                 clock_ = nativeclock_;
33         }
34         Clock::~Clock() {}
35         void Clock::update() {
36                 clock_ = mach_absolute_time();
37         }
38         Clock Clock::operator +(Clock &rhs) {
39                 return Clock(clock_ + rhs.clock_);
40         }
41         Clock Clock::operator -(Clock &rhs) {
42                 return Clock(clock_ - rhs.clock_);
43         }
44         Clock & Clock::operator +=(Clock &rhs) {
45                 (*this) = (*this) + rhs;
46                 return *this;
47         }
48         Clock & Clock::operator -=(Clock &rhs) {
49                 (*this) = (*this) - rhs;
50                 return *this;
51         }
52         bool Clock::operator ==(Clock &rhs) {
53                 return (clock_==rhs.clock_);
54         }
55         bool Clock::operator !=(Clock &rhs) {
56                 return (clock_!=rhs.clock_);
57         }
58         bool Clock::operator >(Clock &rhs) {
59                 return (clock_>rhs.clock_);
60         }
61         bool Clock::operator <(Clock &rhs) {
62                 return (clock_<rhs.clock_);
63         }
64         bool Clock::operator >=(Clock &rhs) {
65                 return (clock_>=rhs.clock_);
66         }
67         bool Clock::operator <=(Clock &rhs) {
68                 return (clock_<=rhs.clock_);
69         }
70         double Clock::at_msec() {
71                 long long val;
72                 Nanoseconds nano;
73                 nano = AbsoluteToNanoseconds( *(AbsoluteTime *) &clock_ );
74                 val = nano.hi;
75                 val <<= 32;
76                 val += nano.lo;
77                 return (val/(1000000.0));
78         }
79
80
81         long Gettime_ms() {
82                 uint64_t time_now;
83                 long long val;
84                 Nanoseconds nano;
85                 time_now = mach_absolute_time();
86                 nano = AbsoluteToNanoseconds( *(AbsoluteTime *) &time_now );
87                 val = nano.hi;
88                 val <<= 32;
89                 val += nano.lo;
90                 return val/(1000000.0);
91         }
92
93
94
95 }       /*      <- namespace Psycholops         */