Fix Bloom filters

pull/1/head
unknown 4 years ago
parent 5dbc1c0b7d
commit 9af918a9b6

@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>netcoreapp3.1</TargetFramework>
<Platforms>AnyCPU;x64</Platforms> <Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>netcoreapp3.1</TargetFramework>
<Platforms>AnyCPU;x64</Platforms> <Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

@ -57,6 +57,26 @@
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit> <Prefer32Bit>true</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />

@ -57,6 +57,26 @@
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit> <Prefer32Bit>true</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />

@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
<Platforms>AnyCPU;x64</Platforms> <Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

@ -55,6 +55,26 @@
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit> <Prefer32Bit>true</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />

@ -55,6 +55,26 @@
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit> <Prefer32Bit>true</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />

@ -55,6 +55,26 @@
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit> <Prefer32Bit>true</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />

@ -55,6 +55,26 @@
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit> <Prefer32Bit>true</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />

@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>netcoreapp3.1</TargetFramework>
<Platforms>AnyCPU;x64</Platforms> <Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<Platforms>AnyCPU;x64</Platforms> <Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>netcoreapp3.1</TargetFramework>
<Platforms>AnyCPU;x64</Platforms> <Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<Platforms>AnyCPU;x64</Platforms> <Platforms>AnyCPU;x64;x86</Platforms>
<Description>Light wrapper over ado.net</Description> <Description>Light wrapper over ado.net</Description>
<Authors>ogoun</Authors> <Authors>ogoun</Authors>
<Copyright>Copyright Ogoun 2020</Copyright> <Copyright>Copyright Ogoun 2020</Copyright>

@ -11,11 +11,12 @@ Based on System.Data.SQLite.Core</Description>
<RepositoryUrl>https://github.com/ogoun/Zero</RepositoryUrl> <RepositoryUrl>https://github.com/ogoun/Zero</RepositoryUrl>
<PackageIcon>zero.png</PackageIcon> <PackageIcon>zero.png</PackageIcon>
<PackageIconUrl /> <PackageIconUrl />
<Platforms>AnyCPU;x64</Platforms> <Platforms>AnyCPU;x64;x86</Platforms>
<PackageReleaseNotes>Fix bug</PackageReleaseNotes> <PackageReleaseNotes>Fix bug</PackageReleaseNotes>
<AssemblyVersion>1.0.2.1</AssemblyVersion> <AssemblyVersion>1.0.2.1</AssemblyVersion>
<FileVersion>1.0.2.1</FileVersion> <FileVersion>1.0.2.1</FileVersion>
<Version>1.0.2.1</Version> <Version>1.0.2.1</Version>
<OutputType>Library</OutputType>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

@ -30,7 +30,7 @@ namespace ZeroLevel.UnitTests
lines.Add(RandomString(i % 9 + 5)); lines.Add(RandomString(i % 9 + 5));
lines_another.Add(RandomString(i % 9 + 5)); lines_another.Add(RandomString(i % 9 + 5));
} }
var bloom = new BloomFilter(16536 * 1024, true); var bloom = new BloomFilter(16536 * 2048);
// Act // Act
var sw = new Stopwatch(); var sw = new Stopwatch();
sw.Start(); sw.Start();
@ -75,7 +75,7 @@ namespace ZeroLevel.UnitTests
lines.Add(RandomString(i % 9 + 5)); lines.Add(RandomString(i % 9 + 5));
lines_another.Add(RandomString(i % 9 + 5)); lines_another.Add(RandomString(i % 9 + 5));
} }
var bloom = new HyperBloomBloom(64, 16536 * 1024, true); var bloom = new HyperBloomBloom(16, 16536 * 4096);
// Act // Act
var sw = new Stopwatch(); var sw = new Stopwatch();
sw.Start(); sw.Start();

@ -5,7 +5,7 @@
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<Platforms>AnyCPU;x64</Platforms> <Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

@ -69,208 +69,208 @@ Global
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Debug|Any CPU.Build.0 = Debug|Any CPU {06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Debug|Any CPU.Build.0 = Debug|Any CPU
{06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Debug|x64.ActiveCfg = Debug|Any CPU {06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Debug|x64.ActiveCfg = Debug|x64
{06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Debug|x64.Build.0 = Debug|Any CPU {06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Debug|x64.Build.0 = Debug|x64
{06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Debug|x86.ActiveCfg = Debug|Any CPU {06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Debug|x86.ActiveCfg = Debug|x86
{06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Debug|x86.Build.0 = Debug|Any CPU {06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Debug|x86.Build.0 = Debug|x86
{06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Release|Any CPU.ActiveCfg = Release|Any CPU {06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Release|Any CPU.ActiveCfg = Release|Any CPU
{06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Release|Any CPU.Build.0 = Release|Any CPU {06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Release|Any CPU.Build.0 = Release|Any CPU
{06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Release|x64.ActiveCfg = Release|x64 {06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Release|x64.ActiveCfg = Release|x64
{06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Release|x64.Build.0 = Release|x64 {06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Release|x64.Build.0 = Release|x64
{06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Release|x86.ActiveCfg = Release|Any CPU {06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Release|x86.ActiveCfg = Release|x86
{06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Release|x86.Build.0 = Release|Any CPU {06C9E60E-D449-41A7-9BF0-A829AAF5D214}.Release|x86.Build.0 = Release|x86
{E5595DE0-B177-4078-AD10-8D3135014838}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E5595DE0-B177-4078-AD10-8D3135014838}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E5595DE0-B177-4078-AD10-8D3135014838}.Debug|Any CPU.Build.0 = Debug|Any CPU {E5595DE0-B177-4078-AD10-8D3135014838}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E5595DE0-B177-4078-AD10-8D3135014838}.Debug|x64.ActiveCfg = Debug|Any CPU {E5595DE0-B177-4078-AD10-8D3135014838}.Debug|x64.ActiveCfg = Debug|x64
{E5595DE0-B177-4078-AD10-8D3135014838}.Debug|x64.Build.0 = Debug|Any CPU {E5595DE0-B177-4078-AD10-8D3135014838}.Debug|x64.Build.0 = Debug|x64
{E5595DE0-B177-4078-AD10-8D3135014838}.Debug|x86.ActiveCfg = Debug|Any CPU {E5595DE0-B177-4078-AD10-8D3135014838}.Debug|x86.ActiveCfg = Debug|x86
{E5595DE0-B177-4078-AD10-8D3135014838}.Debug|x86.Build.0 = Debug|Any CPU {E5595DE0-B177-4078-AD10-8D3135014838}.Debug|x86.Build.0 = Debug|x86
{E5595DE0-B177-4078-AD10-8D3135014838}.Release|Any CPU.ActiveCfg = Release|Any CPU {E5595DE0-B177-4078-AD10-8D3135014838}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E5595DE0-B177-4078-AD10-8D3135014838}.Release|Any CPU.Build.0 = Release|Any CPU {E5595DE0-B177-4078-AD10-8D3135014838}.Release|Any CPU.Build.0 = Release|Any CPU
{E5595DE0-B177-4078-AD10-8D3135014838}.Release|x64.ActiveCfg = Release|x64 {E5595DE0-B177-4078-AD10-8D3135014838}.Release|x64.ActiveCfg = Release|x64
{E5595DE0-B177-4078-AD10-8D3135014838}.Release|x64.Build.0 = Release|x64 {E5595DE0-B177-4078-AD10-8D3135014838}.Release|x64.Build.0 = Release|x64
{E5595DE0-B177-4078-AD10-8D3135014838}.Release|x86.ActiveCfg = Release|Any CPU {E5595DE0-B177-4078-AD10-8D3135014838}.Release|x86.ActiveCfg = Release|x86
{E5595DE0-B177-4078-AD10-8D3135014838}.Release|x86.Build.0 = Release|Any CPU {E5595DE0-B177-4078-AD10-8D3135014838}.Release|x86.Build.0 = Release|x86
{674561F2-A3E2-40E6-8E5B-AD94276AD856}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {674561F2-A3E2-40E6-8E5B-AD94276AD856}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{674561F2-A3E2-40E6-8E5B-AD94276AD856}.Debug|Any CPU.Build.0 = Debug|Any CPU {674561F2-A3E2-40E6-8E5B-AD94276AD856}.Debug|Any CPU.Build.0 = Debug|Any CPU
{674561F2-A3E2-40E6-8E5B-AD94276AD856}.Debug|x64.ActiveCfg = Debug|Any CPU {674561F2-A3E2-40E6-8E5B-AD94276AD856}.Debug|x64.ActiveCfg = Debug|x64
{674561F2-A3E2-40E6-8E5B-AD94276AD856}.Debug|x64.Build.0 = Debug|Any CPU {674561F2-A3E2-40E6-8E5B-AD94276AD856}.Debug|x64.Build.0 = Debug|x64
{674561F2-A3E2-40E6-8E5B-AD94276AD856}.Debug|x86.ActiveCfg = Debug|Any CPU {674561F2-A3E2-40E6-8E5B-AD94276AD856}.Debug|x86.ActiveCfg = Debug|x86
{674561F2-A3E2-40E6-8E5B-AD94276AD856}.Debug|x86.Build.0 = Debug|Any CPU {674561F2-A3E2-40E6-8E5B-AD94276AD856}.Debug|x86.Build.0 = Debug|x86
{674561F2-A3E2-40E6-8E5B-AD94276AD856}.Release|Any CPU.ActiveCfg = Release|Any CPU {674561F2-A3E2-40E6-8E5B-AD94276AD856}.Release|Any CPU.ActiveCfg = Release|Any CPU
{674561F2-A3E2-40E6-8E5B-AD94276AD856}.Release|Any CPU.Build.0 = Release|Any CPU {674561F2-A3E2-40E6-8E5B-AD94276AD856}.Release|Any CPU.Build.0 = Release|Any CPU
{674561F2-A3E2-40E6-8E5B-AD94276AD856}.Release|x64.ActiveCfg = Release|x64 {674561F2-A3E2-40E6-8E5B-AD94276AD856}.Release|x64.ActiveCfg = Release|x64
{674561F2-A3E2-40E6-8E5B-AD94276AD856}.Release|x64.Build.0 = Release|x64 {674561F2-A3E2-40E6-8E5B-AD94276AD856}.Release|x64.Build.0 = Release|x64
{674561F2-A3E2-40E6-8E5B-AD94276AD856}.Release|x86.ActiveCfg = Release|Any CPU {674561F2-A3E2-40E6-8E5B-AD94276AD856}.Release|x86.ActiveCfg = Release|x86
{674561F2-A3E2-40E6-8E5B-AD94276AD856}.Release|x86.Build.0 = Release|Any CPU {674561F2-A3E2-40E6-8E5B-AD94276AD856}.Release|x86.Build.0 = Release|x86
{5CE51CC9-7884-4E21-9D68-2321CA14312E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5CE51CC9-7884-4E21-9D68-2321CA14312E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5CE51CC9-7884-4E21-9D68-2321CA14312E}.Debug|Any CPU.Build.0 = Debug|Any CPU {5CE51CC9-7884-4E21-9D68-2321CA14312E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5CE51CC9-7884-4E21-9D68-2321CA14312E}.Debug|x64.ActiveCfg = Debug|Any CPU {5CE51CC9-7884-4E21-9D68-2321CA14312E}.Debug|x64.ActiveCfg = Debug|x64
{5CE51CC9-7884-4E21-9D68-2321CA14312E}.Debug|x64.Build.0 = Debug|Any CPU {5CE51CC9-7884-4E21-9D68-2321CA14312E}.Debug|x64.Build.0 = Debug|x64
{5CE51CC9-7884-4E21-9D68-2321CA14312E}.Debug|x86.ActiveCfg = Debug|Any CPU {5CE51CC9-7884-4E21-9D68-2321CA14312E}.Debug|x86.ActiveCfg = Debug|x86
{5CE51CC9-7884-4E21-9D68-2321CA14312E}.Debug|x86.Build.0 = Debug|Any CPU {5CE51CC9-7884-4E21-9D68-2321CA14312E}.Debug|x86.Build.0 = Debug|x86
{5CE51CC9-7884-4E21-9D68-2321CA14312E}.Release|Any CPU.ActiveCfg = Release|Any CPU {5CE51CC9-7884-4E21-9D68-2321CA14312E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5CE51CC9-7884-4E21-9D68-2321CA14312E}.Release|Any CPU.Build.0 = Release|Any CPU {5CE51CC9-7884-4E21-9D68-2321CA14312E}.Release|Any CPU.Build.0 = Release|Any CPU
{5CE51CC9-7884-4E21-9D68-2321CA14312E}.Release|x64.ActiveCfg = Release|x64 {5CE51CC9-7884-4E21-9D68-2321CA14312E}.Release|x64.ActiveCfg = Release|x64
{5CE51CC9-7884-4E21-9D68-2321CA14312E}.Release|x64.Build.0 = Release|x64 {5CE51CC9-7884-4E21-9D68-2321CA14312E}.Release|x64.Build.0 = Release|x64
{5CE51CC9-7884-4E21-9D68-2321CA14312E}.Release|x86.ActiveCfg = Release|Any CPU {5CE51CC9-7884-4E21-9D68-2321CA14312E}.Release|x86.ActiveCfg = Release|x86
{5CE51CC9-7884-4E21-9D68-2321CA14312E}.Release|x86.Build.0 = Release|Any CPU {5CE51CC9-7884-4E21-9D68-2321CA14312E}.Release|x86.Build.0 = Release|x86
{6E04F32A-FB90-41D2-9059-F37311F813B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E04F32A-FB90-41D2-9059-F37311F813B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6E04F32A-FB90-41D2-9059-F37311F813B3}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E04F32A-FB90-41D2-9059-F37311F813B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6E04F32A-FB90-41D2-9059-F37311F813B3}.Debug|x64.ActiveCfg = Debug|Any CPU {6E04F32A-FB90-41D2-9059-F37311F813B3}.Debug|x64.ActiveCfg = Debug|x64
{6E04F32A-FB90-41D2-9059-F37311F813B3}.Debug|x64.Build.0 = Debug|Any CPU {6E04F32A-FB90-41D2-9059-F37311F813B3}.Debug|x64.Build.0 = Debug|x64
{6E04F32A-FB90-41D2-9059-F37311F813B3}.Debug|x86.ActiveCfg = Debug|Any CPU {6E04F32A-FB90-41D2-9059-F37311F813B3}.Debug|x86.ActiveCfg = Debug|x86
{6E04F32A-FB90-41D2-9059-F37311F813B3}.Debug|x86.Build.0 = Debug|Any CPU {6E04F32A-FB90-41D2-9059-F37311F813B3}.Debug|x86.Build.0 = Debug|x86
{6E04F32A-FB90-41D2-9059-F37311F813B3}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E04F32A-FB90-41D2-9059-F37311F813B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6E04F32A-FB90-41D2-9059-F37311F813B3}.Release|Any CPU.Build.0 = Release|Any CPU {6E04F32A-FB90-41D2-9059-F37311F813B3}.Release|Any CPU.Build.0 = Release|Any CPU
{6E04F32A-FB90-41D2-9059-F37311F813B3}.Release|x64.ActiveCfg = Release|x64 {6E04F32A-FB90-41D2-9059-F37311F813B3}.Release|x64.ActiveCfg = Release|x64
{6E04F32A-FB90-41D2-9059-F37311F813B3}.Release|x64.Build.0 = Release|x64 {6E04F32A-FB90-41D2-9059-F37311F813B3}.Release|x64.Build.0 = Release|x64
{6E04F32A-FB90-41D2-9059-F37311F813B3}.Release|x86.ActiveCfg = Release|Any CPU {6E04F32A-FB90-41D2-9059-F37311F813B3}.Release|x86.ActiveCfg = Release|x86
{6E04F32A-FB90-41D2-9059-F37311F813B3}.Release|x86.Build.0 = Release|Any CPU {6E04F32A-FB90-41D2-9059-F37311F813B3}.Release|x86.Build.0 = Release|x86
{A1D60994-5744-47D1-B684-C1C0B782998B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A1D60994-5744-47D1-B684-C1C0B782998B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A1D60994-5744-47D1-B684-C1C0B782998B}.Debug|Any CPU.Build.0 = Debug|Any CPU {A1D60994-5744-47D1-B684-C1C0B782998B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1D60994-5744-47D1-B684-C1C0B782998B}.Debug|x64.ActiveCfg = Debug|Any CPU {A1D60994-5744-47D1-B684-C1C0B782998B}.Debug|x64.ActiveCfg = Debug|x64
{A1D60994-5744-47D1-B684-C1C0B782998B}.Debug|x64.Build.0 = Debug|Any CPU {A1D60994-5744-47D1-B684-C1C0B782998B}.Debug|x64.Build.0 = Debug|x64
{A1D60994-5744-47D1-B684-C1C0B782998B}.Debug|x86.ActiveCfg = Debug|Any CPU {A1D60994-5744-47D1-B684-C1C0B782998B}.Debug|x86.ActiveCfg = Debug|x86
{A1D60994-5744-47D1-B684-C1C0B782998B}.Debug|x86.Build.0 = Debug|Any CPU {A1D60994-5744-47D1-B684-C1C0B782998B}.Debug|x86.Build.0 = Debug|x86
{A1D60994-5744-47D1-B684-C1C0B782998B}.Release|Any CPU.ActiveCfg = Release|Any CPU {A1D60994-5744-47D1-B684-C1C0B782998B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1D60994-5744-47D1-B684-C1C0B782998B}.Release|Any CPU.Build.0 = Release|Any CPU {A1D60994-5744-47D1-B684-C1C0B782998B}.Release|Any CPU.Build.0 = Release|Any CPU
{A1D60994-5744-47D1-B684-C1C0B782998B}.Release|x64.ActiveCfg = Release|x64 {A1D60994-5744-47D1-B684-C1C0B782998B}.Release|x64.ActiveCfg = Release|x64
{A1D60994-5744-47D1-B684-C1C0B782998B}.Release|x64.Build.0 = Release|x64 {A1D60994-5744-47D1-B684-C1C0B782998B}.Release|x64.Build.0 = Release|x64
{A1D60994-5744-47D1-B684-C1C0B782998B}.Release|x86.ActiveCfg = Release|Any CPU {A1D60994-5744-47D1-B684-C1C0B782998B}.Release|x86.ActiveCfg = Release|x86
{A1D60994-5744-47D1-B684-C1C0B782998B}.Release|x86.Build.0 = Release|Any CPU {A1D60994-5744-47D1-B684-C1C0B782998B}.Release|x86.Build.0 = Release|x86
{806D0160-A4BF-4881-AF33-308F4FEF8E15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {806D0160-A4BF-4881-AF33-308F4FEF8E15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{806D0160-A4BF-4881-AF33-308F4FEF8E15}.Debug|Any CPU.Build.0 = Debug|Any CPU {806D0160-A4BF-4881-AF33-308F4FEF8E15}.Debug|Any CPU.Build.0 = Debug|Any CPU
{806D0160-A4BF-4881-AF33-308F4FEF8E15}.Debug|x64.ActiveCfg = Debug|Any CPU {806D0160-A4BF-4881-AF33-308F4FEF8E15}.Debug|x64.ActiveCfg = Debug|x64
{806D0160-A4BF-4881-AF33-308F4FEF8E15}.Debug|x64.Build.0 = Debug|Any CPU {806D0160-A4BF-4881-AF33-308F4FEF8E15}.Debug|x64.Build.0 = Debug|x64
{806D0160-A4BF-4881-AF33-308F4FEF8E15}.Debug|x86.ActiveCfg = Debug|Any CPU {806D0160-A4BF-4881-AF33-308F4FEF8E15}.Debug|x86.ActiveCfg = Debug|x86
{806D0160-A4BF-4881-AF33-308F4FEF8E15}.Debug|x86.Build.0 = Debug|Any CPU {806D0160-A4BF-4881-AF33-308F4FEF8E15}.Debug|x86.Build.0 = Debug|x86
{806D0160-A4BF-4881-AF33-308F4FEF8E15}.Release|Any CPU.ActiveCfg = Release|Any CPU {806D0160-A4BF-4881-AF33-308F4FEF8E15}.Release|Any CPU.ActiveCfg = Release|Any CPU
{806D0160-A4BF-4881-AF33-308F4FEF8E15}.Release|Any CPU.Build.0 = Release|Any CPU {806D0160-A4BF-4881-AF33-308F4FEF8E15}.Release|Any CPU.Build.0 = Release|Any CPU
{806D0160-A4BF-4881-AF33-308F4FEF8E15}.Release|x64.ActiveCfg = Release|x64 {806D0160-A4BF-4881-AF33-308F4FEF8E15}.Release|x64.ActiveCfg = Release|x64
{806D0160-A4BF-4881-AF33-308F4FEF8E15}.Release|x64.Build.0 = Release|x64 {806D0160-A4BF-4881-AF33-308F4FEF8E15}.Release|x64.Build.0 = Release|x64
{806D0160-A4BF-4881-AF33-308F4FEF8E15}.Release|x86.ActiveCfg = Release|Any CPU {806D0160-A4BF-4881-AF33-308F4FEF8E15}.Release|x86.ActiveCfg = Release|x86
{806D0160-A4BF-4881-AF33-308F4FEF8E15}.Release|x86.Build.0 = Release|Any CPU {806D0160-A4BF-4881-AF33-308F4FEF8E15}.Release|x86.Build.0 = Release|x86
{931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Debug|Any CPU.Build.0 = Debug|Any CPU {931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Debug|x64.ActiveCfg = Debug|Any CPU {931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Debug|x64.ActiveCfg = Debug|x64
{931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Debug|x64.Build.0 = Debug|Any CPU {931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Debug|x64.Build.0 = Debug|x64
{931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Debug|x86.ActiveCfg = Debug|Any CPU {931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Debug|x86.ActiveCfg = Debug|x86
{931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Debug|x86.Build.0 = Debug|Any CPU {931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Debug|x86.Build.0 = Debug|x86
{931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Release|Any CPU.ActiveCfg = Release|Any CPU {931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Release|Any CPU.Build.0 = Release|Any CPU {931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Release|Any CPU.Build.0 = Release|Any CPU
{931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Release|x64.ActiveCfg = Release|x64 {931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Release|x64.ActiveCfg = Release|x64
{931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Release|x64.Build.0 = Release|x64 {931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Release|x64.Build.0 = Release|x64
{931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Release|x86.ActiveCfg = Release|Any CPU {931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Release|x86.ActiveCfg = Release|x86
{931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Release|x86.Build.0 = Release|Any CPU {931DEA89-42D1-4C06-9CB8-A3A0412093D6}.Release|x86.Build.0 = Release|x86
{D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Debug|Any CPU.Build.0 = Debug|Any CPU {D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Debug|x64.ActiveCfg = Debug|Any CPU {D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Debug|x64.ActiveCfg = Debug|x64
{D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Debug|x64.Build.0 = Debug|Any CPU {D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Debug|x64.Build.0 = Debug|x64
{D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Debug|x86.ActiveCfg = Debug|Any CPU {D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Debug|x86.ActiveCfg = Debug|x86
{D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Debug|x86.Build.0 = Debug|Any CPU {D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Debug|x86.Build.0 = Debug|x86
{D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Release|Any CPU.ActiveCfg = Release|Any CPU {D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Release|Any CPU.Build.0 = Release|Any CPU {D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Release|Any CPU.Build.0 = Release|Any CPU
{D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Release|x64.ActiveCfg = Release|x64 {D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Release|x64.ActiveCfg = Release|x64
{D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Release|x64.Build.0 = Release|x64 {D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Release|x64.Build.0 = Release|x64
{D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Release|x86.ActiveCfg = Release|Any CPU {D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Release|x86.ActiveCfg = Release|x86
{D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Release|x86.Build.0 = Release|Any CPU {D25EC1F0-3BD2-409C-8A01-8C8339D5835C}.Release|x86.Build.0 = Release|x86
{EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Debug|Any CPU.Build.0 = Debug|Any CPU {EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Debug|x64.ActiveCfg = Debug|Any CPU {EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Debug|x64.ActiveCfg = Debug|x64
{EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Debug|x64.Build.0 = Debug|Any CPU {EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Debug|x64.Build.0 = Debug|x64
{EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Debug|x86.ActiveCfg = Debug|Any CPU {EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Debug|x86.ActiveCfg = Debug|x86
{EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Debug|x86.Build.0 = Debug|Any CPU {EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Debug|x86.Build.0 = Debug|x86
{EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Release|Any CPU.ActiveCfg = Release|Any CPU {EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Release|Any CPU.Build.0 = Release|Any CPU {EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Release|Any CPU.Build.0 = Release|Any CPU
{EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Release|x64.ActiveCfg = Release|x64 {EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Release|x64.ActiveCfg = Release|x64
{EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Release|x64.Build.0 = Release|x64 {EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Release|x64.Build.0 = Release|x64
{EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Release|x86.ActiveCfg = Release|Any CPU {EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Release|x86.ActiveCfg = Release|x86
{EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Release|x86.Build.0 = Release|Any CPU {EECF6EA0-6D9C-4B69-9CA3-23357C04B84C}.Release|x86.Build.0 = Release|x86
{D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|Any CPU.Build.0 = Debug|Any CPU {D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|x64.ActiveCfg = Debug|Any CPU {D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|x64.ActiveCfg = Debug|x64
{D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|x64.Build.0 = Debug|Any CPU {D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|x64.Build.0 = Debug|x64
{D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|x86.ActiveCfg = Debug|Any CPU {D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|x86.ActiveCfg = Debug|x86
{D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|x86.Build.0 = Debug|Any CPU {D1C061DB-3565-43C3-B8F3-628DE4908750}.Debug|x86.Build.0 = Debug|x86
{D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|Any CPU.ActiveCfg = Release|Any CPU {D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|Any CPU.Build.0 = Release|Any CPU {D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|Any CPU.Build.0 = Release|Any CPU
{D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|x64.ActiveCfg = Release|x64 {D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|x64.ActiveCfg = Release|x64
{D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|x64.Build.0 = Release|x64 {D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|x64.Build.0 = Release|x64
{D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|x86.ActiveCfg = Release|Any CPU {D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|x86.ActiveCfg = Release|x86
{D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|x86.Build.0 = Release|Any CPU {D1C061DB-3565-43C3-B8F3-628DE4908750}.Release|x86.Build.0 = Release|x86
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Debug|Any CPU.Build.0 = Debug|Any CPU {5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Debug|x64.ActiveCfg = Debug|Any CPU {5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Debug|x64.ActiveCfg = Debug|x64
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Debug|x64.Build.0 = Debug|Any CPU {5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Debug|x64.Build.0 = Debug|x64
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Debug|x86.ActiveCfg = Debug|Any CPU {5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Debug|x86.ActiveCfg = Debug|x86
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Debug|x86.Build.0 = Debug|Any CPU {5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Debug|x86.Build.0 = Debug|x86
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|Any CPU.ActiveCfg = Release|Any CPU {5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|Any CPU.Build.0 = Release|Any CPU {5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|Any CPU.Build.0 = Release|Any CPU
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|x64.ActiveCfg = Release|x64 {5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|x64.ActiveCfg = Release|x64
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|x64.Build.0 = Release|x64 {5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|x64.Build.0 = Release|x64
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|x86.ActiveCfg = Release|Any CPU {5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|x86.ActiveCfg = Release|x86
{5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|x86.Build.0 = Release|Any CPU {5B545DD6-8573-4CDD-B32D-9B0AA2AC2F9A}.Release|x86.Build.0 = Release|x86
{04219F58-4D3A-4707-82A8-4DDDC9882969}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {04219F58-4D3A-4707-82A8-4DDDC9882969}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{04219F58-4D3A-4707-82A8-4DDDC9882969}.Debug|Any CPU.Build.0 = Debug|Any CPU {04219F58-4D3A-4707-82A8-4DDDC9882969}.Debug|Any CPU.Build.0 = Debug|Any CPU
{04219F58-4D3A-4707-82A8-4DDDC9882969}.Debug|x64.ActiveCfg = Debug|Any CPU {04219F58-4D3A-4707-82A8-4DDDC9882969}.Debug|x64.ActiveCfg = Debug|x64
{04219F58-4D3A-4707-82A8-4DDDC9882969}.Debug|x64.Build.0 = Debug|Any CPU {04219F58-4D3A-4707-82A8-4DDDC9882969}.Debug|x64.Build.0 = Debug|x64
{04219F58-4D3A-4707-82A8-4DDDC9882969}.Debug|x86.ActiveCfg = Debug|Any CPU {04219F58-4D3A-4707-82A8-4DDDC9882969}.Debug|x86.ActiveCfg = Debug|x86
{04219F58-4D3A-4707-82A8-4DDDC9882969}.Debug|x86.Build.0 = Debug|Any CPU {04219F58-4D3A-4707-82A8-4DDDC9882969}.Debug|x86.Build.0 = Debug|x86
{04219F58-4D3A-4707-82A8-4DDDC9882969}.Release|Any CPU.ActiveCfg = Release|Any CPU {04219F58-4D3A-4707-82A8-4DDDC9882969}.Release|Any CPU.ActiveCfg = Release|Any CPU
{04219F58-4D3A-4707-82A8-4DDDC9882969}.Release|Any CPU.Build.0 = Release|Any CPU {04219F58-4D3A-4707-82A8-4DDDC9882969}.Release|Any CPU.Build.0 = Release|Any CPU
{04219F58-4D3A-4707-82A8-4DDDC9882969}.Release|x64.ActiveCfg = Release|x64 {04219F58-4D3A-4707-82A8-4DDDC9882969}.Release|x64.ActiveCfg = Release|x64
{04219F58-4D3A-4707-82A8-4DDDC9882969}.Release|x64.Build.0 = Release|x64 {04219F58-4D3A-4707-82A8-4DDDC9882969}.Release|x64.Build.0 = Release|x64
{04219F58-4D3A-4707-82A8-4DDDC9882969}.Release|x86.ActiveCfg = Release|Any CPU {04219F58-4D3A-4707-82A8-4DDDC9882969}.Release|x86.ActiveCfg = Release|x86
{04219F58-4D3A-4707-82A8-4DDDC9882969}.Release|x86.Build.0 = Release|Any CPU {04219F58-4D3A-4707-82A8-4DDDC9882969}.Release|x86.Build.0 = Release|x86
{F8B727E1-340D-4096-A784-E570AE13FABC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F8B727E1-340D-4096-A784-E570AE13FABC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F8B727E1-340D-4096-A784-E570AE13FABC}.Debug|Any CPU.Build.0 = Debug|Any CPU {F8B727E1-340D-4096-A784-E570AE13FABC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F8B727E1-340D-4096-A784-E570AE13FABC}.Debug|x64.ActiveCfg = Debug|x64 {F8B727E1-340D-4096-A784-E570AE13FABC}.Debug|x64.ActiveCfg = Debug|x64
{F8B727E1-340D-4096-A784-E570AE13FABC}.Debug|x64.Build.0 = Debug|x64 {F8B727E1-340D-4096-A784-E570AE13FABC}.Debug|x64.Build.0 = Debug|x64
{F8B727E1-340D-4096-A784-E570AE13FABC}.Debug|x86.ActiveCfg = Debug|Any CPU {F8B727E1-340D-4096-A784-E570AE13FABC}.Debug|x86.ActiveCfg = Debug|x86
{F8B727E1-340D-4096-A784-E570AE13FABC}.Debug|x86.Build.0 = Debug|Any CPU {F8B727E1-340D-4096-A784-E570AE13FABC}.Debug|x86.Build.0 = Debug|x86
{F8B727E1-340D-4096-A784-E570AE13FABC}.Release|Any CPU.ActiveCfg = Release|Any CPU {F8B727E1-340D-4096-A784-E570AE13FABC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F8B727E1-340D-4096-A784-E570AE13FABC}.Release|Any CPU.Build.0 = Release|Any CPU {F8B727E1-340D-4096-A784-E570AE13FABC}.Release|Any CPU.Build.0 = Release|Any CPU
{F8B727E1-340D-4096-A784-E570AE13FABC}.Release|x64.ActiveCfg = Release|x64 {F8B727E1-340D-4096-A784-E570AE13FABC}.Release|x64.ActiveCfg = Release|x64
{F8B727E1-340D-4096-A784-E570AE13FABC}.Release|x64.Build.0 = Release|x64 {F8B727E1-340D-4096-A784-E570AE13FABC}.Release|x64.Build.0 = Release|x64
{F8B727E1-340D-4096-A784-E570AE13FABC}.Release|x86.ActiveCfg = Release|Any CPU {F8B727E1-340D-4096-A784-E570AE13FABC}.Release|x86.ActiveCfg = Release|x86
{F8B727E1-340D-4096-A784-E570AE13FABC}.Release|x86.Build.0 = Release|Any CPU {F8B727E1-340D-4096-A784-E570AE13FABC}.Release|x86.Build.0 = Release|x86
{9BF859EE-EF90-4B5B-8576-E26770F2F792}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9BF859EE-EF90-4B5B-8576-E26770F2F792}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9BF859EE-EF90-4B5B-8576-E26770F2F792}.Debug|Any CPU.Build.0 = Debug|Any CPU {9BF859EE-EF90-4B5B-8576-E26770F2F792}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9BF859EE-EF90-4B5B-8576-E26770F2F792}.Debug|x64.ActiveCfg = Debug|x64 {9BF859EE-EF90-4B5B-8576-E26770F2F792}.Debug|x64.ActiveCfg = Debug|x64
{9BF859EE-EF90-4B5B-8576-E26770F2F792}.Debug|x64.Build.0 = Debug|x64 {9BF859EE-EF90-4B5B-8576-E26770F2F792}.Debug|x64.Build.0 = Debug|x64
{9BF859EE-EF90-4B5B-8576-E26770F2F792}.Debug|x86.ActiveCfg = Debug|Any CPU {9BF859EE-EF90-4B5B-8576-E26770F2F792}.Debug|x86.ActiveCfg = Debug|x86
{9BF859EE-EF90-4B5B-8576-E26770F2F792}.Debug|x86.Build.0 = Debug|Any CPU {9BF859EE-EF90-4B5B-8576-E26770F2F792}.Debug|x86.Build.0 = Debug|x86
{9BF859EE-EF90-4B5B-8576-E26770F2F792}.Release|Any CPU.ActiveCfg = Release|Any CPU {9BF859EE-EF90-4B5B-8576-E26770F2F792}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9BF859EE-EF90-4B5B-8576-E26770F2F792}.Release|Any CPU.Build.0 = Release|Any CPU {9BF859EE-EF90-4B5B-8576-E26770F2F792}.Release|Any CPU.Build.0 = Release|Any CPU
{9BF859EE-EF90-4B5B-8576-E26770F2F792}.Release|x64.ActiveCfg = Release|x64 {9BF859EE-EF90-4B5B-8576-E26770F2F792}.Release|x64.ActiveCfg = Release|x64
{9BF859EE-EF90-4B5B-8576-E26770F2F792}.Release|x64.Build.0 = Release|x64 {9BF859EE-EF90-4B5B-8576-E26770F2F792}.Release|x64.Build.0 = Release|x64
{9BF859EE-EF90-4B5B-8576-E26770F2F792}.Release|x86.ActiveCfg = Release|Any CPU {9BF859EE-EF90-4B5B-8576-E26770F2F792}.Release|x86.ActiveCfg = Release|x86
{9BF859EE-EF90-4B5B-8576-E26770F2F792}.Release|x86.Build.0 = Release|Any CPU {9BF859EE-EF90-4B5B-8576-E26770F2F792}.Release|x86.Build.0 = Release|x86
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Debug|Any CPU.Build.0 = Debug|Any CPU {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Debug|Any CPU.Build.0 = Debug|Any CPU
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Debug|x64.ActiveCfg = Debug|Any CPU {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Debug|x64.ActiveCfg = Debug|x64
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Debug|x64.Build.0 = Debug|Any CPU {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Debug|x64.Build.0 = Debug|x64
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Debug|x86.ActiveCfg = Debug|Any CPU {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Debug|x86.ActiveCfg = Debug|x86
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Debug|x86.Build.0 = Debug|Any CPU {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Debug|x86.Build.0 = Debug|x86
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|Any CPU.ActiveCfg = Release|Any CPU {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|Any CPU.ActiveCfg = Release|Any CPU
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|Any CPU.Build.0 = Release|Any CPU {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|Any CPU.Build.0 = Release|Any CPU
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x64.ActiveCfg = Release|x64 {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x64.ActiveCfg = Release|x64
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x64.Build.0 = Release|x64 {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x64.Build.0 = Release|x64
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x86.ActiveCfg = Release|Any CPU {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x86.ActiveCfg = Release|x86
{08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x86.Build.0 = Release|Any CPU {08CDD42E-E324-40A4-88C3-EDD0493AAF84}.Release|x86.Build.0 = Release|x86
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|Any CPU.Build.0 = Debug|Any CPU {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|x64.ActiveCfg = Debug|Any CPU {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|x64.ActiveCfg = Debug|x64
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|x64.Build.0 = Debug|Any CPU {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|x64.Build.0 = Debug|x64
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|x86.ActiveCfg = Debug|Any CPU {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|x86.ActiveCfg = Debug|x86
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|x86.Build.0 = Debug|Any CPU {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Debug|x86.Build.0 = Debug|x86
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|Any CPU.ActiveCfg = Release|Any CPU {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|Any CPU.Build.0 = Release|Any CPU {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|Any CPU.Build.0 = Release|Any CPU
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x64.ActiveCfg = Release|x64 {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x64.ActiveCfg = Release|x64
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x64.Build.0 = Release|x64 {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x64.Build.0 = Release|x64
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x86.ActiveCfg = Release|Any CPU {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x86.ActiveCfg = Release|x86
{3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x86.Build.0 = Release|Any CPU {3496A688-0749-48C2-BD60-ABB42A5C17C9}.Release|x86.Build.0 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

@ -1,45 +1,61 @@
using System; using System;
using System.Collections; using System.Collections;
using System.IO;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using ZeroLevel.Services.HashFunctions; using ZeroLevel.Services.HashFunctions;
namespace ZeroLevel.DataStructures namespace ZeroLevel.DataStructures
{ {
/// <summary>
/// Bloom filter implementation, 128 bit
/// </summary>
public class BloomFilter public class BloomFilter
{ {
#region Private #region Private
private struct HIND private struct HIND
{ {
public ulong PrimiryDirect; public int IndexFirst;
public uint SecondDirect; public int IndexSecond;
public ulong PrimiryReverse; public int IndexThird;
public uint SecondReverse; public int IndexReverse;
} }
private readonly BitArray _primary; private BitArray _primary;
private readonly BitArray _second; private BitArray _second;
private BitArray _third;
private readonly BitArray _r_primary; private BitArray _reverse;
private readonly BitArray _r_second;
private readonly bool _use_reverse = false;
#endregion #endregion
public BloomFilter(int bit_size, bool use_reverse) public BloomFilter(int bit_size)
{ {
_use_reverse = use_reverse; var diff = bit_size % 8;
if (diff != 0)
{
bit_size += diff;
}
_primary = new BitArray(bit_size); _primary = new BitArray(bit_size);
_second = new BitArray(bit_size); _second = new BitArray(bit_size);
_third = new BitArray(bit_size);
_reverse = new BitArray(bit_size);
}
if (_use_reverse) private HIND Compute(string line)
{
var r = Reverse(line);
var first = HashMM(line) ^ StringHash.DotNetFullHash(line);
var second = HashXX(line) ^ StringHash.DotNetFullHash(r);
var third = HashMM(r) ^ StringHash.CustomHash(line);
var reverse = HashXX(r) ^ StringHash.CustomHash2(r);
var hind = new HIND
{ {
_r_primary = new BitArray(bit_size); IndexFirst = (int)(first % _primary.Length),
_r_second = new BitArray(bit_size); IndexSecond = (int)(second % _second.Length),
} IndexThird = (int)(third % _third.Length),
IndexReverse = (int)(reverse % _reverse.Length)
};
return hind;
}
private BloomFilter()
{
} }
public void Add(string item) public void Add(string item)
@ -70,22 +86,6 @@ namespace ZeroLevel.DataStructures
return true; return true;
} }
private HIND Compute(string line)
{
var hind = new HIND
{
PrimiryDirect = HashMM(line),
SecondDirect = HashXX(line),
};
if(_use_reverse)
{
var r = Reverse(line);
hind.PrimiryReverse = HashMM(r);
hind.SecondReverse = HashXX(r);
}
return hind;
}
public static string Reverse(string s) public static string Reverse(string s)
{ {
char[] charArray = s.ToCharArray(); char[] charArray = s.ToCharArray();
@ -96,39 +96,20 @@ namespace ZeroLevel.DataStructures
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
private void Add(HIND hind) private void Add(HIND hind)
{ {
int pi = (int)(hind.PrimiryDirect % (ulong)_primary.Length); _primary[hind.IndexFirst] = true;
_primary[pi] = true; _second[hind.IndexSecond] = true;
_third[hind.IndexThird] = true;
int si = (int)(hind.SecondDirect % (uint)_second.Length); _reverse[hind.IndexReverse] = true;
_second[si] = true;
if (_use_reverse)
{
int rpi = (int)(hind.PrimiryReverse % (ulong)_primary.Length);
_r_primary[rpi] = true;
int rsi = (int)(hind.SecondReverse % (uint)_second.Length);
_r_second[rsi] = true;
}
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
private bool Contains(HIND hind) private bool Contains(HIND hind)
{ {
int pi = (int)(hind.PrimiryDirect % (ulong)_primary.Length); if (!_primary[hind.IndexFirst]) return false;
if (!_primary[pi]) return false; if (!_second[hind.IndexSecond]) return false;
if (!_third[hind.IndexThird]) return false;
if (!_reverse[hind.IndexReverse]) return false;
int si = (int)(hind.SecondDirect % (uint)_second.Length);
if (!_second[si]) return false;
if (_use_reverse)
{
int rpi = (int)(hind.PrimiryReverse % (ulong)_primary.Length);
if (!_r_primary[rpi]) return false;
int rsi = (int)(hind.SecondReverse % (uint)_second.Length);
if (!_r_second[rsi]) return false;
}
return true; return true;
} }
@ -145,5 +126,72 @@ namespace ZeroLevel.DataStructures
{ {
return _hash_mm_32.Hash(line); return _hash_mm_32.Hash(line);
} }
public bool IsEqual(BloomFilter other)
{
if (Equals(this._primary, other._primary) == false) return false;
if (Equals(this._second, other._second) == false) return false;
if (Equals(this._third, other._third) == false) return false;
if (Equals(this._reverse, other._reverse) == false) return false;
return true;
}
public bool Equals(BitArray first, BitArray second)
{
if (first.Length != second.Length)
{
return false;
}
for (int i = 0; i < first.Length; i++)
{
if (first[i] != second[i])
{
return false;
}
}
return true;
}
public byte[] Dump()
{
var add = new Action<MemoryStream, BitArray>((ms, arr) =>
{
int tc = arr.Length / 8;
ms.Write(BitConverter.GetBytes(tc), 0, 4);
byte[] t = new byte[tc];
arr.CopyTo(t, 0);
ms.Write(t, 0, tc);
});
using (var ms = new MemoryStream())
{
add(ms, _primary);
add(ms, _second);
add(ms, _third);
add(ms, _reverse);
return ms.ToArray();
}
}
public static BloomFilter Load(byte[] data)
{
var bf = new BloomFilter();
byte[] sizeArr = new byte[4];
var readArray = new Func<MemoryStream, BitArray>(stream =>
{
stream.Read(sizeArr, 0, 4);
int count = BitConverter.ToInt32(sizeArr, 0);
byte[] bfData = new byte[count];
stream.Read(bfData, 0, count);
return new BitArray(bfData);
});
using (var ms = new MemoryStream(data))
{
bf._primary = readArray(ms);
bf._second = readArray(ms);
bf._third = readArray(ms);
bf._reverse = readArray(ms);
}
return bf;
}
} }
} }

@ -1,32 +1,37 @@
using ZeroLevel.Services.HashFunctions; using System;
using System.IO;
using ZeroLevel.Services.HashFunctions;
namespace ZeroLevel.DataStructures namespace ZeroLevel.DataStructures
{ {
public class HyperBloomBloom public class HyperBloomBloom
{ {
private IHash _shardHash = new XXHashUnsafe();
private BloomFilter[] _shardes; private BloomFilter[] _shardes;
public HyperBloomBloom(int shardes_size, int bit_size, bool use_reverse) public HyperBloomBloom(int shardes_size, int bit_size)
{ {
_shardes = new BloomFilter[shardes_size]; _shardes = new BloomFilter[shardes_size];
for (int i = 0; i < shardes_size; i++) for (int i = 0; i < shardes_size; i++)
{ {
_shardes[i] = new BloomFilter(bit_size, use_reverse); _shardes[i] = new BloomFilter(bit_size);
} }
} }
private HyperBloomBloom()
{
}
public void Add(string item) public void Add(string item)
{ {
if (item == null || item.Length == 0) return; if (item == null || item.Length == 0) return;
int index = (int)(_shardHash.Hash(item) % _shardes.Length); var index = GetIndex(item);
_shardes[index].Add(item); _shardes[index].Add(item);
} }
public bool Contains(string item) public bool Contains(string item)
{ {
if (item == null || item.Length == 0) return true; if (item == null || item.Length == 0) return true;
int index = (int)(_shardHash.Hash(item) % _shardes.Length); var index = GetIndex(item);
return _shardes[index].Contains(item); return _shardes[index].Contains(item);
} }
/// <summary> /// <summary>
@ -35,8 +40,64 @@ namespace ZeroLevel.DataStructures
public bool TryAdd(string item) public bool TryAdd(string item)
{ {
if (item == null || item.Length == 0) return false; if (item == null || item.Length == 0) return false;
int index = (int)(_shardHash.Hash(item) % _shardes.Length); var index = GetIndex(item);
return _shardes[index].TryAdd(item); return _shardes[index].TryAdd(item);
} }
private uint GetIndex(string line)
{
var hash = StringHash.DotNetFullHash(line);
return (uint)(hash % _shardes.Length);
}
public byte[] Dump()
{
using (var stream = new MemoryStream())
{
stream.Write(BitConverter.GetBytes(_shardes.Length), 0, 4);
foreach (var shard in _shardes)
{
var arr = shard.Dump();
stream.Write(BitConverter.GetBytes(arr.Length), 0, 4);
stream.Write(arr, 0, arr.Length);
}
return stream.ToArray();
}
}
public static HyperBloomBloom Load(byte[] data)
{
var hbb = new HyperBloomBloom();
byte[] sizeArr = new byte[4];
using (var stream = new MemoryStream(data))
{
stream.Read(sizeArr, 0, 4);
var count = BitConverter.ToInt32(sizeArr, 0);
hbb._shardes = new BloomFilter[count];
for (int i = 0; i < count; i++)
{
stream.Read(sizeArr, 0, 4);
var length = BitConverter.ToInt32(sizeArr, 0);
var bloomData = new byte[length];
stream.Read(bloomData, 0, length);
hbb._shardes[i] = BloomFilter.Load(bloomData);
}
}
return hbb;
}
public bool IsEqual(HyperBloomBloom other)
{
if (this._shardes.Length == other._shardes.Length)
{
for (int i = 0; i < this._shardes.Length; i++)
{
if (false == this._shardes[i].IsEqual(other._shardes[i]))
return false;
}
return true;
}
return false;
}
} }
} }

@ -0,0 +1,54 @@
namespace ZeroLevel.Services.HashFunctions
{
/// <summary>
/// In .net core string.GetHashCode not deterministic more
/// https://andrewlock.net/why-is-string-gethashcode-different-each-time-i-run-my-program-in-net-core/#a-deterministic-gethashcode-implementation
/// </summary>
public static class StringHash
{
public static uint DotNetFullHash(string str)
{
unchecked
{
int hash1 = (5381 << 16) + 5381;
int hash2 = hash1;
for (int i = 0; i < str.Length; i += 2)
{
hash1 = ((hash1 << 5) + hash1) ^ str[i];
if (i == str.Length - 1)
break;
hash2 = ((hash2 << 5) + hash2) ^ str[i + 1];
}
return (uint)(hash1 + (hash2 * 1566083941)) & 0x7FFFFFFF;
}
}
const long seed = 57;
public static long CustomHash(string str)
{
long result = 1;
foreach (var ch in str)
{
result = (seed * result + (int)ch) & 0xFFFFFFFF;
}
return result & 0x7FFFFFFF;
}
public static int CustomHash2(string s)
{
int hash = 0;
for (int i = 0; i < s.Length; i++)
{
hash += s[i];
hash += (hash << 10);
hash ^= (hash >> 6);
}
hash += (hash << 3);
hash ^= (hash >> 11);
hash += (hash << 15);
return hash & 0x7FFFFFFF;
}
}
}

@ -83,6 +83,9 @@ namespace ZeroLevel.Services.PlainTextTables
internal TextTableColumn[] Columns { get { return _columns; } } internal TextTableColumn[] Columns { get { return _columns; } }
internal IEnumerable<TextTableRow> Rows { get { return _rows; } } internal IEnumerable<TextTableRow> Rows { get { return _rows; } }
public int RowsCount => _rows.Count;
public int ColumnsCount => _columns.Length;
#endregion Properties #endregion Properties
@ -124,6 +127,11 @@ namespace ZeroLevel.Services.PlainTextTables
_rows.Add(new TextTableRow(cells.Select((c, i) => new TextTableCell(_columns[i], c)).ToArray())); _rows.Add(new TextTableRow(cells.Select((c, i) => new TextTableCell(_columns[i], c)).ToArray()));
} }
/// <summary>
/// Remove all rows data.
/// </summary>
public void Clear() => _rows.Clear();
#endregion API #endregion API
} }
} }

@ -6,17 +6,17 @@
</Description> </Description>
<Authors>ogoun</Authors> <Authors>ogoun</Authors>
<Company>ogoun</Company> <Company>ogoun</Company>
<AssemblyVersion>3.3.4.8</AssemblyVersion> <AssemblyVersion>3.3.5.0</AssemblyVersion>
<PackageReleaseNotes>Added BigFileParser</PackageReleaseNotes> <PackageReleaseNotes>Fix Bloom and HyperBloomBloom filters</PackageReleaseNotes>
<PackageProjectUrl>https://github.com/ogoun/Zero/wiki</PackageProjectUrl> <PackageProjectUrl>https://github.com/ogoun/Zero/wiki</PackageProjectUrl>
<Copyright>Copyright Ogoun 2020</Copyright> <Copyright>Copyright Ogoun 2020</Copyright>
<PackageLicenseUrl></PackageLicenseUrl> <PackageLicenseUrl></PackageLicenseUrl>
<PackageIconUrl></PackageIconUrl> <PackageIconUrl></PackageIconUrl>
<RepositoryUrl>https://github.com/ogoun/Zero</RepositoryUrl> <RepositoryUrl>https://github.com/ogoun/Zero</RepositoryUrl>
<RepositoryType>GitHub</RepositoryType> <RepositoryType>GitHub</RepositoryType>
<Version>3.3.4.8</Version> <Version>3.3.5.0</Version>
<FileVersion>3.3.4.8</FileVersion> <FileVersion>3.3.5.0</FileVersion>
<Platforms>AnyCPU;x64</Platforms> <Platforms>AnyCPU;x64;x86</Platforms>
<PackageIcon>zero.png</PackageIcon> <PackageIcon>zero.png</PackageIcon>
</PropertyGroup> </PropertyGroup>
@ -24,6 +24,10 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>
@ -33,6 +37,15 @@
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<DebugType>none</DebugType> <DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols> <DebugSymbols>false</DebugSymbols>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<ErrorReport>prompt</ErrorReport>
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<configuration> <configuration>
<startup> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup> </startup>
</configuration> </configuration>

@ -12,7 +12,7 @@ namespace ZeroNetworkMonitor.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.5.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

@ -8,13 +8,15 @@
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<RootNamespace>ZeroNetworkMonitor</RootNamespace> <RootNamespace>ZeroNetworkMonitor</RootNamespace>
<AssemblyName>ZeroNetworkMonitor</AssemblyName> <AssemblyName>ZeroNetworkMonitor</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
<TargetFrameworkProfile /> <TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
@ -57,6 +59,26 @@
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit> <Prefer32Bit>true</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
@ -74,6 +96,9 @@
<Reference Include="WindowsBase" /> <Reference Include="WindowsBase" />
<Reference Include="PresentationCore" /> <Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" /> <Reference Include="PresentationFramework" />
<Reference Include="ZeroLevel, Version=3.3.4.9, Culture=neutral, processorArchitecture=x86">
<HintPath>..\packages\ZeroLevel.3.3.4.9\lib\netstandard2.0\ZeroLevel.dll</HintPath>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ApplicationDefinition Include="App.xaml"> <ApplicationDefinition Include="App.xaml">
@ -118,6 +143,7 @@
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput> <LastGenOutput>Settings.Designer.cs</LastGenOutput>
@ -126,11 +152,5 @@
<ItemGroup> <ItemGroup>
<None Include="App.config" /> <None Include="App.config" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ZeroLevel\ZeroLevel.csproj">
<Project>{06c9e60e-d449-41a7-9bf0-a829aaf5d214}</Project>
<Name>ZeroLevel</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ZeroLevel" version="3.3.4.9" targetFramework="net48" />
</packages>
Loading…
Cancel
Save

Powered by TurnKey Linux.