ignite-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From voze...@apache.org
Subject [24/34] ignite git commit: IGNITE-1786: Implemented ODBC driver.
Date Thu, 05 May 2016 14:02:57 GMT
http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/os/linux/include/Makefile.am
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/os/linux/include/Makefile.am b/modules/platforms/cpp/common/os/linux/include/Makefile.am
index f6e2803..9332f4f 100644
--- a/modules/platforms/cpp/common/os/linux/include/Makefile.am
+++ b/modules/platforms/cpp/common/os/linux/include/Makefile.am
@@ -15,10 +15,11 @@
 ## limitations under the License.
 ##
 
-ACLOCAL_AMFLAGS = "-Im4"
+ACLOCAL_AMFLAGS =-I m4
 
-nobase_include_HEADERS = ignite/common/common.h \
-                         ignite/common/concurrent_os.h
+nobase_include_HEADERS = \
+    ignite/common/common.h \
+    ignite/common/concurrent_os.h
 
 uninstall-hook:
-	find ${includedir}/ignite -type d -empty -delete
+	if [ -d ${includedir}/ignite ]; then find ${includedir}/ignite -type d -empty -delete; fi

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/os/linux/include/ignite/common/common.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/os/linux/include/ignite/common/common.h b/modules/platforms/cpp/common/os/linux/include/ignite/common/common.h
index 0ec8e16..5932a6c 100644
--- a/modules/platforms/cpp/common/os/linux/include/ignite/common/common.h
+++ b/modules/platforms/cpp/common/os/linux/include/ignite/common/common.h
@@ -15,8 +15,8 @@
  * limitations under the License.
  */
 
-#ifndef _IGNITE_COMMON_OS
-#define _IGNITE_COMMON_OS
+#ifndef _IGNITE_COMMON_COMMON
+#define _IGNITE_COMMON_COMMON
 
 #ifndef __has_attribute
 #   define __has_attribute(x) 0
@@ -51,37 +51,4 @@
     cls(const cls& src); \
     cls& operator= (const cls& other);
 
-namespace ignite
-{
-    namespace common
-    {
-        /**
-         * Helper class to manage attached threads.
-         */
-        class AttachHelper 
-        {
-        public:            
-            /**
-             * Destructor.
-             */
-            ~AttachHelper();
-            
-            /**
-             * Callback invoked on successful thread attach ot JVM.
-             */
-            static void OnThreadAttach();
-        private:
-            /**
-             * Helper method to allocate attach key.
-             */
-            static void AllocateAttachKey();
-
-            /**
-             * Attach key destructor.
-             */
-            static void DestroyAttachKey(void* key);
-        };        
-    }
-}
-
 #endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/os/linux/include/ignite/common/concurrent_os.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/os/linux/include/ignite/common/concurrent_os.h b/modules/platforms/cpp/common/os/linux/include/ignite/common/concurrent_os.h
index 63798b1..27ef998 100644
--- a/modules/platforms/cpp/common/os/linux/include/ignite/common/concurrent_os.h
+++ b/modules/platforms/cpp/common/os/linux/include/ignite/common/concurrent_os.h
@@ -391,4 +391,4 @@ namespace ignite
     }
 }
 
-#endif
\ No newline at end of file
+#endif

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/os/linux/src/common.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/os/linux/src/common.cpp b/modules/platforms/cpp/common/os/linux/src/common.cpp
deleted file mode 100644
index c0cccdc..0000000
--- a/modules/platforms/cpp/common/os/linux/src/common.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <pthread.h>
-
-#include "ignite/common/common.h"
-#include "ignite/common/java.h"
-
-using namespace ignite::common::java;
-
-namespace ignite
-{
-    namespace common
-    {
-        /** Key indicating that the thread is attached. */
-        static pthread_key_t attachKey;
-
-        /** Helper to ensure that attach key is allocated only once. */
-        static pthread_once_t attachKeyInit = PTHREAD_ONCE_INIT;
-        
-        AttachHelper::~AttachHelper()
-        {
-            JniContext::Detach();
-        }
-        
-        void AttachHelper::OnThreadAttach()
-        {
-            pthread_once(&attachKeyInit, AllocateAttachKey);
-            
-            void* val = pthread_getspecific(attachKey);
-            
-            if (!val)
-                pthread_setspecific(attachKey, new AttachHelper());
-        }
-        
-        void AttachHelper::AllocateAttachKey()
-        {
-            pthread_key_create(&attachKey, DestroyAttachKey);
-        }   
-        
-        void AttachHelper::DestroyAttachKey(void* key)
-        {
-            delete reinterpret_cast<AttachHelper*>(key);
-        }             
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/os/linux/src/common/concurrent_os.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/os/linux/src/common/concurrent_os.cpp b/modules/platforms/cpp/common/os/linux/src/common/concurrent_os.cpp
new file mode 100644
index 0000000..2336d58
--- /dev/null
+++ b/modules/platforms/cpp/common/os/linux/src/common/concurrent_os.cpp
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ignite/common/concurrent_os.h"
+
+namespace ignite
+{
+    namespace common
+    {
+        namespace concurrent
+        {
+            /** Key indicating that the thread is attached. */
+            static pthread_key_t tlsKey;
+
+            /** Helper to ensure that attach key is allocated only once. */
+            static pthread_once_t tlsKeyInit = PTHREAD_ONCE_INIT;
+            
+            /**
+             * Routine to destroy TLS key.
+             * 
+             * @param key Key.
+             */
+            void DestroyTlsKey(void* key) {
+                ThreadLocal::Clear0(key);
+            }
+            
+            /**
+             * Routine to allocate TLS key.
+             */
+            void AllocateTlsKey() {
+                pthread_key_create(&tlsKey, DestroyTlsKey);
+            }
+            
+            void Memory::Fence() {
+                __asm__ volatile ("" ::: "memory");
+            }
+
+            CriticalSection::CriticalSection() {
+                pthread_mutex_init(&mux, NULL);
+                
+                Memory::Fence();
+            }
+
+            CriticalSection::~CriticalSection() {
+                Memory::Fence();
+                
+                pthread_mutex_destroy(&mux);
+            }
+
+            void CriticalSection::Enter() {
+                Memory::Fence();
+                
+                pthread_mutex_lock(&mux);
+            }
+
+            void CriticalSection::Leave() {
+                Memory::Fence();
+                
+                pthread_mutex_unlock(&mux);
+            }
+
+            SingleLatch::SingleLatch()
+            {
+                pthread_mutex_init(&mux, NULL);
+                pthread_cond_init(&cond, NULL);
+                ready = false;
+                
+                Memory::Fence();
+            }
+
+            SingleLatch::~SingleLatch()
+            {
+                Memory::Fence();
+
+                pthread_cond_destroy(&cond);
+                pthread_mutex_destroy(&mux);
+            }
+
+            void SingleLatch::CountDown()
+            {
+                pthread_mutex_lock(&mux);
+                
+                if (!ready) {
+                    ready = true;
+                    
+                    pthread_cond_broadcast(&cond);
+                }
+                
+                pthread_mutex_unlock(&mux);
+                
+                Memory::Fence();
+            }
+
+            void SingleLatch::Await()
+            {
+                pthread_mutex_lock(&mux);
+                
+                while (!ready)
+                    pthread_cond_wait(&cond, &mux);
+                
+                pthread_mutex_unlock(&mux);
+                
+                Memory::Fence();
+            }
+
+            bool Atomics::CompareAndSet32(int32_t* ptr, int32_t expVal, int32_t newVal)
+            {
+                return __sync_bool_compare_and_swap(ptr, expVal, newVal);
+            }
+
+            int32_t Atomics::CompareAndSet32Val(int32_t* ptr, int32_t expVal, int32_t newVal)
+            {
+                return __sync_val_compare_and_swap(ptr, expVal, newVal);
+            }
+
+            int32_t Atomics::IncrementAndGet32(int32_t* ptr)
+            {
+               return __sync_fetch_and_add(ptr, 1) + 1;
+            }
+
+            int32_t Atomics::DecrementAndGet32(int32_t* ptr)
+            {
+               return __sync_fetch_and_sub(ptr, 1) - 1;
+            }
+
+            bool Atomics::CompareAndSet64(int64_t* ptr, int64_t expVal, int64_t newVal)
+            {
+               return __sync_bool_compare_and_swap(ptr, expVal, newVal);
+            }
+
+            int64_t Atomics::CompareAndSet64Val(int64_t* ptr, int64_t expVal, int64_t newVal)
+            {
+               return __sync_val_compare_and_swap(ptr, expVal, newVal);
+            }
+
+            int64_t Atomics::IncrementAndGet64(int64_t* ptr)
+            {
+               return __sync_fetch_and_add(ptr, 1) + 1;
+            }
+
+            int64_t Atomics::DecrementAndGet64(int64_t* ptr)
+            {
+               return __sync_fetch_and_sub(ptr, 1) - 1;
+            }
+
+            void* ThreadLocal::Get0()
+            {
+                pthread_once(&tlsKeyInit, AllocateTlsKey);
+                                
+                return pthread_getspecific(tlsKey);
+            }
+
+            void ThreadLocal::Set0(void* ptr)
+            {
+                pthread_once(&tlsKeyInit, AllocateTlsKey);
+                
+                pthread_setspecific(tlsKey, ptr);
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/os/linux/src/common/utils.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/os/linux/src/common/utils.cpp b/modules/platforms/cpp/common/os/linux/src/common/utils.cpp
new file mode 100644
index 0000000..e37a91c
--- /dev/null
+++ b/modules/platforms/cpp/common/os/linux/src/common/utils.cpp
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+#include <time.h>
+
+#include <sys/stat.h>
+#include <dirent.h>
+#include <dlfcn.h>
+
+#include <ignite/common/utils.h>
+
+namespace ignite
+{
+    namespace common
+    {
+        /**
+         * Check if string ends with the given ending.
+         *
+         * @param str String to check.
+         * @param ending Ending.
+         * @return Result.
+         */
+        inline bool StringEndsWith(const std::string& str, const std::string& ending)
+        {
+            if (str.length() > ending.length())
+                return str.compare(str.length() - ending.length(), ending.length(), ending) == 0;
+
+            return false;
+        }
+
+        time_t IgniteTimeGm(const tm& time)
+        {
+            tm tmc = time;
+
+            return timegm(&tmc);
+        }
+
+        time_t IgniteTimeLocal(const tm& time)
+        {
+            tm tmc = time;
+
+            return mktime(&tmc);
+        }
+
+        bool IgniteGmTime(time_t in, tm& out)
+        {
+            return gmtime_r(&in, &out) != NULL;
+        }
+
+        bool IgniteLocalTime(time_t in, tm& out)
+        {
+            return localtime_r(&in, &out) == 0;
+        }
+
+        int LeadingZeroesForOctet(int8_t octet) {
+            if (octet == 0)
+                return 8;
+
+            int zeroes = 1;
+
+            if (octet >> 4 == 0) {
+                zeroes += 4;
+                octet <<= 4;
+            }
+
+            if (octet >> 6 == 0) {
+                zeroes += 2;
+                octet <<= 2;
+            }
+
+            zeroes -= octet >> 7;
+
+            return zeroes;
+        }
+
+        char* CopyChars(const char* val)
+        {
+            if (val) {
+                size_t len = strlen(val);
+                char* dest = new char[len + 1];
+                strcpy(dest, val);
+                *(dest + len) = 0;
+                return dest;
+            }
+            else
+                return NULL;
+        }
+
+        void ReleaseChars(char* val)
+        {
+            if (val)
+                delete[] val;
+        }
+
+        std::string GetEnv(const std::string& name, bool& found)
+        {
+            char* val = std::getenv(name.c_str());
+            
+            if (val)
+            {
+                found = true;
+                
+                return std::string(val);
+            }
+            else
+            {
+                found = false;
+                
+                return std::string();
+            }
+        }
+
+        bool FileExists(const std::string& path)
+        {
+            struct stat s;
+            
+            int res = stat(path.c_str(), &s);
+
+            return res != -1;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/os/linux/src/concurrent_os.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/os/linux/src/concurrent_os.cpp b/modules/platforms/cpp/common/os/linux/src/concurrent_os.cpp
deleted file mode 100644
index 44f0b22..0000000
--- a/modules/platforms/cpp/common/os/linux/src/concurrent_os.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "ignite/common/concurrent_os.h"
-
-namespace ignite
-{
-    namespace common
-    {
-        namespace concurrent
-        {
-            /** Key indicating that the thread is attached. */
-            static pthread_key_t tlsKey;
-
-            /** Helper to ensure that attach key is allocated only once. */
-            static pthread_once_t tlsKeyInit = PTHREAD_ONCE_INIT;
-            
-            /**
-             * Routine to destroy TLS key.
-             * 
-             * @param key Key.
-             */
-            void DestroyTlsKey(void* key) {
-                ThreadLocal::Clear0(key);
-            }
-            
-            /**
-             * Routine to allocate TLS key.
-             */
-            void AllocateTlsKey() {
-                pthread_key_create(&tlsKey, DestroyTlsKey);
-            }
-            
-            void Memory::Fence() {
-                __asm__ volatile ("" ::: "memory");
-            }
-
-            CriticalSection::CriticalSection() {
-                pthread_mutex_init(&mux, NULL);
-                
-                Memory::Fence();
-            }
-
-            CriticalSection::~CriticalSection() {
-                Memory::Fence();
-                
-                pthread_mutex_destroy(&mux);
-            }
-
-            void CriticalSection::Enter() {
-                Memory::Fence();
-                
-                pthread_mutex_lock(&mux);
-            }
-
-            void CriticalSection::Leave() {
-                Memory::Fence();
-                
-                pthread_mutex_unlock(&mux);
-            }
-
-            SingleLatch::SingleLatch()
-            {
-                pthread_mutex_init(&mux, NULL);
-                pthread_cond_init(&cond, NULL);
-                ready = false;
-                
-                Memory::Fence();
-            }
-
-            SingleLatch::~SingleLatch()
-            {
-                Memory::Fence();
-
-                pthread_cond_destroy(&cond);
-                pthread_mutex_destroy(&mux);
-            }
-
-            void SingleLatch::CountDown()
-            {
-                pthread_mutex_lock(&mux);
-                
-                if (!ready) {
-                    ready = true;
-                    
-                    pthread_cond_broadcast(&cond);
-                }
-                
-                pthread_mutex_unlock(&mux);
-                
-                Memory::Fence();
-            }
-
-            void SingleLatch::Await()
-            {
-                pthread_mutex_lock(&mux);
-                
-                while (!ready)
-                    pthread_cond_wait(&cond, &mux);
-                
-                pthread_mutex_unlock(&mux);
-                
-                Memory::Fence();
-            }
-
-            bool Atomics::CompareAndSet32(int32_t* ptr, int32_t expVal, int32_t newVal)
-            {
-                return __sync_bool_compare_and_swap(ptr, expVal, newVal);
-            }
-
-            int32_t Atomics::CompareAndSet32Val(int32_t* ptr, int32_t expVal, int32_t newVal)
-            {
-                return __sync_val_compare_and_swap(ptr, expVal, newVal);
-            }
-
-            int32_t Atomics::IncrementAndGet32(int32_t* ptr)
-            {
-               return __sync_fetch_and_add(ptr, 1) + 1;
-            }
-
-            int32_t Atomics::DecrementAndGet32(int32_t* ptr)
-            {
-               return __sync_fetch_and_sub(ptr, 1) - 1;
-            }
-
-            bool Atomics::CompareAndSet64(int64_t* ptr, int64_t expVal, int64_t newVal)
-            {
-               return __sync_bool_compare_and_swap(ptr, expVal, newVal);
-            }
-
-            int64_t Atomics::CompareAndSet64Val(int64_t* ptr, int64_t expVal, int64_t newVal)
-            {
-               return __sync_val_compare_and_swap(ptr, expVal, newVal);
-            }
-
-            int64_t Atomics::IncrementAndGet64(int64_t* ptr)
-            {
-               return __sync_fetch_and_add(ptr, 1) + 1;
-            }
-
-            int64_t Atomics::DecrementAndGet64(int64_t* ptr)
-            {
-               return __sync_fetch_and_sub(ptr, 1) - 1;
-            }
-
-            void* ThreadLocal::Get0()
-            {
-                pthread_once(&tlsKeyInit, AllocateTlsKey);
-                                
-                return pthread_getspecific(tlsKey);
-            }
-
-            void ThreadLocal::Set0(void* ptr)
-            {
-                pthread_once(&tlsKeyInit, AllocateTlsKey);
-                
-                pthread_setspecific(tlsKey, ptr);
-            }
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/os/win/include/ignite/common/common.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/os/win/include/ignite/common/common.h b/modules/platforms/cpp/common/os/win/include/ignite/common/common.h
index cf924c8..8285149 100644
--- a/modules/platforms/cpp/common/os/win/include/ignite/common/common.h
+++ b/modules/platforms/cpp/common/os/win/include/ignite/common/common.h
@@ -41,22 +41,4 @@
 #   define IGNITE_NO_THROW throw()
 #endif
 
-namespace ignite
-{
-    namespace common
-    {
-        /**
-         * Helper class to manage attached threads.
-         */
-        class AttachHelper 
-        {
-        public:                       
-            /**
-             * Callback invoked on successful thread attach ot JVM.
-             */
-            static void OnThreadAttach();
-        };   
-    }
-}
-
-#endif
\ No newline at end of file
+#endif //_IGNITE_COMMON_COMMON
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/os/win/include/ignite/common/concurrent_os.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/os/win/include/ignite/common/concurrent_os.h b/modules/platforms/cpp/common/os/win/include/ignite/common/concurrent_os.h
index 0a47beb..77de4d8 100644
--- a/modules/platforms/cpp/common/os/win/include/ignite/common/concurrent_os.h
+++ b/modules/platforms/cpp/common/os/win/include/ignite/common/concurrent_os.h
@@ -26,7 +26,7 @@
 
 namespace ignite
 {
-    namespace common 
+    namespace common
     {
         namespace concurrent 
         {
@@ -403,4 +403,4 @@ namespace ignite
     }
 }
 
-#endif
\ No newline at end of file
+#endif //_IGNITE_COMMON_CONCURRENT_OS
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/os/win/src/common.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/os/win/src/common.cpp b/modules/platforms/cpp/common/os/win/src/common.cpp
deleted file mode 100644
index e83e736..0000000
--- a/modules/platforms/cpp/common/os/win/src/common.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <windows.h>
-
-#include "ignite/common/common.h"
-#include "ignite/common/concurrent.h"
-#include "ignite/common/java.h"
-
-using namespace ignite::common::concurrent;
-using namespace ignite::common::java;
-
-namespace ignite
-{
-    namespace common
-    {
-        void AttachHelper::OnThreadAttach()
-        {
-            // No-op.
-        }
-    }
-}
-
-BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved)
-{
-    switch (fdwReason)
-    {
-        case DLL_PROCESS_ATTACH:
-            if (!ThreadLocal::OnProcessAttach())
-                return FALSE;
-
-            break;
-
-        case DLL_THREAD_DETACH:
-            ThreadLocal::OnThreadDetach();
-
-            JniContext::Detach();
-
-            break;
-
-        case DLL_PROCESS_DETACH:
-            ThreadLocal::OnProcessDetach();
-
-            break;
-
-        default:
-            break;
-    }
-
-    return TRUE;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/os/win/src/common/concurrent_os.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/os/win/src/common/concurrent_os.cpp b/modules/platforms/cpp/common/os/win/src/common/concurrent_os.cpp
new file mode 100644
index 0000000..676d8b6
--- /dev/null
+++ b/modules/platforms/cpp/common/os/win/src/common/concurrent_os.cpp
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ignite/common/concurrent_os.h"
+
+#pragma intrinsic(_InterlockedCompareExchange64)
+
+namespace ignite
+{
+    namespace common
+    {
+        namespace concurrent
+        {
+            /** Thread-local index for Windows. */
+            DWORD winTlsIdx;
+
+            void Memory::Fence() {
+                MemoryBarrier();
+            }
+
+            CriticalSection::CriticalSection() : hnd(new CRITICAL_SECTION) {
+                InitializeCriticalSection(hnd);
+
+                Memory::Fence();
+            }
+
+            CriticalSection::~CriticalSection() {
+                Memory::Fence();
+
+                delete hnd;
+            }
+
+            void CriticalSection::Enter() {
+                Memory::Fence();
+
+                EnterCriticalSection(hnd);
+            }
+
+            void CriticalSection::Leave() {
+                Memory::Fence();
+
+                LeaveCriticalSection(hnd);
+            }
+
+            SingleLatch::SingleLatch() : hnd(CreateEvent(NULL, TRUE, FALSE, NULL))
+            {
+                Memory::Fence();
+            }
+
+            SingleLatch::~SingleLatch()
+            {
+                Memory::Fence();
+
+                CloseHandle(hnd);
+            }
+
+            void SingleLatch::CountDown()
+            {
+                SetEvent(hnd);
+            }
+
+            void SingleLatch::Await()
+            {
+                WaitForSingleObject(hnd, INFINITE);
+            }
+
+            bool Atomics::CompareAndSet32(int32_t* ptr, int32_t expVal, int32_t newVal)
+            {
+                return CompareAndSet32Val(ptr, expVal, newVal) == expVal;
+            }
+
+            int32_t Atomics::CompareAndSet32Val(int32_t* ptr, int32_t expVal, int32_t newVal)
+            {
+                return InterlockedCompareExchange(reinterpret_cast<LONG*>(ptr), newVal, expVal);
+            }
+
+            int32_t Atomics::IncrementAndGet32(int32_t* ptr)
+            {
+                return InterlockedIncrement(reinterpret_cast<LONG*>(ptr));
+            }
+
+            int32_t Atomics::DecrementAndGet32(int32_t* ptr)
+            {
+                return InterlockedDecrement(reinterpret_cast<LONG*>(ptr));
+            }
+
+            bool Atomics::CompareAndSet64(int64_t* ptr, int64_t expVal, int64_t newVal)
+            {
+                return CompareAndSet64Val(ptr, expVal, newVal) == expVal;
+            }
+
+            int64_t Atomics::CompareAndSet64Val(int64_t* ptr, int64_t expVal, int64_t newVal)
+            {
+                return _InterlockedCompareExchange64(reinterpret_cast<LONG64*>(ptr), newVal, expVal);
+            }
+
+            int64_t Atomics::IncrementAndGet64(int64_t* ptr)
+            {
+#ifdef _WIN64
+                return InterlockedIncrement64(reinterpret_cast<LONG64*>(ptr));
+#else 
+                while (true)
+                {
+                    int64_t expVal = *ptr;
+                    int64_t newVal = expVal + 1;
+
+                    if (CompareAndSet64(ptr, expVal, newVal))
+                        return newVal;
+                }
+#endif
+            }
+
+            int64_t Atomics::DecrementAndGet64(int64_t* ptr)
+            {
+#ifdef _WIN64
+                return InterlockedDecrement64(reinterpret_cast<LONG64*>(ptr));
+#else 
+                while (true)
+                {
+                    int64_t expVal = *ptr;
+                    int64_t newVal = expVal - 1;
+
+                    if (CompareAndSet64(ptr, expVal, newVal))
+                        return newVal;
+                }
+#endif
+            }
+            
+            bool ThreadLocal::OnProcessAttach()
+            {
+                return (winTlsIdx = TlsAlloc()) != TLS_OUT_OF_INDEXES;
+            }
+
+            void ThreadLocal::OnThreadDetach()
+            {
+                if (winTlsIdx != TLS_OUT_OF_INDEXES)
+                {
+                    void* mapPtr = Get0();
+
+                    Clear0(mapPtr);
+                }
+            }
+
+            void ThreadLocal::OnProcessDetach()
+            {
+                if (winTlsIdx != TLS_OUT_OF_INDEXES)
+                    TlsFree(winTlsIdx);
+            }
+
+            void* ThreadLocal::Get0()
+            {
+                return TlsGetValue(winTlsIdx);
+            }
+
+            void ThreadLocal::Set0(void* ptr)
+            {
+                TlsSetValue(winTlsIdx, ptr);
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/os/win/src/common/utils.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/os/win/src/common/utils.cpp b/modules/platforms/cpp/common/os/win/src/common/utils.cpp
new file mode 100644
index 0000000..65236d2
--- /dev/null
+++ b/modules/platforms/cpp/common/os/win/src/common/utils.cpp
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <time.h>
+
+#include <windows.h>
+
+#include <ignite/common/utils.h>
+
+namespace ignite
+{
+    namespace common
+    {
+        /**
+         * Check if string ends with the given ending.
+         *
+         * @param str String to check.
+         * @param ending Ending.
+         * @return Result.
+         */
+        inline bool StringEndsWith(const std::string& str, const std::string& ending)
+        {
+            if (str.length() > ending.length())
+                return str.compare(str.length() - ending.length(), ending.length(), ending) == 0;
+
+            return false;
+        }
+
+        time_t IgniteTimeGm(const tm& time)
+        {
+            tm tmc = time;
+
+            return _mkgmtime(&tmc);
+        }
+
+        time_t IgniteTimeLocal(const tm& time)
+        {
+            tm tmc = time;
+
+            return mktime(&tmc);
+        }
+
+        bool IgniteGmTime(time_t in, tm& out)
+        {
+            return gmtime_s(&out, &in) == 0;
+        }
+
+        bool IgniteLocalTime(time_t in, tm& out)
+        {
+            return localtime_s(&out, &in) == 0;
+        }
+
+        int LeadingZeroesForOctet(int8_t octet) {
+            if (octet == 0)
+                return 8;
+
+            int zeroes = 1;
+
+            if (octet >> 4 == 0) {
+                zeroes += 4;
+                octet <<= 4;
+            }
+
+            if (octet >> 6 == 0) {
+                zeroes += 2;
+                octet <<= 2;
+            }
+
+            zeroes -= octet >> 7;
+
+            return zeroes;
+        }
+
+        char* CopyChars(const char* val)
+        {
+            if (val) {
+                size_t len = strlen(val);
+                char* dest = new char[len + 1];
+                strcpy(dest, val);
+                *(dest + len) = 0;
+                return dest;
+            }
+            else
+                return NULL;
+        }
+
+        void ReleaseChars(char* val)
+        {
+            if (val)
+                delete[] val;
+        }
+
+        std::string GetEnv(const std::string& name, bool& found)
+        {
+            char res0[32767];
+
+            DWORD envRes = GetEnvironmentVariableA(name.c_str(), res0, 32767);
+
+            if (envRes != 0)
+            {
+                found = true;
+
+                return std::string(res0);
+            }
+            else 
+            {
+                found = false;
+
+                return std::string();
+            }
+        }
+
+        bool FileExists(const std::string& path)
+        {
+            WIN32_FIND_DATAA findres;
+
+            HANDLE hnd = FindFirstFileA(path.c_str(), &findres);
+
+            if (hnd == INVALID_HANDLE_VALUE)
+                return false;
+            else
+            {
+                FindClose(hnd);
+
+                return true;
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/os/win/src/concurrent_os.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/os/win/src/concurrent_os.cpp b/modules/platforms/cpp/common/os/win/src/concurrent_os.cpp
deleted file mode 100644
index 676d8b6..0000000
--- a/modules/platforms/cpp/common/os/win/src/concurrent_os.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "ignite/common/concurrent_os.h"
-
-#pragma intrinsic(_InterlockedCompareExchange64)
-
-namespace ignite
-{
-    namespace common
-    {
-        namespace concurrent
-        {
-            /** Thread-local index for Windows. */
-            DWORD winTlsIdx;
-
-            void Memory::Fence() {
-                MemoryBarrier();
-            }
-
-            CriticalSection::CriticalSection() : hnd(new CRITICAL_SECTION) {
-                InitializeCriticalSection(hnd);
-
-                Memory::Fence();
-            }
-
-            CriticalSection::~CriticalSection() {
-                Memory::Fence();
-
-                delete hnd;
-            }
-
-            void CriticalSection::Enter() {
-                Memory::Fence();
-
-                EnterCriticalSection(hnd);
-            }
-
-            void CriticalSection::Leave() {
-                Memory::Fence();
-
-                LeaveCriticalSection(hnd);
-            }
-
-            SingleLatch::SingleLatch() : hnd(CreateEvent(NULL, TRUE, FALSE, NULL))
-            {
-                Memory::Fence();
-            }
-
-            SingleLatch::~SingleLatch()
-            {
-                Memory::Fence();
-
-                CloseHandle(hnd);
-            }
-
-            void SingleLatch::CountDown()
-            {
-                SetEvent(hnd);
-            }
-
-            void SingleLatch::Await()
-            {
-                WaitForSingleObject(hnd, INFINITE);
-            }
-
-            bool Atomics::CompareAndSet32(int32_t* ptr, int32_t expVal, int32_t newVal)
-            {
-                return CompareAndSet32Val(ptr, expVal, newVal) == expVal;
-            }
-
-            int32_t Atomics::CompareAndSet32Val(int32_t* ptr, int32_t expVal, int32_t newVal)
-            {
-                return InterlockedCompareExchange(reinterpret_cast<LONG*>(ptr), newVal, expVal);
-            }
-
-            int32_t Atomics::IncrementAndGet32(int32_t* ptr)
-            {
-                return InterlockedIncrement(reinterpret_cast<LONG*>(ptr));
-            }
-
-            int32_t Atomics::DecrementAndGet32(int32_t* ptr)
-            {
-                return InterlockedDecrement(reinterpret_cast<LONG*>(ptr));
-            }
-
-            bool Atomics::CompareAndSet64(int64_t* ptr, int64_t expVal, int64_t newVal)
-            {
-                return CompareAndSet64Val(ptr, expVal, newVal) == expVal;
-            }
-
-            int64_t Atomics::CompareAndSet64Val(int64_t* ptr, int64_t expVal, int64_t newVal)
-            {
-                return _InterlockedCompareExchange64(reinterpret_cast<LONG64*>(ptr), newVal, expVal);
-            }
-
-            int64_t Atomics::IncrementAndGet64(int64_t* ptr)
-            {
-#ifdef _WIN64
-                return InterlockedIncrement64(reinterpret_cast<LONG64*>(ptr));
-#else 
-                while (true)
-                {
-                    int64_t expVal = *ptr;
-                    int64_t newVal = expVal + 1;
-
-                    if (CompareAndSet64(ptr, expVal, newVal))
-                        return newVal;
-                }
-#endif
-            }
-
-            int64_t Atomics::DecrementAndGet64(int64_t* ptr)
-            {
-#ifdef _WIN64
-                return InterlockedDecrement64(reinterpret_cast<LONG64*>(ptr));
-#else 
-                while (true)
-                {
-                    int64_t expVal = *ptr;
-                    int64_t newVal = expVal - 1;
-
-                    if (CompareAndSet64(ptr, expVal, newVal))
-                        return newVal;
-                }
-#endif
-            }
-            
-            bool ThreadLocal::OnProcessAttach()
-            {
-                return (winTlsIdx = TlsAlloc()) != TLS_OUT_OF_INDEXES;
-            }
-
-            void ThreadLocal::OnThreadDetach()
-            {
-                if (winTlsIdx != TLS_OUT_OF_INDEXES)
-                {
-                    void* mapPtr = Get0();
-
-                    Clear0(mapPtr);
-                }
-            }
-
-            void ThreadLocal::OnProcessDetach()
-            {
-                if (winTlsIdx != TLS_OUT_OF_INDEXES)
-                    TlsFree(winTlsIdx);
-            }
-
-            void* ThreadLocal::Get0()
-            {
-                return TlsGetValue(winTlsIdx);
-            }
-
-            void ThreadLocal::Set0(void* ptr)
-            {
-                TlsSetValue(winTlsIdx, ptr);
-            }
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/project/vs/common.vcxproj
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/project/vs/common.vcxproj b/modules/platforms/cpp/common/project/vs/common.vcxproj
index ac7d504..67f01ff 100644
--- a/modules/platforms/cpp/common/project/vs/common.vcxproj
+++ b/modules/platforms/cpp/common/project/vs/common.vcxproj
@@ -19,32 +19,32 @@
     </ProjectConfiguration>
   </ItemGroup>
   <PropertyGroup Label="Globals">
-    <ProjectGuid>{4F7E4917-4612-4B96-9838-025711ADE391}</ProjectGuid>
+    <ProjectGuid>{B63F2E01-5157-4719-8491-0E1C7CD3B701}</ProjectGuid>
     <Keyword>Win32Proj</Keyword>
     <RootNamespace>common</RootNamespace>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
     <PlatformToolset>v100</PlatformToolset>
     <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
     <PlatformToolset>v100</PlatformToolset>
     <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <PlatformToolset>v100</PlatformToolset>
     <WholeProgramOptimization>true</WholeProgramOptimization>
     <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <PlatformToolset>v100</PlatformToolset>
     <WholeProgramOptimization>true</WholeProgramOptimization>
@@ -67,10 +67,10 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <LinkIncremental>false</LinkIncremental>
     <TargetName>ignite.common</TargetName>
     <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
     <IntDir>$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <TargetName>ignite.common</TargetName>
@@ -79,8 +79,10 @@
     <LinkIncremental>false</LinkIncremental>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <LinkIncremental>false</LinkIncremental>
     <TargetName>ignite.common</TargetName>
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(Platform)\$(Configuration)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <TargetName>ignite.common</TargetName>
@@ -94,15 +96,11 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;IGNITEJVM_EXPORTS;_CRT_SECURE_NO_WARNINGS;IGNITE_IMPL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\os\win\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\os\win\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>$(JAVA_HOME)\lib\jvm.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(JAVA_HOME)\lib\jvm.lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <DelayLoadDLLs>jvm.dll</DelayLoadDLLs>
-      <ModuleDefinitionFile>module.def</ModuleDefinitionFile>
       <OptimizeReferences>false</OptimizeReferences>
       <EnableCOMDATFolding>false</EnableCOMDATFolding>
       <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
@@ -112,19 +110,15 @@
     <ClCompile>
       <WarningLevel>Level3</WarningLevel>
       <SDLCheck>false</SDLCheck>
-      <AdditionalIncludeDirectories>$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\os\win\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\os\win\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;IGNITEJVM_EXPORTS;_CRT_SECURE_NO_WARNINGS;IGNITE_IMPL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
     <Link>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>$(JAVA_HOME)\lib\jvm.lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>$(JAVA_HOME)\lib\jvm.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OptimizeReferences>true</OptimizeReferences>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <DelayLoadDLLs>jvm.dll</DelayLoadDLLs>
       <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
-      <ModuleDefinitionFile>module.def</ModuleDefinitionFile>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -135,7 +129,7 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;IGNITEJVM_EXPORTS;_CRT_SECURE_NO_WARNINGS;IGNITE_IMPL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\os\win\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\os\win\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <OmitFramePointers>true</OmitFramePointers>
@@ -147,10 +141,6 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>$(JAVA_HOME)\lib\jvm.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(JAVA_HOME)\lib\jvm.lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <DelayLoadDLLs>jvm.dll</DelayLoadDLLs>
-      <ModuleDefinitionFile>module.def</ModuleDefinitionFile>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -160,7 +150,7 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <SDLCheck>false</SDLCheck>
-      <AdditionalIncludeDirectories>$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\os\win\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\os\win\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <OmitFramePointers>true</OmitFramePointers>
@@ -172,32 +162,29 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalLibraryDirectories>$(JAVA_HOME)\lib\jvm.lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>$(JAVA_HOME)\lib\jvm.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <DelayLoadDLLs>jvm.dll</DelayLoadDLLs>
-      <ModuleDefinitionFile>module.def</ModuleDefinitionFile>
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="..\..\include\ignite\common\concurrent.h" />
-    <ClInclude Include="..\..\include\ignite\common\exports.h" />
-    <ClInclude Include="..\..\include\ignite\common\java.h" />
     <ClInclude Include="..\..\include\ignite\common\utils.h" />
+    <ClInclude Include="..\..\include\ignite\date.h" />
+    <ClInclude Include="..\..\include\ignite\guid.h" />
+    <ClInclude Include="..\..\include\ignite\ignite_error.h" />
+    <ClInclude Include="..\..\include\ignite\timestamp.h" />
     <ClInclude Include="..\..\os\win\include\ignite\common\common.h" />
     <ClInclude Include="..\..\os\win\include\ignite\common\concurrent_os.h" />
     <ClInclude Include="targetver.h" />
   </ItemGroup>
   <ItemGroup>
-    <ClCompile Include="..\..\os\win\src\common.cpp" />
-    <ClCompile Include="..\..\os\win\src\concurrent_os.cpp" />
-    <ClCompile Include="..\..\src\concurrent.cpp" />
-    <ClCompile Include="..\..\src\exports.cpp" />
-    <ClCompile Include="..\..\src\java.cpp" />
+    <ClCompile Include="..\..\os\win\src\common\concurrent_os.cpp" />
+    <ClCompile Include="..\..\os\win\src\common\utils.cpp" />
+    <ClCompile Include="..\..\src\common\concurrent.cpp" />
+    <ClCompile Include="..\..\src\date.cpp" />
+    <ClCompile Include="..\..\src\guid.cpp" />
+    <ClCompile Include="..\..\src\ignite_error.cpp" />
+    <ClCompile Include="..\..\src\timestamp.cpp" />
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-  <ItemGroup>
-    <None Include="module.def" />
-  </ItemGroup>
 </Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/project/vs/common.vcxproj.filters
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/project/vs/common.vcxproj.filters b/modules/platforms/cpp/common/project/vs/common.vcxproj.filters
index 01a47a0..1a6f069 100644
--- a/modules/platforms/cpp/common/project/vs/common.vcxproj.filters
+++ b/modules/platforms/cpp/common/project/vs/common.vcxproj.filters
@@ -8,50 +8,60 @@
       <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
       <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
     </Filter>
+    <Filter Include="Code\common">
+      <UniqueIdentifier>{9d664b8a-3a09-460b-9d53-c1a7f08217c0}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
+    <ClInclude Include="targetver.h">
+      <Filter>Misc</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\os\win\include\ignite\common\common.h">
-      <Filter>Code</Filter>
+      <Filter>Code\common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\common\concurrent.h">
+      <Filter>Code\common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\common\utils.h">
+      <Filter>Code\common</Filter>
     </ClInclude>
     <ClInclude Include="..\..\os\win\include\ignite\common\concurrent_os.h">
-      <Filter>Code</Filter>
+      <Filter>Code\common</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\include\ignite\common\exports.h">
+    <ClInclude Include="..\..\include\ignite\date.h">
       <Filter>Code</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\include\ignite\common\java.h">
+    <ClInclude Include="..\..\include\ignite\guid.h">
       <Filter>Code</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\include\ignite\common\concurrent.h">
+    <ClInclude Include="..\..\include\ignite\timestamp.h">
       <Filter>Code</Filter>
     </ClInclude>
-    <ClInclude Include="targetver.h">
-      <Filter>Misc</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\include\ignite\common\utils.h">
+    <ClInclude Include="..\..\include\ignite\ignite_error.h">
       <Filter>Code</Filter>
     </ClInclude>
   </ItemGroup>
   <ItemGroup>
-    <ClCompile Include="..\..\os\win\src\common.cpp">
+    <ClCompile Include="..\..\src\date.cpp">
       <Filter>Code</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\src\concurrent.cpp">
+    <ClCompile Include="..\..\src\guid.cpp">
       <Filter>Code</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\os\win\src\concurrent_os.cpp">
+    <ClCompile Include="..\..\src\timestamp.cpp">
       <Filter>Code</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\src\exports.cpp">
-      <Filter>Code</Filter>
+    <ClCompile Include="..\..\os\win\src\common\concurrent_os.cpp">
+      <Filter>Code\common</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\src\java.cpp">
+    <ClCompile Include="..\..\os\win\src\common\utils.cpp">
+      <Filter>Code\common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\common\concurrent.cpp">
+      <Filter>Code\common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\ignite_error.cpp">
       <Filter>Code</Filter>
     </ClCompile>
   </ItemGroup>
-  <ItemGroup>
-    <None Include="module.def">
-      <Filter>Misc</Filter>
-    </None>
-  </ItemGroup>
 </Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/project/vs/module.def
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/project/vs/module.def b/modules/platforms/cpp/common/project/vs/module.def
deleted file mode 100644
index 5f2e941..0000000
--- a/modules/platforms/cpp/common/project/vs/module.def
+++ /dev/null
@@ -1,135 +0,0 @@
-LIBRARY ignite.common.dll
-EXPORTS
-IgniteReallocate @1 
-IgniteIgnitionStart @2 
-IgniteIgnitionInstance @3 
-IgniteIgnitionEnvironmentPointer @4 
-IgniteIgnitionStop @5 
-IgniteIgnitionStopAll @6 
-IgniteTargetOutLong @7
-IgniteProcessorReleaseStart @8 
-IgniteProcessorProjection @9 
-IgniteProcessorCache @10 
-IgniteProcessorCreateCache @11 
-IgniteProcessorGetOrCreateCache @12 
-IgniteProcessorAffinity @13 
-IgniteProcessorDataStreamer @14 
-IgniteProcessorTransactions @15 
-IgniteProcessorServices @16
-IgniteTargetInStreamOutObject @17 
-IgniteTargetInStreamOutLong @18 
-IgniteTargetOutStream @19 
-IgniteTargetInStreamOutStream @20 
-IgniteTargetInObjectStreamOutStream @21 
-IgniteTargetListenFuture @22 
-IgniteTargetListenFutureForOperation @23 
-IgniteAffinityPartitions @24 
-IgniteCacheWithSkipStore @25 
-IgniteCacheWithNoRetries @26 
-IgniteCacheWithExpiryPolicy @27 
-IgniteCacheWithAsync @28 
-IgniteCacheWithKeepPortable @29 
-IgniteCacheClear @30 
-IgniteCacheRemoveAll @31 
-IgniteCacheOutOpQueryCursor @32 
-IgniteCacheOutOpContinuousQuery @33 
-IgniteCacheIterator @34 
-IgniteCacheLocalIterator @35 
-IgniteCacheEnterLock @36 
-IgniteCacheExitLock @37 
-IgniteCacheTryEnterLock @38 
-IgniteCacheCloseLock @39 
-IgniteCacheRebalance @40 
-IgniteCacheSize @41 
-IgniteCacheStoreCallbackInvoke @42 
-IgniteComputeWithNoFailover @43 
-IgniteComputeWithTimeout @44 
-IgniteComputeExecuteNative @45 
-IgniteContinuousQueryClose @46 
-IgniteContinuousQueryGetInitialQueryCursor @47 
-IgniteDataStreamerListenTopology @48 
-IgniteDataStreamerAllowOverwriteGet @49 
-IgniteDataStreamerAllowOverwriteSet @50 
-IgniteDataStreamerSkipStoreGet @51 
-IgniteDataStreamerSkipStoreSet @52 
-IgniteDataStreamerPerNodeBufferSizeGet @53 
-IgniteDataStreamerPerNodeBufferSizeSet @54 
-IgniteDataStreamerPerNodeParallelOperationsGet @55 
-IgniteDataStreamerPerNodeParallelOperationsSet @56 
-IgniteMessagingWithAsync @57 
-IgniteProjectionForOthers @58 
-IgniteProjectionForRemotes @59 
-IgniteProjectionForDaemons @60 
-IgniteProjectionForRandom @61 
-IgniteProjectionForOldest @62 
-IgniteProjectionForYoungest @63 
-IgniteProcessorCompute @64 
-IgniteProcessorMessage @65 
-IgniteProcessorEvents @66 
-IgniteProjectionResetMetrics @67 
-IgniteProjectionOutOpRet @68 
-IgniteQueryCursorIterator @69 
-IgniteQueryCursorClose @70 
-IgniteTransactionsStart @71 
-IgniteTransactionsCommit @72 
-IgniteTransactionsCommitAsync @73 
-IgniteTransactionsRollback @74 
-IgniteTransactionsRollbackAsync @75 
-IgniteTransactionsClose @76 
-IgniteTransactionsState @77 
-IgniteTransactionsSetRollbackOnly @78 
-IgniteTransactionsResetMetrics @79 
-IgniteAcquire @80 
-IgniteRelease @81 
-IgniteThrowToJava @82 
-IgniteHandlersSize @83 
-IgniteCreateContext @84 
-IgniteDeleteContext @85 
-IgniteDestroyJvm @86 
-IgniteEventsWithAsync @87 
-IgniteEventsStopLocalListen @88 
-IgniteEventsLocalListen @89 
-IgniteEventsIsEnabled @90 
-IgniteTargetOutObject @91 
-IgniteServicesWithAsync @92
-IgniteServicesWithServerKeepPortable @93
-IgniteServicesCancel @94
-IgniteServicesCancelAll @95
-IgniteServicesGetServiceProxy @96
-IgniteProcessorExtensions @97
-IgniteProcessorAtomicLong @98
-IgniteAtomicLongGet @99 
-IgniteAtomicLongIncrementAndGet @100 
-IgniteAtomicLongGetAndIncrement @101
-IgniteAtomicLongAddAndGet @102
-IgniteAtomicLongGetAndAdd @103
-IgniteAtomicLongDecrementAndGet @104
-IgniteAtomicLongGetAndDecrement @105
-IgniteAtomicLongGetAndSet @106
-IgniteAtomicLongCompareAndSetAndGet @107
-IgniteAtomicLongIsClosed @108
-IgniteAtomicLongClose @109
-IgniteListenableCancel @110
-IgniteListenableIsCancelled @111
-IgniteTargetListenFutureAndGet @112
-IgniteTargetListenFutureForOperationAndGet @113
-IgniteProcessorCreateCacheFromConfig @114
-IgniteProcessorGetOrCreateCacheFromConfig @115
-IgniteProcessorGetIgniteConfiguration @116
-IgniteProcessorDestroyCache @117
-IgniteProcessorAtomicSequence @118
-IgniteAtomicSequenceGet @119
-IgniteAtomicSequenceIncrementAndGet @120
-IgniteAtomicSequenceGetAndIncrement @121
-IgniteAtomicSequenceAddAndGet @122
-IgniteAtomicSequenceGetAndAdd @123
-IgniteAtomicSequenceGetBatchSize @124
-IgniteAtomicSequenceSetBatchSize @125
-IgniteAtomicSequenceIsClosed @126
-IgniteAtomicSequenceClose @127
-IgniteProcessorAtomicReference @128
-IgniteAtomicReferenceIsClosed @129
-IgniteAtomicReferenceClose @130
-IgniteProcessorCreateNearCache @131
-IgniteProcessorGetOrCreateNearCache @132
-IgniteProcessorGetCacheNames @133

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/src/common/concurrent.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/src/common/concurrent.cpp b/modules/platforms/cpp/common/src/common/concurrent.cpp
new file mode 100644
index 0000000..5b62387
--- /dev/null
+++ b/modules/platforms/cpp/common/src/common/concurrent.cpp
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ignite/common/concurrent.h"
+
+namespace ignite
+{
+    namespace common
+    {
+        namespace concurrent
+        {
+            /** Thread-local index generator for application. */
+            int32_t appTlsIdxGen = 0;
+
+            int32_t ThreadLocal::NextIndex()
+            {
+                return Atomics::IncrementAndGet32(&appTlsIdxGen);
+            }
+
+            void ThreadLocal::Remove(int32_t idx)
+            {
+                void* val = Get0();
+
+                if (val)
+                {
+                    std::map<int32_t, ThreadLocalEntry*>* map =
+                        static_cast<std::map<int32_t, ThreadLocalEntry*>*>(val);
+
+                    ThreadLocalEntry* appVal = (*map)[idx];
+
+                    if (appVal)
+                        delete appVal;
+
+                    map->erase(idx);
+
+                    if (map->size() == 0)
+                    {
+                        delete map;
+
+                        Set0(NULL);
+                    }
+                }
+            }
+
+            void ThreadLocal::Clear0(void* mapPtr)
+            {
+                if (mapPtr)
+                {
+                    std::map<int32_t, ThreadLocalEntry*>* map =
+                        static_cast<std::map<int32_t, ThreadLocalEntry*>*>(mapPtr);
+
+                    for (std::map<int32_t, ThreadLocalEntry*>::iterator it = map->begin(); it != map->end(); ++it)
+                        delete it->second;
+
+                    delete map;
+                }
+            }
+
+            SharedPointerImpl::SharedPointerImpl(void* ptr, DeleterType deleter) :
+                ptr(ptr), deleter(deleter), refCnt(1)
+            {
+                Memory::Fence();
+            }
+
+            void* SharedPointerImpl::Pointer()
+            {
+                return ptr;
+            }
+
+            const void* SharedPointerImpl::Pointer() const
+            {
+                return ptr;
+            }
+
+            SharedPointerImpl::DeleterType SharedPointerImpl::Deleter()
+            {
+                return deleter;
+            }
+
+            void SharedPointerImpl::Increment()
+            {
+                Atomics::IncrementAndGet32(&refCnt);
+            }
+
+            bool SharedPointerImpl::Decrement()
+            {
+                return Atomics::DecrementAndGet32(&refCnt) == 0;
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/src/concurrent.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/src/concurrent.cpp b/modules/platforms/cpp/common/src/concurrent.cpp
deleted file mode 100644
index 5b62387..0000000
--- a/modules/platforms/cpp/common/src/concurrent.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "ignite/common/concurrent.h"
-
-namespace ignite
-{
-    namespace common
-    {
-        namespace concurrent
-        {
-            /** Thread-local index generator for application. */
-            int32_t appTlsIdxGen = 0;
-
-            int32_t ThreadLocal::NextIndex()
-            {
-                return Atomics::IncrementAndGet32(&appTlsIdxGen);
-            }
-
-            void ThreadLocal::Remove(int32_t idx)
-            {
-                void* val = Get0();
-
-                if (val)
-                {
-                    std::map<int32_t, ThreadLocalEntry*>* map =
-                        static_cast<std::map<int32_t, ThreadLocalEntry*>*>(val);
-
-                    ThreadLocalEntry* appVal = (*map)[idx];
-
-                    if (appVal)
-                        delete appVal;
-
-                    map->erase(idx);
-
-                    if (map->size() == 0)
-                    {
-                        delete map;
-
-                        Set0(NULL);
-                    }
-                }
-            }
-
-            void ThreadLocal::Clear0(void* mapPtr)
-            {
-                if (mapPtr)
-                {
-                    std::map<int32_t, ThreadLocalEntry*>* map =
-                        static_cast<std::map<int32_t, ThreadLocalEntry*>*>(mapPtr);
-
-                    for (std::map<int32_t, ThreadLocalEntry*>::iterator it = map->begin(); it != map->end(); ++it)
-                        delete it->second;
-
-                    delete map;
-                }
-            }
-
-            SharedPointerImpl::SharedPointerImpl(void* ptr, DeleterType deleter) :
-                ptr(ptr), deleter(deleter), refCnt(1)
-            {
-                Memory::Fence();
-            }
-
-            void* SharedPointerImpl::Pointer()
-            {
-                return ptr;
-            }
-
-            const void* SharedPointerImpl::Pointer() const
-            {
-                return ptr;
-            }
-
-            SharedPointerImpl::DeleterType SharedPointerImpl::Deleter()
-            {
-                return deleter;
-            }
-
-            void SharedPointerImpl::Increment()
-            {
-                Atomics::IncrementAndGet32(&refCnt);
-            }
-
-            bool SharedPointerImpl::Decrement()
-            {
-                return Atomics::DecrementAndGet32(&refCnt) == 0;
-            }
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/764c97b9/modules/platforms/cpp/common/src/date.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/common/src/date.cpp b/modules/platforms/cpp/common/src/date.cpp
new file mode 100644
index 0000000..2bdcfd5
--- /dev/null
+++ b/modules/platforms/cpp/common/src/date.cpp
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ignite/date.h"
+
+namespace ignite
+{
+    Date::Date() : milliseconds(0)
+    {
+        // No-op.
+    }
+
+    Date::Date(const Date& another) : milliseconds(another.milliseconds)
+    {
+        // No-op.
+    }
+
+    Date::Date(int64_t ms) : milliseconds(ms)
+    {
+        // No-op.
+    }
+
+    Date& Date::operator=(const Date& another)
+    {
+        milliseconds = another.milliseconds;
+
+        return *this;
+    }
+
+    int64_t Date::GetMilliseconds() const
+    {
+        return milliseconds;
+    }
+
+    int64_t Date::GetSeconds() const
+    {
+        return milliseconds / 1000;
+    }
+
+    bool operator==(const Date& val1, const Date& val2)
+    {
+        return val1.milliseconds == val2.milliseconds;
+    }
+
+    bool operator!=(const Date& val1, const Date& val2)
+    {
+        return val1.milliseconds != val2.milliseconds;
+    }
+
+    bool operator<(const Date& val1, const Date& val2)
+    {
+        return val1.milliseconds < val2.milliseconds;
+    }
+
+    bool operator<=(const Date& val1, const Date& val2)
+    {
+        return val1.milliseconds <= val2.milliseconds;
+    }
+
+    bool operator>(const Date& val1, const Date& val2)
+    {
+        return val1.milliseconds > val2.milliseconds;
+    }
+
+    bool operator>=(const Date& val1, const Date& val2)
+    {
+        return val1.milliseconds >= val2.milliseconds;
+    }
+}


Mime
View raw message