COIN-OR::LEMON - Graph Library

source: lemon-0.x/lemon/bits/mingw32_time.h @ 2028:d0e8a86a1ff2

Last change on this file since 2028:d0e8a86a1ff2 was 2028:d0e8a86a1ff2, checked in by Balazs Dezso, 18 years ago

MinGW32 compatibility

File size: 2.9 KB
Line 
1/* -*- C++ -*-
2 *
3 * This file is a part of LEMON, a generic C++ optimization library
4 *
5 * Copyright (C) 2003-2006
6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 * (Egervary Research Group on Combinatorial Optimization, EGRES).
8 *
9 * Permission to use, modify and distribute this software is granted
10 * provided that this copyright notice appears in all copies. For
11 * precise terms see the accompanying LICENSE file.
12 *
13 * This software is provided "AS IS" with no warranty of any kind,
14 * express or implied, and with no claim as to its suitability for any
15 * purpose.
16 *
17 */
18
19#ifndef LEMON_BITS_MINGW32_TIME_H
20#define LEMON_BITS_MINGW32_TIME_H
21
22#ifdef WIN32
23
24#include <windows.h>
25#include <time.h>
26#include "dos.h"
27
28static const char days[] =
29"Sun Mon Tue Wed Thu Fri Sat ";
30static const char months[] =
31"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ";
32
33inline void num2str(char *c,int i) {
34  c[0]=i/10+'0';
35  c[1]=i%10+'0';
36}
37
38inline char *asctime_r(const struct tm *t, char *buf) {
39  /* "Wed Jun 30 21:49:08 1993\n" */
40  *(int*)buf=*(int*)(days+(t->tm_wday<<2));
41  *(int*)(buf+4)=*(int*)(months+(t->tm_mon<<2));
42  num2str(buf+8,t->tm_mday);
43  if (buf[8]=='0') buf[8]=' ';
44  buf[10]=' ';
45  num2str(buf+11,t->tm_hour);
46  buf[13]=':';
47  num2str(buf+14,t->tm_min);
48  buf[16]=':';
49  num2str(buf+17,t->tm_sec);
50  buf[19]=' ';
51  num2str(buf+20,(t->tm_year+1900)/100);
52  num2str(buf+22,(t->tm_year+1900)%100);
53  buf[24]='\n'; buf[25]='\0';
54  return buf;
55}
56
57inline struct tm * localtime_r (const time_t *t, struct tm *tm) {
58  struct tm *tmp;
59 
60  if ((tmp = localtime(t)) && tm)
61    *tm = *tmp;
62  else
63    return 0;
64 
65  return tm;
66}
67
68inline char *ctime_r(const time_t * tim_p , char * result) {
69  struct tm tm;
70  return asctime_r (localtime_r (tim_p, &tm), result);
71}
72
73
74inline int gettimeofday(struct timeval * tp, struct timezone *) {
75  SYSTEMTIME systime;
76
77  if (tp) {
78    struct tm tmrec;
79    time_t theTime = time(NULL);
80   
81   
82    tmrec = *localtime(&theTime);
83    tp->tv_sec = mktime(&tmrec);
84    GetLocalTime(&systime); /* system time */
85
86    tp->tv_usec = systime.wMilliseconds * 1000;
87  }
88  return 0;
89}
90
91
92struct tms {
93  long  tms_utime;
94  long  tms_stime;
95  long  tms_cutime;
96  long  tms_cstime;
97};
98
99inline long filetime_to_clock(FILETIME *ft)
100{
101  __int64 qw = ft->dwHighDateTime;
102  qw <<= 32;
103  qw |= ft->dwLowDateTime;
104  qw /= 10000;  /* File time ticks at 0.1uS, clock at 1mS */
105  return (long) qw;
106
107}
108
109inline int times(struct tms *tmbuf)
110{
111  FILETIME create, exit, kernel, user;
112  if (GetProcessTimes(GetCurrentProcess(),&create, &exit, &kernel, &user)) {
113    tmbuf->tms_utime = filetime_to_clock(&user);
114    tmbuf->tms_stime = filetime_to_clock(&kernel);
115    tmbuf->tms_cutime = 0;
116    tmbuf->tms_cstime = 0;
117  }
118  else {
119    tmbuf->tms_utime = clock();
120    tmbuf->tms_stime = 0;
121    tmbuf->tms_cutime = 0;
122    tmbuf->tms_cstime = 0;
123  }
124  return 0;
125}
126
127#define _SC_CLK_TCK 1
128
129inline int sysconf(int)
130{
131  return 1;
132}
133
134#endif
135
136
137#endif
Note: See TracBrowser for help on using the repository browser.