ignite-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From voze...@apache.org
Subject [03/12] ignite git commit: IGNITE-1364: Moved CPP module to Ignite.
Date Fri, 04 Sep 2015 10:04:59 GMT
http://git-wip-us.apache.org/repos/asf/ignite/blob/58a665aa/modules/platform/src/main/cpp/core/project/vs/core.vcxproj.filters
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/cpp/core/project/vs/core.vcxproj.filters b/modules/platform/src/main/cpp/core/project/vs/core.vcxproj.filters
new file mode 100644
index 0000000..d18599d
--- /dev/null
+++ b/modules/platform/src/main/cpp/core/project/vs/core.vcxproj.filters
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="..\..\src\impl\cache\cache_impl.cpp">
+      <Filter>Code\impl\cache</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\interop\interop_input_stream.cpp">
+      <Filter>Code\impl\interop</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\interop\interop_memory.cpp">
+      <Filter>Code\impl\interop</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\interop\interop_output_stream.cpp">
+      <Filter>Code\impl\interop</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\ignite_environment.cpp">
+      <Filter>Code\impl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\ignite_impl.cpp">
+      <Filter>Code\impl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\portable\portable_containers.cpp">
+      <Filter>Code\portable</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\portable\portable_raw_reader.cpp">
+      <Filter>Code\portable</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\portable\portable_raw_writer.cpp">
+      <Filter>Code\portable</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\portable\portable_reader.cpp">
+      <Filter>Code\portable</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\portable\portable_writer.cpp">
+      <Filter>Code\portable</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\portable\portable_reader_impl.cpp">
+      <Filter>Code\impl\portable</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\portable\portable_utils.cpp">
+      <Filter>Code\impl\portable</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\portable\portable_writer_impl.cpp">
+      <Filter>Code\impl\portable</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\os\win\src\impl\utils.cpp">
+      <Filter>Code\impl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\ignite.cpp">
+      <Filter>Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\ignite_error.cpp">
+      <Filter>Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\ignition.cpp">
+      <Filter>Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\guid.cpp">
+      <Filter>Code</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\handle_registry.cpp">
+      <Filter>Code\impl</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\cache\query\query_impl.cpp">
+      <Filter>Code\impl\cache\query</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\portable\portable_metadata_snapshot.cpp">
+      <Filter>Code\impl\portable</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\portable\portable_metadata_handler.cpp">
+      <Filter>Code\impl\portable</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\portable\portable_type.cpp">
+      <Filter>Code\portable</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\portable\portable_metadata_manager.cpp">
+      <Filter>Code\impl\portable</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\portable\portable_metadata_updater.cpp">
+      <Filter>Code\impl\portable</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\impl\portable\portable_metadata_updater_impl.cpp">
+      <Filter>Code\impl\portable</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\include\ignite\impl\cache\cache_impl.h">
+      <Filter>Code\impl\cache</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\cache\cache.h">
+      <Filter>Code\cache</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\cache\cache_peek_mode.h">
+      <Filter>Code\cache</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\interop\interop.h">
+      <Filter>Code\impl\interop</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\interop\interop_input_stream.h">
+      <Filter>Code\impl\interop</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\interop\interop_memory.h">
+      <Filter>Code\impl\interop</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\interop\interop_output_stream.h">
+      <Filter>Code\impl\interop</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\ignite_environment.h">
+      <Filter>Code\impl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\ignite_impl.h">
+      <Filter>Code\impl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\operations.h">
+      <Filter>Code\impl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_common.h">
+      <Filter>Code\impl\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\portable\portable_consts.h">
+      <Filter>Code\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\portable\portable.h">
+      <Filter>Code\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\portable\portable_containers.h">
+      <Filter>Code\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_id_resolver.h">
+      <Filter>Code\impl\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\portable\portable_raw_reader.h">
+      <Filter>Code\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\portable\portable_raw_writer.h">
+      <Filter>Code\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\portable\portable_reader.h">
+      <Filter>Code\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\portable\portable_writer.h">
+      <Filter>Code\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_reader_impl.h">
+      <Filter>Code\impl\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_utils.h">
+      <Filter>Code\impl\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_writer_impl.h">
+      <Filter>Code\impl\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\os\win\include\ignite\impl\utils.h">
+      <Filter>Code\impl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\ignite.h">
+      <Filter>Code</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\ignite_configuration.h">
+      <Filter>Code</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\ignite_error.h">
+      <Filter>Code</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\ignition.h">
+      <Filter>Code</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\guid.h">
+      <Filter>Code</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\handle_registry.h">
+      <Filter>Code\impl</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\cache\cache_entry.h">
+      <Filter>Code\cache</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\cache\query\query_impl.h">
+      <Filter>Code\impl\cache\query</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_metadata_snapshot.h">
+      <Filter>Code\impl\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_metadata_handler.h">
+      <Filter>Code\impl\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_metadata_manager.h">
+      <Filter>Code\impl\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\portable\portable_type.h">
+      <Filter>Code\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_metadata_updater.h">
+      <Filter>Code\impl\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_metadata_updater_impl.h">
+      <Filter>Code\impl\portable</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\cache\query\query_argument.h">
+      <Filter>Code\cache\query</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\cache\query\query_cursor.h">
+      <Filter>Code\cache\query</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\cache\query\query_sql.h">
+      <Filter>Code\cache\query</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\cache\query\query.h">
+      <Filter>Code\cache\query</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\cache\query\query_text.h">
+      <Filter>Code\cache\query</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\include\ignite\cache\query\query_scan.h">
+      <Filter>Code\cache\query</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Filter Include="Code">
+      <UniqueIdentifier>{91873c79-a64f-4786-ab25-d03ef2db9dc8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Code\impl">
+      <UniqueIdentifier>{9bede404-e1b1-44d6-b54d-e9b2441c5f13}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Code\impl\cache">
+      <UniqueIdentifier>{b013b0f6-c4b8-4b88-89bc-8b394971788e}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Code\impl\portable">
+      <UniqueIdentifier>{883773bd-085d-4eb5-81ee-f11188134faf}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Code\impl\interop">
+      <UniqueIdentifier>{d4cc8aeb-6e7b-47e6-9b83-cba925844d96}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Code\cache">
+      <UniqueIdentifier>{8b7e32c0-e222-4f3a-af31-19df380c369f}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Code\portable">
+      <UniqueIdentifier>{24b7134c-9335-44e1-9604-4093d0e3bbf5}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Code\cache\query">
+      <UniqueIdentifier>{4658a0ff-0d2d-45a6-b8de-93eeec0cc081}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Code\impl\cache\query">
+      <UniqueIdentifier>{b6e57294-120a-46f2-b0ad-c3595e2cf789}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/58a665aa/modules/platform/src/main/cpp/core/project/vs/core.vcxprojrel
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/cpp/core/project/vs/core.vcxprojrel b/modules/platform/src/main/cpp/core/project/vs/core.vcxprojrel
new file mode 100644
index 0000000..58fa283
--- /dev/null
+++ b/modules/platform/src/main/cpp/core/project/vs/core.vcxprojrel
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{E2DEA693-F2EA-43C2-A813-053378F6E4DB}</ProjectGuid>
+    <RootNamespace>core</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v100</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v100</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</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>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v100</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <TargetName>ignite.core</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <TargetName>ignite.core</TargetName>
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <TargetName>ignite.core</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <TargetName>ignite.core</TargetName>
+    <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>false</SDLCheck>
+      <AdditionalIncludeDirectories>$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\..\..\..\common\include;$(ProjectDir)\..\..\..\common\os\win\include;$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\os\win\include</AdditionalIncludeDirectories>
+      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
+      <IntrinsicFunctions>false</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
+      <OmitFramePointers>false</OmitFramePointers>
+      <StringPooling>true</StringPooling>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;IGNITE_IMPL;IGNITE_FRIEND;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(JAVA_HOME)\lib\jvm.lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>$(JAVA_HOME)\lib\jvm.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OptimizeReferences>false</OptimizeReferences>
+      <EnableCOMDATFolding>false</EnableCOMDATFolding>
+      <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>false</SDLCheck>
+      <AdditionalIncludeDirectories>$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\..\..\..\common\include;$(ProjectDir)\..\..\..\common\os\win\include;$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\os\win\include</AdditionalIncludeDirectories>
+      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
+      <IntrinsicFunctions>false</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
+      <OmitFramePointers>false</OmitFramePointers>
+      <StringPooling>true</StringPooling>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;IGNITE_IMPL;IGNITE_FRIEND;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <WholeProgramOptimization>false</WholeProgramOptimization>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(JAVA_HOME)\lib\jvm.lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>$(JAVA_HOME)\lib\jvm.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OptimizeReferences>false</OptimizeReferences>
+      <EnableCOMDATFolding>false</EnableCOMDATFolding>
+      <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Full</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>false</SDLCheck>
+      <AdditionalIncludeDirectories>$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\..\..\..\common\include;$(ProjectDir)\..\..\..\common\os\win\include;$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\os\win\include</AdditionalIncludeDirectories>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;IGNITE_IMPL;IGNITE_FRIEND;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <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>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Full</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>false</SDLCheck>
+      <AdditionalIncludeDirectories>$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\..\..\..\common\include;$(ProjectDir)\..\..\..\common\os\win\include;$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\os\win\include</AdditionalIncludeDirectories>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;IGNITE_IMPL;IGNITE_FRIEND;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <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>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\include\ignite\cache\cache.h" />
+    <ClInclude Include="..\..\include\ignite\cache\cache_entry.h" />
+    <ClInclude Include="..\..\include\ignite\cache\cache_peek_mode.h" />
+    <ClInclude Include="..\..\include\ignite\cache\query\query.h" />
+    <ClInclude Include="..\..\include\ignite\cache\query\query_argument.h" />
+    <ClInclude Include="..\..\include\ignite\cache\query\query_cursor.h" />
+    <ClInclude Include="..\..\include\ignite\cache\query\query_scan.h" />
+    <ClInclude Include="..\..\include\ignite\cache\query\query_sql.h" />
+    <ClInclude Include="..\..\include\ignite\cache\query\query_text.h" />
+    <ClInclude Include="..\..\include\ignite\ignite.h" />
+    <ClInclude Include="..\..\include\ignite\ignite_configuration.h" />
+    <ClInclude Include="..\..\include\ignite\ignite_error.h" />
+    <ClInclude Include="..\..\include\ignite\ignition.h" />
+    <ClInclude Include="..\..\include\ignite\guid.h" />
+    <ClInclude Include="..\..\include\ignite\impl\cache\cache_impl.h" />
+    <ClInclude Include="..\..\include\ignite\impl\cache\query\query_impl.h" />
+    <ClInclude Include="..\..\include\ignite\impl\ignite_environment.h" />
+    <ClInclude Include="..\..\include\ignite\impl\ignite_impl.h" />
+    <ClInclude Include="..\..\include\ignite\impl\handle_registry.h" />
+    <ClInclude Include="..\..\include\ignite\impl\interop\interop.h" />
+    <ClInclude Include="..\..\include\ignite\impl\interop\interop_input_stream.h" />
+    <ClInclude Include="..\..\include\ignite\impl\interop\interop_memory.h" />
+    <ClInclude Include="..\..\include\ignite\impl\interop\interop_output_stream.h" />
+    <ClInclude Include="..\..\include\ignite\impl\operations.h" />
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_common.h" />
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_id_resolver.h" />
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_metadata_handler.h" />
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_metadata_manager.h" />
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_metadata_snapshot.h" />
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_metadata_updater.h" />
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_metadata_updater_impl.h" />
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_reader_impl.h" />
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_utils.h" />
+    <ClInclude Include="..\..\include\ignite\impl\portable\portable_writer_impl.h" />
+    <ClInclude Include="..\..\include\ignite\portable\portable.h" />
+    <ClInclude Include="..\..\include\ignite\portable\portable_consts.h" />
+    <ClInclude Include="..\..\include\ignite\portable\portable_containers.h" />
+    <ClInclude Include="..\..\include\ignite\portable\portable_type.h" />
+    <ClInclude Include="..\..\include\ignite\portable\portable_raw_reader.h" />
+    <ClInclude Include="..\..\include\ignite\portable\portable_raw_writer.h" />
+    <ClInclude Include="..\..\include\ignite\portable\portable_reader.h" />
+    <ClInclude Include="..\..\include\ignite\portable\portable_writer.h" />
+    <ClInclude Include="..\..\os\win\include\ignite\impl\utils.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\os\win\src\impl\utils.cpp" />
+    <ClCompile Include="..\..\src\ignite.cpp" />
+    <ClCompile Include="..\..\src\ignite_error.cpp" />
+    <ClCompile Include="..\..\src\ignition.cpp" />
+    <ClCompile Include="..\..\src\guid.cpp" />
+    <ClCompile Include="..\..\src\impl\cache\cache_impl.cpp" />
+    <ClCompile Include="..\..\src\impl\cache\query\query_impl.cpp" />
+    <ClCompile Include="..\..\src\impl\ignite_environment.cpp" />
+    <ClCompile Include="..\..\src\impl\ignite_impl.cpp" />
+    <ClCompile Include="..\..\src\impl\handle_registry.cpp" />
+    <ClCompile Include="..\..\src\impl\interop\interop_input_stream.cpp" />
+    <ClCompile Include="..\..\src\impl\interop\interop_memory.cpp" />
+    <ClCompile Include="..\..\src\impl\interop\interop_output_stream.cpp" />
+    <ClCompile Include="..\..\src\impl\portable\portable_metadata_handler.cpp" />
+    <ClCompile Include="..\..\src\impl\portable\portable_metadata_manager.cpp" />
+    <ClCompile Include="..\..\src\impl\portable\portable_metadata_snapshot.cpp" />
+    <ClCompile Include="..\..\src\impl\portable\portable_metadata_updater.cpp" />
+    <ClCompile Include="..\..\src\impl\portable\portable_metadata_updater_impl.cpp" />
+    <ClCompile Include="..\..\src\impl\portable\portable_reader_impl.cpp" />
+    <ClCompile Include="..\..\src\impl\portable\portable_utils.cpp" />
+    <ClCompile Include="..\..\src\impl\portable\portable_writer_impl.cpp" />
+    <ClCompile Include="..\..\src\portable\portable_containers.cpp" />
+    <ClCompile Include="..\..\src\portable\portable_type.cpp" />
+    <ClCompile Include="..\..\src\portable\portable_raw_reader.cpp" />
+    <ClCompile Include="..\..\src\portable\portable_raw_writer.cpp" />
+    <ClCompile Include="..\..\src\portable\portable_reader.cpp" />
+    <ClCompile Include="..\..\src\portable\portable_writer.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\common\project\vs\common.vcxproj">
+      <Project>{4f7e4917-4612-4b96-9838-025711ade391}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/58a665aa/modules/platform/src/main/cpp/core/src/guid.cpp
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/cpp/core/src/guid.cpp b/modules/platform/src/main/cpp/core/src/guid.cpp
new file mode 100644
index 0000000..77997e4
--- /dev/null
+++ b/modules/platform/src/main/cpp/core/src/guid.cpp
@@ -0,0 +1,65 @@
+/*
+ * 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/guid.h"
+
+namespace ignite
+{
+    Guid::Guid() : most(0), least(0)
+    {
+        // No-op.
+    }
+
+    Guid::Guid(int64_t most, int64_t least) : most(most), least(least)
+    {
+        // No-op.
+    }
+
+    int64_t Guid::GetMostSignificantBits() const
+    {
+        return most;
+    }
+
+    int64_t Guid::GetLeastSignificantBits() const
+    {
+        return least;
+    }
+
+    int32_t Guid::GetVersion() const
+    {
+        return static_cast<int32_t>((most >> 12) & 0x0f);
+    }
+
+    int32_t Guid::GetVariant() const
+    {
+        uint64_t least0 = static_cast<uint64_t>(least);
+
+        return static_cast<int32_t>((least0 >> (64 - (least0 >> 62))) & (least >> 63));
+    }
+
+    int32_t Guid::GetHashCode() const
+    {
+        int64_t hilo = most ^ least;
+
+        return static_cast<int32_t>(hilo >> 32) ^ static_cast<int32_t>(hilo);
+    }
+
+    bool operator==(Guid& val1, Guid& val2)
+    {
+        return val1.least == val2.least && val1.most == val2.most;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/58a665aa/modules/platform/src/main/cpp/core/src/ignite.cpp
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/cpp/core/src/ignite.cpp b/modules/platform/src/main/cpp/core/src/ignite.cpp
new file mode 100644
index 0000000..665383b
--- /dev/null
+++ b/modules/platform/src/main/cpp/core/src/ignite.cpp
@@ -0,0 +1,43 @@
+/*
+ * 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/java.h>
+
+#include "ignite/impl/ignite_impl.h"
+#include "ignite/ignite.h"
+
+using namespace ignite::common::concurrent;
+using namespace ignite::impl;
+
+namespace ignite
+{    
+    Ignite::Ignite() : impl(SharedPointer<IgniteImpl>())
+    {
+        // No-op.
+    }
+
+    Ignite::Ignite(IgniteImpl* impl) : impl(SharedPointer<IgniteImpl>(impl))
+    {
+        // No-op.
+    }
+
+    char* Ignite::GetName()
+    {
+        return impl.Get()->GetName();
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/ignite/blob/58a665aa/modules/platform/src/main/cpp/core/src/ignite_error.cpp
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/cpp/core/src/ignite_error.cpp b/modules/platform/src/main/cpp/core/src/ignite_error.cpp
new file mode 100644
index 0000000..65cd291
--- /dev/null
+++ b/modules/platform/src/main/cpp/core/src/ignite_error.cpp
@@ -0,0 +1,222 @@
+/*
+ * 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/java.h>
+
+#include "ignite/impl/utils.h"
+#include "ignite/ignite_error.h"
+
+using namespace ignite::common::java;
+using namespace ignite::impl::utils;
+
+namespace ignite
+{
+    void IgniteError::ThrowIfNeeded(IgniteError& err)
+    {
+        if (err.code != IGNITE_SUCCESS)
+            throw err;
+    }
+
+    IgniteError::IgniteError() : code(IGNITE_SUCCESS), msg(NULL)
+    {
+        // No-op.
+    }
+
+    IgniteError::IgniteError(int32_t code) : code(code), msg(NULL)
+    {
+        // No-op.
+    }
+
+    IgniteError::IgniteError(int32_t code, const char* msg)
+    {
+        this->code = code;
+        this->msg = CopyChars(msg);
+    }
+
+    IgniteError::IgniteError(const IgniteError& other)
+    {
+        this->code = other.code;
+        this->msg = CopyChars(other.msg);
+    }
+
+    IgniteError& IgniteError::operator=(const IgniteError& other)
+    {
+        if (this != &other)
+        {
+            IgniteError tmp(other);
+
+            int tmpCode = code;
+            char* tmpMsg = msg;
+            
+            code = tmp.code;
+            msg = tmp.msg;
+
+            tmp.code = tmpCode;
+            tmp.msg = tmpMsg;
+        }
+
+        return *this;
+    }
+
+    IgniteError::~IgniteError()
+    {
+        ReleaseChars(msg);
+    }
+
+    int32_t IgniteError::GetCode()
+    {
+        return code;
+    }
+
+    const char* IgniteError::GetText()
+    {
+        if (code == IGNITE_SUCCESS)
+            return "Operation completed successfully.";
+        else if (msg)
+            return msg;
+        else
+            return  "No additional information available.";
+    }
+    
+    void IgniteError::SetError(const int jniCode, const char* jniCls, const char* jniMsg, IgniteError* err)
+    {
+        if (jniCode == IGNITE_JNI_ERR_SUCCESS)
+            *err = IgniteError();
+        else if (jniCode == IGNITE_JNI_ERR_GENERIC)
+        {
+            // The most common case when we have Java exception "in hands" and must map it to respective code.
+            if (jniCls)
+            {
+                std::string jniCls0 = jniCls;
+
+                if (jniCls0.compare("java.lang.NoClassDefFoundError") == 0)
+                {
+                    std::stringstream stream; 
+
+                    stream << "Java class is not found (did you set IGNITE_HOME environment variable?)";
+
+                    if (jniMsg)
+                        stream << ": " << jniMsg;
+                    
+                    *err = IgniteError(IGNITE_ERR_JVM_NO_CLASS_DEF_FOUND, stream.str().c_str());
+                }
+                else if (jniCls0.compare("java.lang.NoSuchMethodError") == 0)
+                {
+                    std::stringstream stream;
+
+                    stream << "Java method is not found (did you set IGNITE_HOME environment variable?)";
+
+                    if (jniMsg)
+                        stream << ": " << jniMsg;
+
+                    *err = IgniteError(IGNITE_ERR_JVM_NO_SUCH_METHOD, stream.str().c_str());
+                }
+                else if (jniCls0.compare("java.lang.IllegalArgumentException") == 0)
+                    *err = IgniteError(IGNITE_ERR_ILLEGAL_ARGUMENT, jniMsg);
+                else if (jniCls0.compare("java.lang.IllegalStateException") == 0)
+                    *err = IgniteError(IGNITE_ERR_ILLEGAL_STATE, jniMsg);
+                else if (jniCls0.compare("java.lang.UnsupportedOperationException") == 0)
+                    *err = IgniteError(IGNITE_ERR_UNSUPPORTED_OPERATION, jniMsg);
+                else if (jniCls0.compare("java.lang.InterruptedException") == 0)
+                    *err = IgniteError(IGNITE_ERR_INTERRUPTED, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.cluster.ClusterGroupEmptyException") == 0)
+                    *err = IgniteError(IGNITE_ERR_CLUSTER_GROUP_EMPTY, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.cluster.ClusterTopologyException") == 0)
+                    *err = IgniteError(IGNITE_ERR_CLUSTER_TOPOLOGY, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.compute.ComputeExecutionRejectedException") == 0)
+                    *err = IgniteError(IGNITE_ERR_COMPUTE_EXECUTION_REJECTED, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.compute.ComputeJobFailoverException") == 0)
+                    *err = IgniteError(IGNITE_ERR_COMPUTE_JOB_FAILOVER, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.compute.ComputeTaskCancelledException") == 0)
+                    *err = IgniteError(IGNITE_ERR_COMPUTE_TASK_CANCELLED, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.compute.ComputeTaskTimeoutException") == 0)
+                    *err = IgniteError(IGNITE_ERR_COMPUTE_TASK_TIMEOUT, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.compute.ComputeUserUndeclaredException") == 0)
+                    *err = IgniteError(IGNITE_ERR_COMPUTE_USER_UNDECLARED_EXCEPTION, jniMsg);
+                else if (jniCls0.compare("javax.cache.CacheException") == 0)
+                    *err = IgniteError(IGNITE_ERR_CACHE, jniMsg);
+                else if (jniCls0.compare("javax.cache.integration.CacheLoaderException") == 0)
+                    *err = IgniteError(IGNITE_ERR_CACHE_LOADER, jniMsg);
+                else if (jniCls0.compare("javax.cache.integration.CacheWriterException") == 0)
+                    *err = IgniteError(IGNITE_ERR_CACHE_WRITER, jniMsg);
+                else if (jniCls0.compare("javax.cache.processor.EntryProcessorException") == 0)
+                    *err = IgniteError(IGNITE_ERR_ENTRY_PROCESSOR, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.cache.CacheAtomicUpdateTimeoutException") == 0)
+                    *err = IgniteError(IGNITE_ERR_CACHE_ATOMIC_UPDATE_TIMEOUT, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.cache.CachePartialUpdateException") == 0)
+                    *err = IgniteError(IGNITE_ERR_CACHE_PARTIAL_UPDATE, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.transactions.TransactionOptimisticException") == 0)
+                    *err = IgniteError(IGNITE_ERR_TX_OPTIMISTIC, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.transactions.TransactionTimeoutException") == 0)
+                    *err = IgniteError(IGNITE_ERR_TX_TIMEOUT, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.transactions.TransactionRollbackException") == 0)
+                    *err = IgniteError(IGNITE_ERR_TX_ROLLBACK, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.transactions.TransactionHeuristicException") == 0)
+                    *err = IgniteError(IGNITE_ERR_TX_HEURISTIC, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.IgniteAuthenticationException") == 0)
+                    *err = IgniteError(IGNITE_ERR_AUTHENTICATION, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.plugin.security.GridSecurityException") == 0)
+                    *err = IgniteError(IGNITE_ERR_SECURITY, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.IgniteException") == 0)
+                    *err = IgniteError(IGNITE_ERR_GENERIC, jniMsg);
+                else if (jniCls0.compare("org.apache.ignite.IgniteCheckedException") == 0)
+                    *err = IgniteError(IGNITE_ERR_GENERIC, jniMsg);
+                else
+                {
+                    std::stringstream stream;
+                    
+                    stream << "Java exception occurred [cls=" << jniCls0;
+
+                    if (jniMsg)
+                        stream << ", msg=" << jniMsg;
+
+                    stream << "]";
+
+                    *err = IgniteError(IGNITE_ERR_UNKNOWN, stream.str().c_str());
+                }                    
+            }
+            else
+            {
+                // JNI class name is not available. Something really weird.
+                *err = IgniteError(IGNITE_ERR_UNKNOWN);
+            }
+        }
+        else if (jniCode == IGNITE_JNI_ERR_JVM_INIT)
+        {
+            std::stringstream stream;
+
+            stream << "Failed to initialize JVM [errCls=";
+
+            if (jniCls)
+                stream << jniCls;
+            else
+                stream << "N/A";
+
+            stream << ", errMsg=";
+
+            if (jniMsg)
+                stream << jniMsg;
+            else
+                stream << "N/A";
+
+            stream << "]";
+
+            *err = IgniteError(IGNITE_ERR_JVM_INIT, stream.str().c_str());
+        }
+        else if (jniCode == IGNITE_JNI_ERR_JVM_ATTACH)
+            *err = IgniteError(IGNITE_ERR_JVM_ATTACH, "Failed to attach to JVM.");
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/58a665aa/modules/platform/src/main/cpp/core/src/ignition.cpp
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/cpp/core/src/ignition.cpp b/modules/platform/src/main/cpp/core/src/ignition.cpp
new file mode 100644
index 0000000..a0e3367
--- /dev/null
+++ b/modules/platform/src/main/cpp/core/src/ignition.cpp
@@ -0,0 +1,468 @@
+/*
+ * 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 <sstream>
+
+#include <ignite/common/common.h>
+#include <ignite/common/concurrent.h>
+#include <ignite/common/exports.h>
+#include <ignite/common/java.h>
+
+#include "ignite/impl/ignite_environment.h"
+#include "ignite/impl/ignite_impl.h"
+#include "ignite/impl/utils.h"
+#include "ignite/ignition.h"
+
+using namespace ignite::common::concurrent;
+using namespace ignite::common::java;
+using namespace ignite::impl;
+using namespace ignite::impl::utils;
+
+namespace ignite
+{
+    /** Default configuration. */
+    const char* DFLT_CFG = "config/default-config.xml";
+
+    /** Whether JVM library is loaded to the process. */
+    bool JVM_LIB_LOADED;
+
+    /** Critical section for factory methods. */
+    CriticalSection factoryLock;
+
+    /** Flag indicating that at least one Ignite instance has started. */
+    bool started = false;
+
+    /**
+     * Convert integer value to string.
+     */
+    std::string JvmMemoryString(const std::string& prefix, int32_t val)
+    {
+        std::ostringstream ss;
+        ss << val;
+
+        std::string valStr = ss.str();
+
+        std::string res = std::string(prefix);
+        res.append(valStr);
+        res.append("m");
+
+        return res;
+    }
+
+    /**
+     * Create JVM options.
+     *
+     * @param cfg Configuration.
+     * @param home Optional GG home.
+     * @param cp Classpath.
+     * @param opts Options.
+     * @param optsLen Options length.
+     * @return Options.
+     */
+    char** CreateJvmOptions(const IgniteConfiguration& cfg, const std::string* home, const std::string& cp, int* optsLen)
+    {
+        *optsLen = 3 + (home ? 1 : 0) + cfg.jvmOptsLen;
+        char** opts = new char*[*optsLen];
+
+        int idx = 0;
+
+        // 1. Set classpath.
+        std::string cpFull = std::string("-Djava.class.path=") + cp;
+
+        *(opts + idx++) = CopyChars(cpFull.c_str());
+
+        // 2. Set home.
+        if (home) {
+            std::string homeFull = std::string("-DIGNITE_HOME=") + *home;
+
+            *(opts + idx++) = CopyChars(homeFull.c_str());
+        }
+
+        // 3. Set Xms, Xmx.
+        std::string xmsStr = JvmMemoryString(std::string("-Xms"), cfg.jvmInitMem);
+        std::string xmxStr = JvmMemoryString(std::string("-Xmx"), cfg.jvmMaxMem);
+
+        *(opts + idx++) = CopyChars(xmsStr.c_str());
+        *(opts + idx++) = CopyChars(xmxStr.c_str());
+
+        // 4. Set the rest options.
+        for (int i = 0; i < cfg.jvmOptsLen; i++) {
+            char* optCopy = CopyChars(cfg.jvmOpts[i].opt);
+
+            opts[idx++] = optCopy;
+        }
+
+        return opts;
+    }
+
+    Ignite Ignition::Start(const IgniteConfiguration& cfg)
+    {
+        return Start(cfg, static_cast<const char*>(NULL));
+    }
+
+    Ignite Ignition::Start(const IgniteConfiguration& cfg, IgniteError* err)
+    {
+        return Start(cfg, NULL, err);
+    }
+
+    Ignite Ignition::Start(const IgniteConfiguration& cfg, const char* name)
+    {
+        IgniteError err;
+
+        Ignite res = Start(cfg, name, &err);
+
+        IgniteError::ThrowIfNeeded(err);
+
+        return res;
+    }
+
+    Ignite Ignition::Start(const IgniteConfiguration& cfg, const char* name, IgniteError* err)
+    {
+        bool failed = false;
+
+        SharedPointer<IgniteEnvironment> env;
+        SharedPointer<IgniteEnvironment>* envTarget = NULL;
+
+        jobject javaRef = NULL;
+
+        factoryLock.Enter();
+
+        // 1. Load JVM library if needed.
+        if (!JVM_LIB_LOADED)
+        {
+            bool jvmLibFound;
+            std::string jvmLib;
+
+            if (cfg.jvmLibPath)
+            {
+                std::string jvmLibPath = std::string(cfg.jvmLibPath);
+
+                jvmLib = FindJvmLibrary(&jvmLibPath, &jvmLibFound);
+            }
+            else
+                jvmLib = FindJvmLibrary(NULL, &jvmLibFound);
+
+            if (!jvmLibFound)
+            {
+                *err = IgniteError(IgniteError::IGNITE_ERR_JVM_LIB_NOT_FOUND,
+                    "JVM library is not found (did you set JAVA_HOME environment variable?)");
+
+                failed = true;
+            }
+
+            if (!failed) {
+                if (!LoadJvmLibrary(jvmLib))
+                {
+                    *err = IgniteError(IgniteError::IGNITE_ERR_JVM_LIB_LOAD_FAILED, "Failed to load JVM library.");
+
+                    failed = true;
+                }
+            }
+
+            JVM_LIB_LOADED = true;
+        }
+
+        if (!failed)
+        {
+            // 2. Resolve IGNITE_HOME.
+            bool homeFound;
+            std::string home;
+
+            if (cfg.igniteHome)
+            {
+                std::string homePath = std::string(cfg.igniteHome);
+
+                home = ResolveIgniteHome(&homePath, &homeFound);
+            }
+            else
+                home = ResolveIgniteHome(NULL, &homeFound);
+
+            // 3. Create classpath.
+            std::string cp;
+
+            if (cfg.jvmClassPath)
+            {
+                std::string usrCp = cfg.jvmClassPath;
+
+                cp = CreateIgniteClasspath(&usrCp, homeFound ? &home : NULL);
+            }
+            else
+                cp = CreateIgniteClasspath(NULL, homeFound ? &home : NULL);
+
+            if (!cp.empty())
+            {
+                // 4. Start JVM if needed.
+                JniErrorInfo jniErr;
+
+                env = SharedPointer<IgniteEnvironment>(new IgniteEnvironment());
+
+                int optsLen;
+                char** opts = CreateJvmOptions(cfg, homeFound ? &home : NULL, cp, &optsLen);
+
+                envTarget = new SharedPointer<IgniteEnvironment>(env);
+                
+                SharedPointer<JniContext> ctx(
+                    JniContext::Create(opts, optsLen, env.Get()->GetJniHandlers(envTarget), &jniErr));
+
+                for (int i = 0; i < optsLen; i++)
+                    ReleaseChars(*(opts + i));
+
+                delete[] opts;
+
+                if (!ctx.Get())
+                {
+                    IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+                    
+                    failed = true;
+                }
+
+                // 5. Start Ignite.
+                if (!failed)
+                {
+                    char* springCfgPath0 = CopyChars(cfg.springCfgPath);
+
+                    if (!springCfgPath0)
+                        springCfgPath0 = CopyChars(DFLT_CFG);
+
+                    char* name0 = CopyChars(name);
+
+                    interop::InteropUnpooledMemory mem(16);
+                    interop::InteropOutputStream stream(&mem);
+                    stream.WriteBool(false);
+                    stream.Synchronize();
+
+                    javaRef = ctx.Get()->IgnitionStart(springCfgPath0, name0, 2, mem.PointerLong(), &jniErr);
+
+                    ReleaseChars(springCfgPath0);
+                    ReleaseChars(name0);
+
+                    if (!javaRef) {
+                        IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+                        
+                        failed = true;
+                    }
+                    else {
+                        // 6. Ignite is started at this point.
+                        env.Get()->Initialize(ctx);
+
+                        started = true;
+                    }
+                }
+            }
+            else {
+                *err = IgniteError(IgniteError::IGNITE_ERR_JVM_NO_CLASSPATH,
+                    "Java classpath is empty (did you set IGNITE_HOME environment variable?)");
+
+                failed = true;
+            }
+        }
+
+        factoryLock.Leave();
+
+        if (failed) 
+        {
+            if (envTarget)
+                delete envTarget;
+
+            return Ignite();
+        }
+        else 
+        {
+            IgniteImpl* impl = new IgniteImpl(env, javaRef);
+
+            return Ignite(impl);
+        }
+    }
+
+    Ignite Ignition::Get()
+    {
+        return Get(static_cast<const char*>(NULL));
+    }
+
+    Ignite Ignition::Get(IgniteError* err)
+    {
+        return Get(NULL, err);
+    }
+
+    Ignite Ignition::Get(const char* name)
+    {
+        IgniteError err;
+
+        Ignite res = Get(name, &err);
+
+        IgniteError::ThrowIfNeeded(err);
+
+        return res;
+    }
+
+    Ignite Ignition::Get(const char* name, IgniteError* err)
+    {
+        Ignite res;
+
+        factoryLock.Enter();
+
+        if (started)
+        {
+            char* name0 = CopyChars(name);
+
+            // 1. Create context for this operation.
+            JniErrorInfo jniErr;
+
+            SharedPointer<JniContext> ctx(JniContext::Create(NULL, 0, JniHandlers(), &jniErr));
+
+            IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+
+            if (err->GetCode() == IgniteError::IGNITE_SUCCESS)
+            {
+                // 2. Get environment pointer.
+                long long ptr = ctx.Get()->IgnitionEnvironmentPointer(name0, &jniErr);
+
+                IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+
+                if (err->GetCode() == IgniteError::IGNITE_SUCCESS)
+                {
+                    if (ptr != 0)
+                    {
+                        // 3. Obtain real environment for this instance.
+                        JniHandlers* hnds = reinterpret_cast<JniHandlers*>(ptr);
+
+                        SharedPointer<IgniteEnvironment>* env =
+                            static_cast<SharedPointer<IgniteEnvironment>*>(hnds->target);
+
+                        // 4. Get fresh node reference.
+                        jobject ref = ctx.Get()->IgnitionInstance(name0, &jniErr);
+
+                        if (err->GetCode() == IgniteError::IGNITE_SUCCESS) {
+                            if (ref)
+                            {
+                                IgniteImpl* impl = new IgniteImpl(*env, ref);
+
+                                res = Ignite(impl);
+                            }
+                            else
+                                // Error: concurrent node stop.
+                                *err = IgniteError(IgniteError::IGNITE_ERR_GENERIC,
+                                    "Failed to get Ignite instance because it was stopped concurrently.");
+
+                        }
+                    }
+                    else
+                        // Error: no node with the given name.
+                        *err = IgniteError(IgniteError::IGNITE_ERR_GENERIC,
+                            "Failed to get Ignite instance because it is either not started yet or already stopped.");
+                }
+            }
+
+            ReleaseChars(name0);
+        }
+        else
+            // Error: no node with the given name.
+            *err = IgniteError(IgniteError::IGNITE_ERR_GENERIC,
+                "Failed to get Ignite instance because it is either not started yet or already stopped.");
+
+        factoryLock.Leave();
+
+        return res;
+    }
+
+    bool Ignition::Stop(const bool cancel)
+    {
+        return Stop(NULL, cancel);
+    }
+
+    bool Ignition::Stop(const bool cancel, IgniteError* err)
+    {
+        return Stop(NULL, cancel, err);
+    }
+
+    bool Ignition::Stop(const char* name, const bool cancel)
+    {
+        IgniteError err;
+
+        bool res = Stop(name, cancel, &err);
+
+        IgniteError::ThrowIfNeeded(err);
+
+        return res;
+    }
+
+    bool Ignition::Stop(const char* name, const bool cancel, IgniteError* err)
+    {
+        bool res = false;
+
+        factoryLock.Enter();
+
+        if (started)
+        {
+            JniErrorInfo jniErr;
+
+            SharedPointer<JniContext> ctx(JniContext::Create(NULL, 0, JniHandlers(), &jniErr));
+
+            IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+
+            if (err->GetCode() == IgniteError::IGNITE_SUCCESS)
+            {
+                char* name0 = CopyChars(name);
+
+                bool res0 = ctx.Get()->IgnitionStop(name0, cancel, &jniErr);
+
+                ReleaseChars(name0);
+
+                IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+
+                if (err->GetCode() == IgniteError::IGNITE_SUCCESS)
+                    res = res0;
+            }
+        }
+
+        factoryLock.Leave();
+
+        return res;
+    }
+
+    void Ignition::StopAll(const bool cancel)
+    {
+        IgniteError err;
+
+        StopAll(cancel, &err);
+
+        IgniteError::ThrowIfNeeded(err);
+    }
+
+    void Ignition::StopAll(const bool cancel, IgniteError* err)
+    {
+        factoryLock.Enter();
+
+        if (started)
+        {
+            JniErrorInfo jniErr;
+
+            SharedPointer<JniContext> ctx(JniContext::Create(NULL, 0, JniHandlers(), &jniErr));
+             
+            IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+
+            if (err->GetCode() == IgniteError::IGNITE_SUCCESS)
+            {
+                ctx.Get()->IgnitionStopAll(cancel, &jniErr);
+
+                IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+            }
+        }
+
+        factoryLock.Leave();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/58a665aa/modules/platform/src/main/cpp/core/src/impl/cache/cache_impl.cpp
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/cpp/core/src/impl/cache/cache_impl.cpp b/modules/platform/src/main/cpp/core/src/impl/cache/cache_impl.cpp
new file mode 100644
index 0000000..2f211e7
--- /dev/null
+++ b/modules/platform/src/main/cpp/core/src/impl/cache/cache_impl.cpp
@@ -0,0 +1,388 @@
+/*
+ * 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/cache/cache_peek_mode.h"
+#include "ignite/impl/cache/cache_impl.h"
+#include "ignite/impl/interop/interop.h"
+#include "ignite/impl/portable/portable_reader_impl.h"
+#include "ignite/impl/utils.h"
+#include "ignite/impl/portable/portable_metadata_updater_impl.h"
+#include "ignite/portable/portable.h"
+
+using namespace ignite::common::concurrent;
+using namespace ignite::common::java;
+using namespace ignite::cache;
+using namespace ignite::cache::query;
+using namespace ignite::impl;
+using namespace ignite::impl::cache::query;
+using namespace ignite::impl::interop;
+using namespace ignite::impl::portable;
+using namespace ignite::impl::utils;
+using namespace ignite::portable;
+
+namespace ignite
+{
+    namespace impl
+    {
+        namespace cache
+        {
+            /** Operation: Clear. */
+            const int32_t OP_CLEAR = 1;
+
+            /** Operation: ClearAll. */
+            const int32_t OP_CLEAR_ALL = 2;
+
+            /** Operation: ContainsKey. */
+            const int32_t OP_CONTAINS_KEY = 3;
+
+            /** Operation: ContainsKeys. */
+            const int32_t OP_CONTAINS_KEYS = 4;
+
+            /** Operation: Get. */
+            const int32_t OP_GET = 5;
+
+            /** Operation: GetAll. */
+            const int32_t OP_GET_ALL = 6;
+
+            /** Operation: GetAndPut. */
+            const int32_t OP_GET_AND_PUT = 7;
+
+            /** Operation: GetAndPutIfAbsent. */
+            const int32_t OP_GET_AND_PUT_IF_ABSENT = 8;
+
+            /** Operation: GetAndRemove. */
+            const int32_t OP_GET_AND_REMOVE = 9;
+
+            /** Operation: GetAndReplace. */
+            const int32_t OP_GET_AND_REPLACE = 10;
+
+            /** Operation: LocalEvict. */
+            const int32_t OP_LOCAL_EVICT = 16;
+
+            /** Operation: LocalClear. */
+            const int32_t OP_LOCAL_CLEAR = 20;
+
+            /** Operation: LocalClearAll. */
+            const int32_t OP_LOCAL_CLEAR_ALL = 21;
+
+            /** Operation: LocalPeek. */
+            const int32_t OP_LOCAL_PEEK = 25;
+
+            /** Operation: Put. */
+            const int32_t OP_PUT = 26;
+
+            /** Operation: PutAll. */
+            const int32_t OP_PUT_ALL = 27;
+
+            /** Operation: PutIfAbsent. */
+            const int32_t OP_PUT_IF_ABSENT = 28;
+
+            /** Operation: SCAN query. */
+            const int32_t OP_QRY_SCAN = 30;
+
+            /** Operation: SQL query. */
+            const int32_t OP_QRY_SQL = 31;
+
+            /** Operation: SQL fields query. */
+            const int32_t OP_QRY_SQL_FIELDS = 32;
+
+            /** Operation: TEXT query. */
+            const int32_t OP_QRY_TEXT = 33;
+
+            /** Operation: RemoveAll. */
+            const int32_t OP_REMOVE_ALL = 34;
+
+            /** Operation: Remove(K, V). */
+            const int32_t OP_REMOVE_2 = 35;
+
+            /** Operation: Remove(K). */
+            const int32_t OP_REMOVE_1 = 36;
+
+            /** Operation: Replace(K, V). */
+            const int32_t OP_REPLACE_2 = 37;
+
+            /** Operation: Replace(K, V, V). */
+            const int32_t OP_REPLACE_3 = 38;
+
+            CacheImpl::CacheImpl(char* name, SharedPointer<IgniteEnvironment> env, jobject javaRef) :
+                name(name), env(env), javaRef(javaRef)
+            {
+                // No-op.
+            }
+
+            CacheImpl::~CacheImpl()
+            {
+                ReleaseChars(name);
+
+                JniContext::Release(javaRef);
+            }
+
+            char* CacheImpl::GetName()
+            {
+                return name;
+            }
+
+            bool CacheImpl::IsEmpty(IgniteError* err)
+            {
+                return Size(IGNITE_PEEK_MODE_ALL, err) == 0;
+            }
+
+            bool CacheImpl::ContainsKey(InputOperation& inOp, IgniteError* err)
+            {
+                return OutOpInternal(OP_CONTAINS_KEY, inOp, err);
+            }
+
+            bool CacheImpl::ContainsKeys(InputOperation& inOp, IgniteError* err)
+            {
+                return OutOpInternal(OP_CONTAINS_KEYS, inOp, err);
+            }
+
+            void CacheImpl::LocalPeek(InputOperation& inOp, OutputOperation& outOp, int32_t peekModes, IgniteError* err)
+            {
+                OutInOpInternal(OP_LOCAL_PEEK, inOp, outOp, err);
+            }
+
+            void CacheImpl::Get(InputOperation& inOp, OutputOperation& outOp, IgniteError* err)
+            {
+                OutInOpInternal(OP_GET, inOp, outOp, err);
+            }
+
+            void CacheImpl::GetAll(InputOperation& inOp, OutputOperation& outOp, IgniteError* err)
+            {
+                OutInOpInternal(OP_GET_ALL, inOp, outOp, err);
+            }
+
+            void CacheImpl::Put(InputOperation& inOp, IgniteError* err)
+            {
+                OutOpInternal(OP_PUT, inOp, err);
+            }
+
+            void CacheImpl::PutAll(ignite::impl::InputOperation& inOp, IgniteError* err)
+            {
+                OutOpInternal(OP_PUT_ALL, inOp, err);
+            }
+
+            void CacheImpl::GetAndPut(InputOperation& inOp, OutputOperation& outOp, IgniteError* err)
+            {
+                OutInOpInternal(OP_GET_AND_PUT, inOp, outOp, err);
+            }
+
+            void CacheImpl::GetAndReplace(InputOperation& inOp, OutputOperation& outOp, IgniteError* err)
+            {
+                OutInOpInternal(OP_GET_AND_REPLACE, inOp, outOp, err);
+            }
+
+            void CacheImpl::GetAndRemove(InputOperation& inOp, OutputOperation& outOp, IgniteError* err)
+            {
+                OutInOpInternal(OP_GET_AND_REMOVE, inOp, outOp, err);
+            }
+
+            bool CacheImpl::PutIfAbsent(InputOperation& inOp, IgniteError* err)
+            {
+                return OutOpInternal(OP_PUT_IF_ABSENT, inOp, err);
+            }
+
+            void CacheImpl::GetAndPutIfAbsent(InputOperation& inOp, OutputOperation& outOp, IgniteError* err)
+            {
+                OutInOpInternal(OP_GET_AND_PUT_IF_ABSENT, inOp, outOp, err);
+            }
+
+            bool CacheImpl::Replace(InputOperation& inOp, IgniteError* err)
+            {
+                return OutOpInternal(OP_REPLACE_2, inOp, err);
+            }
+
+            bool CacheImpl::ReplaceIfEqual(InputOperation& inOp, IgniteError* err)
+            {
+                return OutOpInternal(OP_REPLACE_3, inOp, err);
+            }
+
+            void CacheImpl::LocalEvict(InputOperation& inOp, IgniteError* err)
+            {
+                OutOpInternal(OP_LOCAL_EVICT, inOp, err);
+            }
+
+            void CacheImpl::Clear(IgniteError* err)
+            {
+                JniErrorInfo jniErr;
+
+                env.Get()->Context()->CacheClear(javaRef, &jniErr);
+
+                IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+            }
+
+            void CacheImpl::Clear(InputOperation& inOp, IgniteError* err)
+            {
+                OutOpInternal(OP_CLEAR, inOp, err);
+            }
+
+            void CacheImpl::ClearAll(InputOperation& inOp, IgniteError* err)
+            {
+                OutOpInternal(OP_CLEAR_ALL, inOp, err);
+            }
+
+            void CacheImpl::LocalClear(InputOperation& inOp, IgniteError* err)
+            {
+                OutOpInternal(OP_LOCAL_CLEAR, inOp, err);
+            }
+
+            void CacheImpl::LocalClearAll(InputOperation& inOp, IgniteError* err)
+            {
+                OutOpInternal(OP_LOCAL_CLEAR_ALL, inOp, err);
+            }
+
+            bool CacheImpl::Remove(InputOperation& inOp, IgniteError* err)
+            {
+                return OutOpInternal(OP_REMOVE_1, inOp, err);
+            }
+
+            bool CacheImpl::RemoveIfEqual(InputOperation& inOp, IgniteError* err)
+            {
+                return OutOpInternal(OP_REMOVE_2, inOp, err);
+            }
+
+            void CacheImpl::RemoveAll(InputOperation& inOp, IgniteError* err)
+            {
+                OutOpInternal(OP_REMOVE_ALL, inOp, err);
+            }
+
+            void CacheImpl::RemoveAll(IgniteError* err)
+            {
+                JniErrorInfo jniErr;
+
+                env.Get()->Context()->CacheRemoveAll(javaRef, &jniErr);
+
+                IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+            }
+
+            int32_t CacheImpl::Size(const int32_t peekModes, IgniteError* err)
+            {
+                return SizeInternal(peekModes, false, err);
+            }
+
+            int32_t CacheImpl::LocalSize(const int32_t peekModes, IgniteError* err)
+            {
+                return SizeInternal(peekModes, true, err);
+            }
+
+            QueryCursorImpl* CacheImpl::QuerySql(const SqlQuery& qry, IgniteError* err)
+            {
+                return QueryInternal(qry, OP_QRY_SQL, err);
+            }
+
+            QueryCursorImpl* CacheImpl::QueryText(const TextQuery& qry, IgniteError* err)
+            {
+                return QueryInternal(qry, OP_QRY_TEXT, err);
+            }
+
+            QueryCursorImpl* CacheImpl::QueryScan(const ScanQuery& qry, IgniteError* err)
+            {
+                return QueryInternal(qry, OP_QRY_SCAN, err);
+            }
+
+            int64_t CacheImpl::WriteTo(InteropMemory* mem, InputOperation& inOp, IgniteError* err)
+            {
+                PortableMetadataManager* metaMgr = env.Get()->GetMetadataManager();
+
+                int32_t metaVer = metaMgr->GetVersion();
+
+                InteropOutputStream out(mem);
+                PortableWriterImpl writer(&out, metaMgr);
+                
+                inOp.ProcessInput(writer);
+
+                out.Synchronize();
+
+                if (metaMgr->IsUpdatedSince(metaVer))
+                {
+                    PortableMetadataUpdaterImpl metaUpdater(env, javaRef);
+
+                    if (!metaMgr->ProcessPendingUpdates(&metaUpdater, err))
+                        return 0;
+                }
+
+                return mem->PointerLong();
+            }
+
+            void CacheImpl::ReadFrom(InteropMemory* mem, OutputOperation& outOp)
+            {
+                InteropInputStream in(mem);
+
+                PortableReaderImpl reader(&in);
+
+                outOp.ProcessOutput(reader);
+            }
+
+            int CacheImpl::SizeInternal(const int32_t peekModes, const bool loc, IgniteError* err)
+            {
+                JniErrorInfo jniErr;
+
+                int res = env.Get()->Context()->CacheSize(javaRef, peekModes, loc, &jniErr);
+
+                IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+
+                if (jniErr.code == IGNITE_JNI_ERR_SUCCESS)
+                    return res;
+                else
+                    return -1;
+            }
+
+            bool CacheImpl::OutOpInternal(const int32_t opType, InputOperation& inOp, IgniteError* err)
+            {
+                JniErrorInfo jniErr;
+
+                SharedPointer<InteropMemory> mem = env.Get()->AllocateMemory();
+
+                int64_t outPtr = WriteTo(mem.Get(), inOp, err);
+
+                if (outPtr)
+                {
+                    long long res = env.Get()->Context()->TargetInStreamOutLong(javaRef, opType, outPtr, &jniErr);
+
+                    IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+
+                    if (jniErr.code == IGNITE_JNI_ERR_SUCCESS)
+                        return res == 1;
+                }
+
+                return false;
+            }
+
+            void CacheImpl::OutInOpInternal(const int32_t opType, InputOperation& inOp, OutputOperation& outOp, 
+                IgniteError* err)
+            {
+                JniErrorInfo jniErr;
+
+                SharedPointer<InteropMemory> outMem = env.Get()->AllocateMemory();
+                SharedPointer<InteropMemory> inMem = env.Get()->AllocateMemory();
+
+                int64_t outPtr = WriteTo(outMem.Get(), inOp, err);
+
+                if (outPtr)
+                {
+                    env.Get()->Context()->TargetInStreamOutStream(javaRef, opType, WriteTo(outMem.Get(), inOp, err), 
+                        inMem.Get()->PointerLong(), &jniErr);
+
+                    IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+
+                    if (jniErr.code == IGNITE_JNI_ERR_SUCCESS)
+                        ReadFrom(inMem.Get(), outOp);
+                }
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/58a665aa/modules/platform/src/main/cpp/core/src/impl/cache/query/query_impl.cpp
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/cpp/core/src/impl/cache/query/query_impl.cpp b/modules/platform/src/main/cpp/core/src/impl/cache/query/query_impl.cpp
new file mode 100644
index 0000000..7d89321
--- /dev/null
+++ b/modules/platform/src/main/cpp/core/src/impl/cache/query/query_impl.cpp
@@ -0,0 +1,193 @@
+/*
+ * 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/impl/cache/query/query_impl.h"
+
+using namespace ignite::common::concurrent;
+using namespace ignite::common::java;
+using namespace ignite::impl::interop;
+using namespace ignite::impl::portable;
+
+namespace ignite
+{
+    namespace impl
+    {
+        namespace cache
+        {
+            namespace query
+            {
+                /** Operation: get all entries. */
+                const int32_t OP_GET_ALL = 1;
+
+                /** Operation: get single entry. */
+                const int32_t OP_GET_SINGLE = 3;
+
+                QueryCursorImpl::QueryCursorImpl(SharedPointer<IgniteEnvironment> env, jobject javaRef) :
+                    env(env), javaRef(javaRef), iterCalled(false), getAllCalled(false), hasNext(false)
+                {
+                    // No-op.
+                }
+
+                QueryCursorImpl::~QueryCursorImpl()
+                {
+                    // 1. Close the cursor.
+                    env.Get()->Context()->QueryCursorClose(javaRef);
+
+                    // 2. Release Java reference.
+                    JniContext::Release(javaRef);
+                }
+
+                bool QueryCursorImpl::HasNext(IgniteError* err)
+                {
+                    // Check whether GetAll() was called earlier.
+                    if (getAllCalled) 
+                    {
+                        *err = IgniteError(IgniteError::IGNITE_ERR_GENERIC, 
+                            "Cannot use HasNext() method because GetAll() was called.");
+
+                        return false;
+                    }
+
+                    // Create iterator in Java if needed.
+                    if (!CreateIteratorIfNeeded(err))
+                        return false;
+                    
+                    return hasNext;
+                }
+
+                void QueryCursorImpl::GetNext(OutputOperation& op, IgniteError* err)
+                {
+                    // Check whether GetAll() was called earlier.
+                    if (getAllCalled) 
+                    {
+                        *err = IgniteError(IgniteError::IGNITE_ERR_GENERIC, 
+                            "Cannot use GetNext() method because GetAll() was called.");
+
+                        return;
+                    }
+
+                    // Create iterator in Java if needed.
+                    if (!CreateIteratorIfNeeded(err))
+                        return;
+
+                    if (hasNext)
+                    {
+                        JniErrorInfo jniErr;
+
+                        SharedPointer<InteropMemory> inMem = env.Get()->AllocateMemory();
+
+                        env.Get()->Context()->TargetOutStream(javaRef, OP_GET_SINGLE, inMem.Get()->PointerLong(), &jniErr);
+
+                        IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+
+                        if (jniErr.code == IGNITE_JNI_ERR_SUCCESS)
+                        {
+                            InteropInputStream in(inMem.Get());
+
+                            portable::PortableReaderImpl reader(&in);
+
+                            op.ProcessOutput(reader);
+
+                            hasNext = IteratorHasNext(err);
+                        }
+                    }
+                    else
+                    {
+                        // Ensure we do not overwrite possible previous error.
+                        if (err->GetCode() == IgniteError::IGNITE_SUCCESS)
+                            *err = IgniteError(IgniteError::IGNITE_ERR_GENERIC, "No more elements available.");
+                    }
+                }
+
+                void QueryCursorImpl::GetAll(OutputOperation& op, IgniteError* err)
+                {
+                    // Check whether any of iterator methods were called.
+                    if (iterCalled)
+                    {
+                        *err = IgniteError(IgniteError::IGNITE_ERR_GENERIC,
+                            "Cannot use GetAll() method because an iteration method was called.");
+
+                        return;
+                    }
+
+                    // Check whether GetAll was called before.
+                    if (getAllCalled)
+                    {
+                        *err = IgniteError(IgniteError::IGNITE_ERR_GENERIC,
+                            "Cannot use GetNext() method because GetAll() was called.");
+
+                        return;
+                    }
+
+                    // Get data.
+                    JniErrorInfo jniErr;
+
+                    SharedPointer<InteropMemory> inMem = env.Get()->AllocateMemory();
+
+                    env.Get()->Context()->TargetOutStream(javaRef, OP_GET_ALL, inMem.Get()->PointerLong(), &jniErr);
+
+                    IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+
+                    if (jniErr.code == IGNITE_JNI_ERR_SUCCESS)
+                    {
+                        getAllCalled = true;
+
+                        InteropInputStream in(inMem.Get());
+
+                        portable::PortableReaderImpl reader(&in);
+
+                        op.ProcessOutput(reader);
+                    }
+                }
+
+                bool QueryCursorImpl::CreateIteratorIfNeeded(IgniteError* err)
+                {
+                    if (!iterCalled)
+                    {
+                        JniErrorInfo jniErr;
+
+                        env.Get()->Context()->QueryCursorIterator(javaRef, &jniErr);
+
+                        IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+
+                        if (jniErr.code == IGNITE_JNI_ERR_SUCCESS)
+                        {
+                            iterCalled = true;
+
+                            hasNext = IteratorHasNext(err);
+                        }
+                        else
+                            return false;
+                    }
+                    
+                    return true;
+                }
+
+                bool QueryCursorImpl::IteratorHasNext(IgniteError* err)
+                {
+                    JniErrorInfo jniErr;
+
+                    bool res = env.Get()->Context()->QueryCursorIteratorHasNext(javaRef, &jniErr);
+
+                    IgniteError::SetError(jniErr.code, jniErr.errCls, jniErr.errMsg, err);
+
+                    return jniErr.code == IGNITE_JNI_ERR_SUCCESS && res;
+                }
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/58a665aa/modules/platform/src/main/cpp/core/src/impl/handle_registry.cpp
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/cpp/core/src/impl/handle_registry.cpp b/modules/platform/src/main/cpp/core/src/impl/handle_registry.cpp
new file mode 100644
index 0000000..c447faa
--- /dev/null
+++ b/modules/platform/src/main/cpp/core/src/impl/handle_registry.cpp
@@ -0,0 +1,234 @@
+/*
+ * 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/impl/handle_registry.h"
+
+using namespace ignite::common::concurrent;
+
+namespace ignite
+{
+    namespace impl
+    {
+        HandleRegistryEntry::~HandleRegistryEntry()
+        {
+            // No-op.
+        }
+
+        HandleRegistrySegment::HandleRegistrySegment() : 
+            map(new std::map<int64_t, SharedPointer<HandleRegistryEntry>>()), mux(new CriticalSection())
+        {
+            // No-op.
+        }
+
+        HandleRegistrySegment::~HandleRegistrySegment()
+        {
+            delete map;
+            delete mux;
+        }
+
+        SharedPointer<HandleRegistryEntry> HandleRegistrySegment::Get(int64_t hnd)
+        {
+            mux->Enter();
+
+            SharedPointer<HandleRegistryEntry> res = (*map)[hnd];
+
+            mux->Leave();
+
+            return res;
+        }
+
+        void HandleRegistrySegment::Put(int64_t hnd, const SharedPointer<HandleRegistryEntry>& entry)
+        {
+            mux->Enter();
+
+            (*map)[hnd] = entry;
+
+            mux->Leave();
+        }
+
+        void HandleRegistrySegment::Remove(int64_t hnd)
+        {
+            mux->Enter();
+
+            map->erase(hnd);
+
+            mux->Leave();
+        }
+
+        void HandleRegistrySegment::Clear()
+        {
+            mux->Enter();
+
+            map->erase(map->begin(), map->end());
+
+            mux->Leave();
+        }
+
+        HandleRegistry::HandleRegistry(int32_t fastCap, int32_t slowSegmentCnt)
+        {
+            this->fastCap = fastCap;
+
+            fastCtr = 0;
+
+            fast = new SharedPointer<HandleRegistryEntry>[fastCap];
+
+            for (int i = 0; i < fastCap; i++)
+                fast[i] = SharedPointer<HandleRegistryEntry>();
+
+            this->slowSegmentCnt = slowSegmentCnt;
+
+            slowCtr = fastCap;
+
+            slow = new HandleRegistrySegment*[slowSegmentCnt];
+
+            for (int i = 0; i < slowSegmentCnt; i++)
+                slow[i] = new HandleRegistrySegment();
+
+            closed = 0;
+
+            Memory::Fence();
+        }
+
+        HandleRegistry::~HandleRegistry()
+        {
+            Close();
+
+            delete[] fast;
+
+            for (int i = 0; i < slowSegmentCnt; i++)
+                delete slow[i];
+
+            delete[] slow;
+        }
+
+        int64_t HandleRegistry::Allocate(const SharedPointer<HandleRegistryEntry>& target)
+        {
+            return Allocate0(target, false, false);
+        }
+
+        int64_t HandleRegistry::AllocateCritical(const SharedPointer<HandleRegistryEntry>& target)
+        {
+            return Allocate0(target, true, false);
+        }
+
+        int64_t HandleRegistry::AllocateSafe(const SharedPointer<HandleRegistryEntry>& target)
+        {
+            return Allocate0(target, false, true);
+        }
+
+        int64_t HandleRegistry::AllocateCriticalSafe(const SharedPointer<HandleRegistryEntry>& target)
+        {
+            return Allocate0(target, true, true);
+        }
+
+        void HandleRegistry::Release(int64_t hnd)
+        {
+            if (hnd < fastCap)
+                fast[static_cast<int32_t>(hnd)] = SharedPointer<HandleRegistryEntry>();
+            else
+            {
+                HandleRegistrySegment* segment = *(slow + hnd % slowSegmentCnt);
+
+                segment->Remove(hnd);
+            }
+
+            Memory::Fence();
+        }
+
+        SharedPointer<HandleRegistryEntry> HandleRegistry::Get(int64_t hnd)
+        {
+            Memory::Fence();
+
+            if (hnd < fastCap)
+                return fast[static_cast<int32_t>(hnd)];
+            else
+            {
+                HandleRegistrySegment* segment = *(slow + hnd % slowSegmentCnt);
+
+                return segment->Get(hnd);
+            }
+        }
+
+        void HandleRegistry::Close()
+        {
+            if (Atomics::CompareAndSet32(&closed, 0, 1))
+            {
+                // Cleanup fast-path handles.
+                for (int i = 0; i < fastCap; i++)
+                    fast[i] = SharedPointer<HandleRegistryEntry>();
+
+                // Cleanup slow-path handles.
+                for (int i = 0; i < slowSegmentCnt; i++)
+                    (*(slow + i))->Clear();
+            }
+        }
+
+        int64_t HandleRegistry::Allocate0(const SharedPointer<HandleRegistryEntry>& target, bool critical, bool safe)
+        {
+            // Check closed state.
+            Memory::Fence();
+
+            if (closed == 1)
+                return -1;
+
+            // Try allocating entry on critical path.
+            if (critical)
+            {
+                if (fastCtr < fastCap)
+                {
+                    int32_t fastIdx = Atomics::IncrementAndGet32(&fastCtr) - 1;
+
+                    if (fastIdx < fastCap)
+                    {
+                        fast[fastIdx] = target;
+
+                        // Double-check for closed state if safe mode is on.
+                        Memory::Fence();
+
+                        if (safe && closed == 1)
+                        {
+                            fast[fastIdx] = SharedPointer<HandleRegistryEntry>();
+
+                            return -1;
+                        }
+                        else
+                            return fastIdx;
+                    }
+                }
+            }
+
+            // Either allocating on slow-path, or fast-path can no longer accomodate more entries.
+            int64_t slowIdx = Atomics::IncrementAndGet64(&slowCtr) - 1;
+
+            HandleRegistrySegment* segment = *(slow + slowIdx % slowSegmentCnt);
+
+            segment->Put(slowIdx, target);
+
+            // Double-check for closed state if safe mode is on.
+            Memory::Fence();
+
+            if (safe && closed == 1)
+            {
+                segment->Remove(slowIdx);
+
+                return -1;
+            }
+
+            return slowIdx;
+        }
+    }
+}
\ No newline at end of file


Mime
View raw message