Author: bfreisen
Date: Sat Sep 24 18:01:49 2016
New Revision: 72795
URL:
http://svn.reactos.org/svn/reactos?rev=72795&view=rev
Log:
[SDK][ATL] Add header atltime.h and prerequisites in atlsimpstr.h and atlstr.h.
CORE-12023
Added:
trunk/reactos/sdk/lib/atl/atltime.h (with props)
Modified:
trunk/reactos/sdk/lib/atl/atlsimpstr.h
trunk/reactos/sdk/lib/atl/atlstr.h
Modified: trunk/reactos/sdk/lib/atl/atlsimpstr.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/atl/atlsimpstr.h?r…
==============================================================================
--- trunk/reactos/sdk/lib/atl/atlsimpstr.h [iso-8859-1] (original)
+++ trunk/reactos/sdk/lib/atl/atlsimpstr.h [iso-8859-1] Sat Sep 24 18:01:49 2016
@@ -234,6 +234,12 @@
return *this;
}
+ CSimpleStringT& operator+=(XCHAR ch)
+ {
+ Append(&ch, 1);
+ return *this;
+ }
+
operator PCXSTR() const throw()
{
return m_pszData;
@@ -362,6 +368,13 @@
{
ATLASSERT(nNewLength >= 0);
SetLength(nNewLength);
+ }
+
+ void ReleaseBuffer(_In_ int nNewLength = -1)
+ {
+ if (nNewLength < 0)
+ nNewLength = StringLength(m_pszData);
+ ReleaseBufferSetLength(nNewLength);
}
bool IsEmpty() const throw()
@@ -603,6 +616,12 @@
}
};
+
+#ifdef UNICODE
+typedef CSimpleStringT<WCHAR> CSimpleString;
+#else
+typedef CSimpleStringT<CHAR> CSimpleString;
+#endif
}
-#endif
+#endif
Modified: trunk/reactos/sdk/lib/atl/atlstr.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/atl/atlstr.h?rev=7…
==============================================================================
--- trunk/reactos/sdk/lib/atl/atlstr.h [iso-8859-1] (original)
+++ trunk/reactos/sdk/lib/atl/atlstr.h [iso-8859-1] Sat Sep 24 18:01:49 2016
@@ -131,6 +131,15 @@
typedef CAtlStringA CStringA;
+#ifdef UNICODE
+typedef CAtlStringW CAtlString;
+typedef CStringW CString;
+#else
+typedef CAtlStringA CAtlString;
+typedef CStringA CString;
+#endif
+
+
}
#endif
Added: trunk/reactos/sdk/lib/atl/atltime.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/atl/atltime.h?rev=…
==============================================================================
--- trunk/reactos/sdk/lib/atl/atltime.h (added)
+++ trunk/reactos/sdk/lib/atl/atltime.h [iso-8859-1] Sat Sep 24 18:01:49 2016
@@ -0,0 +1,662 @@
+// PROJECT: ReactOS ATL CTime, CFileTime, CTimeSpan, CFileTimeSpan
+// LICENSE: Public Domain
+// PURPOSE: Provides compatibility to Microsoft ATL
+// PROGRAMMERS: Benedikt Freisen
+
+#ifndef __ATLTIME_H__
+#define __ATLTIME_H__
+
+// WARNING: Untested code
+
+#pragma once
+
+#include <atlcore.h>
+#include <windows.h>
+#include <atlstr.h>
+#include <time.h>
+#include <oledb.h>
+
+namespace ATL
+{
+
+class CTimeSpan
+{
+ __time64_t m_nSpan;
+public:
+ CTimeSpan() throw()
+ {
+ // leave uninitialized
+ }
+
+ CTimeSpan(__time64_t time) throw()
+ {
+ m_nSpan = time;
+ }
+
+ CTimeSpan(LONG lDays, int nHours, int nMins, int nSecs) throw()
+ {
+ ATLASSERT(lDays >= 0 && nHours >= 0 && nHours <= 59
&& nMins >= 0 && nMins <= 59 && nSecs >= 0 &&
nSecs <= 59);
+ m_nSpan = ((((LONGLONG)lDays) * 24 + nHours) * 60 + nMins) * 60 + nSecs;
+ }
+
+ CString Format(LPCSTR pFormat) const
+ {
+ struct tm time;
+ _localtime64_s(&time, &m_nSpan);
+ CStringA strTime;
+ strftime(strTime.GetBuffer(256), 256, pFormat, &time);
+ strTime.ReleaseBuffer();
+ return CString(strTime);
+ }
+
+ CString Format(LPCTSTR pszFormat) const
+ {
+ struct tm time;
+ _localtime64_s(&time, &m_nSpan);
+ CString strTime;
+#ifdef UNICODE
+ wcsftime(strTime.GetBuffer(256), 256, pszFormat, &time);
+#else
+ strftime(strTime.GetBuffer(256), 256, pszFormat, &time);
+#endif
+ strTime.ReleaseBuffer();
+ return strTime;
+ }
+
+ CString Format(UINT nID) const
+ {
+ struct tm time;
+ _localtime64_s(&time, &m_nSpan);
+ CString strFormat;
+ strFormat.LoadString(nID);
+ CString strTime;
+#ifdef UNICODE
+ wcsftime(strTime.GetBuffer(256), 256, strFormat, &time);
+#else
+ strftime(strTime.GetBuffer(256), 256, strFormat, &time);
+#endif
+ strTime.ReleaseBuffer();
+ return strTime;
+ }
+
+ LONGLONG GetTotalHours() const throw()
+ {
+ return m_nSpan / 60 / 60;
+ }
+
+ LONGLONG GetTotalMinutes() const throw()
+ {
+ return m_nSpan / 60;
+ }
+
+ LONGLONG GetTotalSeconds() const throw()
+ {
+ return m_nSpan;
+ }
+
+ LONGLONG GetDays() const throw()
+ {
+ return m_nSpan / 60 / 60 / 24;
+ }
+
+ LONG GetHours() const throw()
+ {
+ return GetTotalHours() - GetDays() * 24;
+ }
+
+ LONG GetMinutes() const throw()
+ {
+ return GetTotalMinutes() - GetTotalHours() * 60;
+ }
+
+ LONG GetSeconds() const throw()
+ {
+ return GetTotalSeconds() - GetTotalMinutes() * 60;
+ }
+
+ __time64_t GetTimeSpan() const throw()
+ {
+ return m_nSpan;
+ }
+
+// CArchive& Serialize64(CArchive& ar) // MFC only
+// {
+// // TODO
+// }
+
+};
+
+class CTime
+{
+ __time64_t m_nTime;
+public:
+ CTime() throw()
+ {
+ // leave uninitialized
+ }
+
+ CTime(__time64_t time) throw()
+ {
+ m_nTime = time;
+ }
+
+ CTime(int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nDST = -1)
+ {
+ struct tm time;
+ time.tm_year = nYear;
+ time.tm_mon = nMonth;
+ time.tm_mday = nDay;
+ time.tm_hour = nHour;
+ time.tm_min = nMin;
+ time.tm_sec = nSec;
+ time.tm_isdst = nDST;
+ m_nTime = _mktime64(&time);
+ }
+
+ CTime(WORD wDosDate, WORD wDosTime, int nDST = -1)
+ {
+ FILETIME ft;
+ DosDateTimeToFileTime(wDosDate, wDosTime, &ft);
+ SYSTEMTIME st;
+ FileTimeToSystemTime(&ft, &st);
+ struct tm time;
+ time.tm_year = st.wYear;
+ time.tm_mon = st.wMonth;
+ time.tm_wday = st.wDayOfWeek;
+ time.tm_hour = st.wHour;
+ time.tm_min = st.wMinute;
+ time.tm_sec = st.wSecond;
+ time.tm_isdst = nDST;
+ m_nTime = _mktime64(&time);
+ }
+
+ CTime(const SYSTEMTIME& st, int nDST = -1) throw()
+ {
+ struct tm time;
+ time.tm_year = st.wYear;
+ time.tm_mon = st.wMonth;
+ time.tm_wday = st.wDayOfWeek;
+ time.tm_hour = st.wHour;
+ time.tm_min = st.wMinute;
+ time.tm_sec = st.wSecond;
+ time.tm_isdst = nDST;
+ m_nTime = _mktime64(&time);
+ }
+
+ CTime(const FILETIME& ft, int nDST = -1)
+ {
+ SYSTEMTIME st;
+ FileTimeToSystemTime(&ft, &st);
+ struct tm time;
+ time.tm_year = st.wYear;
+ time.tm_mon = st.wMonth;
+ time.tm_wday = st.wDayOfWeek;
+ time.tm_hour = st.wHour;
+ time.tm_min = st.wMinute;
+ time.tm_sec = st.wSecond;
+ time.tm_isdst = nDST;
+ m_nTime = _mktime64(&time);
+ }
+
+ CTime(const DBTIMESTAMP& dbts, int nDST = -1) throw()
+ {
+ struct tm time;
+ time.tm_year = dbts.year;
+ time.tm_mon = dbts.month;
+ time.tm_hour = dbts.hour;
+ time.tm_min = dbts.minute;
+ time.tm_sec = dbts.second;
+ time.tm_isdst = nDST;
+ m_nTime = _mktime64(&time);
+ }
+
+ CString Format(LPCTSTR pszFormat) const
+ {
+ struct tm time;
+ _localtime64_s(&time, &m_nTime);
+ CString strTime;
+#ifdef UNICODE
+ wcsftime(strTime.GetBuffer(256), 256, pszFormat, &time);
+#else
+ strftime(strTime.GetBuffer(256), 256, pszFormat, &time);
+#endif
+ strTime.ReleaseBuffer();
+ return strTime;
+ }
+
+ CString Format(UINT nFormatID) const
+ {
+ struct tm time;
+ _localtime64_s(&time, &m_nTime);
+ CString strFormat;
+ strFormat.LoadString(nFormatID);
+ CString strTime;
+#ifdef UNICODE
+ wcsftime(strTime.GetBuffer(256), 256, strFormat, &time);
+#else
+ strftime(strTime.GetBuffer(256), 256, strFormat, &time);
+#endif
+ strTime.ReleaseBuffer();
+ return strTime;
+ }
+
+ CString FormatGmt(LPCTSTR pszFormat) const
+ {
+ struct tm time;
+ _gmtime64_s(&time, &m_nTime);
+ CString strTime;
+#ifdef UNICODE
+ wcsftime(strTime.GetBuffer(256), 256, pszFormat, &time);
+#else
+ strftime(strTime.GetBuffer(256), 256, pszFormat, &time);
+#endif
+ strTime.ReleaseBuffer();
+ return strTime;
+ }
+
+ CString FormatGmt(UINT nFormatID) const
+ {
+ struct tm time;
+ _gmtime64_s(&time, &m_nTime);
+ CString strFormat;
+ strFormat.LoadString(nFormatID);
+ CString strTime;
+#ifdef UNICODE
+ wcsftime(strTime.GetBuffer(256), 256, strFormat, &time);
+#else
+ strftime(strTime.GetBuffer(256), 256, strFormat, &time);
+#endif
+ strTime.ReleaseBuffer();
+ return strTime;
+ }
+
+ bool GetAsDBTIMESTAMP(DBTIMESTAMP& dbts) const throw()
+ {
+ struct tm time;
+ _gmtime64_s(&time, &m_nTime);
+ dbts.year = time.tm_year;
+ dbts.month = time.tm_mon;
+ dbts.day = time.tm_mday;
+ dbts.hour = time.tm_hour;
+ dbts.minute = time.tm_min;
+ dbts.second = time.tm_sec;
+ dbts.fraction = 0;
+ return true; // TODO: error handling?
+ }
+
+ bool GetAsSystemTime(SYSTEMTIME& st) const throw()
+ {
+ struct tm time;
+ _gmtime64_s(&time, &m_nTime);
+ st.wYear = time.tm_year;
+ st.wMonth = time.tm_mon;
+ st.wDayOfWeek = time.tm_wday;
+ st.wDay = time.tm_mday;
+ st.wHour = time.tm_hour;
+ st.wMinute = time.tm_min;
+ st.wSecond = time.tm_sec;
+ st.wMilliseconds = 0;
+ return true; // TODO: error handling?
+ }
+
+ static CTime WINAPI GetCurrentTime() throw()
+ {
+ __time64_t time;
+ _time64(&time);
+ return CTime(time);
+ }
+
+ int GetDay() const throw()
+ {
+ struct tm time;
+ _localtime64_s(&time, &m_nTime);
+ return time.tm_mday;
+ }
+
+ int GetDayOfWeek() const throw()
+ {
+ struct tm time;
+ _localtime64_s(&time, &m_nTime);
+ return time.tm_wday;
+ }
+
+ struct tm* GetGmtTm(struct tm* ptm) const
+ {
+ _gmtime64_s(ptm, &m_nTime);
+ return ptm;
+ }
+
+ int GetHour() const throw()
+ {
+ struct tm time;
+ _localtime64_s(&time, &m_nTime);
+ return time.tm_hour;
+ }
+
+ struct tm* GetLocalTm(struct tm* ptm) const
+ {
+ _localtime64_s(ptm, &m_nTime);
+ return ptm;
+ }
+
+ int GetMinute() const throw()
+ {
+ struct tm time;
+ _localtime64_s(&time, &m_nTime);
+ return time.tm_min;
+ }
+
+ int GetMonth() const throw()
+ {
+ struct tm time;
+ _localtime64_s(&time, &m_nTime);
+ return time.tm_mon;
+ }
+
+ int GetSecond() const throw()
+ {
+ struct tm time;
+ _localtime64_s(&time, &m_nTime);
+ return time.tm_sec;
+ }
+
+ __time64_t GetTime() const throw()
+ {
+ return m_nTime;
+ }
+
+ int GetYear()
+ {
+ struct tm time;
+ _localtime64_s(&time, &m_nTime);
+ return time.tm_year;
+ }
+
+// CArchive& Serialize64(CArchive& ar) // MFC only
+// {
+// // TODO
+// }
+
+ CTime operator+(CTimeSpan timeSpan) const throw()
+ {
+ return CTime(m_nTime + timeSpan.GetTimeSpan());
+ }
+
+ CTime operator-(CTimeSpan timeSpan) const throw()
+ {
+ return CTime(m_nTime - timeSpan.GetTimeSpan());
+ }
+
+ CTimeSpan operator-(CTime time) const throw()
+ {
+ return CTimeSpan(m_nTime - time.GetTime());
+ }
+
+ CTime& operator+=(CTimeSpan span) throw()
+ {
+ m_nTime += span.GetTimeSpan();
+ return *this;
+ }
+
+ CTime& operator-=(CTimeSpan span) throw()
+ {
+ m_nTime -= span.GetTimeSpan();
+ return *this;
+ }
+
+ CTime& operator=(__time64_t time) throw()
+ {
+ m_nTime = time;
+ return *this;
+ }
+
+ bool operator==(CTime time) const throw()
+ {
+ return m_nTime == time.GetTime();
+ }
+
+ bool operator!=(CTime time) const throw()
+ {
+ return m_nTime != time.GetTime();
+ }
+
+ bool operator<(CTime time) const throw()
+ {
+ return m_nTime < time.GetTime();
+ }
+
+ bool operator>(CTime time) const throw()
+ {
+ return m_nTime > time.GetTime();
+ }
+
+ bool operator<=(CTime time) const throw()
+ {
+ return m_nTime <= time.GetTime();
+ }
+
+ bool operator>=(CTime time) const throw()
+ {
+ return m_nTime >= time.GetTime();
+ }
+
+};
+
+class CFileTimeSpan
+{
+ LONGLONG m_nSpan;
+public:
+ CFileTimeSpan() throw()
+ {
+ m_nSpan = 0;
+ }
+
+ CFileTimeSpan(const CFileTimeSpan& span) throw()
+ {
+ m_nSpan = span.GetTimeSpan();
+ }
+
+ CFileTimeSpan(LONGLONG nSpan) throw()
+ {
+ m_nSpan = nSpan;
+ }
+
+ LONGLONG GetTimeSpan() const throw()
+ {
+ return m_nSpan;
+ }
+
+ void SetTimeSpan(LONGLONG nSpan) throw()
+ {
+ m_nSpan = nSpan;
+ }
+
+ CFileTimeSpan operator-(CFileTimeSpan span) const throw()
+ {
+ return CFileTimeSpan(m_nSpan - span.GetTimeSpan());
+ }
+
+ bool operator!=(CFileTimeSpan span) const throw()
+ {
+ return m_nSpan != span.GetTimeSpan();
+ }
+
+ CFileTimeSpan operator+(CFileTimeSpan span) const throw()
+ {
+ return CFileTimeSpan(m_nSpan + span.GetTimeSpan());
+ }
+
+ CFileTimeSpan& operator+=(CFileTimeSpan span) throw()
+ {
+ m_nSpan += span.GetTimeSpan();
+ return *this;
+ }
+
+ bool operator<(CFileTimeSpan span) const throw()
+ {
+ return m_nSpan < span.GetTimeSpan();
+ }
+
+ bool operator<=(CFileTimeSpan span) const throw()
+ {
+ return m_nSpan <= span.GetTimeSpan();
+ }
+
+ CFileTimeSpan& operator=(const CFileTimeSpan& span) throw()
+ {
+ m_nSpan = span.GetTimeSpan();
+ return *this;
+ }
+
+ CFileTimeSpan& operator-=(CFileTimeSpan span) throw()
+ {
+ m_nSpan -= span.GetTimeSpan();
+ return *this;
+ }
+
+ bool operator==(CFileTimeSpan span) const throw()
+ {
+ return m_nSpan == span.GetTimeSpan();
+ }
+
+ bool operator>(CFileTimeSpan span) const throw()
+ {
+ return m_nSpan > span.GetTimeSpan();
+ }
+
+ bool operator>=(CFileTimeSpan span) const throw()
+ {
+ return m_nSpan >= span.GetTimeSpan();
+ }
+
+};
+
+class CFileTime : public FILETIME
+{
+public:
+ static const ULONGLONG Millisecond = 10000;
+ static const ULONGLONG Second = Millisecond * 1000;
+ static const ULONGLONG Minute = Second * 60;
+ static const ULONGLONG Hour = Minute * 60;
+ static const ULONGLONG Day = Hour * 24;
+ static const ULONGLONG Week = Day * 7;
+
+ CFileTime() throw()
+ {
+ this->dwLowDateTime = 0;
+ this->dwHighDateTime = 0;
+ }
+
+ CFileTime(const FILETIME& ft) throw()
+ {
+ this->dwLowDateTime = ft.dwLowDateTime;
+ this->dwHighDateTime = ft.dwHighDateTime;
+ }
+
+ CFileTime(ULONGLONG nTime) throw()
+ {
+ this->dwLowDateTime = (DWORD) nTime;
+ this->dwHighDateTime = nTime >> 32;
+ }
+
+ static CFileTime GetCurrentTime() throw()
+ {
+ FILETIME ft;
+ GetSystemTimeAsFileTime(&ft);
+ return CFileTime(ft);
+ }
+
+ ULONGLONG GetTime() const throw()
+ {
+ return ((ULONGLONG)this->dwLowDateTime) |
(((ULONGLONG)this->dwHighDateTime) << 32);
+ }
+
+ CFileTime LocalToUTC() const throw()
+ {
+ FILETIME ft;
+ LocalFileTimeToFileTime(this, &ft);
+ return CFileTime(ft);
+ }
+
+ void SetTime(ULONGLONG nTime) throw()
+ {
+ this->dwLowDateTime = (DWORD) nTime;
+ this->dwHighDateTime = nTime >> 32;
+ }
+
+ CFileTime UTCToLocal() const throw()
+ {
+ FILETIME ft;
+ FileTimeToLocalFileTime(this, &ft);
+ return CFileTime(ft);
+ }
+
+ CFileTime operator-(CFileTimeSpan span) const throw()
+ {
+ return CFileTime(this->GetTime() - span.GetTimeSpan());
+ }
+
+ CFileTimeSpan operator-(CFileTime ft) const throw()
+ {
+ return CFileTimeSpan(this->GetTime() - ft.GetTime());
+ }
+
+ bool operator!=(CFileTime ft) const throw()
+ {
+ return this->GetTime() != ft.GetTime();
+ }
+
+ CFileTime operator+(CFileTimeSpan span) const throw()
+ {
+ return CFileTime(this->GetTime() + span.GetTimeSpan());
+ }
+
+ CFileTime& operator+=(CFileTimeSpan span) throw()
+ {
+ this->SetTime(this->GetTime() + span.GetTimeSpan());
+ return *this;
+ }
+
+ bool operator<(CFileTime ft) const throw()
+ {
+ return this->GetTime() < ft.GetTime();
+ }
+
+ bool operator<=(CFileTime ft) const throw()
+ {
+ return this->GetTime() <= ft.GetTime();
+ }
+
+ CFileTime& operator=(const FILETIME& ft) throw()
+ {
+ this->dwLowDateTime = ft.dwLowDateTime;
+ this->dwHighDateTime = ft.dwHighDateTime;
+ return *this;
+ }
+
+ CFileTime& operator-=(CFileTimeSpan span) throw()
+ {
+ this->SetTime(this->GetTime() - span.GetTimeSpan());
+ return *this;
+ }
+
+ bool operator==(CFileTime ft) const throw()
+ {
+ return this->GetTime() == ft.GetTime();
+ }
+
+ bool operator>(CFileTime ft) const throw()
+ {
+ return this->GetTime() > ft.GetTime();
+ }
+
+ bool operator>=(CFileTime ft) const throw()
+ {
+ return this->GetTime() >= ft.GetTime();
+ }
+
+};
+
+} // namespace ATL
+
+#endif
Propchange: trunk/reactos/sdk/lib/atl/atltime.h
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/reactos/sdk/lib/atl/atltime.h
------------------------------------------------------------------------------
svn:mime-type = text/plain