Compare commits
16
Commits
ls
...
development.sdk
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0c0d2ac911 | ||
|
|
c55d6447f4 | ||
|
|
48c2641069 | ||
|
|
303e4be09e | ||
|
|
45ff7fea95 | ||
|
|
6462a6a56c | ||
|
|
f842a0528f | ||
|
|
74c9023eac | ||
|
|
c7edd8403f | ||
|
|
0a8e066c86 | ||
|
|
2db4d23ca9 | ||
|
|
f876061236 | ||
|
|
40482d51e4 | ||
|
|
28e899fd10 | ||
|
|
2f7e75fec0 | ||
|
|
749fed15ad |
No files matched your search
@@ -17,6 +17,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Spark.Sdk", "src\cs\Bts
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Spark.Sdk.Demo", "src\cs\Bts.Spark.Sdk.Demo\Bts.Spark.Sdk.Demo.csproj", "{FCFDBDBE-74B0-41C4-9011-C651B21056D4}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Collections", "src\cs\Bts.Collections\Bts.Collections.csproj", "{3BF4DF96-5AFF-4674-866A-71A8090627FF}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Core", "src\cs\Bts.Core\Bts.Core.csproj", "{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Disposables", "src\cs\Bts.Disposables\Bts.Disposables.csproj", "{62067659-AA2E-4CB5-B7CE-0B38EAA92080}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Numerics", "src\cs\Bts.Numerics\Bts.Numerics.csproj", "{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -87,6 +95,54 @@ Global
|
||||
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Release|x64.Build.0 = Release|Any CPU
|
||||
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3BF4DF96-5AFF-4674-866A-71A8090627FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3BF4DF96-5AFF-4674-866A-71A8090627FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3BF4DF96-5AFF-4674-866A-71A8090627FF}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3BF4DF96-5AFF-4674-866A-71A8090627FF}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{3BF4DF96-5AFF-4674-866A-71A8090627FF}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3BF4DF96-5AFF-4674-866A-71A8090627FF}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3BF4DF96-5AFF-4674-866A-71A8090627FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3BF4DF96-5AFF-4674-866A-71A8090627FF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3BF4DF96-5AFF-4674-866A-71A8090627FF}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{3BF4DF96-5AFF-4674-866A-71A8090627FF}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3BF4DF96-5AFF-4674-866A-71A8090627FF}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3BF4DF96-5AFF-4674-866A-71A8090627FF}.Release|x86.Build.0 = Release|Any CPU
|
||||
{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{62067659-AA2E-4CB5-B7CE-0B38EAA92080}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{62067659-AA2E-4CB5-B7CE-0B38EAA92080}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{62067659-AA2E-4CB5-B7CE-0B38EAA92080}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{62067659-AA2E-4CB5-B7CE-0B38EAA92080}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{62067659-AA2E-4CB5-B7CE-0B38EAA92080}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{62067659-AA2E-4CB5-B7CE-0B38EAA92080}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{62067659-AA2E-4CB5-B7CE-0B38EAA92080}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{62067659-AA2E-4CB5-B7CE-0B38EAA92080}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{62067659-AA2E-4CB5-B7CE-0B38EAA92080}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{62067659-AA2E-4CB5-B7CE-0B38EAA92080}.Release|x64.Build.0 = Release|Any CPU
|
||||
{62067659-AA2E-4CB5-B7CE-0B38EAA92080}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{62067659-AA2E-4CB5-B7CE-0B38EAA92080}.Release|x86.Build.0 = Release|Any CPU
|
||||
{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -98,5 +154,9 @@ Global
|
||||
{37E4E890-D025-4729-90F9-6F95862F47BC} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
|
||||
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
|
||||
{FCFDBDBE-74B0-41C4-9011-C651B21056D4} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
|
||||
{3BF4DF96-5AFF-4674-866A-71A8090627FF} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
|
||||
{CD0A3EEF-303A-44EE-85F2-76F4CE632A3B} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
|
||||
{62067659-AA2E-4CB5-B7CE-0B38EAA92080} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
|
||||
{2FE1E5D0-168A-4D83-9B18-0D48250B4BFE} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -51,6 +51,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Net", "src\cs\Bts.Net\B
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.IO.Compression", "src\cs\Bts.IO.Compression\Bts.IO.Compression.csproj", "{BC277499-8215-4F9F-B9AB-07B6391110BF}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Collections", "src\cs\Bts.Collections\Bts.Collections.csproj", "{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Core", "src\cs\Bts.Core\Bts.Core.csproj", "{802ECF0B-7264-4168-95D1-158E47FB65CC}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Disposables", "src\cs\Bts.Disposables\Bts.Disposables.csproj", "{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Numerics", "src\cs\Bts.Numerics\Bts.Numerics.csproj", "{0354655D-2394-42BB-B1D4-2D75B9BCABF1}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
@@ -571,6 +579,102 @@ Global
|
||||
{BC277499-8215-4F9F-B9AB-07B6391110BF}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BC277499-8215-4F9F-B9AB-07B6391110BF}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
|
||||
{BC277499-8215-4F9F-B9AB-07B6391110BF}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.Release|x64.Build.0 = Release|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.Release|x64.Build.0 = Release|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.Release|x86.Build.0 = Release|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.Release|x64.Build.0 = Release|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.Release|x64.Build.0 = Release|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.Release|x86.Build.0 = Release|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -592,6 +696,10 @@ Global
|
||||
{385C4948-E080-56A6-E29E-8B0F4913175C} = {267F81EF-A8AB-49FD-9F56-D7EC3C1F7C7C}
|
||||
{43FB297B-7A4D-4835-A878-E6DF345B580C} = {385C4948-E080-56A6-E29E-8B0F4913175C}
|
||||
{BC277499-8215-4F9F-B9AB-07B6391110BF} = {385C4948-E080-56A6-E29E-8B0F4913175C}
|
||||
{C42F4CCB-9E65-4370-939A-527ACDBC4DA6} = {385C4948-E080-56A6-E29E-8B0F4913175C}
|
||||
{802ECF0B-7264-4168-95D1-158E47FB65CC} = {385C4948-E080-56A6-E29E-8B0F4913175C}
|
||||
{95C5F6C0-88E5-4338-9A4F-614CF6C03CC0} = {385C4948-E080-56A6-E29E-8B0F4913175C}
|
||||
{0354655D-2394-42BB-B1D4-2D75B9BCABF1} = {385C4948-E080-56A6-E29E-8B0F4913175C}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {422D1620-0166-4C26-9A81-CA8A2EB1AB58}
|
||||
|
||||
+387
-406
@@ -1,433 +1,414 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.3.32922.545
|
||||
MinimumVisualStudioVersion = 15.0.26124.0
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bts.Spark.Api", "src\cs\Bts.Spark.Api\Bts.Spark.Api.csproj", "{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spark", "src\client\spark\Spark.csproj", "{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spark.Console", "src\client\Spark.Console\Spark.Console.csproj", "{387566C6-C6F6-412C-A30C-9855BBCB4816}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bts.Spark.Core", "src\cs\Bts.Spark.Core\Bts.Spark.Core.csproj", "{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_sdk", "src\client\spark_sdk\spark_sdk.csproj", "{6963C314-83C4-4667-B0D0-C2F7AE208C29}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_test", "src\client\spark_test\spark_test.csproj", "{ECD78CC5-138F-4809-A764-2358C2AC2E82}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_websocket", "src\client\spark_websocket\spark_websocket.csproj", "{3201359D-C071-4089-9EDE-B04D759F1508}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_api_server", "src\client\spark_api_server\spark_api_server.csproj", "{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataStreamCore", "src\DataStreamSuite\DataStreamCore\DataStreamCore.csproj", "{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataStream", "src\DataStreamSuite\DataStream\DataStream.csproj", "{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharedStreams", "src\DataStreamSuite\SharedStreams\SharedStreams.csproj", "{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PubSub", "src\DataStreamSuite\PubSub\PubSub.csproj", "{51C40BA9-F226-4A35-939D-1ED6F5FF7299}"
|
||||
EndProject
|
||||
VisualStudioVersion = 17.0.31903.59
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cs", "cs", "{D7C6B9C7-1058-B1EA-FEE6-34C56B05AEDB}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Spark.Core", "src\cs\Bts.Spark.Core\Bts.Spark.Core.csproj", "{684863A1-3396-4D31-A731-C0725CF07F4E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Spark.Api", "src\cs\Bts.Spark.Api\Bts.Spark.Api.csproj", "{45292808-4EF3-4D4A-B3F5-B75C42EE5870}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Extensions.Hosting", "src\cs\Bts.Extensions.Hosting\Bts.Extensions.Hosting.csproj", "{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.IO.Compression", "src\cs\Bts.IO.Compression\Bts.IO.Compression.csproj", "{28A26DF7-5F7A-43A2-A548-B55FEBCC3958}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Net", "src\cs\Bts.Net\Bts.Net.csproj", "{7543386A-5EBA-4AF0-9E0F-35657B58557D}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataStreamSuite", "DataStreamSuite", "{60E0D592-FFB3-0D0A-C4AA-E88919B48F9D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Net", "src\cs\Bts.Net\Bts.Net.csproj", "{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PubSub", "src\DataStreamSuite\PubSub\PubSub.csproj", "{C13A5ABD-F739-4BE8-A2FE-511E989A5B43}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Extensions.Hosting", "src\cs\Bts.Extensions.Hosting\Bts.Extensions.Hosting.csproj", "{90A48718-F6A7-4747-97EA-89632B451008}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataStreamCore", "src\DataStreamSuite\DataStreamCore\DataStreamCore.csproj", "{F7C6F079-67BA-4899-9B43-D3F8C121D264}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cs", "cs", "{1A5B8C5D-BADC-457E-819F-0050C44FE4D3}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArithmeticExpressions", "src\DataStreamSuite\ArithmeticExpressions\ArithmeticExpressions.csproj", "{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.IO.Compression", "src\cs\Bts.IO.Compression\Bts.IO.Compression.csproj", "{2A0FBDE0-D870-4567-85BD-F7793A5862C6}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BaseUtilities", "src\DataStreamSuite\BaseUtilities\BaseUtilities.csproj", "{ECBAA198-EC93-4174-8156-BDA5F5E95042}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooleanExpressions", "src\DataStreamSuite\BooleanExpressions\BooleanExpressions.csproj", "{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.ColumnExpressions", "src\DataStreamSuite\Bts.ColumnExpressions\Bts.ColumnExpressions.csproj", "{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.ColumnSortExpressions", "src\DataStreamSuite\Bts.ColumnSortExpressions\Bts.ColumnSortExpressions.csproj", "{1E296FB3-D185-4A95-A1EB-AA5B37B85C60}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataStreamExpressions", "src\DataStreamSuite\DataStreamExpressions\DataStreamExpressions.csproj", "{B6070F41-8759-448B-B56D-A7D15D489569}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataStream", "src\DataStreamSuite\DataStream\DataStream.csproj", "{B2D721AB-920C-4CD6-8DBF-6778A115A449}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharedStreams", "src\DataStreamSuite\SharedStreams\SharedStreams.csproj", "{38EE36C6-892C-4C94-8BB0-1ACB164E1F20}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "client", "client", "{C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "spark", "spark", "{42C014A0-00C5-0620-8552-38912E891A7F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spark", "src\client\spark\Spark.csproj", "{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spark_test", "src\client\spark_test\spark_test.csproj", "{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spark.Console", "src\client\Spark.Console\Spark.Console.csproj", "{2B8243FF-60C6-4607-8AAE-7762D29B0A48}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Collections", "src\cs\Bts.Collections\Bts.Collections.csproj", "{00D21F82-61F4-467F-B125-268018A185E5}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Core", "src\cs\Bts.Core\Bts.Core.csproj", "{513A3F0D-46B5-4AC2-B700-8671933F6347}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Disposables", "src\cs\Bts.Disposables\Bts.Disposables.csproj", "{D419D996-9870-4FF5-82AD-08370D1C945F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Numerics", "src\cs\Bts.Numerics\Bts.Numerics.csproj", "{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
MinSizeRel|x64 = MinSizeRel|x64
|
||||
MinSizeRel|Any CPU = MinSizeRel|Any CPU
|
||||
MinSizeRel|x86 = MinSizeRel|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
RelWithDebInfo|x64 = RelWithDebInfo|x64
|
||||
RelWithDebInfo|Any CPU = RelWithDebInfo|Any CPU
|
||||
RelWithDebInfo|x86 = RelWithDebInfo|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|x64.Build.0 = Debug|x64
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x64.ActiveCfg = Release|x64
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x64.Build.0 = Release|x64
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|x64.ActiveCfg = Release|x64
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|x64.Build.0 = Release|x64
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|x86.Build.0 = Release|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x64.ActiveCfg = Release|x64
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|x64.Build.0 = Debug|x64
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|x64.ActiveCfg = Release|x64
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|x64.Build.0 = Release|x64
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|x64.ActiveCfg = Release|x64
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|x64.Build.0 = Release|x64
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|x64.ActiveCfg = Release|x64
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|x64.Build.0 = Debug|x64
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|x64.ActiveCfg = Debug|x64
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|x64.Build.0 = Debug|x64
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|x64.ActiveCfg = Release|x64
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|x64.Build.0 = Release|x64
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|x86.Build.0 = Release|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|x64.ActiveCfg = Release|x64
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|x64.Build.0 = Debug|x64
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x64.ActiveCfg = Release|x64
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x64.Build.0 = Release|x64
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|x64.ActiveCfg = Release|x64
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|x64.Build.0 = Release|x64
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x64.ActiveCfg = Release|x64
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x64.Build.0 = Debug|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x64.ActiveCfg = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x64.Build.0 = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x64.ActiveCfg = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x64.Build.0 = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x86.Build.0 = Release|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x64.ActiveCfg = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|x64.Build.0 = Debug|x64
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|x64.ActiveCfg = Debug|x64
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|x64.Build.0 = Debug|x64
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|x64.ActiveCfg = Release|x64
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|x64.Build.0 = Release|x64
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|x86.Build.0 = Release|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|x64.ActiveCfg = Release|x64
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|x64.Build.0 = Debug|x64
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|x64.ActiveCfg = Debug|x64
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|x64.Build.0 = Debug|x64
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|x64.ActiveCfg = Release|x64
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|x64.Build.0 = Release|x64
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|x64.ActiveCfg = Release|x64
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|x64.Build.0 = Debug|x64
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|x64.ActiveCfg = Debug|x64
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|x64.Build.0 = Debug|x64
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|x64.ActiveCfg = Release|x64
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|x64.Build.0 = Release|x64
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|x86.Build.0 = Release|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|x64.ActiveCfg = Release|x64
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Release|x64.Build.0 = Release|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Release|x86.Build.0 = Release|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Release|x64.Build.0 = Release|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Release|x86.Build.0 = Release|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Release|x64.Build.0 = Release|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Release|x86.Build.0 = Release|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
|
||||
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Release|x64.Build.0 = Release|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Release|x86.Build.0 = Release|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
|
||||
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.Release|x64.Build.0 = Release|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.Release|x86.Build.0 = Release|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
|
||||
{90A48718-F6A7-4747-97EA-89632B451008}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Release|x64.Build.0 = Release|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Release|x86.Build.0 = Release|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
|
||||
{684863A1-3396-4D31-A731-C0725CF07F4E}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{684863A1-3396-4D31-A731-C0725CF07F4E}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{684863A1-3396-4D31-A731-C0725CF07F4E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{684863A1-3396-4D31-A731-C0725CF07F4E}.Debug|x64.Build.0 = Debug|x64
|
||||
{684863A1-3396-4D31-A731-C0725CF07F4E}.Debug|x86.ActiveCfg = Debug|x64
|
||||
{684863A1-3396-4D31-A731-C0725CF07F4E}.Debug|x86.Build.0 = Debug|x64
|
||||
{684863A1-3396-4D31-A731-C0725CF07F4E}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{684863A1-3396-4D31-A731-C0725CF07F4E}.Release|Any CPU.Build.0 = Release|x64
|
||||
{684863A1-3396-4D31-A731-C0725CF07F4E}.Release|x64.ActiveCfg = Release|x64
|
||||
{684863A1-3396-4D31-A731-C0725CF07F4E}.Release|x64.Build.0 = Release|x64
|
||||
{684863A1-3396-4D31-A731-C0725CF07F4E}.Release|x86.ActiveCfg = Release|x64
|
||||
{684863A1-3396-4D31-A731-C0725CF07F4E}.Release|x86.Build.0 = Release|x64
|
||||
{45292808-4EF3-4D4A-B3F5-B75C42EE5870}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{45292808-4EF3-4D4A-B3F5-B75C42EE5870}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{45292808-4EF3-4D4A-B3F5-B75C42EE5870}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{45292808-4EF3-4D4A-B3F5-B75C42EE5870}.Debug|x64.Build.0 = Debug|x64
|
||||
{45292808-4EF3-4D4A-B3F5-B75C42EE5870}.Debug|x86.ActiveCfg = Debug|x64
|
||||
{45292808-4EF3-4D4A-B3F5-B75C42EE5870}.Debug|x86.Build.0 = Debug|x64
|
||||
{45292808-4EF3-4D4A-B3F5-B75C42EE5870}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{45292808-4EF3-4D4A-B3F5-B75C42EE5870}.Release|Any CPU.Build.0 = Release|x64
|
||||
{45292808-4EF3-4D4A-B3F5-B75C42EE5870}.Release|x64.ActiveCfg = Release|x64
|
||||
{45292808-4EF3-4D4A-B3F5-B75C42EE5870}.Release|x64.Build.0 = Release|x64
|
||||
{45292808-4EF3-4D4A-B3F5-B75C42EE5870}.Release|x86.ActiveCfg = Release|x64
|
||||
{45292808-4EF3-4D4A-B3F5-B75C42EE5870}.Release|x86.Build.0 = Release|x64
|
||||
{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6}.Release|x64.Build.0 = Release|Any CPU
|
||||
{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6}.Release|x86.Build.0 = Release|Any CPU
|
||||
{28A26DF7-5F7A-43A2-A548-B55FEBCC3958}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{28A26DF7-5F7A-43A2-A548-B55FEBCC3958}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{28A26DF7-5F7A-43A2-A548-B55FEBCC3958}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{28A26DF7-5F7A-43A2-A548-B55FEBCC3958}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{28A26DF7-5F7A-43A2-A548-B55FEBCC3958}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{28A26DF7-5F7A-43A2-A548-B55FEBCC3958}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{28A26DF7-5F7A-43A2-A548-B55FEBCC3958}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{28A26DF7-5F7A-43A2-A548-B55FEBCC3958}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{28A26DF7-5F7A-43A2-A548-B55FEBCC3958}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{28A26DF7-5F7A-43A2-A548-B55FEBCC3958}.Release|x64.Build.0 = Release|Any CPU
|
||||
{28A26DF7-5F7A-43A2-A548-B55FEBCC3958}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{28A26DF7-5F7A-43A2-A548-B55FEBCC3958}.Release|x86.Build.0 = Release|Any CPU
|
||||
{7543386A-5EBA-4AF0-9E0F-35657B58557D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7543386A-5EBA-4AF0-9E0F-35657B58557D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7543386A-5EBA-4AF0-9E0F-35657B58557D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{7543386A-5EBA-4AF0-9E0F-35657B58557D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{7543386A-5EBA-4AF0-9E0F-35657B58557D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{7543386A-5EBA-4AF0-9E0F-35657B58557D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{7543386A-5EBA-4AF0-9E0F-35657B58557D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7543386A-5EBA-4AF0-9E0F-35657B58557D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7543386A-5EBA-4AF0-9E0F-35657B58557D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{7543386A-5EBA-4AF0-9E0F-35657B58557D}.Release|x64.Build.0 = Release|Any CPU
|
||||
{7543386A-5EBA-4AF0-9E0F-35657B58557D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{7543386A-5EBA-4AF0-9E0F-35657B58557D}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C13A5ABD-F739-4BE8-A2FE-511E989A5B43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C13A5ABD-F739-4BE8-A2FE-511E989A5B43}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C13A5ABD-F739-4BE8-A2FE-511E989A5B43}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{C13A5ABD-F739-4BE8-A2FE-511E989A5B43}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{C13A5ABD-F739-4BE8-A2FE-511E989A5B43}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C13A5ABD-F739-4BE8-A2FE-511E989A5B43}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C13A5ABD-F739-4BE8-A2FE-511E989A5B43}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C13A5ABD-F739-4BE8-A2FE-511E989A5B43}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C13A5ABD-F739-4BE8-A2FE-511E989A5B43}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{C13A5ABD-F739-4BE8-A2FE-511E989A5B43}.Release|x64.Build.0 = Release|Any CPU
|
||||
{C13A5ABD-F739-4BE8-A2FE-511E989A5B43}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C13A5ABD-F739-4BE8-A2FE-511E989A5B43}.Release|x86.Build.0 = Release|Any CPU
|
||||
{F7C6F079-67BA-4899-9B43-D3F8C121D264}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F7C6F079-67BA-4899-9B43-D3F8C121D264}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F7C6F079-67BA-4899-9B43-D3F8C121D264}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F7C6F079-67BA-4899-9B43-D3F8C121D264}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{F7C6F079-67BA-4899-9B43-D3F8C121D264}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F7C6F079-67BA-4899-9B43-D3F8C121D264}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F7C6F079-67BA-4899-9B43-D3F8C121D264}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F7C6F079-67BA-4899-9B43-D3F8C121D264}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F7C6F079-67BA-4899-9B43-D3F8C121D264}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{F7C6F079-67BA-4899-9B43-D3F8C121D264}.Release|x64.Build.0 = Release|Any CPU
|
||||
{F7C6F079-67BA-4899-9B43-D3F8C121D264}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F7C6F079-67BA-4899-9B43-D3F8C121D264}.Release|x86.Build.0 = Release|Any CPU
|
||||
{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7}.Release|x64.Build.0 = Release|Any CPU
|
||||
{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7}.Release|x86.Build.0 = Release|Any CPU
|
||||
{ECBAA198-EC93-4174-8156-BDA5F5E95042}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{ECBAA198-EC93-4174-8156-BDA5F5E95042}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{ECBAA198-EC93-4174-8156-BDA5F5E95042}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{ECBAA198-EC93-4174-8156-BDA5F5E95042}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{ECBAA198-EC93-4174-8156-BDA5F5E95042}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{ECBAA198-EC93-4174-8156-BDA5F5E95042}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{ECBAA198-EC93-4174-8156-BDA5F5E95042}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{ECBAA198-EC93-4174-8156-BDA5F5E95042}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{ECBAA198-EC93-4174-8156-BDA5F5E95042}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{ECBAA198-EC93-4174-8156-BDA5F5E95042}.Release|x64.Build.0 = Release|Any CPU
|
||||
{ECBAA198-EC93-4174-8156-BDA5F5E95042}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{ECBAA198-EC93-4174-8156-BDA5F5E95042}.Release|x86.Build.0 = Release|Any CPU
|
||||
{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40}.Release|x64.Build.0 = Release|Any CPU
|
||||
{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40}.Release|x86.Build.0 = Release|Any CPU
|
||||
{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7}.Release|x64.Build.0 = Release|Any CPU
|
||||
{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1E296FB3-D185-4A95-A1EB-AA5B37B85C60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1E296FB3-D185-4A95-A1EB-AA5B37B85C60}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1E296FB3-D185-4A95-A1EB-AA5B37B85C60}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{1E296FB3-D185-4A95-A1EB-AA5B37B85C60}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{1E296FB3-D185-4A95-A1EB-AA5B37B85C60}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1E296FB3-D185-4A95-A1EB-AA5B37B85C60}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1E296FB3-D185-4A95-A1EB-AA5B37B85C60}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1E296FB3-D185-4A95-A1EB-AA5B37B85C60}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1E296FB3-D185-4A95-A1EB-AA5B37B85C60}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{1E296FB3-D185-4A95-A1EB-AA5B37B85C60}.Release|x64.Build.0 = Release|Any CPU
|
||||
{1E296FB3-D185-4A95-A1EB-AA5B37B85C60}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1E296FB3-D185-4A95-A1EB-AA5B37B85C60}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B6070F41-8759-448B-B56D-A7D15D489569}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B6070F41-8759-448B-B56D-A7D15D489569}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B6070F41-8759-448B-B56D-A7D15D489569}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B6070F41-8759-448B-B56D-A7D15D489569}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B6070F41-8759-448B-B56D-A7D15D489569}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B6070F41-8759-448B-B56D-A7D15D489569}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B6070F41-8759-448B-B56D-A7D15D489569}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B6070F41-8759-448B-B56D-A7D15D489569}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B6070F41-8759-448B-B56D-A7D15D489569}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B6070F41-8759-448B-B56D-A7D15D489569}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B6070F41-8759-448B-B56D-A7D15D489569}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B6070F41-8759-448B-B56D-A7D15D489569}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B2D721AB-920C-4CD6-8DBF-6778A115A449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B2D721AB-920C-4CD6-8DBF-6778A115A449}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B2D721AB-920C-4CD6-8DBF-6778A115A449}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B2D721AB-920C-4CD6-8DBF-6778A115A449}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B2D721AB-920C-4CD6-8DBF-6778A115A449}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B2D721AB-920C-4CD6-8DBF-6778A115A449}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B2D721AB-920C-4CD6-8DBF-6778A115A449}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B2D721AB-920C-4CD6-8DBF-6778A115A449}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B2D721AB-920C-4CD6-8DBF-6778A115A449}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B2D721AB-920C-4CD6-8DBF-6778A115A449}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B2D721AB-920C-4CD6-8DBF-6778A115A449}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B2D721AB-920C-4CD6-8DBF-6778A115A449}.Release|x86.Build.0 = Release|Any CPU
|
||||
{38EE36C6-892C-4C94-8BB0-1ACB164E1F20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{38EE36C6-892C-4C94-8BB0-1ACB164E1F20}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{38EE36C6-892C-4C94-8BB0-1ACB164E1F20}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{38EE36C6-892C-4C94-8BB0-1ACB164E1F20}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{38EE36C6-892C-4C94-8BB0-1ACB164E1F20}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{38EE36C6-892C-4C94-8BB0-1ACB164E1F20}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{38EE36C6-892C-4C94-8BB0-1ACB164E1F20}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{38EE36C6-892C-4C94-8BB0-1ACB164E1F20}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{38EE36C6-892C-4C94-8BB0-1ACB164E1F20}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{38EE36C6-892C-4C94-8BB0-1ACB164E1F20}.Release|x64.Build.0 = Release|Any CPU
|
||||
{38EE36C6-892C-4C94-8BB0-1ACB164E1F20}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{38EE36C6-892C-4C94-8BB0-1ACB164E1F20}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3}.Debug|x64.Build.0 = Debug|x64
|
||||
{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3}.Debug|x86.ActiveCfg = Debug|x64
|
||||
{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3}.Debug|x86.Build.0 = Debug|x64
|
||||
{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3}.Release|Any CPU.Build.0 = Release|x64
|
||||
{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3}.Release|x64.ActiveCfg = Release|x64
|
||||
{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3}.Release|x64.Build.0 = Release|x64
|
||||
{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3}.Release|x86.ActiveCfg = Release|x64
|
||||
{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3}.Release|x86.Build.0 = Release|x64
|
||||
{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224}.Debug|x64.Build.0 = Debug|x64
|
||||
{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224}.Debug|x86.ActiveCfg = Debug|x64
|
||||
{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224}.Debug|x86.Build.0 = Debug|x64
|
||||
{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224}.Release|Any CPU.Build.0 = Release|x64
|
||||
{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224}.Release|x64.ActiveCfg = Release|x64
|
||||
{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224}.Release|x64.Build.0 = Release|x64
|
||||
{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224}.Release|x86.ActiveCfg = Release|x64
|
||||
{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224}.Release|x86.Build.0 = Release|x64
|
||||
{2B8243FF-60C6-4607-8AAE-7762D29B0A48}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{2B8243FF-60C6-4607-8AAE-7762D29B0A48}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{2B8243FF-60C6-4607-8AAE-7762D29B0A48}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{2B8243FF-60C6-4607-8AAE-7762D29B0A48}.Debug|x64.Build.0 = Debug|x64
|
||||
{2B8243FF-60C6-4607-8AAE-7762D29B0A48}.Debug|x86.ActiveCfg = Debug|x64
|
||||
{2B8243FF-60C6-4607-8AAE-7762D29B0A48}.Debug|x86.Build.0 = Debug|x64
|
||||
{2B8243FF-60C6-4607-8AAE-7762D29B0A48}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{2B8243FF-60C6-4607-8AAE-7762D29B0A48}.Release|Any CPU.Build.0 = Release|x64
|
||||
{2B8243FF-60C6-4607-8AAE-7762D29B0A48}.Release|x64.ActiveCfg = Release|x64
|
||||
{2B8243FF-60C6-4607-8AAE-7762D29B0A48}.Release|x64.Build.0 = Release|x64
|
||||
{2B8243FF-60C6-4607-8AAE-7762D29B0A48}.Release|x86.ActiveCfg = Release|x64
|
||||
{2B8243FF-60C6-4607-8AAE-7762D29B0A48}.Release|x86.Build.0 = Release|x64
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.Release|x64.Build.0 = Release|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.Release|x86.Build.0 = Release|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
|
||||
{00D21F82-61F4-467F-B125-268018A185E5}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.Release|x64.Build.0 = Release|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.Release|x86.Build.0 = Release|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.Release|x64.Build.0 = Release|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.Release|x86.Build.0 = Release|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{D7C6B9C7-1058-B1EA-FEE6-34C56B05AEDB} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{684863A1-3396-4D31-A731-C0725CF07F4E} = {D7C6B9C7-1058-B1EA-FEE6-34C56B05AEDB}
|
||||
{45292808-4EF3-4D4A-B3F5-B75C42EE5870} = {D7C6B9C7-1058-B1EA-FEE6-34C56B05AEDB}
|
||||
{AA57F8D9-7BD6-4161-881B-AD2CEF9A30F6} = {D7C6B9C7-1058-B1EA-FEE6-34C56B05AEDB}
|
||||
{28A26DF7-5F7A-43A2-A548-B55FEBCC3958} = {D7C6B9C7-1058-B1EA-FEE6-34C56B05AEDB}
|
||||
{7543386A-5EBA-4AF0-9E0F-35657B58557D} = {D7C6B9C7-1058-B1EA-FEE6-34C56B05AEDB}
|
||||
{60E0D592-FFB3-0D0A-C4AA-E88919B48F9D} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{1A5B8C5D-BADC-457E-819F-0050C44FE4D3} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{2A0FBDE0-D870-4567-85BD-F7793A5862C6} = {1A5B8C5D-BADC-457E-819F-0050C44FE4D3}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {422D1620-0166-4C26-9A81-CA8A2EB1AB58}
|
||||
EndGlobalSection
|
||||
GlobalSection(Performance) = preSolution
|
||||
HasPerformanceSessions = true
|
||||
{C13A5ABD-F739-4BE8-A2FE-511E989A5B43} = {60E0D592-FFB3-0D0A-C4AA-E88919B48F9D}
|
||||
{F7C6F079-67BA-4899-9B43-D3F8C121D264} = {60E0D592-FFB3-0D0A-C4AA-E88919B48F9D}
|
||||
{E60C119D-2919-4E2F-9D39-90DB1A8FF9A7} = {60E0D592-FFB3-0D0A-C4AA-E88919B48F9D}
|
||||
{ECBAA198-EC93-4174-8156-BDA5F5E95042} = {60E0D592-FFB3-0D0A-C4AA-E88919B48F9D}
|
||||
{F54AE5C0-2ECA-4151-82E6-0D7EFE88FF40} = {60E0D592-FFB3-0D0A-C4AA-E88919B48F9D}
|
||||
{A898C6C3-F134-4AF0-AFB3-3834C58CC0D7} = {60E0D592-FFB3-0D0A-C4AA-E88919B48F9D}
|
||||
{1E296FB3-D185-4A95-A1EB-AA5B37B85C60} = {60E0D592-FFB3-0D0A-C4AA-E88919B48F9D}
|
||||
{B6070F41-8759-448B-B56D-A7D15D489569} = {60E0D592-FFB3-0D0A-C4AA-E88919B48F9D}
|
||||
{B2D721AB-920C-4CD6-8DBF-6778A115A449} = {60E0D592-FFB3-0D0A-C4AA-E88919B48F9D}
|
||||
{38EE36C6-892C-4C94-8BB0-1ACB164E1F20} = {60E0D592-FFB3-0D0A-C4AA-E88919B48F9D}
|
||||
{C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{42C014A0-00C5-0620-8552-38912E891A7F} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
|
||||
{D432F3E9-3D2F-4623-B7B9-CEBA6701FFC3} = {42C014A0-00C5-0620-8552-38912E891A7F}
|
||||
{DD00F5D5-6C2F-4FDA-AE3D-25CF01A9A224} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
|
||||
{2B8243FF-60C6-4607-8AAE-7762D29B0A48} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
|
||||
{00D21F82-61F4-467F-B125-268018A185E5} = {D7C6B9C7-1058-B1EA-FEE6-34C56B05AEDB}
|
||||
{513A3F0D-46B5-4AC2-B700-8671933F6347} = {D7C6B9C7-1058-B1EA-FEE6-34C56B05AEDB}
|
||||
{D419D996-9870-4FF5-82AD-08370D1C945F} = {D7C6B9C7-1058-B1EA-FEE6-34C56B05AEDB}
|
||||
{697BC3A3-1A98-43D3-A6E8-BB39A05EA049} = {D7C6B9C7-1058-B1EA-FEE6-34C56B05AEDB}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
+3
-3
@@ -102,10 +102,10 @@ namespace BCG
|
||||
List<ColumnInfo> col_info = new List<ColumnInfo>();
|
||||
col_info.Add(new ColumnInfo("id", col_index++, typeof(int)));
|
||||
foreach (Pair<string, Type> p in group_by_col_info)
|
||||
col_info.Add(new ColumnInfo(p.first, col_index++, p.second));
|
||||
col_info.Add(new ColumnInfo(p.first ?? string.Empty, col_index++, ExceptionAssert.NotNull(p.second)));
|
||||
foreach (string tc_prefix in tc_prefixes)
|
||||
foreach (Pair<string, Type> p in _cols_per_transposed)
|
||||
col_info.Add(new ColumnInfo(_get_full_column_name(tc_prefix, p.first ?? string.Empty), col_index++, p.second));
|
||||
col_info.Add(new ColumnInfo(_get_full_column_name(tc_prefix, p.first ?? string.Empty), col_index++, ExceptionAssert.NotNull(p.second)));
|
||||
IBlueTableSchema schema = new BlueTableSchema(col_info.ToArray(), "xy_transposed_" + table_name);
|
||||
if (_schema == null)
|
||||
_schema = schema;
|
||||
@@ -182,7 +182,7 @@ namespace BCG
|
||||
if (_transpsed_col_value_comparer_wrapper != null)
|
||||
tc_values.Sort(_transpsed_col_value_comparer_wrapper);
|
||||
List<string> prefixes = new List<string>();
|
||||
foreach (Pair<int, object[]> p in tc_values)
|
||||
foreach (Pair<int, object?[]> p in tc_values)
|
||||
prefixes.Add(tc_prefixes[p.first]);
|
||||
_set_schema(prefixes, group_by_col_info, table_name);
|
||||
BlueTable result = new BlueTable(_schema);
|
||||
|
||||
+25
-19
@@ -1,17 +1,17 @@
|
||||
using Spark.Core.Diagnostics;
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Text;
|
||||
|
||||
using BCG;
|
||||
using BCG.Utilities;
|
||||
|
||||
namespace BCG
|
||||
{
|
||||
public class ConcatenateColumnsMapper : IStreamMapper
|
||||
{
|
||||
protected IDictionary myTempColMap = new SortedList ();
|
||||
protected ArrayList myColMap;
|
||||
protected BlueTableSchema mySchema;
|
||||
protected ArrayList? myColMap;
|
||||
protected BlueTableSchema? mySchema;
|
||||
|
||||
public ConcatenateColumnsMapper(params string [] columnDefs)
|
||||
{
|
||||
@@ -55,11 +55,7 @@ namespace BCG
|
||||
myColMap = new ArrayList (myTempColMap.Count);
|
||||
foreach (DictionaryEntry de in myTempColMap)
|
||||
{
|
||||
string[] cols = de.Value as string[];
|
||||
ArrayList temp = new ArrayList ();
|
||||
foreach (string col in cols)
|
||||
temp.Add (inputSchema[col].colNo);
|
||||
myColMap.Add (temp.ToArray(typeof(int)) as int[]);
|
||||
myColMap.Add(Array.ConvertAll((string[])de.Value!, c => inputSchema[c].colNo));
|
||||
}
|
||||
myTempColMap.Clear ();
|
||||
}
|
||||
@@ -72,6 +68,8 @@ namespace BCG
|
||||
|
||||
public virtual IBlueRow map (IBlueRow row)
|
||||
{
|
||||
requireSchema();
|
||||
requireColMap();
|
||||
object[] retVal = new object[mySchema.columnInfo.Length];
|
||||
row.CopyTo (retVal, myColMap.Count);
|
||||
for (int colNo = 0; colNo < myColMap.Count; colNo ++)
|
||||
@@ -90,11 +88,21 @@ namespace BCG
|
||||
/// <returns></returns>
|
||||
protected virtual object myGetConcatValue (IBlueRow row, int colNo)
|
||||
{
|
||||
requireColMap();
|
||||
StringBuilder b = new StringBuilder();
|
||||
foreach (int cn in myColMap[colNo] as int[])
|
||||
b.Append(row[cn].ToString());
|
||||
foreach (int cn in (int[])myColMap[colNo]!) {
|
||||
b.Append(row[cn]?.ToString());
|
||||
}
|
||||
return b.ToString ();
|
||||
}
|
||||
|
||||
[MemberNotNull(nameof(myColMap))]
|
||||
protected void requireColMap() =>
|
||||
ExceptionAssert.NotNull(myColMap);
|
||||
|
||||
[MemberNotNull(nameof(mySchema))]
|
||||
void requireSchema() =>
|
||||
ExceptionAssert.NotNull(mySchema);
|
||||
}
|
||||
|
||||
public class ConcatenateColumnsMapperForSameDataSet : ConcatenateColumnsMapper
|
||||
@@ -107,23 +115,21 @@ namespace BCG
|
||||
myDicts = new HashTableND [columnDefs.Length];
|
||||
int i = 0;
|
||||
foreach (DictionaryEntry de in myTempColMap)
|
||||
myDicts[i++] = new HashTableND ((de.Value as string[]).Length);
|
||||
myDicts[i++] = new HashTableND(((string[])de.Value!).Length);
|
||||
}
|
||||
|
||||
protected override object myGetConcatValue (IBlueRow row, int colNo)
|
||||
{
|
||||
int[] cols = myColMap[colNo] as int[];
|
||||
object[] vals = new object[cols.Length];
|
||||
for (int i = 0; i < vals.Length; i++)
|
||||
vals[i] = row[cols[i]];
|
||||
requireColMap();
|
||||
HashTableND ht = myDicts[colNo];
|
||||
object rv = ht.getValue (vals);
|
||||
var vals = Array.ConvertAll((int[])myColMap[colNo]!, c => row[c]);
|
||||
var rv = ht.getValue(vals);
|
||||
if (rv != null)
|
||||
return rv;
|
||||
else
|
||||
{
|
||||
rv = base.myGetConcatValue (row, colNo);
|
||||
object[] args = new object[vals.Length + 1];
|
||||
var args = new object?[vals.Length + 1];
|
||||
vals.CopyTo (args, 0);
|
||||
args[args.Length-1] = rv;
|
||||
ht.add (args);
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace BCG {
|
||||
}
|
||||
#endregion
|
||||
|
||||
public event FilterChangeDelegate onFilterChange;
|
||||
public event FilterChangeDelegate? onFilterChange;
|
||||
|
||||
#region IStreamFilter
|
||||
public bool filter(IBlueRow row) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using Bts.DataStreamCore;
|
||||
|
||||
namespace BCG
|
||||
{
|
||||
@@ -10,8 +10,8 @@ namespace BCG
|
||||
{
|
||||
protected string[] myGroupByCols;
|
||||
protected string myOutputColumn;
|
||||
protected GroupByOutputTable myOutputTable;
|
||||
protected string myColMapExpression;
|
||||
protected GroupByOutputTable? myOutputTable;
|
||||
protected string? myColMapExpression;
|
||||
|
||||
#region constructors
|
||||
public GroupByEvaluator (string outputCol, string[] groupByCols)
|
||||
@@ -52,21 +52,20 @@ namespace BCG
|
||||
/// <param name="r"></param>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
protected IBlueRow myProject (IBlueRow r, int id)
|
||||
{
|
||||
return r == null ? null :
|
||||
myColMapExpression == null || myColMapExpression.Length < 1 ?
|
||||
BlueDataUtility.getNewReplacedRow (r, id, "id") :
|
||||
BlueDataUtility.getNewReplacedRow(myProjectRow (r, myColMapExpression),
|
||||
id, "id");
|
||||
}
|
||||
|
||||
protected IBlueRow? myProject(IBlueRow r, int id) =>
|
||||
r is null
|
||||
? null
|
||||
: myColMapExpression is null || myColMapExpression.Length < 1
|
||||
? BlueDataUtility.getNewReplacedRow(r, id, "id")
|
||||
: BlueDataUtility.getNewReplacedRow(myProjectRow(r, myColMapExpression), id, "id");
|
||||
|
||||
/// <summary>
|
||||
/// Projects the id, conserving the id
|
||||
/// </summary>
|
||||
/// <param name="r"></param>
|
||||
/// <returns></returns>
|
||||
protected IBlueRow myProject (IBlueRow r) {return myProject (r, r == null ? Int32.MinValue : (int)r["id"]);}
|
||||
protected IBlueRow? myProject(IBlueRow r) =>
|
||||
myProject(r, r is null ? int.MinValue : r.Id());
|
||||
#endregion
|
||||
|
||||
IBlueRow myProjectRow (IBlueRow r, string colMapExpression) =>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Bts.DataStreamCore;
|
||||
|
||||
using System;
|
||||
using BCG.Utilities;
|
||||
using System.Collections;
|
||||
|
||||
namespace BCG
|
||||
@@ -22,10 +23,12 @@ namespace BCG
|
||||
/// <param name="groupRepString"></param>
|
||||
public void addRow (IBlueRow row, string groupRepString)
|
||||
{
|
||||
if (myDict[groupRepString] != null)
|
||||
myTable.deleteRow ((IBlueRow)myDict[groupRepString]);
|
||||
var grp = myDict[groupRepString];
|
||||
if (grp is not null) {
|
||||
myTable.deleteRow((IBlueRow)grp);
|
||||
}
|
||||
myTable.addRow (row);
|
||||
myDict[groupRepString] = myTable[(int)row["id"]];
|
||||
myDict[groupRepString] = myTable[row.Id()];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -35,7 +38,7 @@ namespace BCG
|
||||
public void removeRow (string groupRepString)
|
||||
{
|
||||
// BlueEventLog.logAssert (myDict[groupRepString] != null);
|
||||
myTable.deleteRow ((IBlueRow)myDict[groupRepString]);
|
||||
myTable.deleteRow ((IBlueRow)myDict[groupRepString]!);
|
||||
myDict.Remove (groupRepString);
|
||||
}
|
||||
|
||||
@@ -48,11 +51,8 @@ namespace BCG
|
||||
myDict.Clear ();
|
||||
}
|
||||
|
||||
public IBlueRow getRow (string groupRepString)
|
||||
{
|
||||
return myDict[groupRepString] == null ? null :
|
||||
myDict[groupRepString] as IBlueRow;
|
||||
}
|
||||
public IBlueRow? getRow(string groupRepString) =>
|
||||
myDict[groupRepString] as IBlueRow;
|
||||
|
||||
#region IBlueRowCollection members
|
||||
public IBlueRow this[int id] {get{return myTable[id];}}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
using Spark.Core.Diagnostics;
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using BCG.Utilities;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
|
||||
namespace BCG {
|
||||
@@ -25,11 +27,12 @@ namespace BCG {
|
||||
/// Serves as a quick way to access all rows belonging to the same group
|
||||
/// </summary>
|
||||
private bool myIdGuard = true;
|
||||
private RowDictionaryTable myBookKeepingTable;
|
||||
RowDictionaryTable? myBookKeepingTable;
|
||||
private IGroupByEvaluator myGroupByEvaluator;
|
||||
private IBlueTableSchema mySchema; //input schema, as output schema can differ (IGroupByEvaluator's
|
||||
// input schema, as output schema can differ (IGroupByEvaluator's
|
||||
IBlueTableSchema? mySchema;
|
||||
//can map a schema to another
|
||||
private IBlueTableSchema myOutputSchema;
|
||||
IBlueTableSchema? myOutputSchema;
|
||||
private int myIdGenerator = 0;
|
||||
|
||||
public GroupByStream(ViewStream stream, IEnumerable<string> groupby_cols, Func<DataPacket, IBlueRow> groupby_func)
|
||||
@@ -45,14 +48,14 @@ namespace BCG {
|
||||
}
|
||||
|
||||
protected override void myHandleFirstCall() {
|
||||
requireLastArrivedPacket();
|
||||
mySchema = myLastArrivedPacket.schema;
|
||||
myOutputSchema = myGroupByEvaluator.getOutputSchema(mySchema);
|
||||
myBookKeepingTable = new RowDictionaryTable(myLastArrivedPacket.newRows,
|
||||
myGroupByEvaluator.groupByColumns);
|
||||
GroupByOutputTable temp = new GroupByOutputTable(myOutputSchema);
|
||||
foreach (IBlueRowCollection rowGroup in myBookKeepingTable.getGroups()) {
|
||||
IBlueRow newRow = myEvaluate(new DataPacket(rowGroup,
|
||||
rowGroup, new BlueTable(mySchema)));
|
||||
var newRow = myEvaluate(new DataPacket(rowGroup, rowGroup, new BlueTable(mySchema)));
|
||||
if (newRow != null)
|
||||
temp.addRow(newRow, myGetGroupString(rowGroup));
|
||||
}
|
||||
@@ -78,15 +81,14 @@ namespace BCG {
|
||||
ArrayList handledAddGroups = new ArrayList();
|
||||
string groupRepString;
|
||||
|
||||
requireBookKeeping();
|
||||
foreach (IBlueRowCollection delGroup in delGroups.getGroups()) {
|
||||
// BlueEventLog.logAssert (delGroup.Count > 0);
|
||||
groupRepString = myGetGroupString(delGroup);
|
||||
IBlueRowCollection addGroup = addGroups.getGroup(groupRepString) == null ?
|
||||
new BlueTable(mySchema) : addGroups.getGroup(groupRepString);
|
||||
IBlueRowCollection addGroup = addGroups.getGroup(groupRepString) ?? new BlueTable(mySchema);
|
||||
handledAddGroups.Add(addGroup);
|
||||
IBlueRowCollection aggGroup = myBookKeepingTable.getGroup(groupRepString) == null ?
|
||||
new BlueTable(mySchema) : myBookKeepingTable.getGroup(groupRepString);
|
||||
IBlueRow newRow = myEvaluate(new DataPacket(aggGroup, addGroup, delGroup));
|
||||
IBlueRowCollection aggGroup = myBookKeepingTable.getGroup(groupRepString) ?? new BlueTable(mySchema);
|
||||
var newRow = myEvaluate(new DataPacket(aggGroup, addGroup, delGroup));
|
||||
myFireSwitch |= myMergeRow(newRow, groupRepString);
|
||||
}
|
||||
|
||||
@@ -98,16 +100,16 @@ namespace BCG {
|
||||
//the loop above
|
||||
|
||||
groupRepString = myGetGroupString(addGroup);
|
||||
IBlueRowCollection aggGroup = myBookKeepingTable.getGroup(groupRepString);
|
||||
var aggGroup = ExceptionAssert.NotNull(myBookKeepingTable.getGroup(groupRepString));
|
||||
// BlueEventLog.logAssert (aggGroup != null && aggGroup.Count > 0);
|
||||
IBlueRow newRow = myEvaluate(new DataPacket(aggGroup, addGroup,
|
||||
new BlueTable(aggGroup.schema)));
|
||||
var newRow = myEvaluate(new DataPacket(aggGroup, addGroup, new BlueTable(aggGroup.schema)));
|
||||
myFireSwitch |= myMergeRow(newRow, groupRepString);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool myMergeRow(IBlueRow newRow, string groupRepString) {
|
||||
private bool myMergeRow(IBlueRow? newRow, string groupRepString) {
|
||||
requireLastFiredPacket();
|
||||
IBlueRow existingRow = ((GroupByOutputTable)myLastFiredPacket.newRows).getRow(groupRepString);
|
||||
//BlueEventLog.logAssert (newRow != null || existingRow != null);
|
||||
if (existingRow == null && newRow == null)
|
||||
@@ -115,6 +117,7 @@ namespace BCG {
|
||||
else if (existingRow != null && newRow != null && BlueDataUtility.compute_equality(existingRow, newRow))
|
||||
return false;
|
||||
else if (existingRow == null) {
|
||||
ArgumentNullException.ThrowIfNull(newRow);
|
||||
//row added for the first time
|
||||
((GroupByOutputTable)myLastFiredPacket.newRows).addRow(newRow, groupRepString);
|
||||
((BlueTable)myLastFiredPacket.addedRows).addRow(newRow);
|
||||
@@ -137,6 +140,9 @@ namespace BCG {
|
||||
/// <param name="delGroups"></param>
|
||||
/// <param name="addGroups"></param>
|
||||
private void myInitIncrementalChangeData(out RowDictionaryTable delGroups, out RowDictionaryTable addGroups) {
|
||||
ExceptionAssert.NotNull(myBookKeepingTable);
|
||||
requireLastFiredPacket();
|
||||
requireLastArrivedPacket();
|
||||
delGroups =
|
||||
new RowDictionaryTable(myLastArrivedPacket.deletedRows, myGroupByEvaluator.groupByColumns);
|
||||
addGroups =
|
||||
@@ -150,16 +156,19 @@ namespace BCG {
|
||||
}
|
||||
|
||||
protected override void myOnTableClear() {
|
||||
if (myBookKeepingTable.Count == 0)
|
||||
return; //ie there arent any rows, so no need to optimize the 'cleansing' process
|
||||
if (ExceptionAssert.NotNull(myBookKeepingTable).Count == 0) {
|
||||
// ie there arent any rows, so no need to optimize the 'cleansing' process
|
||||
return;
|
||||
}
|
||||
requireLastFiredPacket();
|
||||
myLastFiredPacket.deletedRows = new BlueTable(myLastFiredPacket.newRows);
|
||||
myLastFiredPacket.addedRows = new BlueTable(myLastFiredPacket.deletedRows.schema);
|
||||
(myLastFiredPacket.newRows as GroupByOutputTable).clear();
|
||||
((GroupByOutputTable)myLastFiredPacket.newRows).clear();
|
||||
myBookKeepingTable.clear();
|
||||
myGroupByEvaluator.clear();
|
||||
}
|
||||
|
||||
private IBlueRow myEvaluate(DataPacket dp) {
|
||||
private IBlueRow? myEvaluate(DataPacket dp) {
|
||||
IBlueRow evalRow = myGroupByEvaluator.evaluate(dp);
|
||||
return evalRow == null ? null :
|
||||
myIdGuard ?
|
||||
@@ -191,7 +200,7 @@ namespace BCG {
|
||||
return BlueDataUtility.rowToString(getRepRow(dp), colNames);
|
||||
}
|
||||
|
||||
public static IBlueRow getRepRow(DataPacket dp) {
|
||||
public static IBlueRow? getRepRow(DataPacket dp) {
|
||||
if (dp.newRows.Count > 0)
|
||||
return BlueDataUtility.extractRow(dp.newRows, 0);
|
||||
else if (dp.addedRows.Count > 0)
|
||||
@@ -210,13 +219,13 @@ namespace BCG {
|
||||
/// <param name="newValue"></param>
|
||||
/// <param name="isAdd"></param>
|
||||
/// <returns></returns>
|
||||
public static object incrementalAdd(object lastValue, object newValue, bool isAdd) {
|
||||
public static object? incrementalAdd(object lastValue, object newValue, bool isAdd) {
|
||||
if (lastValue == null || lastValue.Equals(DBNull.Value))
|
||||
return newValue;
|
||||
// BlueEventLog.logAssert (lastValue.GetType().Equals (typeof(Int32)) && newValue.GetType().Equals (typeof(Int32)) ||
|
||||
// lastValue.GetType().Equals (typeof(Double)) && newValue.GetType().Equals (typeof(Double)) ||
|
||||
// lastValue.GetType().Equals (typeof(Decimal)) && newValue.GetType().Equals (typeof(Decimal)));
|
||||
Object retVal = null;
|
||||
object? retVal = null;
|
||||
if (newValue.GetType().Equals(typeof(int)))
|
||||
retVal = isAdd ? (int)lastValue + (int)newValue : (int)lastValue - (int)newValue;
|
||||
else if (newValue.GetType().Equals(typeof(Double)))
|
||||
@@ -228,6 +237,9 @@ namespace BCG {
|
||||
return retVal;
|
||||
}
|
||||
|
||||
[MemberNotNull(nameof(myBookKeepingTable))]
|
||||
void requireBookKeeping() =>
|
||||
ExceptionAssert.NotNull(myBookKeepingTable);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,10 +1,9 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using BCG.Utilities;
|
||||
using System.IO;
|
||||
|
||||
namespace BCG
|
||||
{
|
||||
using Spark.Core.Diagnostics;
|
||||
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
/// <summary>
|
||||
/// Some basic event handling functionality factorred out of any Stream whose behaviour
|
||||
/// is driven by some interface passed on by the user
|
||||
@@ -12,8 +11,8 @@ namespace BCG
|
||||
public abstract class MethodDrivenStream : ViewStream
|
||||
{
|
||||
protected ViewStream myStream;
|
||||
protected DataPacket myLastArrivedPacket;
|
||||
protected DataPacket myLastFiredPacket;
|
||||
protected DataPacket? myLastArrivedPacket;
|
||||
protected DataPacket? myLastFiredPacket;
|
||||
protected bool myFireSwitch = true;
|
||||
|
||||
public MethodDrivenStream(ViewStream vs) {myStream = vs;}
|
||||
@@ -59,6 +58,7 @@ namespace BCG
|
||||
/// To handle the first call, the LastFiredPacket is supposed to be initialized and filled
|
||||
/// with data.
|
||||
/// </summary>
|
||||
[MemberNotNull(nameof(myLastFiredPacket))]
|
||||
protected abstract void myHandleFirstCall ();
|
||||
|
||||
/// <summary>
|
||||
@@ -89,5 +89,13 @@ namespace BCG
|
||||
{
|
||||
myStream.onChange -= new DataStream.ChangeDelegate (myChangeHandler);
|
||||
}
|
||||
|
||||
[MemberNotNull(nameof(myLastArrivedPacket))]
|
||||
protected void requireLastArrivedPacket() =>
|
||||
ExceptionAssert.NotNull(myLastArrivedPacket);
|
||||
|
||||
[MemberNotNull(nameof(myLastFiredPacket))]
|
||||
protected void requireLastFiredPacket() =>
|
||||
ExceptionAssert.NotNull(myLastFiredPacket);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
using mbts;
|
||||
|
||||
using Spark.Core.Diagnostics;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
@@ -35,7 +37,7 @@ namespace BCG {
|
||||
List<NonIncJoinSpec> rv = new List<NonIncJoinSpec>();
|
||||
foreach (Triplet<ViewStream, string, string> r in join_specs) {
|
||||
string[] keys = String.IsNullOrEmpty(r.second) ? new string[] { } : r.second.Split(' ');
|
||||
string[] visible_cols = r.third.Split(' ');
|
||||
string[] visible_cols = ExceptionAssert.NotNull(r.third).Split(' ');
|
||||
List<string> data_col_names = new List<string>(), mapped_col_names = new List<string>();
|
||||
foreach (string s in visible_cols) {
|
||||
string[] toks = s.Split(':');
|
||||
@@ -47,7 +49,7 @@ namespace BCG {
|
||||
mapped_col_names.Add(toks[1]);
|
||||
}
|
||||
}
|
||||
rv.Add(new NonIncJoinSpec(r.first, keys, data_col_names.ToArray(), mapped_col_names.ToArray()));
|
||||
rv.Add(new(ExceptionAssert.NotNull(r.first), keys, data_col_names.ToArray(), mapped_col_names.ToArray()));
|
||||
}
|
||||
return rv.ToArray();
|
||||
}
|
||||
|
||||
@@ -290,6 +290,7 @@ namespace BCG
|
||||
}
|
||||
}
|
||||
}
|
||||
ExceptionAssert.NotNull(myState);
|
||||
}
|
||||
|
||||
private void myAddRows(IBlueRowCollection addedRows, bool isLeft, BlueTable state, BlueTable addedRowsOut)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
using Spark.Core.Diagnostics;
|
||||
|
||||
using System;
|
||||
|
||||
namespace BCG
|
||||
@@ -18,16 +20,21 @@ namespace BCG
|
||||
|
||||
public override void onTableClear (bool isLeft)
|
||||
{
|
||||
requireSchema();
|
||||
requireLastFiredPacket();
|
||||
myLastFiredPacket.deletedRows = myLastFiredPacket.newRows;
|
||||
myLastFiredPacket.newRows = new JoinForeignTable (mySchema);
|
||||
myLastFiredPacket.addedRows = new BlueTable (mySchema);
|
||||
if (!isLeft)
|
||||
if (!isLeft) {
|
||||
ExceptionAssert.NotNull(myLeftDataPacket);
|
||||
foreach (IBlueRow row in myLeftDataPacket.newRows)
|
||||
((JoinTable)myLastFiredPacket.newRows).addRow (row, null, myLastFiredPacket);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void myInitFiredPacket ()
|
||||
{
|
||||
requireSchema();
|
||||
myLastFiredPacket = new DataPacket ();
|
||||
myLastFiredPacket.newRows = new JoinForeignTable (mySchema);
|
||||
myLastFiredPacket.addedRows = new BlueTable (mySchema);
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace BCG
|
||||
: this (r, null, null)
|
||||
{}
|
||||
|
||||
public SimpleNode(IBlueRow r, SimpleNode? nx, SimpleNode? pv) {
|
||||
public SimpleNode(IBlueRow? r, SimpleNode? nx, SimpleNode? pv) {
|
||||
row = r;
|
||||
next = nx;
|
||||
prev = pv;
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
using bts;
|
||||
|
||||
using Spark.Core.Diagnostics;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
@@ -60,7 +62,7 @@ namespace BCG {
|
||||
if (columnAndType.Length == 1)
|
||||
ci[n] = new ColumnInfo(c, n, typeof(double));
|
||||
else
|
||||
ci[n] = new ColumnInfo(columnAndType[0], n, Type.GetType("System." + columnAndType[1], true));
|
||||
ci[n] = new(columnAndType[0], n, ExceptionAssert.NotNull(Type.GetType("System." + columnAndType[1], true)));
|
||||
n++;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,6 @@ namespace BCG
|
||||
/// fires an event when the mapper
|
||||
/// changes itself
|
||||
/// </summary>
|
||||
event MapperChangeDelegate onMapperChange;
|
||||
event MapperChangeDelegate? onMapperChange;
|
||||
}
|
||||
}
|
||||
@@ -75,6 +75,7 @@ namespace BCG {
|
||||
|
||||
protected override void myHandleFirstCall() {
|
||||
ArgumentNullException.ThrowIfNull(myMapper);
|
||||
requireLastArrivedPacket();
|
||||
IBlueTableSchema outputSchema = myMapper.getOutputSchema(myLastArrivedPacket.newRows.schema);
|
||||
myLastFiredPacket = new DataPacket();
|
||||
myLastFiredPacket.newRows = new BlueTable(outputSchema);
|
||||
@@ -85,10 +86,12 @@ namespace BCG {
|
||||
}
|
||||
|
||||
protected override void myHandleIncrementalAdd() {
|
||||
requireLastArrivedPacket();
|
||||
if (myLastArrivedPacket.addedRows.Count == 0) {
|
||||
Log.Gen.warn("MapStream.myHandleIncrementalAdd called with 0 addedRows");
|
||||
return;
|
||||
}
|
||||
requireLastFiredPacket();
|
||||
ArgumentNullException.ThrowIfNull(myMapper);
|
||||
var addedRows = new BlueTable(myLastFiredPacket.newRows.schema);
|
||||
var newRows = ExceptionAssert.Cast(myLastFiredPacket.newRows).To<BlueTable>();
|
||||
@@ -101,10 +104,12 @@ namespace BCG {
|
||||
}
|
||||
|
||||
protected override void myHandleIncrementalDelete() {
|
||||
requireLastArrivedPacket();
|
||||
if (myLastArrivedPacket.deletedRows.Count == 0) {
|
||||
Log.Gen.warn("MapStream.myHandleIncrementalDelete called with 0 deletedRows");
|
||||
return;
|
||||
}
|
||||
requireLastFiredPacket();
|
||||
var deletedRows = new BlueTable(myLastFiredPacket.newRows.schema);
|
||||
var newRows = ExceptionAssert.Cast(myLastFiredPacket.newRows).To<BlueTable>();
|
||||
foreach (IBlueRow row in myLastArrivedPacket.deletedRows) {
|
||||
@@ -127,6 +132,7 @@ namespace BCG {
|
||||
}
|
||||
|
||||
protected override void myOnTableClear() {
|
||||
requireLastFiredPacket();
|
||||
myLastFiredPacket.deletedRows = myLastFiredPacket.newRows;
|
||||
myLastFiredPacket.newRows = new BlueTable(myLastFiredPacket.deletedRows.schema);
|
||||
myLastFiredPacket.addedRows = new BlueTable(myLastFiredPacket.deletedRows.schema);
|
||||
|
||||
@@ -47,14 +47,14 @@ namespace BCG {
|
||||
_map_rows = map_rows;
|
||||
}
|
||||
|
||||
event MapperChangeDelegate? ISuperStreamMapper.onMapperChange { add { } remove { } }
|
||||
|
||||
public IBlueTableSchema getOutputSchema(IBlueTableSchema schema) { return _get_schema(schema); }
|
||||
|
||||
public IBlueRow[] map(IBlueRow r) {
|
||||
IEnumerable<IBlueRow> rows = _map_rows(r);
|
||||
return rows == null ? new IBlueRow[] { } : new List<IBlueRow>(rows).ToArray();
|
||||
}
|
||||
|
||||
public event MapperChangeDelegate? onMapperChange;
|
||||
}
|
||||
|
||||
//maps the id of the underlying stream to the
|
||||
|
||||
@@ -608,8 +608,8 @@ namespace BCG {
|
||||
// 5. deserialize the state into a stream op
|
||||
str_io_msg_p = deser.deserialize(content_p);
|
||||
// 6. check to make sure the state's rows are good
|
||||
passes = passes && str_io_msg_p.op == bts.StreamIOMessage.StreamOp.CREATE &&
|
||||
BlueDataUtility.compute_equality(cr_rows, str_io_msg_p.create_message.rows);
|
||||
passes &= str_io_msg_p.op == StreamIOMessage.StreamOp.CREATE
|
||||
&& BlueDataUtility.compute_equality(cr_rows, ExceptionAssert.NotNull(str_io_msg_p.create_message).rows);
|
||||
return new TestResult {
|
||||
test_result = passes,
|
||||
test_name = "run_pubsub_server_stream_tag_handler_test"
|
||||
@@ -692,7 +692,7 @@ namespace BCG {
|
||||
var content = st_data.get_current_content();
|
||||
var msg_p = deser.deserialize(content);
|
||||
Log.assert(msg_p.op == bts.StreamIOMessage.StreamOp.CREATE);
|
||||
return msg_p.create_message.rows;
|
||||
return ExceptionAssert.NotNull(msg_p.create_message).rows;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
using Bts.ColumnSortExpressions;
|
||||
|
||||
using Spark.Core.Diagnostics;
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
@@ -39,7 +41,7 @@ public class SortRow : IComparable, IBlueRow {
|
||||
var otherVal = otherRow[col.Name];
|
||||
int rv = myIsNull(this[col.Name]) ?
|
||||
(myIsNull(otherVal) ? 0 : -1) :
|
||||
(myIsNull(otherVal) ? 1 : ((IComparable)this[col.Name]).CompareTo(otherVal));
|
||||
(myIsNull(otherVal) ? 1 : ExceptionAssert.Argument.Is<IComparable>(this[col.Name]).CompareTo(otherVal));
|
||||
rv *= col.IsAscending ? 1 : -1;
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using System;
|
||||
using Spark.Core.Diagnostics;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
@@ -60,13 +62,13 @@ namespace BCG
|
||||
List<string> columnInfoStrParts = new List<string>(columnInfoStr.Split(new char[] { ':' }, StringSplitOptions.None));
|
||||
if (columnInfoStrParts.Count != 2)
|
||||
{
|
||||
throw (new Exception(String.Format("Unable to decode schema string '{0}'", schemaStr)));
|
||||
throw new Exception($"Unable to decode schema string '{schemaStr}'");
|
||||
}
|
||||
|
||||
columnInfos.Add(new ColumnInfo(columnInfoStrParts[0], i, Type.GetType(columnInfoStrParts[1])));
|
||||
columnInfos.Add(new ColumnInfo(columnInfoStrParts[0], i, ExceptionAssert.NotNull(Type.GetType(columnInfoStrParts[1]))));
|
||||
}
|
||||
|
||||
return (new BlueTableSchema(columnInfos.ToArray(), ""));
|
||||
return new BlueTableSchema(columnInfos.ToArray(), string.Empty);
|
||||
}
|
||||
|
||||
private IBlueRow myGetRow(IBlueTableSchema schema, string rowStr)
|
||||
@@ -75,7 +77,7 @@ namespace BCG
|
||||
|
||||
if (schema.columnInfo.Length != valueStrs.Count)
|
||||
{
|
||||
throw (new Exception(String.Format("Unable to decode row string '{0}'", rowStr)));
|
||||
throw new Exception($"Unable to decode row string '{rowStr}'");
|
||||
}
|
||||
|
||||
List<object> values = new List<object>();
|
||||
@@ -84,7 +86,7 @@ namespace BCG
|
||||
values.Add(Convert.ChangeType(valueStrs[i], schema.columnInfo[i].colType));
|
||||
}
|
||||
|
||||
return (new BlueRow(schema, values.ToArray()));
|
||||
return new BlueRow(schema, values.ToArray());
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using BCG.Utilities.General;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
|
||||
namespace BCG
|
||||
@@ -97,7 +98,7 @@ namespace BCG
|
||||
// BlueEventLog2.instance().assert(Thread.CurrentThread.ManagedThreadId == _target_thread,
|
||||
// "onTargetDoWork should only be called from target thread");
|
||||
var updates = _queued_updates.dequeueAll();
|
||||
foreach (var u in updates) {
|
||||
foreach (var u in updates.ExceptNull()) {
|
||||
if (u.subscription == _current_target_subscription)
|
||||
myFireEvent(u.dp);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
using System;
|
||||
|
||||
using BCG.Utilities.General;
|
||||
|
||||
using Spark.Core.Diagnostics;
|
||||
|
||||
using System;
|
||||
|
||||
namespace BCG {
|
||||
public abstract class TimeUnitStream : ViewStream, IWorker {
|
||||
protected TimeSpan myOffset;
|
||||
@@ -46,8 +48,8 @@ namespace BCG {
|
||||
myRoundTime(myZeroTime + new TimeSpan(myOffset.Ticks * periods));
|
||||
|
||||
|
||||
if (myGetLatestRow() == null ||
|
||||
!myGetLatestRow()["time"].Equals(dt)) {
|
||||
var latestRow = myGetLatestRow();
|
||||
if (latestRow is null || !ExceptionAssert.Argument.Is<DateTime>(latestRow["time"]).Equals(dt)) {
|
||||
IBlueRow ar = new BlueRow(myCollection.schema,
|
||||
myId++, dt);
|
||||
IBlueRow dr = myCollection.addRowWithReturn(ar);
|
||||
@@ -71,11 +73,10 @@ namespace BCG {
|
||||
|
||||
#region Private Helper methods
|
||||
|
||||
private IBlueRow myGetLatestRow() {
|
||||
return myCollection.Count == 0 ?
|
||||
null :
|
||||
BlueDataUtility.extractRow(myCollection, myCollection.Count - 1);
|
||||
}
|
||||
IBlueRow? myGetLatestRow() =>
|
||||
myCollection.Count == 0
|
||||
? null
|
||||
: BlueDataUtility.extractRow(myCollection, myCollection.Count - 1);
|
||||
|
||||
private IBlueRowCollection myConvertToCollection(IBlueRow r) {
|
||||
BlueTable retVal = new BlueTable(myCollection.schema);
|
||||
|
||||
@@ -1,43 +1,42 @@
|
||||
using System;
|
||||
namespace BCG;
|
||||
|
||||
namespace BCG {
|
||||
public class TopStream : MethodDrivenStream {
|
||||
private int myTopCount;
|
||||
public class TopStream : MethodDrivenStream {
|
||||
int myTopCount;
|
||||
|
||||
public TopStream(ViewStream stream, int topCount) : base(stream) { myTopCount = topCount; }
|
||||
public TopStream(ViewStream stream, int topCount)
|
||||
: base(stream) =>
|
||||
myTopCount = topCount;
|
||||
|
||||
public TopStream(ViewStream stream,
|
||||
int topCount,
|
||||
string sortExpression)
|
||||
:
|
||||
this(sortExpression == null ?
|
||||
stream :
|
||||
new SortStream(stream, sortExpression), topCount) { }
|
||||
public TopStream(ViewStream stream, int topCount, string sortExpression)
|
||||
: this(sortExpression is null ? stream : new SortStream(stream, sortExpression), topCount) { }
|
||||
|
||||
protected override void myOnTableClear() {
|
||||
myLastFiredPacket.deletedRows = myLastFiredPacket.newRows;
|
||||
myLastFiredPacket.newRows = new OrderedBlueTable(myLastFiredPacket.deletedRows.schema);
|
||||
myLastFiredPacket.addedRows = new OrderedBlueTable(myLastFiredPacket.deletedRows.schema);
|
||||
}
|
||||
protected override void myOnTableClear() {
|
||||
requireLastFiredPacket();
|
||||
myLastFiredPacket.deletedRows = myLastFiredPacket.newRows;
|
||||
myLastFiredPacket.newRows = new OrderedBlueTable(myLastFiredPacket.deletedRows.schema);
|
||||
myLastFiredPacket.addedRows = new OrderedBlueTable(myLastFiredPacket.deletedRows.schema);
|
||||
}
|
||||
|
||||
protected override void myHandleFirstCall() {
|
||||
myLastFiredPacket = new DataPacket();
|
||||
myLastFiredPacket.newRows = new OrderedBlueTable(myLastArrivedPacket.newRows, myTopCount);
|
||||
myLastFiredPacket.addedRows = new OrderedBlueTable(myLastFiredPacket.newRows);
|
||||
myLastFiredPacket.deletedRows = new OrderedBlueTable(myLastFiredPacket.newRows.schema);
|
||||
}
|
||||
protected override void myHandleFirstCall() {
|
||||
requireLastArrivedPacket();
|
||||
myLastFiredPacket = new DataPacket();
|
||||
myLastFiredPacket.newRows = new OrderedBlueTable(myLastArrivedPacket.newRows, myTopCount);
|
||||
myLastFiredPacket.addedRows = new OrderedBlueTable(myLastFiredPacket.newRows);
|
||||
myLastFiredPacket.deletedRows = new OrderedBlueTable(myLastFiredPacket.newRows.schema);
|
||||
}
|
||||
|
||||
protected override void myHandleIncrementalAdd() { }
|
||||
protected override void myHandleIncrementalAdd() { }
|
||||
|
||||
protected override void myHandleIncrementalDelete() {
|
||||
IBlueRowCollection oldRows = myLastFiredPacket.newRows;
|
||||
myLastFiredPacket.newRows = new OrderedBlueTable(myLastArrivedPacket.newRows, myTopCount);
|
||||
BlueDataUtility.computeDifferences(myLastFiredPacket.newRows,
|
||||
oldRows,
|
||||
myLastFiredPacket.schema.columnNames,
|
||||
out myLastFiredPacket.deletedRows,
|
||||
out myLastFiredPacket.addedRows);
|
||||
myFireSwitch = myLastFiredPacket.addedRows.Count + myLastFiredPacket.deletedRows.Count == 0 ? false : true;
|
||||
}
|
||||
}
|
||||
protected override void myHandleIncrementalDelete() {
|
||||
requireLastArrivedPacket();
|
||||
requireLastFiredPacket();
|
||||
IBlueRowCollection oldRows = myLastFiredPacket.newRows;
|
||||
myLastFiredPacket.newRows = new OrderedBlueTable(myLastArrivedPacket.newRows, myTopCount);
|
||||
BlueDataUtility.computeDifferences(myLastFiredPacket.newRows,
|
||||
oldRows,
|
||||
myLastFiredPacket.schema.columnNames,
|
||||
out myLastFiredPacket.deletedRows,
|
||||
out myLastFiredPacket.addedRows);
|
||||
myFireSwitch = myLastFiredPacket.addedRows.Count + myLastFiredPacket.deletedRows.Count == 0 ? false : true;
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,10 @@
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
|
||||
namespace BCG {
|
||||
|
||||
public class AlphabetizeColumnsStream : ViewStream {
|
||||
private ViewStream mySrc;
|
||||
private IBlueTableSchema mySchema = null;
|
||||
IBlueTableSchema? mySchema = null;
|
||||
|
||||
public AlphabetizeColumnsStream(ViewStream src) {
|
||||
mySrc = src;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace BCG
|
||||
{
|
||||
public class AppendStreamModified : ViewStream
|
||||
{
|
||||
private AppendCollection myColl = new AppendCollection ();
|
||||
private ViewStream myLeftStream, myRightstream;
|
||||
|
||||
ViewStream? myLeftStream, myRightstream;
|
||||
|
||||
public AppendStreamModified (ViewStream leftStream, ViewStream rightStream)
|
||||
{
|
||||
myLeftStream = leftStream;
|
||||
@@ -15,11 +15,24 @@ namespace BCG
|
||||
|
||||
public AppendStreamModified (ViewStream[] vss)
|
||||
{
|
||||
switch (vss.Length) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
mySetRealSource (vss[0]);
|
||||
break;
|
||||
default:
|
||||
mySetRealSource(
|
||||
vss[1..].Aggregate(
|
||||
new AppendStreamModified(new[] { vss[0] }),
|
||||
(asm, vs) => new AppendStreamModified(asm, vs)));
|
||||
break;
|
||||
}
|
||||
if (vss.Length == 1)
|
||||
mySetRealSource (vss[0]);
|
||||
else
|
||||
{
|
||||
AppendStreamModified rv = null;
|
||||
AppendStreamModified? rv = null;
|
||||
foreach (ViewStream s in vss)
|
||||
rv = rv == null ? new AppendStreamModified (new ViewStream[] {s}) : new AppendStreamModified (rv, s);
|
||||
mySetRealSource (rv);
|
||||
|
||||
@@ -43,6 +43,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Net", "..\cs\Bts.Net\Bt
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.IO.Compression", "..\cs\Bts.IO.Compression\Bts.IO.Compression.csproj", "{3BF059B0-51C0-44A8-8297-9B7464DC5BA3}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Collections", "..\cs\Bts.Collections\Bts.Collections.csproj", "{ADBEBCB3-5367-431B-AFC8-F57CAF9F029D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Core", "..\cs\Bts.Core\Bts.Core.csproj", "{4E3D817D-9A0A-40F4-A1A1-4865375F40DD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Disposables", "..\cs\Bts.Disposables\Bts.Disposables.csproj", "{ED034E82-07F4-473D-9C3A-F5EF9C961CFD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Numerics", "..\cs\Bts.Numerics\Bts.Numerics.csproj", "{9A3E289A-3A88-4A76-AD0B-32C12EBA1B8B}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -293,6 +301,54 @@ Global
|
||||
{3BF059B0-51C0-44A8-8297-9B7464DC5BA3}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3BF059B0-51C0-44A8-8297-9B7464DC5BA3}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3BF059B0-51C0-44A8-8297-9B7464DC5BA3}.Release|x86.Build.0 = Release|Any CPU
|
||||
{ADBEBCB3-5367-431B-AFC8-F57CAF9F029D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{ADBEBCB3-5367-431B-AFC8-F57CAF9F029D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{ADBEBCB3-5367-431B-AFC8-F57CAF9F029D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{ADBEBCB3-5367-431B-AFC8-F57CAF9F029D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{ADBEBCB3-5367-431B-AFC8-F57CAF9F029D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{ADBEBCB3-5367-431B-AFC8-F57CAF9F029D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{ADBEBCB3-5367-431B-AFC8-F57CAF9F029D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{ADBEBCB3-5367-431B-AFC8-F57CAF9F029D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{ADBEBCB3-5367-431B-AFC8-F57CAF9F029D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{ADBEBCB3-5367-431B-AFC8-F57CAF9F029D}.Release|x64.Build.0 = Release|Any CPU
|
||||
{ADBEBCB3-5367-431B-AFC8-F57CAF9F029D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{ADBEBCB3-5367-431B-AFC8-F57CAF9F029D}.Release|x86.Build.0 = Release|Any CPU
|
||||
{4E3D817D-9A0A-40F4-A1A1-4865375F40DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4E3D817D-9A0A-40F4-A1A1-4865375F40DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4E3D817D-9A0A-40F4-A1A1-4865375F40DD}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{4E3D817D-9A0A-40F4-A1A1-4865375F40DD}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{4E3D817D-9A0A-40F4-A1A1-4865375F40DD}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{4E3D817D-9A0A-40F4-A1A1-4865375F40DD}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{4E3D817D-9A0A-40F4-A1A1-4865375F40DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4E3D817D-9A0A-40F4-A1A1-4865375F40DD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4E3D817D-9A0A-40F4-A1A1-4865375F40DD}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{4E3D817D-9A0A-40F4-A1A1-4865375F40DD}.Release|x64.Build.0 = Release|Any CPU
|
||||
{4E3D817D-9A0A-40F4-A1A1-4865375F40DD}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{4E3D817D-9A0A-40F4-A1A1-4865375F40DD}.Release|x86.Build.0 = Release|Any CPU
|
||||
{ED034E82-07F4-473D-9C3A-F5EF9C961CFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{ED034E82-07F4-473D-9C3A-F5EF9C961CFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{ED034E82-07F4-473D-9C3A-F5EF9C961CFD}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{ED034E82-07F4-473D-9C3A-F5EF9C961CFD}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{ED034E82-07F4-473D-9C3A-F5EF9C961CFD}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{ED034E82-07F4-473D-9C3A-F5EF9C961CFD}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{ED034E82-07F4-473D-9C3A-F5EF9C961CFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{ED034E82-07F4-473D-9C3A-F5EF9C961CFD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{ED034E82-07F4-473D-9C3A-F5EF9C961CFD}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{ED034E82-07F4-473D-9C3A-F5EF9C961CFD}.Release|x64.Build.0 = Release|Any CPU
|
||||
{ED034E82-07F4-473D-9C3A-F5EF9C961CFD}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{ED034E82-07F4-473D-9C3A-F5EF9C961CFD}.Release|x86.Build.0 = Release|Any CPU
|
||||
{9A3E289A-3A88-4A76-AD0B-32C12EBA1B8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9A3E289A-3A88-4A76-AD0B-32C12EBA1B8B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9A3E289A-3A88-4A76-AD0B-32C12EBA1B8B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{9A3E289A-3A88-4A76-AD0B-32C12EBA1B8B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{9A3E289A-3A88-4A76-AD0B-32C12EBA1B8B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{9A3E289A-3A88-4A76-AD0B-32C12EBA1B8B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{9A3E289A-3A88-4A76-AD0B-32C12EBA1B8B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9A3E289A-3A88-4A76-AD0B-32C12EBA1B8B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9A3E289A-3A88-4A76-AD0B-32C12EBA1B8B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{9A3E289A-3A88-4A76-AD0B-32C12EBA1B8B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{9A3E289A-3A88-4A76-AD0B-32C12EBA1B8B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{9A3E289A-3A88-4A76-AD0B-32C12EBA1B8B}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -22,7 +22,6 @@ namespace BCG {
|
||||
/// with PubSub, as some clients are still using ManagedSubcribers)
|
||||
/// </summary>
|
||||
public class ManagedSubscriber : IManagedSubscriber, IWorker, IDisposable {
|
||||
private static ManagedSubscriber? _self;
|
||||
private ISubscriberCore _subcore;
|
||||
// private IDictionary myTypedDispatchTable = new Hashtable(),
|
||||
// myRawDispatchTable = new Hashtable();
|
||||
@@ -34,7 +33,6 @@ namespace BCG {
|
||||
ManagedSubscriber(ISubscriberCore subsCore) { _subcore = subsCore; }
|
||||
|
||||
public void doWork() {
|
||||
var msg_map = new Dictionary<string, List<bts.PubSubServerMessage>>();
|
||||
var updates = _subcore.get_updates(TimeSpan.Zero);
|
||||
if (updates.Count() == 0)
|
||||
return;
|
||||
|
||||
@@ -45,11 +45,7 @@ namespace BCG
|
||||
get { return myConnInfo; }
|
||||
}
|
||||
|
||||
override public string ToString()
|
||||
{
|
||||
Func<byte[], int> len = (byte[] m) => { return m == null ? 0 : m.Length; };
|
||||
return $"type: {myMsgType} conn: {myConnInfo} msg: {len(myMsg)}";
|
||||
}
|
||||
|
||||
public override string ToString() =>
|
||||
$"type: {myMsgType} conn: {myConnInfo} msg: {myMsg?.Length ?? 0}";
|
||||
}
|
||||
}
|
||||
@@ -46,7 +46,7 @@ namespace bts {
|
||||
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5));
|
||||
_accept_socket.BeginAccept(new AsyncCallback(_on_accept), new object[] { });
|
||||
if (ex is OutOfMemoryException)
|
||||
throw ex;
|
||||
throw;
|
||||
return;
|
||||
}
|
||||
new_sock.LingerState = new LingerOption(false, 0);
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
using bts;
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections;
|
||||
using bts;
|
||||
using System.Threading;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
|
||||
namespace BCG {
|
||||
/// <summary>
|
||||
@@ -69,7 +68,8 @@ namespace BCG {
|
||||
|
||||
public static byte[] getBytesFromStream(params Stream[] streams) {
|
||||
long totalSize = 0;
|
||||
BinaryWriter bw = new BinaryWriter(new MemoryStream());
|
||||
using var ms = new MemoryStream();
|
||||
using var bw = new BinaryWriter(ms, Encoding.UTF8, true);
|
||||
foreach (Stream s in streams)
|
||||
totalSize += s.Length - s.Position;
|
||||
bw.Write(Convert.ToInt32(totalSize));
|
||||
@@ -78,7 +78,8 @@ namespace BCG {
|
||||
int lengthToReadForThisStream = Convert.ToInt32(s.Length - s.Position);
|
||||
bw.Write(br.ReadBytes(lengthToReadForThisStream));
|
||||
}
|
||||
return (bw.BaseStream as MemoryStream).ToArray();
|
||||
bw.Flush();
|
||||
return ms.ToArray();
|
||||
}
|
||||
|
||||
public static byte[] read_bytes(Stream str) {
|
||||
|
||||
@@ -92,7 +92,7 @@ namespace BCG {
|
||||
|
||||
public void publish(PubSubClientMessage msg) {
|
||||
Log.assert(msg.msg_type == PubSubMessageType.PUBLISH);
|
||||
Log.assert(!String.IsNullOrEmpty(msg.pub_msg.tag_type));
|
||||
Log.assert(!string.IsNullOrEmpty(msg.pub_msg?.tag_type));
|
||||
bts.Log.Gen.info($"PublisherCore.publish msg: {msg}");
|
||||
_main_queue.enqueue(msg);
|
||||
}
|
||||
|
||||
@@ -143,7 +143,7 @@ namespace BCG {
|
||||
public void doWork() {
|
||||
if (_connection_cb != null) {
|
||||
var conns = _conn_callback_queue.dequeueAll();
|
||||
foreach (var ci in conns) {
|
||||
foreach (var ci in conns.ExceptNull()) {
|
||||
_connection_cb(ci.client_url, ci.status);
|
||||
}
|
||||
}
|
||||
@@ -175,7 +175,7 @@ namespace BCG {
|
||||
case RemoteMessageType.Data:
|
||||
// if callback is registered fire it right away, else enqueue it
|
||||
if (_data_cb != null)
|
||||
_data_cb(sender_rci.ToString(), message.message);
|
||||
_data_cb(sender_rci.ToString(), message.message ?? Array.Empty<byte>());
|
||||
else
|
||||
_received_data_queue.enqueue(new Pair<string, byte[]>(sender_rci.ToString(), message.message));
|
||||
break;
|
||||
@@ -258,7 +258,7 @@ namespace BCG {
|
||||
// (which gets called in another thread)
|
||||
private void _handle_new_connections() {
|
||||
var new_conns = _new_connections.dequeueAll();
|
||||
foreach (ITCPConnection conn in new_conns) {
|
||||
foreach (var conn in new_conns.ExceptNull()) {
|
||||
var peer_rci = conn.get_peer_address();
|
||||
bts.Log.Gen.info($"ManagedTCPMessageHub._handle_new_connections conn: {conn}");
|
||||
///to stop it from being garbabge collected immediatly
|
||||
|
||||
@@ -16,8 +16,8 @@ public interface IPubSubState {
|
||||
|
||||
ICollection<string> all_tags { get; }
|
||||
|
||||
byte[] get_content(string tag);
|
||||
string getTagType(string tag);
|
||||
byte[]? get_content(string tag);
|
||||
string? getTagType(string tag);
|
||||
void get_all_connections(
|
||||
string tag,
|
||||
out Dictionary<string, string> subscribers,
|
||||
|
||||
@@ -188,11 +188,11 @@ namespace BCG {
|
||||
_state.handle_sub(sub_msg); // state keeps the list of all subscribers
|
||||
///to all these new subscriber s, send the existing data
|
||||
foreach (string tag in sub_msg.tags.empty_if_null()) {
|
||||
byte[] data = _state.get_content(tag);
|
||||
byte[]? data = _state.get_content(tag);
|
||||
//ie data has been published once
|
||||
if (data != null) {
|
||||
bts.Log.Gen.info($"ManagedTCPMessgeHub._handle_sub get_content tag: {tag} data len: {data.Length}");
|
||||
string tag_type_ = _state.getTagType(tag);
|
||||
string? tag_type_ = _state.getTagType(tag);
|
||||
var msg_to_send = new PubSubServerMessage() {
|
||||
tag = tag,
|
||||
tag_type = tag_type_,
|
||||
|
||||
@@ -148,7 +148,7 @@ namespace BCG {
|
||||
return new string[] { };
|
||||
}
|
||||
|
||||
public byte[] get_content(string tag) {
|
||||
public byte[]? get_content(string tag) {
|
||||
if (!_tag_to_data_map.ContainsKey(tag))
|
||||
return null;
|
||||
var rv = _tag_to_data_map[tag].get_current_content();
|
||||
@@ -157,7 +157,7 @@ namespace BCG {
|
||||
return rv;
|
||||
}
|
||||
|
||||
public string getTagType(string tag) {
|
||||
public string? getTagType(string tag) {
|
||||
if (!_tag_to_data_map.ContainsKey(tag))
|
||||
return null;
|
||||
else
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace bts {
|
||||
public class SingleTagData {
|
||||
private readonly IPubSubServerTagHandler? _tag_handler;
|
||||
|
||||
public SingleTagData(string tag, string tag_type, IPubSubServerTagHandler tag_handler) {
|
||||
public SingleTagData(string tag, string tag_type, IPubSubServerTagHandler? tag_handler) {
|
||||
bts.Log.Gen.info($"SingleTagData constructed for tag: {tag} tag_type: {tag_type}");
|
||||
this.tag = tag;
|
||||
this.tag_type = tag_type;
|
||||
|
||||
@@ -46,7 +46,6 @@ namespace BCG {
|
||||
}
|
||||
|
||||
public void onConnection(ITCPConnection connection) {
|
||||
string ip; int port;
|
||||
var peer_rci = connection.get_peer_address();
|
||||
bts.Log.Gen.info($"SimpleTCPClient.onConnection connected to server: {peer_rci}, starting task to send data in a loop");
|
||||
if (_listener != null) {
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
[DataStreamUserRespresentation("nl")]
|
||||
public class BlueOrbNLStream : ViewStream {
|
||||
private readonly string _nl_prompt;
|
||||
private ViewStream _nl_to_dsl_stream, _dsl_stream;
|
||||
private ViewStream? _nl_to_dsl_stream, _dsl_stream;
|
||||
private IDictionary<string, object> _dp_metadata = new Dictionary<string, object>();
|
||||
public BlueOrbNLStream(string nl_prompt) {
|
||||
_nl_prompt = nl_prompt;
|
||||
|
||||
@@ -85,7 +85,8 @@ namespace bts.BlueOrb {
|
||||
.GetProperty("choices")[0]
|
||||
.GetProperty("message")
|
||||
.GetProperty("content")
|
||||
.GetString();
|
||||
.GetString()
|
||||
?? string.Empty;
|
||||
|
||||
//return gpt_response;
|
||||
DateTime t1 = DateTime.Now;
|
||||
|
||||
@@ -4,6 +4,8 @@ using BCG.Utilities.General;
|
||||
using Bts.PubSub;
|
||||
using Bts.SharedStreams.Tables;
|
||||
|
||||
using Spark.Core.Diagnostics;
|
||||
|
||||
namespace bts {
|
||||
// TODO: Use dependency injection to instantiate this stream, and others like it that depend on
|
||||
// ISubscriberCore(Factory). Until then, hide it from DSQA.
|
||||
@@ -40,7 +42,7 @@ namespace bts {
|
||||
foreach (var u in updates) {
|
||||
if (u.tag != "System_AllStatistics")
|
||||
continue;
|
||||
var tag_infos = TagStatsInfo.deserialize(u.data);
|
||||
var tag_infos = TagStatsInfo.deserialize(ExceptionAssert.NotNull(u.data));
|
||||
foreach (var ti in tag_infos) {
|
||||
_tag_map[ti.tag] = ti;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<ShowMissingItemTypes>false</ShowMissingItemTypes>
|
||||
<Configuration Condition="'$(configuration)'==''">Debug</Configuration>
|
||||
<EnablePreviewFeatures>true</EnablePreviewFeatures>
|
||||
<LangVersion>11</LangVersion>
|
||||
<LangVersion>12</LangVersion>
|
||||
<UseProjectRefs Condition="'$(UseProjectRefs)' == ''">true</UseProjectRefs>
|
||||
<SparkVersion Condition="'$(SparkVersion)' == ''">3.2.0-preview</SparkVersion>
|
||||
<Version>$(SparkVersion)</Version>
|
||||
|
||||
@@ -767,8 +767,10 @@ void MDP3Listener::onOption(
|
||||
(uint16_t)_latest_sequence, 0);
|
||||
const auto &sec = def.message();
|
||||
auto exchange_id = sec.securityId();
|
||||
LOG(md, Info, "MDP3Listener::onOption exchange_id: {} desc: {}", exchange_id,
|
||||
std::string(sec.symbol().items()));
|
||||
std::string sec_name = std::string(sec.symbol().items());
|
||||
LOG(md, Info,
|
||||
R"([mdp3_listener_on_opt_beg.json]{{ "exchId": {}, "name": "{}" }})",
|
||||
exchange_id, sec_name);
|
||||
if (filter_security(exchange_id, sec) != ADD)
|
||||
return;
|
||||
|
||||
@@ -790,7 +792,12 @@ void MDP3Listener::onOption(
|
||||
int8_t tick_rule;
|
||||
if (sec.tickRule(tick_rule)) {
|
||||
decode_ticks(tick_rule, double_of_price(min_tick, 0), fsec);
|
||||
} else {
|
||||
LOG(md, Error,
|
||||
R"([mdp3_listener_on_opt_err.json]{{ "err": "No tick rule", "sec": "{}" }})",
|
||||
sec_name);
|
||||
}
|
||||
|
||||
fsec.cash_per_point = double_of_price(min_tick_amount, 0) / fsec.low_tick /
|
||||
pow10(fsec.display_factor);
|
||||
|
||||
@@ -801,6 +808,11 @@ void MDP3Listener::onOption(
|
||||
auto status = security_trading_status(def.message())
|
||||
.value_or(co2::TRADINGSTATUS_UNKNOWN);
|
||||
add_security(fsec, status);
|
||||
LOG(md, Info,
|
||||
R"([mdp3_listener_on_opt_end.json]{{ "exchId": {}, "name": "{}", "cpp": {}, "cp": {}, "st": {}, "loTick": {}, "hiTick": {}, "pxBreak": {}, "pxDisplay": {}, "ts": {} }})",
|
||||
exchange_id, sec_name, fsec.cash_per_point, fsec.call_put, fsec.low_tick,
|
||||
fsec.high_tick, fsec.price_break, fsec.cme_price_display_format, status,
|
||||
bts::core::TimeStamp::now_ns());
|
||||
}
|
||||
|
||||
// min_tick specializations
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
namespace mbts.spark {
|
||||
using bts.api;
|
||||
|
||||
using Bts.Collections;
|
||||
|
||||
using mbts.analytics;
|
||||
|
||||
using System;
|
||||
@@ -39,7 +41,7 @@ namespace mbts.spark {
|
||||
sym_filter ??= _ => true;
|
||||
return all_sym_map.SafeWhere(kv => kv.Value is not null && sym_filter(kv.Key))
|
||||
.SelectMany(kv => kv.Value.exp_price_map)
|
||||
.ToDictionaryCrushed(kv => kv.Key.to_vs_exp(), kv => kv.Value);
|
||||
.ToDictionary(kv => kv.Key.to_vs_exp(), kv => kv.Value, DuplicateKeyPolicy.Overwrite);
|
||||
}
|
||||
|
||||
public IReadOnlyDictionary<SecurityExpiration, DriverMD> get_price_map() {
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
using bts;
|
||||
using bts.api;
|
||||
using bts.collections;
|
||||
using bts.utils;
|
||||
|
||||
using Bts.Collections;
|
||||
|
||||
using mbts.analytics;
|
||||
using mbts.co2;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace mbts.spark {
|
||||
// Data structure for securities stored in the system
|
||||
// (These dont have to be exchange securities).
|
||||
@@ -239,7 +238,7 @@ namespace mbts.spark {
|
||||
|
||||
public IDictionary<(string, Venue), IEnumerable<DateTime>> get_option_expirations(
|
||||
IEnumerable<(string, Venue)> option_names, bool is_display_expiration) {
|
||||
return option_names.ToDictionaryDupes(kv => kv, kv => get_option_expirations(kv));
|
||||
return option_names.ToDictionary(kv => kv, get_option_expirations, DuplicateKeyPolicy.Overwrite);
|
||||
}
|
||||
|
||||
public IEnumerable<SecurityTuple> get_options() {
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
using bts.api;
|
||||
using bts.collections;
|
||||
|
||||
using Bts.Collections;
|
||||
|
||||
using mbts.analytics;
|
||||
using mbts.collections;
|
||||
using mbts.ui;
|
||||
@@ -176,7 +178,7 @@
|
||||
IReadOnlyDictionary<VolSurfaceExpiration, double> exp_map, HashSet<(string, Venue)> master_symbols) =>
|
||||
exp_map.Where(kv => selected_symbols.Contains(kv.Key.symbol) &&
|
||||
master_symbols.Contains((kv.Key.symbol, kv.Key.venue)))
|
||||
.ToDictionaryCrushed(kv => kv.Key.expiration, kv => kv.Value);
|
||||
.ToDictionary(kv => kv.Key.expiration, kv => kv.Value, DuplicateKeyPolicy.Overwrite);
|
||||
|
||||
public class SymbolItem : IEquatable<SymbolItem> {
|
||||
public SymbolItem(string symbol, Color color) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
namespace mbts.spark {
|
||||
using bts.api;
|
||||
using bts.utils;
|
||||
|
||||
using Bts.Collections;
|
||||
|
||||
using mbts.analytics;
|
||||
using mbts.ui.controls;
|
||||
@@ -404,8 +405,9 @@
|
||||
public void sync_slave_ref_forwards(VolSurfaceExpiration vs_exp) {
|
||||
DisplayModelData curr_data = _get_current_data();
|
||||
if (curr_data != null && curr_data.vs_output != null && curr_data.vs_output.volsurface_input != null) {
|
||||
IEnumerable<VolSurfaceExpiration> slave_exps = VolSurfaceUtilityFunctions.get_slave_expirations(curr_data.vs_output.volsurface_input);
|
||||
_send_curve_action_request(slave_exps.ToDictionaryDupes(e => e, e => new VolCurveAction(VolCurveAction.ActionType.SyncSlaveRefFwds)), false, false);
|
||||
var expActions = VolSurfaceUtilityFunctions.get_slave_expirations(curr_data.vs_output.volsurface_input)
|
||||
.ToDictionary(e => e, e => new VolCurveAction(VolCurveAction.ActionType.SyncSlaveRefFwds), DuplicateKeyPolicy.Overwrite);
|
||||
_send_curve_action_request(expActions, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@ namespace mbts.analytics;
|
||||
|
||||
using bts.api;
|
||||
|
||||
using Bts.Collections;
|
||||
|
||||
using mbts.spark;
|
||||
|
||||
using System.Collections.Generic;
|
||||
@@ -13,6 +15,6 @@ public class VolSurfaceStrikeMap {
|
||||
public VolSurfaceStrikeMap(IEnumerable<(string, Venue)> option_names, SystemContractData sc_data) {
|
||||
var on_map = new HashSet<(string, Venue)>(option_names);
|
||||
var aux_map = sc_data.get_option_strikes(on_map);
|
||||
strike_map = aux_map.ToDictionaryCrushed(kv => new VolSurfaceExpiration(kv.Key), kv => kv.Value);
|
||||
strike_map = aux_map.ToDictionary(kv => new VolSurfaceExpiration(kv.Key), kv => kv.Value, DuplicateKeyPolicy.Overwrite);
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,8 @@ namespace mbts.analytics {
|
||||
using bts.collections;
|
||||
using bts.utils;
|
||||
|
||||
using Bts.Collections;
|
||||
|
||||
using mbts.spark;
|
||||
using mbts.utils;
|
||||
|
||||
@@ -375,8 +377,10 @@ namespace mbts.analytics {
|
||||
/// </summary>
|
||||
static IDictionary<(string, Venue), HashSet<(string, Venue)>> _hash_relationship(
|
||||
VolSurfaceSettings vs_settings, IEnumerable<VolSurfaceSymbolRelationship> rels) {
|
||||
var rv = rels.empty_if_null().ToDictionaryCrushed(
|
||||
r => (r.symbol.symbol, r.symbol.venue), r => r.connected_symbols.Select(s => (s.symbol, s.venue)).ToHashSet());
|
||||
var rv = rels.empty_if_null().ToDictionary(
|
||||
r => (r.symbol.symbol, r.symbol.venue),
|
||||
r => r.connected_symbols.Select(s => (s.symbol, s.venue)).ToHashSet(),
|
||||
DuplicateKeyPolicy.Overwrite);
|
||||
foreach (var s in VolSurfaceDataFunctions.get_symbols(vs_settings)) {
|
||||
rv.GetOrAdd(s, _ => new()).Add(s);
|
||||
}
|
||||
@@ -702,10 +706,10 @@ namespace mbts.analytics {
|
||||
IDictionary<SecurityExpiration, double> future_driver_price_map
|
||||
) {
|
||||
var rv = new Dictionary<SecurityExpiration, VolSurfaceDriverTheo>();
|
||||
exp_params_map = exp_params_map.ToDictionaryCrushed(
|
||||
kv => kv.Key.unset_exchange(), kv => kv.Value);
|
||||
future_driver_price_map = future_driver_price_map.ToDictionaryCrushed(
|
||||
kv => kv.Key.unset_exchange(), kv => kv.Value);
|
||||
exp_params_map = exp_params_map.ToDictionary(
|
||||
kv => kv.Key.unset_exchange(), kv => kv.Value, DuplicateKeyPolicy.Overwrite);
|
||||
future_driver_price_map = future_driver_price_map.ToDictionary(
|
||||
kv => kv.Key.unset_exchange(), kv => kv.Value, DuplicateKeyPolicy.Overwrite);
|
||||
foreach (var exp in future_exps) {
|
||||
/// This is not the best sln, but the calculations are
|
||||
/// exchange agnostic, the other data may not be.
|
||||
|
||||
@@ -1,17 +1,10 @@
|
||||
using System;
|
||||
using bts.api;
|
||||
|
||||
using Bts.Collections;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using ProtoBuf;
|
||||
|
||||
using bts.api;
|
||||
using bts.settings;
|
||||
using bts.spark;
|
||||
|
||||
using mbts.spark;
|
||||
using mbts;
|
||||
|
||||
namespace mbts.analytics {
|
||||
/// Just a conveniant packaging of data for a single
|
||||
@@ -41,7 +34,8 @@ namespace mbts.analytics {
|
||||
}
|
||||
|
||||
public IDictionary<mbts.SecurityTuple, double> get_cpp_map() {
|
||||
return input.get_cpp_list().ToDictionaryCrushed(i => new mbts.SecurityTuple(i.Item1, i.Item2, Venue.Sim), i => i.Item3);
|
||||
return input.get_cpp_list().ToDictionary(
|
||||
i => new SecurityTuple(i.Item1, i.Item2, Venue.Sim), i => i.Item3, DuplicateKeyPolicy.Overwrite);
|
||||
}
|
||||
|
||||
private static mbts.SecurityExpiration _unset = mbts.SecurityExpiration.empty;
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
namespace mbts.ui {
|
||||
using bts.collections;
|
||||
|
||||
using Spark.Core;
|
||||
|
||||
using System.Collections;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
@@ -9,7 +11,7 @@ namespace mbts.ui {
|
||||
|
||||
[ContentProperty(nameof(Map))]
|
||||
class KeyedTemplateSelector : DataTemplateSelector {
|
||||
readonly KeyedCollection<TemplateSelectorKeyValue, object?> _map = new(kv => kv.Key);
|
||||
readonly KeyedCollection<TemplateSelectorKeyValue, object> _map = new(kv => kv.Key ?? Optional<object>.Empty);
|
||||
|
||||
public IList Map => _map;
|
||||
public DataTemplate? Default { get; set; }
|
||||
|
||||
@@ -146,7 +146,7 @@ namespace bts {
|
||||
var qtyDisplay = meta.HasValue && meta.Value.HasQuantityDisplay ? meta.Value.QuantityDisplay : Security.Defaults.quantity_display_settingsi;
|
||||
if (sec.HasContractSpec) {
|
||||
var pd = priceDisplay.CloneToMutable();
|
||||
pd.TickFactors = TickUtils.get_tick(sec, 0).to_api_tick_factors();
|
||||
pd.TickFactors = sec.tick_factors().to_api_tick_factors();
|
||||
priceDisplay = new(pd);
|
||||
if (sec.ContractSpec.QuantityInfos.TryGetFirst(out var qtyInfo)) {
|
||||
var qd = qtyDisplay.CloneToMutable();
|
||||
|
||||
@@ -4,6 +4,8 @@ using bts.collections;
|
||||
using bts.proto;
|
||||
using bts.utils;
|
||||
|
||||
using Bts.Collections;
|
||||
|
||||
using mbts.collections;
|
||||
using mbts.spark.utilities;
|
||||
using mbts.ui;
|
||||
|
||||
@@ -513,7 +513,7 @@ namespace mbts.spark {
|
||||
|
||||
public ItemSettings With(Optional<FontParamsProto> font = default, uint? background_color = null, bool? show_label = null, bool in_place = false) {
|
||||
var rv = in_place ? this : Clone();
|
||||
if (font.has_value) {
|
||||
if (font.HasValue) {
|
||||
rv.font = font;
|
||||
}
|
||||
if (background_color.HasValue) {
|
||||
|
||||
@@ -339,11 +339,11 @@ namespace mbts.spark {
|
||||
|
||||
PropertyAutoWrapper<LadderSettings, bool> bool_prop(
|
||||
string name, Func<LadderSettings, bool> get_bool) =>
|
||||
backing(name, init, get_bool, EqualityComparer.Create(get_bool));
|
||||
backing(name, init, get_bool, EqualityComparer.Create(get_bool!));
|
||||
|
||||
PropertyAutoWrapper<LadderSettings, Brush> brush_prop(
|
||||
string name, Func<LadderSettings, uint> get_color_uint) {
|
||||
var comp = EqualityComparer.Create(get_color_uint);
|
||||
var comp = EqualityComparer.Create(get_color_uint!);
|
||||
return backing(name, init, s => get_color_uint(s).rgb_brush(), comp);
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ namespace Spark.Trading {
|
||||
meta.Value.Value.PriceDisplay : Security.Defaults.price_display_settingsi;
|
||||
if (security.HasValue) {
|
||||
rv = rv.with(
|
||||
tick_factors: security.Value.regional_ticks().low_tick.to_api_tick_factors());
|
||||
tick_factors: security.Value.tick_factors().to_api_tick_factors());
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@ using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
|
||||
using Columns = mbts.spark.OrderBookGridView.ColumnKeys;
|
||||
using NumericExceptionAssert = Bts.Numerics.Diagnostics.ExceptionAssert;
|
||||
|
||||
namespace mbts.spark {
|
||||
partial class OrderBookVM : DisposableViewModelBase, IHandleRowSelection, IHandleGridSorting, IRequestRowSelection {
|
||||
@@ -791,7 +792,7 @@ namespace mbts.spark {
|
||||
|
||||
double validate_price() {
|
||||
if (price.HasValue) {
|
||||
ExceptionAssert.NumericArgument.is_real(price.Value, nameof(price));
|
||||
NumericExceptionAssert.Argument.is_real(price.Value, nameof(price));
|
||||
return price.Value;
|
||||
}
|
||||
return row.price;
|
||||
@@ -799,7 +800,7 @@ namespace mbts.spark {
|
||||
|
||||
double validate_quantity() {
|
||||
if (quantity.HasValue) {
|
||||
ExceptionAssert.NumericArgument.is_real_non_zero(quantity.Value, nameof(quantity));
|
||||
NumericExceptionAssert.Argument.is_real_non_zero(quantity.Value, nameof(quantity));
|
||||
return quantity.Value;
|
||||
}
|
||||
return row.quantity;
|
||||
|
||||
@@ -4,6 +4,8 @@ namespace bts.shell {
|
||||
using bts.settings;
|
||||
using bts.shell.pnl;
|
||||
|
||||
using Bts.Collections;
|
||||
|
||||
using mbts.config;
|
||||
using mbts.persist;
|
||||
using mbts.spark;
|
||||
@@ -111,8 +113,8 @@ namespace bts.shell {
|
||||
foreach (var kv in snapshot) {
|
||||
if (default_trigger_map.TryGetValue(kv.Key, out var default_anims)) {
|
||||
// assume 1 animation per column
|
||||
var actual_col_anims = kv.Value.animations.ToDictionaryCrushed(a => a.column);
|
||||
var default_col_anims = default_anims.animations.ToDictionaryCrushed(a => a.column);
|
||||
var actual_col_anims = kv.Value.animations.ToDictionary(a => a.column, DuplicateKeyPolicy.Overwrite);
|
||||
var default_col_anims = default_anims.animations.ToDictionary(a => a.column, DuplicateKeyPolicy.Overwrite);
|
||||
actual_col_anims.Difference(default_col_anims,
|
||||
out var exclusive_actual,
|
||||
out var exclusive_defaults,
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
using bts.api;
|
||||
|
||||
using Bts.Collections;
|
||||
|
||||
using mbts;
|
||||
using mbts.analytics;
|
||||
using mbts.spark;
|
||||
using mbts.ui;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using mbts.ui;
|
||||
using mbts.spark;
|
||||
using bts.api;
|
||||
using mbts.analytics;
|
||||
using mbts;
|
||||
|
||||
namespace BCG {
|
||||
/// For each NMSheetSymbol in an NMSheet gets all the
|
||||
@@ -238,7 +242,7 @@ namespace BCG {
|
||||
exp.symbol == _nmsheet_symbol.option_name &&
|
||||
exp.exchange == _nmsheet_symbol.option_exchange &&
|
||||
exp.security_type == SecurityType.Option)
|
||||
?.ToDictionaryCrushed(kv => kv.Key.expiration, kv => kv.Value)
|
||||
?.ToDictionary(kv => kv.Key.expiration, kv => kv.Value, DuplicateKeyPolicy.Overwrite)
|
||||
?? new();
|
||||
IDictionary<DateTime, ATMData> atm_data = OptionATMDataSource.compute_atm_data(_get_onefive(), theo_data, option_exp_roll_data);
|
||||
if (sheet_settings.setting_atm.select_atm_nearest_strike_only)
|
||||
|
||||
@@ -681,7 +681,6 @@ namespace mbts.spark {
|
||||
void _on_property_added<T>(string prop_name, int target_field_number, OneofDescriptor oneof_descriptor, IProperty<T> prop, Action<T> assign_to_prop, T non_uniform_value, bool validate_on_changed, AlgoParamPermissions permissions) where T : struct {
|
||||
var target_field_desc = ProtoHelper.Descriptor<TMutable>().FindFieldByNumber(target_field_number);
|
||||
var param = new AlgoParamVM<T>(prop_name, DisplayNameHelper.snake_to_title_case(prop_name), prop.Value) { permissions = permissions };
|
||||
var oneof_index = ProtoHelper.get_oneof_descriptor_index<T>(oneof_descriptor);
|
||||
_algo_params.Add(param);
|
||||
_auto_props.Add(new AutoProp(prop_name, mval => {
|
||||
if (mval == null || !param.has_value)
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
namespace mbts.analytics {
|
||||
using bts.api;
|
||||
|
||||
using Bts.Collections;
|
||||
|
||||
using Spark.Core.Collections;
|
||||
|
||||
using System.Collections.Generic;
|
||||
@@ -38,13 +40,14 @@ namespace mbts.analytics {
|
||||
}
|
||||
}
|
||||
|
||||
var fut_data = pos_data.future_pos_map.ToDictionaryCrushed(
|
||||
var fut_data = pos_data.future_pos_map.ToDictionary(
|
||||
kv => kv.Key,
|
||||
kv => {
|
||||
var cpp = cpp_map.GetValueOrDefault(
|
||||
new(SecurityType.Future, kv.Key.symbol, Venue.Unset), double.NaN);
|
||||
return (kv.Value * cpp / interms_cpp, kv.Value);
|
||||
});
|
||||
},
|
||||
DuplicateKeyPolicy.Overwrite);
|
||||
return new(opt_data, fut_data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
using bts.api;
|
||||
using bts.api.analytics;
|
||||
using bts.utils;
|
||||
|
||||
using Bts.Collections;
|
||||
|
||||
using mbts.spark;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using bts.api.analytics;
|
||||
|
||||
using bts.api;
|
||||
using bts.utils;
|
||||
using mbts.spark;
|
||||
|
||||
namespace mbts.analytics {
|
||||
public class VolSurfaceSlideCalculator {
|
||||
@@ -65,7 +68,10 @@ namespace mbts.analytics {
|
||||
}
|
||||
option_pos_map = option_pos_map_aux.ToDictionary(
|
||||
kv => kv.Key.with(security_type: SecurityType.Option).to_vs_exp(),
|
||||
kv => kv.Value.ToDictionaryDupes(i => i.Key, i => Tuple.Create(i.Value[0], i.Value[1])));
|
||||
kv => (IDictionary<double, Tuple<double, double>>)kv.Value.ToDictionary(
|
||||
i => i.Key,
|
||||
i => Tuple.Create(i.Value[0], i.Value[1]),
|
||||
DuplicateKeyPolicy.Overwrite));
|
||||
future_pos_map = future_pos_map_aux.ToDictionary(
|
||||
kv => kv.Key.with(security_type: SecurityType.Future).to_vs_exp(),
|
||||
kv => kv.Value);
|
||||
@@ -122,11 +128,13 @@ namespace mbts.analytics {
|
||||
option_data[exp_kv.Key] = exp_kv.Value.ToDictionary(kv => kv.Key, kv => new ComboStrikeData(kv.Value.Item1 * cpp / interms_cpp, kv.Value.Item2 * cpp / interms_cpp, kv.Value.Item1, kv.Value.Item2));
|
||||
}
|
||||
|
||||
future_data = future_pos_map.ToDictionaryDupes(kv => kv.Key,
|
||||
kv => {
|
||||
// double cpp = cpp_map.TryGetValue(new SecurityTuple(SecurityType.Future, kv.Key.symbol, Venue.Unset), out cpp) ? cpp : Double.NaN;
|
||||
return Tuple.Create(kv.Value * cpp / interms_cpp, kv.Value);
|
||||
});
|
||||
future_data = future_pos_map.ToDictionary(
|
||||
kv => kv.Key,
|
||||
kv => {
|
||||
// double cpp = cpp_map.TryGetValue(new SecurityTuple(SecurityType.Future, kv.Key.symbol, Venue.Unset), out cpp) ? cpp : Double.NaN;
|
||||
return Tuple.Create(kv.Value * cpp / interms_cpp, kv.Value);
|
||||
},
|
||||
DuplicateKeyPolicy.Overwrite);
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -414,8 +422,8 @@ namespace mbts.analytics {
|
||||
out IDictionary<SecurityExpiration, SlideContractUnit> slide_expiration_map) {
|
||||
slide_expiration_map = new Dictionary<SecurityExpiration, SlideContractUnit>();
|
||||
int n_greeks = ordered_greeks.Count(),
|
||||
zero_handle_index = perc_handles.find_first_index(0.0),
|
||||
pnl_index = ordered_greeks.find_first_index(VolSurfaceGreeks.Pnl);
|
||||
zero_handle_index = perc_handles.FindIndex(0.0),
|
||||
pnl_index = ordered_greeks.FindIndex(VolSurfaceGreeks.Pnl);
|
||||
double delta_terms_cpp = cpp_map.TryGetValue(delta_terms_symbol, out delta_terms_cpp) ? delta_terms_cpp : Double.NaN;
|
||||
foreach (var kv_exp in pos_map) {
|
||||
VolSurfaceExpiration exp = kv_exp.Key;
|
||||
@@ -457,8 +465,8 @@ namespace mbts.analytics {
|
||||
double delta_terms_cpp = cpp_map.TryGetValue(delta_terms_symbol, out delta_terms_cpp) ? delta_terms_cpp : Double.NaN,
|
||||
oev_terms_cpp = cpp_map.TryGetValue(new SecurityTuple(SecurityType.Option, oev_terms_option_symbol, Venue.Unset), out oev_terms_cpp) ? oev_terms_cpp : Double.NaN;
|
||||
int n_greeks = ordered_greeks.Count(),
|
||||
zero_handle_index = perc_handles.find_first_index(0.0),
|
||||
pnl_index = ordered_greeks.find_first_index(VolSurfaceGreeks.Pnl);
|
||||
zero_handle_index = perc_handles.FindIndex(0.0),
|
||||
pnl_index = ordered_greeks.FindIndex(VolSurfaceGreeks.Pnl);
|
||||
IDictionary<mbts.SecurityStrike, List<Theos>> exp_k_theo_map = VolSurfaceSlideCalculator._convert_exp_theos_to_strike_theos(theo_map);
|
||||
/* expiration */
|
||||
foreach (var kv_exp in pos_map) {
|
||||
|
||||
@@ -8,9 +8,9 @@ using Spark.Api.Services;
|
||||
|
||||
using System.Threading.Tasks;
|
||||
|
||||
public interface ISparkLoginGuiService : ISparkdLoginService {
|
||||
public interface ISparkLoginGuiService : ISparkLoginService {
|
||||
new ValueTask<(LoginResult Result, AuthTokenImmutable? Token, string? Workspace)> LoginAsync();
|
||||
|
||||
async ValueTask<LoginResult> ISparkdLoginService.LoginAsync() =>
|
||||
async ValueTask<LoginResult> ISparkLoginService.LoginAsync() =>
|
||||
(await LoginAsync()).Result;
|
||||
}
|
||||
@@ -12,7 +12,7 @@ using System;
|
||||
public static class SparkServices {
|
||||
public static IServiceCollection AddSparkLoginGui(this IServiceCollection services) =>
|
||||
services.AddSingleton<SparkLoginGuiService>()
|
||||
.AddSingleton<ISparkdLoginService, SparkLoginGuiService>(sp => sp.GetRequiredService<SparkLoginGuiService>())
|
||||
.AddSingleton<ISparkLoginService, SparkLoginGuiService>(sp => sp.GetRequiredService<SparkLoginGuiService>())
|
||||
.AddSingleton<ISparkLoginGuiService, SparkLoginGuiService>(sp => sp.GetRequiredService<SparkLoginGuiService>())
|
||||
.AddHostedService(sp => sp.GetRequiredService<SparkLoginGuiService>())
|
||||
.AddSingleton<IUserDataPermissions, UserDataPermissions>();
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
using bts.collections;
|
||||
|
||||
using Bts.Collections;
|
||||
|
||||
using mbts.ui.utility;
|
||||
using mbts.utils;
|
||||
|
||||
@@ -204,7 +206,7 @@ namespace mbts.ui.shell {
|
||||
|
||||
Dictionary<PropertyKeyWrapper, object> snap() =>
|
||||
// NOTE: in the future we can optimize prop.GetValue() if needed
|
||||
_props.ToDictionaryCrushed(prop => new PropertyKeyWrapper(prop), prop => prop.GetValue(_target));
|
||||
_props.ToDictionary(prop => new PropertyKeyWrapper(prop), prop => prop.GetValue(_target), DuplicateKeyPolicy.Overwrite);
|
||||
|
||||
private class PropertyKeyWrapper : IEquatable<PropertyKeyWrapper> {
|
||||
public readonly PropertyInfo property;
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using Google.Protobuf;
|
||||
using Bts.Collections;
|
||||
|
||||
using Google.Protobuf;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -9,7 +11,11 @@ namespace bts.utils.proto {
|
||||
create_from_local_file(get_id, set_id, FileStreamHelper.ProtoHelper<T>.default_file_path);
|
||||
|
||||
public static IDictionaryServer<uint, T> create_from_local_file<T>(Func<T, uint> get_id, Func<T, uint, T> set_id, string file_path) where T : IMessage<T>, new() =>
|
||||
DictionaryServer.create(get_id, set_id, DictionaryServer.get_new_uint, FileStreamHelper.ReadProtos<T>(file_path).ToDictionaryCrushed(get_id));
|
||||
DictionaryServer.create(
|
||||
get_id,
|
||||
set_id,
|
||||
DictionaryServer.get_new_uint,
|
||||
FileStreamHelper.ReadProtos<T>(file_path).ToDictionary(get_id, DuplicateKeyPolicy.Overwrite));
|
||||
|
||||
public static IDictionaryServer<uint, TImmutable> create_mutable_immutable_server<TMutable, TImmutable>(Func<TMutable, uint> get_id, Func<TMutable, uint, TMutable> set_id, Func<TImmutable, TMutable> to_mutable, Func<TMutable, TImmutable> to_immutable)
|
||||
where TMutable : IMessage<TMutable>, new()
|
||||
|
||||
@@ -6,7 +6,7 @@ using bts.api;
|
||||
using Spark.Api.Services;
|
||||
|
||||
public class SdkSampleConfig {
|
||||
public SparkApiCredentials? Credentials { get; set; }
|
||||
public SparkCredentials? Credentials { get; set; }
|
||||
public SdkMarketDataSampleConfig? MarketData { get; set; }
|
||||
public SdkOrderSampleConfig? Order { get; set; }
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace bts.sdk {
|
||||
readonly SdkSampleConfig sdkConfig;
|
||||
readonly Spark.Api.IServiceProvider sparkServiceProvider;
|
||||
readonly IUserDataPermissions userDataPermissions;
|
||||
readonly ISparkdLoginService loginService;
|
||||
readonly ISparkLoginService loginService;
|
||||
|
||||
OrderService orderService;
|
||||
OrdersClient ordersClient;
|
||||
@@ -38,7 +38,7 @@ namespace bts.sdk {
|
||||
|
||||
public SdkSampleService(
|
||||
ISparkConfigLoader sparkConfigLoader,
|
||||
ISparkdLoginService loginService,
|
||||
ISparkLoginService loginService,
|
||||
IUserDataPermissions userDataPermissions,
|
||||
Spark.Api.IServiceProvider sparkServiceProvider,
|
||||
OrderService orderService,
|
||||
@@ -52,7 +52,7 @@ namespace bts.sdk {
|
||||
|
||||
public SdkSampleService(
|
||||
ISparkConfigLoader sparkConfigLoader,
|
||||
ISparkdLoginService loginService,
|
||||
ISparkLoginService loginService,
|
||||
IUserDataPermissions userDataPermissions,
|
||||
Spark.Api.IServiceProvider sparkServiceProvider,
|
||||
OrderService orderService,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using bts.collections;
|
||||
using bts.test;
|
||||
using bts.utils;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -90,7 +91,7 @@ namespace bts.tests {
|
||||
};
|
||||
var comparer = Comparer<Order>.Create((l, r) => l.name.CompareTo(r.name));
|
||||
var input = test_orders.ToList();
|
||||
var tree = new SortedTree<Order, int>(comparer, id, pid, input);
|
||||
var tree = SortedTree.Create(comparer, id, pid, input);
|
||||
|
||||
// create child orders of A
|
||||
var order_b = new Order('B', 2, 1);
|
||||
@@ -129,7 +130,7 @@ namespace bts.tests {
|
||||
public void test_parent() {
|
||||
var comparer = Comparer<Order>.Create((l, r) => l.name.CompareTo(r.name));
|
||||
var input = orders.ToList();
|
||||
var tree = new SortedTree<Order, int>(comparer, id, pid, input);
|
||||
var tree = SortedTree.Create(comparer, id, pid, input);
|
||||
|
||||
// grab node a to start
|
||||
var input_a = input[0];
|
||||
@@ -170,7 +171,7 @@ namespace bts.tests {
|
||||
var comparer = Comparer<Order>.Create((l, r) => l.name.CompareTo(r.name));
|
||||
var input = orders.ToList();
|
||||
input.Shuffle();
|
||||
var tree = new SortedTree<Order, int>(comparer, id, pid, input);
|
||||
var tree = SortedTree.Create(comparer, id, pid, input);
|
||||
Assert.SequenceEqual(tree, orders);
|
||||
|
||||
var children_of_a = tree.EnumerateGroup(orders.First(o => o.name == 'A'));
|
||||
@@ -221,8 +222,8 @@ namespace bts.tests {
|
||||
/// - failing to account for this usage led to a bug in the OrderBook ca. 12/20/2018 (https://bluetradesys.atlassian.net/browse/SPARK-1903)
|
||||
|
||||
// 1) Constructor Initialization
|
||||
var tree_asc = new SortedTree<Order, int>(Order.name_asc, id, pid, input);
|
||||
var tree_desc = new SortedTree<Order, int>(Order.name_desc, id, pid, input);
|
||||
var tree_asc = SortedTree.Create(Order.name_asc, id, pid, input);
|
||||
var tree_desc = SortedTree.Create(Order.name_desc, id, pid, input);
|
||||
assert_state_then_clear(tree_asc, input, Order.name_asc);
|
||||
assert_state_then_clear(tree_desc, input, Order.name_desc);
|
||||
// 2) Insert
|
||||
@@ -285,7 +286,7 @@ namespace bts.tests {
|
||||
|
||||
[Test]
|
||||
public void test_nursery() {
|
||||
var tree = new SortedTree<Order, int>(Order.name_asc, id, pid);
|
||||
var tree = SortedTree.Create(Order.name_asc, id, pid);
|
||||
int next_id = orders.Max(id) + 1;
|
||||
var parent = new Order('a', next_id++, Order.no_parent);
|
||||
// add 2 generations of orphans (in the test loop, these orphans will ALWAYS be added before there parent, so they aren't orphans persay, more just with a babysitter).
|
||||
@@ -416,4 +417,4 @@ namespace bts.tests {
|
||||
public readonly Dictionary<int, TestNode> inner;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -24,12 +24,12 @@ namespace bts.tests
|
||||
public class LimitsTests : IDisposable {
|
||||
OrderService _order_service;
|
||||
AdminService _admin_service;
|
||||
ISparkdLoginService loginService;
|
||||
ISparkLoginService loginService;
|
||||
MarketDataRelay mdRelay;
|
||||
IDisposable _order_subscription;
|
||||
Update<OrderRecordImmutable, uint> _orders;
|
||||
|
||||
public LimitsTests(OrderService orderService, AdminService adminService, ISparkdLoginService loginService, MarketDataRelay mdRelay) {
|
||||
public LimitsTests(OrderService orderService, AdminService adminService, ISparkLoginService loginService, MarketDataRelay mdRelay) {
|
||||
_order_service = orderService;
|
||||
_admin_service = adminService;
|
||||
this.loginService = loginService;
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,8 +1,4 @@
|
||||
using Spark.Core.Diagnostics;
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace bts.utils {
|
||||
public static class ArrayHelper {
|
||||
@@ -31,7 +27,7 @@ namespace bts.utils {
|
||||
}
|
||||
}
|
||||
|
||||
public static TResult[] safe_convert<T, TResult>(T[] array, Func<T, TResult> convert) =>
|
||||
public static TResult[] safe_convert<T, TResult>(T[]? array, Func<T, TResult> convert) =>
|
||||
array == null ? Array.Empty<TResult>() : Array.ConvertAll(array, new Converter<T, TResult>(convert));
|
||||
|
||||
public static TResult[] convert<T, TResult>(ICollection<T> source, Func<T, TResult> convert) {
|
||||
@@ -95,14 +91,10 @@ namespace bts.utils {
|
||||
|
||||
public static void insert<T>(ref T[] array, int index, T value, ref int size) {
|
||||
// validate size/index
|
||||
if (size < 0)
|
||||
throw ExceptionBuilder.ArgumentOutOfRange.lt_zero(nameof(size));
|
||||
if (size > array.Length)
|
||||
throw ExceptionBuilder.ArgumentOutOfRange.gt_length(nameof(size));
|
||||
if (index < 0)
|
||||
throw ExceptionBuilder.IndexOutOfRange.lt_zero();
|
||||
if (index > size)
|
||||
throw ExceptionBuilder.IndexOutOfRange.gt_length();
|
||||
ArgumentOutOfRangeException.ThrowIfLessThan(size, 0);
|
||||
ArgumentOutOfRangeException.ThrowIfGreaterThan(size, array.Length);
|
||||
ArgumentOutOfRangeException.ThrowIfLessThan(index, 0);
|
||||
ArgumentOutOfRangeException.ThrowIfGreaterThan(index, size);
|
||||
T[] old_array = array;
|
||||
checked {
|
||||
if (size == array.Length) {
|
||||
@@ -123,14 +115,10 @@ namespace bts.utils {
|
||||
|
||||
public static void remove_at<T>(ref T[] array, ref int size, int index) {
|
||||
// validate size/index
|
||||
if (size < 0)
|
||||
throw ExceptionBuilder.ArgumentOutOfRange.lt_zero(nameof(size));
|
||||
if (size > array.Length)
|
||||
throw ExceptionBuilder.ArgumentOutOfRange.gte_length(nameof(size));
|
||||
if (index < 0)
|
||||
throw ExceptionBuilder.IndexOutOfRange.lt_zero();
|
||||
if (index >= size)
|
||||
throw ExceptionBuilder.IndexOutOfRange.gte_length();
|
||||
ArgumentOutOfRangeException.ThrowIfLessThan(size, 0);
|
||||
ArgumentOutOfRangeException.ThrowIfGreaterThan(size, array.Length);
|
||||
ArgumentOutOfRangeException.ThrowIfLessThan(index, 0);
|
||||
ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(index, size);
|
||||
// shift [any]items right of 'index' left 1 pos.
|
||||
if (index < size - 1) {
|
||||
Array.Copy(array, index + 1, array, index, size - index - 1);
|
||||
@@ -168,7 +156,7 @@ namespace bts.utils {
|
||||
}
|
||||
}
|
||||
|
||||
public static void remove_sorted<T>(ref T[] array, ref int size, T value, IComparer<T> comparer, out int? pos) {
|
||||
public static void remove_sorted<T>(ref T?[] array, ref int size, T value, IComparer<T?> comparer, out int? pos) {
|
||||
int p = Array.BinarySearch(array, 0, size, value, comparer);
|
||||
if (p < 0) {
|
||||
pos = null;
|
||||
+1
-1
@@ -12,7 +12,7 @@ namespace Spark.Core.Collections {
|
||||
/// Nothing fancy going on here: mutations are performed on a copy of the underlying dictionary
|
||||
/// member, which, once mutated, is assigned back to the member. Mutation performance is O(n).
|
||||
/// </remarks>
|
||||
public class AtomicDictionaryWrapper<TKey, TValue> : IDictionary<TKey, TValue>, IReadOnlyDictionary<TKey, TValue> {
|
||||
public class AtomicDictionaryWrapper<TKey, TValue> : IDictionary<TKey, TValue>, IReadOnlyDictionary<TKey, TValue> where TKey : notnull {
|
||||
Dictionary<TKey, TValue> _dict;
|
||||
|
||||
public AtomicDictionaryWrapper() : this(EqualityComparer<TKey>.Default) { }
|
||||
File renamed without changes.
+7
-5
@@ -145,8 +145,8 @@ public static class BlockTransactionEnumerable {
|
||||
return;
|
||||
}
|
||||
|
||||
Log.assert(srcStartIdx >= 0);
|
||||
Log.assert(dstStartIdx >= 0);
|
||||
ArgumentOutOfRangeException.ThrowIfLessThan(srcStartIdx, 0);
|
||||
ArgumentOutOfRangeException.ThrowIfLessThan(dstStartIdx, 0);
|
||||
var sourceSliceLength = srcStopIdx - srcStartIdx;
|
||||
var destSliceLength = dstStopIdx - dstStartIdx;
|
||||
var lengthChange = destSliceLength - sourceSliceLength;
|
||||
@@ -154,7 +154,9 @@ public static class BlockTransactionEnumerable {
|
||||
var removes = new List<int>();
|
||||
using var en = blocks.GetEnumerator();
|
||||
if (!en.MoveNext() || en.Current.DestIndex >= dstStopIdx) {
|
||||
Log.assert(destSliceLength == sourceSliceLength);
|
||||
if (destSliceLength != sourceSliceLength) {
|
||||
throw new ArgumentException("BlockTransactions didn't yield expected result (newValues)", nameof(newValues));
|
||||
}
|
||||
for (int i = 0; i < -lengthChange; i++) {
|
||||
removes.Add(srcStopIdx + lengthChange + i);
|
||||
}
|
||||
@@ -224,13 +226,13 @@ public class BlockTransactionEnumerable<T> : IEnumerable<BlockTransaction<T>> {
|
||||
while (true) {
|
||||
int? del = delCursor < sortedDeletes.Count ? sortedDeletes[delCursor] : null;
|
||||
if (del.HasValue && delCursor > lastDelCursor) {
|
||||
Log.assert(del.Value > lastDel);
|
||||
ArgumentOutOfRangeException.ThrowIfLessThanOrEqual(del.Value, lastDel);
|
||||
lastDel = del.Value;
|
||||
lastDelCursor = delCursor;
|
||||
}
|
||||
(int Index, T Value)? add = addCursor < sortedAdds.Count ? sortedAdds[addCursor] : null;
|
||||
if (add.HasValue && addCursor > lastAddCursor) {
|
||||
Log.assert(add.Value.Index >= lastAddIndex);
|
||||
ArgumentOutOfRangeException.ThrowIfLessThan(add.Value.Index, lastAddIndex);
|
||||
lastAddIndex = add.Value.Index;
|
||||
lastAddCursor = addCursor;
|
||||
}
|
||||
File renamed without changes.
@@ -0,0 +1,24 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<Choose>
|
||||
<When Condition="'$(UseProjectRefs)' == 'true'">
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Bts.Disposables\Bts.Disposables.csproj" />
|
||||
<ProjectReference Include="..\Bts.Numerics\Bts.Numerics.csproj" />
|
||||
</ItemGroup>
|
||||
</When>
|
||||
<Otherwise>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Bts.Disposables" Version="$(SparkVersion)" />
|
||||
<PackageReference Include="Bts.Numerics" Version="$(SparkVersion)" />
|
||||
</ItemGroup>
|
||||
</Otherwise>
|
||||
</Choose>
|
||||
|
||||
</Project>
|
||||
File renamed without changes.
+11
-7
@@ -2,11 +2,9 @@
|
||||
|
||||
namespace Spark.Core.Collections;
|
||||
|
||||
using bts;
|
||||
using bts.collections;
|
||||
using bts.utils;
|
||||
|
||||
using Spark.Core.Diagnostics;
|
||||
using Bts.Collections.Diagnostics;
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
@@ -24,8 +22,10 @@ public class CircularBuffer<T> : IList<T>, IReadOnlyList<T> {
|
||||
|
||||
public CircularBuffer(int capacity, int initialCapacity) {
|
||||
this.capacity = capacity;
|
||||
ExceptionAssert.Argument.GreaterThanEqualTo(capacity, 0);
|
||||
items = new T[initialCapacity.within_range(0, capacity)];
|
||||
ArgumentOutOfRangeException.ThrowIfLessThan(capacity, 0);
|
||||
ArgumentOutOfRangeException.ThrowIfLessThan(initialCapacity, 0);
|
||||
initialCapacity = Math.Min(initialCapacity, 0);
|
||||
items = new T[initialCapacity];
|
||||
}
|
||||
|
||||
public T this[int index] {
|
||||
@@ -109,8 +109,13 @@ public class CircularBuffer<T> : IList<T>, IReadOnlyList<T> {
|
||||
public void AddRange(IList<T> itemList) {
|
||||
int count = itemList.Count;
|
||||
int nFree = capacity - this.count;
|
||||
if (nFree < 0) {
|
||||
throw new InvalidOperationException("Invalid internal state, Count exceeds Capacity");
|
||||
}
|
||||
if (nFree > 0) {
|
||||
Log.assert(origin == 0);
|
||||
if (origin != 0) {
|
||||
throw new InvalidOperationException("Origin index must be zero when there are free elements");
|
||||
}
|
||||
if (nFree > count) {
|
||||
for (int i = 0; i < nFree; i++) {
|
||||
items[i + this.count] = itemList[i];
|
||||
@@ -127,7 +132,6 @@ public class CircularBuffer<T> : IList<T>, IReadOnlyList<T> {
|
||||
this.count += count;
|
||||
}
|
||||
} else {
|
||||
Log.assert(nFree == 0);
|
||||
if (count < capacity) {
|
||||
int start = origin - count;
|
||||
if (start < 0) {
|
||||
File renamed without changes.
+33
-49
@@ -1,7 +1,7 @@
|
||||
namespace bts.utils {
|
||||
using bts.collections;
|
||||
|
||||
using Spark.Core;
|
||||
using Spark.Core.Collections;
|
||||
using Spark.Core.Disposables;
|
||||
|
||||
using System;
|
||||
@@ -11,7 +11,7 @@ namespace bts.utils {
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
static class CollectionHelper {
|
||||
public static class CollectionHelper {
|
||||
public const string indexer_name = "Item[]";
|
||||
|
||||
public static int binary_search<T>(IList<T> items, T value) =>
|
||||
@@ -44,7 +44,7 @@ namespace bts.utils {
|
||||
binary_search(items, value, 0, items.Count, comparer, key_selector);
|
||||
|
||||
public static int binary_search<T, TKey>(IList<T> items, TKey key, int index, int length, IComparer<TKey> comparer, Func<T, TKey> key_selector) =>
|
||||
binary_search(items.WrapSelector(key_selector, null), key, index, length, comparer);
|
||||
binary_search(new SelectorList<T, TKey>(items, key_selector, null), key, index, length, comparer);
|
||||
|
||||
/// <summary>
|
||||
/// Like <see cref="binary_search{T}(IList{T}, T, IComparer{T})"/>, but doesn't require deterministic sort
|
||||
@@ -106,7 +106,7 @@ namespace bts.utils {
|
||||
IDisposable attach_callback(Action cb) {
|
||||
source.CollectionChanged += on_collection_changed;
|
||||
return Disposable.Create(() => source.CollectionChanged -= on_collection_changed);
|
||||
void on_collection_changed(object sender, NotifyCollectionChangedEventArgs e) =>
|
||||
void on_collection_changed(object? sender, NotifyCollectionChangedEventArgs e) =>
|
||||
cb();
|
||||
}
|
||||
async Task impl() {
|
||||
@@ -123,22 +123,23 @@ namespace bts.utils {
|
||||
|
||||
public static string fmt_collection_change(NotifyCollectionChangedEventArgs e) {
|
||||
return e.Action switch {
|
||||
NotifyCollectionChangedAction.Add => $"Insert at {e.NewStartingIndex} [{fmt_items(e.NewItems)}]",
|
||||
NotifyCollectionChangedAction.Remove => $"Remove from {e.OldStartingIndex} [{fmt_items(e.OldItems)}]",
|
||||
NotifyCollectionChangedAction.Move => $"Move from {e.OldStartingIndex} to {e.NewStartingIndex} [{fmt_items(e.NewItems)}]",
|
||||
NotifyCollectionChangedAction.Replace => $"Replace at {e.OldStartingIndex} [{fmt_items(e.OldItems)}] with [{fmt_items(e.NewItems)}]",
|
||||
NotifyCollectionChangedAction.Add => $"Insert at {e.NewStartingIndex} [{fmt_items(e.NewItems!)}]",
|
||||
NotifyCollectionChangedAction.Remove => $"Remove from {e.OldStartingIndex} [{fmt_items(e.OldItems!)}]",
|
||||
NotifyCollectionChangedAction.Move => $"Move from {e.OldStartingIndex} to {e.NewStartingIndex} [{fmt_items(e.NewItems!)}]",
|
||||
NotifyCollectionChangedAction.Replace => $"Replace at {e.OldStartingIndex} [{fmt_items(e.OldItems!)}] with [{fmt_items(e.NewItems!)}]",
|
||||
NotifyCollectionChangedAction.Reset => "Reset",
|
||||
_ => $"Unknown-action {e.Action}"
|
||||
};
|
||||
|
||||
static string fmt_items(IList items) => ", ".join(items.Cast<object>());
|
||||
static string fmt_items(IList items) =>
|
||||
string.Join(", ", items.Cast<object>());
|
||||
}
|
||||
|
||||
public static void reflect_change<T, TData>(IList<T> target, IEnumerable<TData> source, Func<TData, T> create_item, Action<T> on_removed, NotifyCollectionChangedEventArgs e) {
|
||||
switch (e.Action) {
|
||||
case NotifyCollectionChangedAction.Add:
|
||||
int i = e.NewStartingIndex;
|
||||
foreach (TData d in e.NewItems) {
|
||||
foreach (TData d in e.NewItems!) {
|
||||
T item = create_item(d);
|
||||
target.Insert(i++, item);
|
||||
}
|
||||
@@ -146,13 +147,13 @@ namespace bts.utils {
|
||||
case NotifyCollectionChangedAction.Move:
|
||||
if (e.OldStartingIndex > e.NewStartingIndex) {
|
||||
i = e.OldStartingIndex;
|
||||
foreach (TData d in e.OldItems) {
|
||||
foreach (TData d in e.OldItems!) {
|
||||
var v = target[i];
|
||||
target.RemoveAt(i++);
|
||||
target.Insert(e.NewStartingIndex, v);
|
||||
}
|
||||
} else {
|
||||
foreach (TData d in e.OldItems) {
|
||||
foreach (TData d in e.OldItems!) {
|
||||
var v = target[e.OldStartingIndex];
|
||||
target.RemoveAt(e.OldStartingIndex);
|
||||
target.Insert(e.NewStartingIndex, v);
|
||||
@@ -160,7 +161,7 @@ namespace bts.utils {
|
||||
}
|
||||
break;
|
||||
case NotifyCollectionChangedAction.Remove:
|
||||
for (int x = 0; x < e.OldItems.Count; x++) {
|
||||
for (int x = 0; x < e.OldItems!.Count; x++) {
|
||||
T item = target[e.OldStartingIndex];
|
||||
target.RemoveAt(e.OldStartingIndex);
|
||||
on_removed?.Invoke(item);
|
||||
@@ -168,7 +169,7 @@ namespace bts.utils {
|
||||
break;
|
||||
case NotifyCollectionChangedAction.Replace:
|
||||
i = e.NewStartingIndex;
|
||||
foreach (TData d in e.NewItems) {
|
||||
foreach (TData d in e.NewItems!) {
|
||||
T old_item = target[i];
|
||||
target[i++] = create_item(d);
|
||||
on_removed?.Invoke(old_item);
|
||||
@@ -187,7 +188,7 @@ namespace bts.utils {
|
||||
switch (e.Action) {
|
||||
case NotifyCollectionChangedAction.Add: {
|
||||
int i = e.NewStartingIndex;
|
||||
foreach (TData d in e.NewItems) {
|
||||
foreach (TData d in e.NewItems!) {
|
||||
T item = create_item(d, i);
|
||||
target.Insert(i++, item);
|
||||
}
|
||||
@@ -196,13 +197,13 @@ namespace bts.utils {
|
||||
case NotifyCollectionChangedAction.Move: {
|
||||
if (e.OldStartingIndex > e.NewStartingIndex) {
|
||||
int i = e.OldStartingIndex;
|
||||
foreach (TData d in e.OldItems) {
|
||||
foreach (TData d in e.OldItems!) {
|
||||
var v = target[i];
|
||||
target.RemoveAt(i++);
|
||||
target.Insert(e.NewStartingIndex, v);
|
||||
}
|
||||
} else {
|
||||
foreach (TData d in e.OldItems) {
|
||||
foreach (TData d in e.OldItems!) {
|
||||
var v = target[e.OldStartingIndex];
|
||||
target.RemoveAt(e.OldStartingIndex);
|
||||
target.Insert(e.NewStartingIndex, v);
|
||||
@@ -211,7 +212,7 @@ namespace bts.utils {
|
||||
}
|
||||
break;
|
||||
case NotifyCollectionChangedAction.Remove: {
|
||||
for (int i = 0; i < e.OldItems.Count; i++) {
|
||||
for (int i = 0; i < e.OldItems!.Count; i++) {
|
||||
T item = target[e.OldStartingIndex];
|
||||
target.RemoveAt(e.OldStartingIndex);
|
||||
on_removed?.Invoke(item);
|
||||
@@ -220,7 +221,7 @@ namespace bts.utils {
|
||||
break;
|
||||
case NotifyCollectionChangedAction.Replace: {
|
||||
int i = e.NewStartingIndex;
|
||||
foreach (TData d in e.NewItems) {
|
||||
foreach (TData d in e.NewItems!) {
|
||||
T old_item = target[i];
|
||||
target[i] = create_item(d, i);
|
||||
on_removed?.Invoke(old_item);
|
||||
@@ -248,7 +249,7 @@ namespace bts.utils {
|
||||
switch (e.Action) {
|
||||
case NotifyCollectionChangedAction.Add:
|
||||
case NotifyCollectionChangedAction.Replace:
|
||||
foreach (T v in e.NewItems)
|
||||
foreach (T v in e.NewItems!)
|
||||
on_new_item(v);
|
||||
break;
|
||||
case NotifyCollectionChangedAction.Reset:
|
||||
@@ -272,17 +273,21 @@ namespace bts.utils {
|
||||
IEqualityComparer<TKey> key_comparer) {
|
||||
key_comparer ??= EqualityComparer<TKey>.Default;
|
||||
var src_list = src as IList<TSource> ?? new List<TSource>(src);
|
||||
#nullable disable
|
||||
var src_map = src_list.ToDictionary(src_key_selector, key_comparer);
|
||||
#nullable enable
|
||||
for (int i = 0; i < dest.Count; i++) {
|
||||
var k = key_selector(dest[i]);
|
||||
if (!src_map.ContainsKey(k))
|
||||
dest.RemoveAt(i);
|
||||
}
|
||||
|
||||
#nullable disable
|
||||
var dest_map = dest.ToDictionary(key_selector, key_comparer);
|
||||
#nullable enable
|
||||
for (int i = 0; i < src_list.Count; i++) {
|
||||
TKey key = src_key_selector(src_list[i]);
|
||||
if (dest_map.TryGetValue(key, out T dval)) {
|
||||
if (dest_map.TryGetValue(key, out T? dval)) {
|
||||
int curr_index = dest.IndexOf(dval);
|
||||
if (curr_index != i) {
|
||||
dest.RemoveAt(curr_index);
|
||||
@@ -301,7 +306,7 @@ namespace bts.utils {
|
||||
return rv;
|
||||
}
|
||||
|
||||
public static ICollection<TResult> wrap_selector<T, TResult>(ICollection<T> source, Func<T, TResult> convert, Func<TResult, T> convert_back) =>
|
||||
public static ICollection<TResult> wrap_selector<T, TResult>(ICollection<T> source, Func<T, TResult> convert, Func<TResult, T>? convert_back) =>
|
||||
new CollectionWrapper<T, TResult>(source, convert, convert_back);
|
||||
|
||||
public static void wrap_selector<T, TResult>(IReadOnlyCollection<T> source, Func<T, TResult> selector, out IReadOnlyCollection<TResult> as_ro_collection, out ICollection<TResult> as_collection) {
|
||||
@@ -319,17 +324,20 @@ namespace bts.utils {
|
||||
class CollectionWrapper<TIn, TOut> : ICollection<TOut>, IReadOnlyCollection<TOut> {
|
||||
readonly ICollection<TIn> _source;
|
||||
readonly Func<TIn, TOut> _convert;
|
||||
readonly Func<TOut, TIn> _convert_back;
|
||||
readonly Func<TOut, TIn>? convertBackBacking;
|
||||
|
||||
public CollectionWrapper(ICollection<TIn> source, Func<TIn, TOut> convert, Func<TOut, TIn> convert_back) {
|
||||
public CollectionWrapper(ICollection<TIn> source, Func<TIn, TOut> convert, Func<TOut, TIn>? convert_back) {
|
||||
_source = source;
|
||||
_convert = convert;
|
||||
_convert_back = convert_back;
|
||||
convertBackBacking = convert_back;
|
||||
}
|
||||
|
||||
public int Count => _source.Count;
|
||||
public bool IsReadOnly => _source.IsReadOnly || _convert_back == null;
|
||||
|
||||
Func<TOut, TIn> _convert_back =>
|
||||
convertBackBacking ?? throw new InvalidOperationException("ConvertBack delegate is null");
|
||||
|
||||
public void Add(TOut item) => _source.Add(_convert_back(item));
|
||||
public void Clear() => _source.Clear();
|
||||
public bool Contains(TOut item) => _source.Contains(_convert_back(item));
|
||||
@@ -443,30 +451,6 @@ namespace bts.utils {
|
||||
return deleted_d.Count == 0 && added_d.Count == 0;
|
||||
}
|
||||
|
||||
/// If key_selector returns the same key this
|
||||
/// functions crushes it (in the Dict)
|
||||
public static IDictionary<K, V> ToDictionaryDupes<K, V, T>(this IEnumerable<T> items, Func<T, K> key_selector, Func<T, V> value_selector) {
|
||||
IDictionary<K, V> rv = new Dictionary<K, V>();
|
||||
//(items ?? new List<T>()).ForEach(t => rv[key_selector(t)] = value_selector(t));
|
||||
if (items != null) {
|
||||
foreach (var t in items) {
|
||||
rv[key_selector(t)] = value_selector(t);
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
public static int find_first_index<T>(this IEnumerable<T> list, T elem_to_find, Func<T, T, bool> equals = null) {
|
||||
if (equals == null) equals = (t1, t2) => t1.Equals(t2);
|
||||
int rv = 0;
|
||||
foreach (T t in list) {
|
||||
if (elem_to_find.Equals(t))
|
||||
return rv;
|
||||
rv++;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets coordinates for an index in the imaginary sorted list that results from merging
|
||||
/// <paramref name="list1"/> and <paramref name="list2"/>. The "X" coordinate is either 0
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+4
-4
@@ -8,11 +8,11 @@ namespace bts.utils {
|
||||
/// accessed after the input value changes.
|
||||
/// </remarks>
|
||||
public class CovariantBox<TIn, TOut> where TIn : class where TOut: class {
|
||||
TIn _value_in = null;
|
||||
TOut _value_out = null;
|
||||
TIn? _value_in = null;
|
||||
TOut? _value_out = null;
|
||||
bool _is_dirty = false;
|
||||
|
||||
public TIn value_in {
|
||||
public TIn? value_in {
|
||||
get => _value_in;
|
||||
set {
|
||||
_value_in = value;
|
||||
@@ -20,7 +20,7 @@ namespace bts.utils {
|
||||
}
|
||||
}
|
||||
|
||||
public TOut value_out {
|
||||
public TOut? value_out {
|
||||
get {
|
||||
if (_is_dirty) {
|
||||
_value_out = _value_in as TOut;
|
||||
File renamed without changes.
+7
-7
@@ -6,7 +6,7 @@ using System.Linq;
|
||||
namespace System.Collections.Generic {
|
||||
public static class DictionaryExtensions {
|
||||
public static bool AddOrUpdate<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, Func<TKey, TValue> add_value_factory, Action<TKey, TValue> update_value) {
|
||||
if (dictionary.TryGetValue(key, out TValue value)) {
|
||||
if (dictionary.TryGetValue(key, out var value)) {
|
||||
update_value(key, value);
|
||||
return false;
|
||||
}
|
||||
@@ -15,7 +15,7 @@ namespace System.Collections.Generic {
|
||||
}
|
||||
|
||||
public static bool AddOrReplace<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, Func<TKey, TValue> add_value_factory, Func<TKey, TValue, TValue> replace_value) {
|
||||
if (dictionary.TryGetValue(key, out TValue value)) {
|
||||
if (dictionary.TryGetValue(key, out var value)) {
|
||||
dictionary[key] = replace_value(key, value);
|
||||
return false;
|
||||
}
|
||||
@@ -62,7 +62,7 @@ namespace System.Collections.Generic {
|
||||
}
|
||||
|
||||
public static bool AddOrUpdate<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, Func<TKey, TValue> add_value_factory, Func<TKey, TValue, TValue> update_value) {
|
||||
if (dictionary.TryGetValue(key, out TValue value)) {
|
||||
if (dictionary.TryGetValue(key, out var value)) {
|
||||
dictionary[key] = update_value(key, value);
|
||||
return false;
|
||||
}
|
||||
@@ -71,7 +71,7 @@ namespace System.Collections.Generic {
|
||||
}
|
||||
|
||||
public static bool AddOrUpdate<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, Action<TValue> update_existing, Func<TValue> create_new) {
|
||||
if (dictionary.TryGetValue(key, out TValue curr)) {
|
||||
if (dictionary.TryGetValue(key, out var curr)) {
|
||||
update_existing(curr);
|
||||
return false;
|
||||
}
|
||||
@@ -79,7 +79,7 @@ namespace System.Collections.Generic {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static IDictionary<TKey, TValue> as_idictionary<TKey, TValue>(this Dictionary<TKey, TValue> dictionary) =>
|
||||
public static IDictionary<TKey, TValue> as_idictionary<TKey, TValue>(this Dictionary<TKey, TValue> dictionary) where TKey : notnull =>
|
||||
dictionary;
|
||||
|
||||
public static void Difference<TKey, TValue>(this IDictionary<TKey, TValue> left,
|
||||
@@ -116,7 +116,7 @@ namespace System.Collections.Generic {
|
||||
}
|
||||
|
||||
public static TValue GetOrAdd<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, Func<TKey, TValue> add_value_factory) {
|
||||
if (!dictionary.TryGetValue(key, out TValue value))
|
||||
if (!dictionary.TryGetValue(key, out var value))
|
||||
dictionary.Add(key, value = add_value_factory(key));
|
||||
return value;
|
||||
}
|
||||
@@ -324,7 +324,7 @@ namespace System.Collections.Generic {
|
||||
var source_lookup = source.ToLookup(key_selector);
|
||||
HashSet<TKey> changes = new HashSet<TKey>(), removes = new HashSet<TKey>();
|
||||
foreach (var kv in dictionary) {
|
||||
if (source_lookup.TryGetValue(kv.Key, out IEnumerable<KeyValuePair<TSourceKey, TSourceValue>> result)) {
|
||||
if (source_lookup.TryGetValue(kv.Key, out var result)) {
|
||||
update(kv, result);
|
||||
changes.Add(kv.Key);
|
||||
} else {
|
||||
File renamed without changes.
@@ -1,9 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Linq;
|
||||
namespace bts.utils {
|
||||
using Spark.Core.Collections;
|
||||
|
||||
namespace bts.utils {
|
||||
// See http://xmailserver.org/diff2.pdf
|
||||
public static class Diff {
|
||||
|
||||
@@ -32,7 +29,12 @@ namespace bts.utils {
|
||||
}
|
||||
}
|
||||
|
||||
static int[] diff_codes<T>(IList<T> input, Dictionary<T, int> cache) {
|
||||
static int[] diff_codes<T>(
|
||||
IList<T> input,
|
||||
#nullable disable
|
||||
Dictionary<T, int> cache
|
||||
#nullable enable
|
||||
) {
|
||||
var length = input.Count;
|
||||
int[] codes = new int[length];
|
||||
int lastCode = cache.Count;
|
||||
@@ -51,11 +53,15 @@ namespace bts.utils {
|
||||
return codes;
|
||||
}
|
||||
|
||||
public static IEnumerable<Item> diff<T>(IEnumerable<T> left, IEnumerable<T> right, IEqualityComparer<T> comp = null) {
|
||||
public static IEnumerable<Item> diff<T>(IEnumerable<T> left, IEnumerable<T> right, IEqualityComparer<T>? comp = null) {
|
||||
var leftList = left as IList<T> ?? left.ToList();
|
||||
var rightList = right as IList<T> ?? right.ToList();
|
||||
|
||||
Dictionary<T, int> cache = new Dictionary<T, int>(comp ?? EqualityComparer<T>.Default);
|
||||
comp = NullCheckEqualityComparer.Create(comp ?? EqualityComparer<T>.Default);
|
||||
// Don't impose dictionary's "TKey : notnull" constraint on the caller.
|
||||
#nullable disable
|
||||
var cache = new Dictionary<T, int>(comp);
|
||||
#nullable enable
|
||||
var leftData = new DiffData(diff_codes(leftList, cache));
|
||||
var rightData = new DiffData(diff_codes(rightList, cache));
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Bts.Collections;
|
||||
|
||||
public enum DuplicateKeyPolicy {
|
||||
Default,
|
||||
Disallow,
|
||||
Skip,
|
||||
Overwrite,
|
||||
}
|
||||
File renamed without changes.
+39
-37
@@ -2,9 +2,9 @@
|
||||
namespace System.Collections.Generic {
|
||||
using bts.utils;
|
||||
|
||||
using Spark.Core;
|
||||
using Bts.Collections;
|
||||
|
||||
using Spark.Core.Collections;
|
||||
using Spark.Core.Diagnostics;
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
@@ -13,8 +13,6 @@ namespace System.Collections.Generic {
|
||||
using System.Diagnostics.Contracts;
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using System.Reactive.Linq;
|
||||
using System.Runtime.Versioning;
|
||||
|
||||
public static class EnumerableExtensions {
|
||||
public static IEnumerable<TAccumulate> AggregateEach<T, TAccumulate>(this IEnumerable<T> source, TAccumulate seed, Func<TAccumulate, T, TAccumulate> accumulate) {
|
||||
@@ -110,16 +108,13 @@ namespace System.Collections.Generic {
|
||||
/// The easiest/most effective solution is to make a wrapper around the System.Linq fn
|
||||
/// (esp since the manner in which <see cref="values"/> is used to construct a predicate
|
||||
/// with which to filter items from <see cref="source"/> is unspecified).
|
||||
///
|
||||
/// <see cref="Optional{T}"/> (as used here) provides a means to support both value and
|
||||
/// reference types.
|
||||
source
|
||||
.Select(item => (item: new Optional<T>(item), result: selector(item)))
|
||||
.Select(item => (item, selector(item)))
|
||||
.Except(
|
||||
values.Select(result => (item: Optional<T>.Empty, result)),
|
||||
EqualityComparerWrapper<(Optional<T> item, TResult result)>.wrap(
|
||||
values.Select(result => (item: default(T)!, result)),
|
||||
EqualityComparerWrapper<(T item, TResult result)>.wrap(
|
||||
t => t.result, comparer))
|
||||
.Select(tup => tup.item.value);
|
||||
.Select(tup => tup.item!);
|
||||
|
||||
public static IEnumerable<T> Except<T, TKey>(this IEnumerable<T> enumerable, IEnumerable<TKey> second, Func<T, TKey> key_selector) =>
|
||||
enumerable.Where(t => !second.Contains(key_selector(t)));
|
||||
@@ -191,8 +186,7 @@ namespace System.Collections.Generic {
|
||||
}
|
||||
|
||||
public static bool CountAtLeast<T>(this IEnumerable<T> source, int count) {
|
||||
if (count < 0)
|
||||
throw new ArgumentException(ExceptionBuilder.Format.LessThan(0), nameof(count));
|
||||
ArgumentOutOfRangeException.ThrowIfLessThan(count, 0);
|
||||
if (count == 0)
|
||||
return true;
|
||||
foreach (var v in source) {
|
||||
@@ -203,8 +197,7 @@ namespace System.Collections.Generic {
|
||||
}
|
||||
|
||||
public static bool CountAtMost<T>(this IEnumerable<T> source, int count) {
|
||||
if (count < 0)
|
||||
throw new ArgumentException(ExceptionBuilder.Format.LessThan(0), nameof(count));
|
||||
ArgumentOutOfRangeException.ThrowIfLessThan(count, 0);
|
||||
foreach (var v in source) {
|
||||
if (--count == -1)
|
||||
return false;
|
||||
@@ -213,9 +206,7 @@ namespace System.Collections.Generic {
|
||||
}
|
||||
|
||||
public static bool CountExact<T>(this IEnumerable<T> source, int count) {
|
||||
if (count < 0) {
|
||||
throw new ArgumentException(ExceptionBuilder.Format.LessThan(0), nameof(count));
|
||||
}
|
||||
ArgumentOutOfRangeException.ThrowIfLessThan(count, 0);
|
||||
foreach (var v in source) {
|
||||
if (--count == -1) {
|
||||
return false;
|
||||
@@ -497,6 +488,11 @@ namespace System.Collections.Generic {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static int FindIndex<T>(this IEnumerable<T> source, T value) {
|
||||
TryFindIndex(source, value, EqualityComparer<T>.Default, out int index);
|
||||
return index;
|
||||
}
|
||||
|
||||
public static bool TryFindIndex<T>(this IEnumerable<T> source, T value, out int index) =>
|
||||
TryFindIndex(source, value, EqualityComparer<T>.Default, out index);
|
||||
|
||||
@@ -667,26 +663,32 @@ namespace System.Collections.Generic {
|
||||
public static IReadOnlyList<T> ToReadOnlyList<T>(this IEnumerable<T> enumerable) =>
|
||||
enumerable.ToList();
|
||||
|
||||
public static Dictionary<TKey, T> ToDictionaryCrushed<T, TKey>(this IEnumerable<T> source, Func<T, TKey> key_selector) where TKey : notnull {
|
||||
var rv = new Dictionary<TKey, T>();
|
||||
foreach (T v in source)
|
||||
rv[key_selector(v)] = v;
|
||||
return rv;
|
||||
}
|
||||
public static Dictionary<TKey, T> ToDictionary<T, TKey>(this IEnumerable<T> source, Func<T, TKey> keySelector, DuplicateKeyPolicy duplicateKeyPolicy) where TKey : notnull =>
|
||||
ToDictionary(source, keySelector, v => v, duplicateKeyPolicy);
|
||||
|
||||
public static Dictionary<TKey, T> ToDictionaryCrushed<T, TKey>(this IEnumerable<KeyValuePair<TKey, T>> source) where TKey : notnull {
|
||||
var rv = new Dictionary<TKey, T>();
|
||||
foreach (var kv in source) {
|
||||
rv[kv.Key] = kv.Value;
|
||||
public static Dictionary<TKey, TElement> ToDictionary<T, TKey, TElement>(this IEnumerable<T> source, Func<T, TKey> keySelector, Func<T, TElement> elementSelector, DuplicateKeyPolicy duplicateKeyPolicy) where TKey : notnull {
|
||||
var dict = new Dictionary<TKey, TElement>();
|
||||
switch (duplicateKeyPolicy) {
|
||||
case DuplicateKeyPolicy.Skip:
|
||||
foreach (var v in source) {
|
||||
var k = keySelector(v);
|
||||
if (!dict.ContainsKey(k)) {
|
||||
dict.Add(k, elementSelector(v));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DuplicateKeyPolicy.Overwrite:
|
||||
foreach (var v in source) {
|
||||
dict[keySelector(v)] = elementSelector(v);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
foreach (var v in source) {
|
||||
dict.Add(keySelector(v), elementSelector(v));
|
||||
}
|
||||
break;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
public static Dictionary<TKey, TElement> ToDictionaryCrushed<T, TKey, TElement>(this IEnumerable<T> source, Func<T, TKey> key_selector, Func<T, TElement> element_selector) where TKey : notnull {
|
||||
var rv = new Dictionary<TKey, TElement>();
|
||||
foreach (T v in source)
|
||||
rv[key_selector(v)] = element_selector(v);
|
||||
return rv;
|
||||
return dict;
|
||||
}
|
||||
|
||||
public static ReadOnlyDictionary<TKey, T> ToReadOnlyDictionary<T, TKey>(
|
||||
@@ -1030,7 +1032,7 @@ namespace System.Collections.Generic {
|
||||
/// <returns>An <see cref="IEnumerable{TResult}"/> that contains each element of the source sequence cast to the specified type.</returns>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="source"/> is null.</exception>
|
||||
public static IEnumerable<TResult> convert<TResult>(this IEnumerable source) {
|
||||
ExceptionAssert.Argument.NotNull(source, nameof(source));
|
||||
ArgumentNullException.ThrowIfNull(source);
|
||||
foreach (object obj in source)
|
||||
yield return ConvertUtils.try_convert<TResult>(obj);
|
||||
}
|
||||
+100
-24
@@ -1,8 +1,10 @@
|
||||
using Spark.Core.Collections;
|
||||
using Spark.Core;
|
||||
using Spark.Core.Collections;
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
|
||||
namespace bts.utils {
|
||||
@@ -10,16 +12,16 @@ namespace bts.utils {
|
||||
const int _hash_seed = 63607, _hash_multiplier = 6451, _max_auto_phase_buckets = 16;
|
||||
|
||||
public static IEqualityComparer<T> Create<T>(Func<T, T, bool> equals) =>
|
||||
new AnonymousEqualityComparer<T>(equals);
|
||||
AnonymousEqualityComparer<T>.Create(equals);
|
||||
|
||||
public static IEqualityComparer<T> Create<T>(Func<T, T, bool> equals, Func<T, int> get_hash_code) =>
|
||||
new AnonymousEqualityComparer<T>(equals, get_hash_code);
|
||||
AnonymousEqualityComparer<T>.Create(equals, get_hash_code);
|
||||
|
||||
public static IEqualityComparer<T> Create<T, TKey>(Func<T, TKey> key_selector) =>
|
||||
public static IEqualityComparer<T> Create<T, TKey>(Func<T?, TKey> key_selector) =>
|
||||
Create(key_selector, System.Collections.Generic.EqualityComparer<TKey>.Default);
|
||||
|
||||
public static IEqualityComparer<T> Create<T, TKey>(Func<T, TKey> key_selector, IEqualityComparer<TKey> key_comparer) =>
|
||||
Create<T>((x, y) => key_comparer.Equals(key_selector(x), (key_selector(y))), x => key_selector(x).GetHashCode());
|
||||
public static IEqualityComparer<T> Create<T, TKey>(Func<T?, TKey> key_selector, IEqualityComparer<TKey> key_comparer) =>
|
||||
new SelectorComparer<T, TKey>(key_selector, key_comparer);
|
||||
|
||||
public static IEqualityComparer<T?> CreateNullable<T, TKey>(Func<T, TKey> key_selector) where T : struct {
|
||||
var eqc = System.Collections.Generic.EqualityComparer<TKey>.Default;
|
||||
@@ -30,7 +32,7 @@ namespace bts.utils {
|
||||
new AnonymousEqualityComparer<T?>(nullable_equals);
|
||||
|
||||
public static IEqualityComparer<T> null_check_wrapper<T>(IEqualityComparer<T> comparer) where T : class =>
|
||||
new AnonymousEqualityComparer<T>((a, b) => NullCheckEquals(a, b, comparer.Equals), comparer.GetHashCode);
|
||||
new AnonymousEqualityComparer<T>((a, b) => NullCheckEquals(a, b, comparer.Equals), NullCheckGetHashCode<T>(comparer.GetHashCode));
|
||||
|
||||
public static IEqualityComparer<T?> to_nullable<T>(this IEqualityComparer<T> comparer)
|
||||
where T : struct =>
|
||||
@@ -43,7 +45,7 @@ namespace bts.utils {
|
||||
NullCheckEquals(source, other, (a, b) => a.SequenceEqual(b));
|
||||
|
||||
public static IEqualityComparer to_non_generic<T>(this IEqualityComparer<T> comparer) =>
|
||||
new AnonymousEqualityComparer<T>(comparer.Equals, comparer.GetHashCode);
|
||||
new AnonymousEqualityComparer<T>(comparer.Equals, comparer.GetHashCode!);
|
||||
|
||||
public static IEqualityComparer<TResult> cast<T, TResult>(
|
||||
this IEqualityComparer<T> comparer) =>
|
||||
@@ -51,13 +53,11 @@ namespace bts.utils {
|
||||
(a, b) => a is null ? b is null : a is T at && b is T bt && comparer.Equals(at, bt),
|
||||
x => x is T xt ? comparer.GetHashCode(xt) : 0);
|
||||
|
||||
#nullable enable
|
||||
public static IEqualityComparer<TSource> wrap<T, TSource>(
|
||||
this IEqualityComparer<T> comparer, Func<TSource, T?> selector) =>
|
||||
Create<TSource>(
|
||||
(a, b) => comparer.Equals(selector(a), selector(b)),
|
||||
a => selector(a) is T t ? comparer.GetHashCode(t) : 0);
|
||||
#nullable disable
|
||||
|
||||
public static bool nullable_equals<T>(T? a, T? b) where T : struct =>
|
||||
a.HasValue ? b.HasValue && a.Value.Equals(b.Value) : !b.HasValue;
|
||||
@@ -68,12 +68,19 @@ namespace bts.utils {
|
||||
public static bool null_check_equals<T>(T a, T b) =>
|
||||
a == null ? b == null : b != null && a.Equals(b);
|
||||
|
||||
public static bool NullCheckEquals<T>(T x, T y, Func<T, T, bool> non_null_equals) where T : class =>
|
||||
public static bool NullCheckEquals<T>(T? x, T? y, Func<T, T, bool> non_null_equals) where T : class =>
|
||||
x == null ? y == null :
|
||||
y != null &&
|
||||
non_null_equals(x, y);
|
||||
|
||||
public static bool equals_obj<T>(T value, object obj) where T : IEquatable<T> =>
|
||||
public static Func<T?, int> NullCheckGetHashCode<T>(Func<T, int> getHashCode) {
|
||||
var defaultHash = typeof(T).GetHashCode();
|
||||
return x => x is null
|
||||
? defaultHash
|
||||
: getHashCode(x);
|
||||
}
|
||||
|
||||
public static bool equals_obj<T>(in T value, object? obj) where T : IEquatable<T> =>
|
||||
obj is T other && value.Equals(other);
|
||||
|
||||
public static int safe_get_hash_code<T>(T obj) where T : class =>
|
||||
@@ -101,15 +108,19 @@ namespace bts.utils {
|
||||
public static int auto_phase<T>(IEnumerable<T> items) =>
|
||||
auto_phase(items.Take(_max_auto_phase_buckets).ToList());
|
||||
|
||||
public static int auto_phase<T>(IReadOnlyList<T> hash_codes, int bit_span = 32) {
|
||||
Log.assert(bit_span > 0 && bit_span <= 32);
|
||||
public static int auto_phase<T>(IReadOnlyList<T> hash_codes, int bit_span = 32) =>
|
||||
auto_phase(hash_codes, bit_span, typeof(T).GetHashCode());
|
||||
|
||||
public static int auto_phase<T>(IReadOnlyList<T> hash_codes, int bit_span, int nullHash) {
|
||||
ArgumentOutOfRangeException.ThrowIfLessThanOrEqual(bit_span, 0);
|
||||
ArgumentOutOfRangeException.ThrowIfGreaterThan(bit_span, 32);
|
||||
// don't divide by zero
|
||||
if (hash_codes.Count == 0)
|
||||
return 0;
|
||||
int size = Math.Min(hash_codes.Count, _max_auto_phase_buckets);
|
||||
int bits_per_hash = bit_span / size;
|
||||
int phase = 1 << (bits_per_hash - 1);
|
||||
int rv = hash_codes[0].GetHashCode() % phase;
|
||||
int rv = hash_codes[0]?.GetHashCode() ?? nullHash % phase;
|
||||
/// The idea is to split the 32 to bits into evenly sized buckets for each hash code item.
|
||||
/// For example:
|
||||
/// If there are 4 items in <paramref name="hash_codes"/>,
|
||||
@@ -120,7 +131,7 @@ namespace bts.utils {
|
||||
// nudge the bits left to make room for the next hash code
|
||||
rv = rv << bits_per_hash;
|
||||
// put this hash code in the front bits that were just zeroed out.
|
||||
rv |= hash_codes[i].GetHashCode() % phase;
|
||||
rv |= hash_codes[i]?.GetHashCode() ?? nullHash % phase;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
@@ -157,19 +168,55 @@ namespace bts.utils {
|
||||
aggregate_hash = aggregate_hash * _hash_multiplier + item_hash;
|
||||
|
||||
private class AnonymousEqualityComparer<T> : IEqualityComparer<T>, IEqualityComparer {
|
||||
readonly Func<T, T, bool> _equals;
|
||||
readonly Func<T, int> _get_hash_code;
|
||||
static readonly Func<Func<T, T, bool>, AnonymousEqualityComparer<T>> create;
|
||||
static readonly Func<Func<T, T, bool>, Func<T, int>, AnonymousEqualityComparer<T>> createWithHash;
|
||||
|
||||
public AnonymousEqualityComparer(Func<T, T, bool> equals) : this(equals, t => t.GetHashCode()) { }
|
||||
public AnonymousEqualityComparer(Func<T, T, bool> equals, Func<T, int> get_hash_code) {
|
||||
readonly Func<T?, T?, bool> _equals;
|
||||
readonly Func<T?, int> _get_hash_code;
|
||||
|
||||
static AnonymousEqualityComparer() {
|
||||
if (typeof(T).IsValueType) {
|
||||
create = equals => new(equals!);
|
||||
createWithHash = (equals, getHashCode) => new(equals!, NullCheckGetHashCode(getHashCode));
|
||||
} else {
|
||||
create = equals => new(NullCheckEquals(equals));
|
||||
createWithHash = (equals, getHashCode) => new(NullCheckEquals(equals), NullCheckGetHashCode(getHashCode));
|
||||
|
||||
static Func<T?, T?, bool> NullCheckEquals(Func<T, T, bool> equals) =>
|
||||
(x, y) =>
|
||||
x is null
|
||||
? y is null
|
||||
: y is not null && equals(x, y);
|
||||
}
|
||||
}
|
||||
|
||||
public AnonymousEqualityComparer(Func<T?, T?, bool> equals)
|
||||
: this(equals, typeof(T).GetHashCode()) { }
|
||||
|
||||
public AnonymousEqualityComparer(Func<T?, T?, bool> equals, int nullHash)
|
||||
: this(equals, t => t?.GetHashCode() ?? nullHash) { }
|
||||
|
||||
public AnonymousEqualityComparer(Func<T?, T?, bool> equals, Func<T?, int> get_hash_code) {
|
||||
_equals = equals;
|
||||
_get_hash_code = get_hash_code;
|
||||
}
|
||||
|
||||
public bool Equals(T x, T y) => _equals(x, y);
|
||||
public int GetHashCode(T obj) => _get_hash_code(obj);
|
||||
public static AnonymousEqualityComparer<T> Create(Func<T, T, bool> equals) =>
|
||||
create(equals);
|
||||
|
||||
bool IEqualityComparer.Equals(object x, object y) => x is T xt && y is T yt && _equals(xt, yt);
|
||||
public static AnonymousEqualityComparer<T> Create(Func<T, T, bool> equals, Func<T, int> getHashCode) =>
|
||||
createWithHash(equals, getHashCode);
|
||||
|
||||
public bool Equals(T? x, T? y) =>
|
||||
_equals(x, y);
|
||||
|
||||
public int GetHashCode(T? obj) =>
|
||||
_get_hash_code(obj);
|
||||
|
||||
bool IEqualityComparer.Equals(object? x, object? y) =>
|
||||
x is T xt
|
||||
&& y is T yt
|
||||
&& _equals(xt, yt);
|
||||
|
||||
int IEqualityComparer.GetHashCode(object obj) {
|
||||
if (obj is T t) {
|
||||
@@ -182,13 +229,42 @@ namespace bts.utils {
|
||||
}
|
||||
}
|
||||
|
||||
readonly struct SelectorComparer<T, TKey> : IEqualityComparer<T> {
|
||||
readonly Func<T?, TKey> resultSelector;
|
||||
readonly IEqualityComparer<TKey> resultComparer;
|
||||
readonly int nullHash;
|
||||
|
||||
public SelectorComparer(Func<T?, TKey> resultSelector, IEqualityComparer<TKey> resultComparer)
|
||||
: this(resultSelector, resultComparer, typeof(T).GetHashCode()) { }
|
||||
|
||||
public SelectorComparer(Func<T?, TKey> resultSelector, IEqualityComparer<TKey> resultComparer, int nullHash) {
|
||||
this.resultSelector = resultSelector;
|
||||
this.resultComparer = resultComparer;
|
||||
this.nullHash = nullHash;
|
||||
}
|
||||
|
||||
public bool Equals(T? x, T? y) =>
|
||||
resultComparer.Equals(resultSelector(x), resultSelector(y));
|
||||
|
||||
public int GetHashCode([DisallowNull] T obj) {
|
||||
var res = resultSelector(obj);
|
||||
return res is null
|
||||
? nullHash
|
||||
: resultComparer.GetHashCode(res);
|
||||
}
|
||||
}
|
||||
|
||||
struct SafeComparerWrapper<T> : IEqualityComparer<T> where T : class {
|
||||
readonly IEqualityComparer<T> _comparer;
|
||||
|
||||
public SafeComparerWrapper(IEqualityComparer<T> comparer) =>
|
||||
_comparer = comparer;
|
||||
|
||||
public bool Equals(T x, T y) => x == null ? y == null : y != null && _comparer.Equals(x, y);
|
||||
public readonly bool Equals(T? x, T? y) =>
|
||||
x is null
|
||||
? y is null
|
||||
: y is not null && _comparer.Equals(x, y);
|
||||
|
||||
public int GetHashCode(T obj) => obj == null ? 0 : _comparer.GetHashCode(obj);
|
||||
}
|
||||
}
|
||||
Loaded 100 of 271 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user