$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r69240 - in trunk: boost/chrono/detail/inlined/win boost/detail/win libs/chrono/example
From: DDeakins_at_[hidden]
Date: 2011-02-24 13:21:57
Author: davedeakins
Date: 2011-02-24 13:21:52 EST (Thu, 24 Feb 2011)
New Revision: 69240
URL: http://svn.boost.org/trac/boost/changeset/69240
Log:
Changes to complete Boost.Chrono support for Windows CE.  Closes ticket 5218.
Text files modified: 
   trunk/boost/chrono/detail/inlined/win/chrono.hpp             |    18 ++++++++++++++++--                      
   trunk/boost/chrono/detail/inlined/win/process_clock.hpp      |     7 ++++++-                                 
   trunk/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp |    26 +++++++++++++++++++++++++-              
   trunk/boost/detail/win/GetCurrentThread.hpp                  |     8 ++++++++                                
   trunk/boost/detail/win/GetProcessTimes.hpp                   |     2 ++                                      
   trunk/boost/detail/win/time.hpp                              |     4 ++++                                    
   trunk/libs/chrono/example/chrono_unit_test.cpp               |     8 ++++++++                                
   trunk/libs/chrono/example/runtime_resolution.cpp             |    24 +++++++++++++++++-------                
   trunk/libs/chrono/example/timeval_demo.cpp                   |    20 +++++++++++++++-----                    
   9 files changed, 101 insertions(+), 16 deletions(-)
Modified: trunk/boost/chrono/detail/inlined/win/chrono.hpp
==============================================================================
--- trunk/boost/chrono/detail/inlined/win/chrono.hpp	(original)
+++ trunk/boost/chrono/detail/inlined/win/chrono.hpp	2011-02-24 13:21:52 EST (Thu, 24 Feb 2011)
@@ -95,7 +95,14 @@
   system_clock::time_point system_clock::now()
   {
     boost::detail::win32::FILETIME_ ft;
-    boost::detail::win32::GetSystemTimeAsFileTime( &ft );  // never fails
+	#if defined(UNDER_CE)
+		// Windows CE does not define GetSystemTimeAsFileTime so we do it in two steps.
+		boost::detail::win32::SYSTEMTIME_ st;
+		boost::detail::win32::GetSystemTime( &st );
+		boost::detail::win32::SystemTimeToFileTime( &st, &ft );
+	#else
+		boost::detail::win32::GetSystemTimeAsFileTime( &ft );  // never fails
+	#endif
     return system_clock::time_point(system_clock::duration(
       (static_cast<__int64>( ft.dwHighDateTime ) << 32) | ft.dwLowDateTime));
   }
@@ -104,7 +111,14 @@
   system_clock::time_point system_clock::now( system::error_code & ec )
   {
     boost::detail::win32::FILETIME_ ft;
-    boost::detail::win32::GetSystemTimeAsFileTime( &ft );  // never fails
+	#if defined(UNDER_CE)
+		// Windows CE does not define GetSystemTimeAsFileTime so we do it in two steps.
+		boost::detail::win32::SYSTEMTIME_ st;
+		boost::detail::win32::GetSystemTime( &st );
+		boost::detail::win32::SystemTimeToFileTime( &st, &ft );
+	#else
+		boost::detail::win32::GetSystemTimeAsFileTime( &ft );  // never fails
+	#endif
     if (!BOOST_CHRONO_IS_THROWS(ec))
     {
         ec.clear();
Modified: trunk/boost/chrono/detail/inlined/win/process_clock.hpp
==============================================================================
--- trunk/boost/chrono/detail/inlined/win/process_clock.hpp	(original)
+++ trunk/boost/chrono/detail/inlined/win/process_clock.hpp	2011-02-24 13:21:52 EST (Thu, 24 Feb 2011)
@@ -34,6 +34,11 @@
 
     times_.real = duration( steady_clock::now().time_since_epoch().count() );
        
+	#ifdef UNDER_CE
+	// Windows CE does not support GetProcessTimes
+    assert( 0 && "GetProcessTimes not supported under Windows CE" );
+	times_.real = times_.system = times_.user = nanoseconds(-1);
+	#else
     if ( boost::detail::win32::GetProcessTimes(
             boost::detail::win32::GetCurrentProcess(), &creation, &exit,
             &system_time, &user_time ) )
@@ -67,7 +72,7 @@
             times_.real = times_.system = times_.user = nanoseconds(-1);
         }
     }
-
+	#endif
 }
 } // namespace chrono
 } // namespace boost
Modified: trunk/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp
==============================================================================
--- trunk/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp	(original)
+++ trunk/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp	2011-02-24 13:21:52 EST (Thu, 24 Feb 2011)
@@ -33,6 +33,11 @@
     //  note that Windows uses 100 nanosecond ticks for FILETIME
     boost::detail::win32::FILETIME_ creation, exit, user_time, system_time;
 
+	#ifdef UNDER_CE
+	// Windows CE does not support GetProcessTimes
+    assert( 0 && "GetProcessTimes not supported under Windows CE" );
+	return time_point();
+	#else
     if ( boost::detail::win32::GetProcessTimes(
             boost::detail::win32::GetCurrentProcess(), &creation, &exit,
             &system_time, &user_time ) )
@@ -60,6 +65,7 @@
             return time_point();
         }
     }
+	#endif
 
 }
 process_user_cpu_clock::time_point process_user_cpu_clock::now(
@@ -69,6 +75,11 @@
     //  note that Windows uses 100 nanosecond ticks for FILETIME
     boost::detail::win32::FILETIME_ creation, exit, user_time, system_time;
 
+	#ifdef UNDER_CE
+	// Windows CE does not support GetProcessTimes
+    assert( 0 && "GetProcessTimes not supported under Windows CE" );
+	return time_point();
+	#else
     if ( boost::detail::win32::GetProcessTimes(
             boost::detail::win32::GetCurrentProcess(), &creation, &exit,
             &system_time, &user_time ) )
@@ -99,6 +110,7 @@
             return time_point();
         }
     }
+	#endif
 
 }
 process_system_cpu_clock::time_point process_system_cpu_clock::now(
@@ -108,6 +120,11 @@
     //  note that Windows uses 100 nanosecond ticks for FILETIME
     boost::detail::win32::FILETIME_ creation, exit, user_time, system_time;
 
+	#ifdef UNDER_CE
+	// Windows CE does not support GetProcessTimes
+    assert( 0 && "GetProcessTimes not supported under Windows CE" );
+	return time_point();
+	#else
     if ( boost::detail::win32::GetProcessTimes(
             boost::detail::win32::GetCurrentProcess(), &creation, &exit,
             &system_time, &user_time ) )
@@ -138,7 +155,8 @@
             return time_point();
         }
     }
-
+	#endif
+	
 }
 process_cpu_clock::time_point process_cpu_clock::now( 
         system::error_code & ec ) 
@@ -147,6 +165,11 @@
     //  note that Windows uses 100 nanosecond ticks for FILETIME
     boost::detail::win32::FILETIME_ creation, exit, user_time, system_time;
 
+	#ifdef UNDER_CE
+	// Windows CE does not support GetProcessTimes
+    assert( 0 && "GetProcessTimes not supported under Windows CE" );
+	return time_point();
+	#else
     if ( boost::detail::win32::GetProcessTimes(
             boost::detail::win32::GetCurrentProcess(), &creation, &exit,
             &system_time, &user_time ) )
@@ -183,6 +206,7 @@
             return time_point();
         }
     }
+	#endif
 
 }
 } // namespace chrono
Modified: trunk/boost/detail/win/GetCurrentThread.hpp
==============================================================================
--- trunk/boost/detail/win/GetCurrentThread.hpp	(original)
+++ trunk/boost/detail/win/GetCurrentThread.hpp	2011-02-24 13:21:52 EST (Thu, 24 Feb 2011)
@@ -14,11 +14,19 @@
 namespace boost {
 namespace detail {
 namespace win32 {
+#if defined( UNDER_CE )
+// Windows CE define GetCurrentThread as an inline function in kfuncs.h
+inline HANDLE_ GetCurrentThread() 
+{
+	return ::GetCurrentThread();
+}
+#else
 #if defined( BOOST_USE_WINDOWS_H )
     using ::GetCurrentThread;
 #else
     extern "C" __declspec(dllimport) HANDLE_ WINAPI GetCurrentThread();
 #endif
+#endif
 }
 }
 }
Modified: trunk/boost/detail/win/GetProcessTimes.hpp
==============================================================================
--- trunk/boost/detail/win/GetProcessTimes.hpp	(original)
+++ trunk/boost/detail/win/GetProcessTimes.hpp	2011-02-24 13:21:52 EST (Thu, 24 Feb 2011)
@@ -14,6 +14,7 @@
 namespace boost {
 namespace detail {
 namespace win32 {
+#if !defined(UNDER_CE)	// Windows CE does not define GetProcessTimes
 #if defined( BOOST_USE_WINDOWS_H )
     using ::GetProcessTimes;
 #else
@@ -26,6 +27,7 @@
             LPFILETIME_ lpUserTime
         );
 #endif
+#endif
 }
 }
 }
Modified: trunk/boost/detail/win/time.hpp
==============================================================================
--- trunk/boost/detail/win/time.hpp	(original)
+++ trunk/boost/detail/win/time.hpp	2011-02-24 13:21:52 EST (Thu, 24 Feb 2011)
@@ -23,7 +23,9 @@
     typedef SYSTEMTIME SYSTEMTIME_;
     typedef SYSTEMTIME* PSYSTEMTIME_;
 
+	#ifndef UNDER_CE	// Windows CE does not define GetSystemTimeAsFileTime
     using ::GetSystemTimeAsFileTime;
+	#endif
     using ::FileTimeToLocalFileTime;
     using ::GetSystemTime;
     using ::SystemTimeToFileTime;
@@ -47,8 +49,10 @@
       WORD_ wMilliseconds;
     } SYSTEMTIME_, *PSYSTEMTIME_;
 
+	#ifndef UNDER_CE	// Windows CE does not define GetSystemTimeAsFileTime
     __declspec(dllimport) void WINAPI
         GetSystemTimeAsFileTime(FILETIME_* lpFileTime);
+	#endif
     __declspec(dllimport) int WINAPI
         FileTimeToLocalFileTime(const FILETIME_* lpFileTime, 
                 FILETIME_* lpLocalFileTime);
Modified: trunk/libs/chrono/example/chrono_unit_test.cpp
==============================================================================
--- trunk/libs/chrono/example/chrono_unit_test.cpp	(original)
+++ trunk/libs/chrono/example/chrono_unit_test.cpp	2011-02-24 13:21:52 EST (Thu, 24 Feb 2011)
@@ -23,9 +23,17 @@
   std::time_t sys_time
     = boost::chrono::system_clock::to_time_t(boost::chrono::system_clock::now());
 
+  #ifdef UNDER_CE
+  // Windows CE does not define asctime()
+  struct tm * t = std::gmtime(&sys_time);
+  std::cout
+    << "system_clock::to_time_t(system_clock::now()) is "
+    << t->tm_mon << "/" << t->tm_mday << "/" << (1900 + t->tm_year) << " " << t->tm_hour << ":" << t->tm_min << ":" << t->tm_sec << std::endl;
+  #else
   std::cout
     << "system_clock::to_time_t(system_clock::now()) is "
     << std::asctime(std::gmtime(&sys_time)) << std::endl;
+  #endif
 
   return 0;
 }
Modified: trunk/libs/chrono/example/runtime_resolution.cpp
==============================================================================
--- trunk/libs/chrono/example/runtime_resolution.cpp	(original)
+++ trunk/libs/chrono/example/runtime_resolution.cpp	2011-02-24 13:21:52 EST (Thu, 24 Feb 2011)
@@ -42,15 +42,25 @@
 
 namespace
 {
-  //struct timeval {
-  //        long    tv_sec;         /* seconds */
-  //        long    tv_usec;        /* and microseconds */
-  //};
+  #ifdef UNDER_CE
+  // Windows CE does not define timeval
+  struct timeval {
+          long    tv_sec;         /* seconds */
+          long    tv_usec;        /* and microseconds */
+  };
+  #endif
 
   int gettimeofday(struct timeval * tp, void *)
   {
     FILETIME ft;
-    ::GetSystemTimeAsFileTime( &ft );  // never fails
+	#if defined(UNDER_CE)
+		// Windows CE does not define GetSystemTimeAsFileTime so we do it in two steps.
+		SYSTEMTIME st;
+		::GetSystemTime( &st );
+		::SystemTimeToFileTime( &st, &ft );
+	#else
+		::GetSystemTimeAsFileTime( &ft );  // never fails
+	#endif
     long long t = (static_cast<long long>(ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
   # if !defined( BOOST_MSVC ) || BOOST_MSVC > 1300 // > VC++ 7.0
     t -= 116444736000000000LL;
@@ -92,7 +102,7 @@
             : rep_(static_cast<rep>(d.count() * ticks_per_nanosecond)) {}
 
     // explicit
-       operator tonanosec() const {return tonanosec(rep_/ticks_per_nanosecond);}
+    tonanosec convert_to_nanosec() const {return tonanosec(rep_/ticks_per_nanosecond);}
 
     // observer
 
@@ -218,7 +228,7 @@
     clock::duration elapsed = stop - start;
     std::cout << "paused " << 
     boost::chrono::nanoseconds(
-        boost::chrono::duration_cast<boost::chrono::nanoseconds>(duration::tonanosec(elapsed))).count()
+        boost::chrono::duration_cast<boost::chrono::nanoseconds>( elapsed.convert_to_nanosec() )).count()
                            << " nanoseconds\n";
 }
 
Modified: trunk/libs/chrono/example/timeval_demo.cpp
==============================================================================
--- trunk/libs/chrono/example/timeval_demo.cpp	(original)
+++ trunk/libs/chrono/example/timeval_demo.cpp	2011-02-24 13:21:52 EST (Thu, 24 Feb 2011)
@@ -44,15 +44,25 @@
 
 namespace
 {
-  //struct timeval {
-  //        long    tv_sec;         /* seconds */
-  //        long    tv_usec;        /* and microseconds */
-  //};
+  #ifdef UNDER_CE
+  // Windows CE does not define timeval
+  struct timeval {
+          long    tv_sec;         /* seconds */
+          long    tv_usec;        /* and microseconds */
+  };
+  #endif
 
   int gettimeofday(struct timeval * tp, void *)
   {
     FILETIME ft;
-    ::GetSystemTimeAsFileTime( &ft );  // never fails
+	#if defined(UNDER_CE)
+		// Windows CE does not define GetSystemTimeAsFileTime so we do it in two steps.
+		SYSTEMTIME st;
+		::GetSystemTime( &st );
+		::SystemTimeToFileTime( &st, &ft );
+	#else
+		::GetSystemTimeAsFileTime( &ft );  // never fails
+	#endif
     long long t = (static_cast<long long>(ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
   # if !defined( BOOST_MSVC ) || BOOST_MSVC > 1300 // > VC++ 7.0
     t -= 116444736000000000LL;