[mathicgb] 391/393: The Visual Studio project files should now work on any computer, including with Visual Studio Express. Added MonoArena and fixed a bug in flatten.

Doug Torrance dtorrance-guest at moszumanska.debian.org
Fri Apr 3 15:59:38 UTC 2015


This is an automated email from the git hooks/post-receive script.

dtorrance-guest pushed a commit to branch upstream
in repository mathicgb.

commit af5a33766d05fa2a234dacfc26a7a3681a39a7c4
Author: Bjarke Hammersholt Roune <www.broune.com>
Date:   Thu Oct 3 18:03:56 2013 -0700

    The Visual Studio project files should now work on any computer, including with Visual Studio Express. Added MonoArena and fixed a bug in flatten.
---
 Makefile.am                                    |  51 ++---
 build/vs12/mathicgb-exe/mathicgb-exe.vcxproj   |  50 +++--
 build/vs12/mathicgb-lib/mathicgb-lib.vcxproj   |  70 ++++---
 build/vs12/mathicgb-test/mathicgb-test.vcxproj |  50 +++--
 doc/description.txt                            | 157 +++++++++++++--
 src/mathicgb/F4MatrixBuilder.cpp               |   2 +-
 src/mathicgb/MonoArena.hpp                     | 253 +++++++++++++++++++++++++
 src/mathicgb/MonoMonoid.hpp                    |  17 +-
 src/mathicgb/Range.hpp                         |  30 ++-
 src/mathicgb/ReducerDedup.cpp                  |   3 +
 src/mathicgb/Scanner.cpp                       |   6 +-
 src/mathicgb/SparseMatrix.cpp                  |   5 +-
 src/mathicgb/stdinc.h                          |   2 +-
 src/test/MonoMonoid.cpp                        |  27 ++-
 src/test/Range.cpp                             |   4 +-
 src/test/mathicgb.cpp                          |   2 +-
 16 files changed, 591 insertions(+), 138 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index f19ccc5..4102169 100755
--- a/Makefile.am
+++ b/Makefile.am
@@ -13,31 +13,32 @@ libmathicgb_la_LIBADD= $(DEPS_LIBS)
 
 # the sources that are built to make libmathicgb. Listing the headers in
 # sources ensure that those files are included in distributions.
-libmathicgb_la_SOURCES = src/mathicgb/Range.hpp							\
-  src/mathicgb/ReducerPack.hpp src/mathicgb/ReducerPack.cpp				\
-  src/mathicgb/ClassicGBAlg.cpp src/mathicgb/ClassicGBAlg.hpp			\
-  src/mathicgb/MonoLookup.hpp src/mathicgb/MonoLookup.cpp				\
-  src/mathicgb/StaticMonoMap.hpp src/mathicgb/SigPolyBasis.cpp			\
-  src/mathicgb/SigPolyBasis.hpp src/mathicgb/Basis.cpp					\
-  src/mathicgb/Basis.hpp src/mathicgb/io-util.cpp						\
-  src/mathicgb/io-util.hpp src/mathicgb/KoszulQueue.hpp					\
-  src/mathicgb/ModuleMonoSet.cpp src/mathicgb/ModuleMonoSet.hpp			\
-  src/mathicgb/Poly.hpp src/mathicgb/PolyBasis.cpp						\
-  src/mathicgb/PolyBasis.hpp src/mathicgb/PolyHashTable.cpp				\
-  src/mathicgb/PolyHashTable.hpp src/mathicgb/PolyRing.cpp				\
-  src/mathicgb/PolyRing.hpp src/mathicgb/Reducer.cpp					\
-  src/mathicgb/Reducer.hpp src/mathicgb/ReducerDedup.hpp				\
-  src/mathicgb/ReducerDedup.cpp src/mathicgb/ReducerHash.hpp			\
-  src/mathicgb/ReducerHash.cpp src/mathicgb/ReducerHashPack.hpp			\
-  src/mathicgb/ReducerHashPack.cpp src/mathicgb/ReducerHelper.hpp		\
-  src/mathicgb/ReducerNoDedup.hpp src/mathicgb/ReducerNoDedup.cpp		\
-  src/mathicgb/ReducerPackDedup.hpp src/mathicgb/ReducerPackDedup.cpp	\
-  src/mathicgb/SignatureGB.cpp src/mathicgb/SignatureGB.hpp				\
-  src/mathicgb/SigSPairs.cpp src/mathicgb/SigSPairs.hpp					\
-  src/mathicgb/SPairs.cpp src/mathicgb/SPairs.hpp						\
-  src/mathicgb/stdinc.h src/mathicgb/SigSPairQueue.hpp					\
-  src/mathicgb/SigSPairQueue.cpp src/mathicgb/SparseMatrix.hpp			\
-  src/mathicgb/SparseMatrix.cpp src/mathicgb/QuadMatrixBuilder.hpp		\
+libmathicgb_la_SOURCES = src/mathicgb/MonoArena.hpp						\
+  src/mathicgb/Range.hpp src/mathicgb/ReducerPack.hpp					\
+  src/mathicgb/ReducerPack.cpp src/mathicgb/ClassicGBAlg.cpp			\
+  src/mathicgb/ClassicGBAlg.hpp src/mathicgb/MonoLookup.hpp				\
+  src/mathicgb/MonoLookup.cpp src/mathicgb/StaticMonoMap.hpp			\
+  src/mathicgb/SigPolyBasis.cpp src/mathicgb/SigPolyBasis.hpp			\
+  src/mathicgb/Basis.cpp src/mathicgb/Basis.hpp							\
+  src/mathicgb/io-util.cpp src/mathicgb/io-util.hpp						\
+  src/mathicgb/KoszulQueue.hpp src/mathicgb/ModuleMonoSet.cpp			\
+  src/mathicgb/ModuleMonoSet.hpp src/mathicgb/Poly.hpp					\
+  src/mathicgb/PolyBasis.cpp src/mathicgb/PolyBasis.hpp					\
+  src/mathicgb/PolyHashTable.cpp src/mathicgb/PolyHashTable.hpp			\
+  src/mathicgb/PolyRing.cpp src/mathicgb/PolyRing.hpp					\
+  src/mathicgb/Reducer.cpp src/mathicgb/Reducer.hpp						\
+  src/mathicgb/ReducerDedup.hpp src/mathicgb/ReducerDedup.cpp			\
+  src/mathicgb/ReducerHash.hpp src/mathicgb/ReducerHash.cpp				\
+  src/mathicgb/ReducerHashPack.hpp src/mathicgb/ReducerHashPack.cpp		\
+  src/mathicgb/ReducerHelper.hpp src/mathicgb/ReducerNoDedup.hpp		\
+  src/mathicgb/ReducerNoDedup.cpp src/mathicgb/ReducerPackDedup.hpp		\
+  src/mathicgb/ReducerPackDedup.cpp src/mathicgb/SignatureGB.cpp		\
+  src/mathicgb/SignatureGB.hpp src/mathicgb/SigSPairs.cpp				\
+  src/mathicgb/SigSPairs.hpp src/mathicgb/SPairs.cpp					\
+  src/mathicgb/SPairs.hpp src/mathicgb/stdinc.h							\
+  src/mathicgb/SigSPairQueue.hpp src/mathicgb/SigSPairQueue.cpp			\
+  src/mathicgb/SparseMatrix.hpp src/mathicgb/SparseMatrix.cpp			\
+  src/mathicgb/QuadMatrixBuilder.hpp									\
   src/mathicgb/QuadMatrixBuilder.cpp src/mathicgb/TypicalReducer.cpp	\
   src/mathicgb/TypicalReducer.hpp src/mathicgb/F4Reducer.hpp			\
   src/mathicgb/F4Reducer.cpp src/mathicgb/F4MatrixBuilder.hpp			\
diff --git a/build/vs12/mathicgb-exe/mathicgb-exe.vcxproj b/build/vs12/mathicgb-exe/mathicgb-exe.vcxproj
index 0334965..5b6d2c9 100755
--- a/build/vs12/mathicgb-exe/mathicgb-exe.vcxproj
+++ b/build/vs12/mathicgb-exe/mathicgb-exe.vcxproj
@@ -240,15 +240,16 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -258,15 +259,16 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN64;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -276,16 +278,17 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
       <TreatWarningAsError>true</TreatWarningAsError>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -295,16 +298,17 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN64;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
       <TreatWarningAsError>true</TreatWarningAsError>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -314,15 +318,16 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -332,15 +337,16 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -352,17 +358,18 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <OpenMPSupport>false</OpenMPSupport>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -374,17 +381,18 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <OpenMPSupport>false</OpenMPSupport>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <ProjectReference>
@@ -399,17 +407,18 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>WIN32;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <OpenMPSupport>false</OpenMPSupport>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -421,17 +430,18 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>WIN64;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <OpenMPSupport>false</OpenMPSupport>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
diff --git a/build/vs12/mathicgb-lib/mathicgb-lib.vcxproj b/build/vs12/mathicgb-lib/mathicgb-lib.vcxproj
index 9dfdbb1..5be0b49 100755
--- a/build/vs12/mathicgb-lib/mathicgb-lib.vcxproj
+++ b/build/vs12/mathicgb-lib/mathicgb-lib.vcxproj
@@ -222,18 +222,19 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN32;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN32;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
     </Link>
     <Lib>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>tbb_debug.lib</AdditionalDependencies>
     </Lib>
   </ItemDefinitionGroup>
@@ -242,18 +243,19 @@
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN64;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN64;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
     </Link>
     <Lib>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>tbb_debug.lib</AdditionalDependencies>
     </Lib>
   </ItemDefinitionGroup>
@@ -263,19 +265,20 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN32;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN32;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <TreatWarningAsError>true</TreatWarningAsError>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
     </Link>
     <Lib>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>tbb_debug.lib</AdditionalDependencies>
     </Lib>
   </ItemDefinitionGroup>
@@ -284,19 +287,20 @@
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN64;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN64;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <TreatWarningAsError>true</TreatWarningAsError>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
     </Link>
     <Lib>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>tbb_debug.lib</AdditionalDependencies>
     </Lib>
   </ItemDefinitionGroup>
@@ -306,18 +310,19 @@
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN32;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
     </Link>
     <Lib>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>tbb_debug.lib</AdditionalDependencies>
     </Lib>
   </ItemDefinitionGroup>
@@ -326,18 +331,19 @@
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN64;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
     </Link>
     <Lib>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>tbb_debug.lib</AdditionalDependencies>
     </Lib>
   </ItemDefinitionGroup>
@@ -348,11 +354,12 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <OpenMPSupport>false</OpenMPSupport>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -361,7 +368,7 @@
       <OptimizeReferences>true</OptimizeReferences>
     </Link>
     <Lib>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>tbb.lib</AdditionalDependencies>
     </Lib>
   </ItemDefinitionGroup>
@@ -372,11 +379,12 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;_USRDLL;MATHICGBLIB_EXPORTS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <OpenMPSupport>false</OpenMPSupport>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -385,7 +393,7 @@
       <OptimizeReferences>true</OptimizeReferences>
     </Link>
     <Lib>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>tbb.lib</AdditionalDependencies>
     </Lib>
   </ItemDefinitionGroup>
@@ -396,11 +404,12 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN32;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN32;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <OpenMPSupport>false</OpenMPSupport>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -409,7 +418,7 @@
       <OptimizeReferences>true</OptimizeReferences>
     </Link>
     <Lib>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>tbb_debug.lib</AdditionalDependencies>
     </Lib>
   </ItemDefinitionGroup>
@@ -420,12 +429,13 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN64;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>TBB_USE_DEBUG=1;WIN64;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <OpenMPSupport>false</OpenMPSupport>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <PrecompiledHeaderFile>stdinc.h</PrecompiledHeaderFile>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -434,7 +444,7 @@
       <OptimizeReferences>true</OptimizeReferences>
     </Link>
     <Lib>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>tbb_debug.lib</AdditionalDependencies>
     </Lib>
   </ItemDefinitionGroup>
diff --git a/build/vs12/mathicgb-test/mathicgb-test.vcxproj b/build/vs12/mathicgb-test/mathicgb-test.vcxproj
index d5fbfb6..efc8661 100755
--- a/build/vs12/mathicgb-test/mathicgb-test.vcxproj
+++ b/build/vs12/mathicgb-test/mathicgb-test.vcxproj
@@ -203,15 +203,16 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_VARIADIC_MAX=10;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\gtest\include;C:\projs\mathic\gtest;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\gtest\include;$(ProjectDir)\..\..\..\..\gtest;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -221,15 +222,16 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN64;_VARIADIC_MAX=10;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\gtest\include;C:\projs\mathic\gtest;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\gtest\include;$(ProjectDir)\..\..\..\..\gtest;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -239,16 +241,17 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_VARIADIC_MAX=10;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\gtest\include;C:\projs\mathic\gtest;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\gtest\include;$(ProjectDir)\..\..\..\..\gtest;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
       <TreatWarningAsError>true</TreatWarningAsError>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -258,16 +261,17 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN64;_VARIADIC_MAX=10;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\gtest\include;C:\projs\mathic\gtest;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\gtest\include;$(ProjectDir)\..\..\..\..\gtest;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
       <TreatWarningAsError>true</TreatWarningAsError>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -277,15 +281,16 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_VARIADIC_MAX=10;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\gtest\include;C:\projs\mathic\gtest;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\gtest\include;$(ProjectDir)\..\..\..\..\gtest;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -295,15 +300,16 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN64;_VARIADIC_MAX=10;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\gtest\include;C:\projs\mathic\gtest;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\gtest\include;$(ProjectDir)\..\..\..\..\gtest;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <MinimalRebuild>false</MinimalRebuild>
       <OpenMPSupport>false</OpenMPSupport>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -315,17 +321,18 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>WIN32;_VARIADIC_MAX=10;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\gtest\include;C:\projs\mathic\gtest;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\gtest\include;$(ProjectDir)\..\..\..\..\gtest;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <OpenMPSupport>false</OpenMPSupport>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -337,17 +344,18 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>WIN64;_VARIADIC_MAX=10;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\gtest\include;C:\projs\mathic\gtest;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\gtest\include;$(ProjectDir)\..\..\..\..\gtest;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <OpenMPSupport>false</OpenMPSupport>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -359,17 +367,18 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>WIN32;_VARIADIC_MAX=10;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\gtest\include;C:\projs\mathic\gtest;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\gtest\include;$(ProjectDir)\..\..\..\..\gtest;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <OpenMPSupport>false</OpenMPSupport>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
@@ -381,17 +390,18 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>WIN64;_VARIADIC_MAX=10;MATHICGB_DEBUG;MATHIC_DEBUG;MEMTAILOR_DEBUG;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:\projs\mathic\tbb\include;C:\projs\mathic\gtest\include;C:\projs\mathic\gtest;C:\projs\mathic\mathicgb\src;C:\projs\mathic\mathic\src;C:\projs\mathic\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\..\..\tbb\include;$(ProjectDir)\..\..\..\..\gtest\include;$(ProjectDir)\..\..\..\..\gtest;$(ProjectDir)\..\..\..\..\mathicgb\src;$(ProjectDir)\..\..\..\..\mathic\src;$(ProjectDir)\..\..\..\..\memtailor\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <OpenMPSupport>false</OpenMPSupport>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalLibraryDirectories>C:\projs\mathic\tbb\lib\intel64\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(ProjectDir)\..\..\..\..\tbb\lib\ia32\vc11;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
diff --git a/doc/description.txt b/doc/description.txt
index 7b4ee01..1fe2f4d 100755
--- a/doc/description.txt
+++ b/doc/description.txt
@@ -25,18 +25,101 @@ may be way off. This is all current as of September 24, 2013.
 ***** High-level view of MathicGB
 
 The core engine of MathicGB is ClassicGBAlg, which implements the
-classic Buchberger algorithm with some improvements, and SignatureGB
+classic Buchberger algorithm with some improvements, and SignatureGB,
 which implements the Signature Basis Algorithm. These classes do not
 contain that much code, instead they use a lot of other classes to do
 their bidding. They have classes for keeping track of the basis, for
-keeping track of the S-pairs, for doing the reductions and for
-representing the coefficients, monomials and polynomials. Some of
-these are encapsulated behind virtual interfaces, so that different
+keeping track of the S-pairs, for reducing polynomials and for
+representing the coefficients, monomials and polynomials.
+
+Some of the components used by the top-level algorithms are
+encapsulated behind virtual interfaces, so that different
 implementations can be chosen at run-time. This is notably the case
-for the reducers.
+for the reducers. For example, ClassicGBAlg implements F4, which is
+achived by having a reducer that does matrix-based reduction. Since
+the reducer is encapsulated behind a virtual interface, the top-level
+algorithm is unaware of whether it is currently doing F4 or the
+classic Buchberger algorithm.
+
+The low level components that take care of coefficients, exponents,
+monomials and terms are not encapsulated behind a virtual
+interface. Most of the inner loops in MathicGB contain an operation on
+one of these structures, so there would be too much overhead if each
+operation required a virtual function call. That is why MathicGB only
+supports a single kind of coefficient, exponent, monomial and
+term. Just like virtual functions, templates allow programming to an
+interchangeable interface, but the overhead of templates is in the
+time it takes to compile the program and in the size of the final
+executable. Templates do not impact the speed of the program, except
+through increasing the size of the final executable, which can lead to
+worse performance from the instruction cache on the CPU.
+
+My plan was for MathicGB to support many different kinds of
+coefficients, exponents, monomials and terms. I wanted to achieve this
+using templates to decouple these structures from the higher-level
+components that use them. I did not have time to complete this plan,
+yet my incomplete efforts in this direction has had a significant
+effect on all of the code and those changes might seem strange without
+knowledge of the end goal - that is why I mention this as part of the
+high-level overview. To complete the plan, all high-level components
+will need to be templates on the low-level structures that they
+use. For example, a structure to represent a polynomial will need to
+be a template on a polynomial ring and a structure for handling
+S-pairs will need to be a template on a monoid (the monoid is the part
+of a polynomial ring that has to do with monomials). None of these are
+currently templates in MathicGB, but they are written in a way that is
+intended to make it easy to turn them into templates. That way I could
+make many of the necessary changes one file at a time and thus test
+each little change one at a time. The more direct alternative would
+have been to do all the changes at the same time, which would have
+taken a month or two and MathicGB would not have been compilable
+during that time. The likely multi-week bug hunting party at the end
+of that would have been a wonderful time.
+
+Many classes in MathicGB have a typedef called Monoid and all
+monomial-related types are then referenced as sub-types of the
+Monoid. That could seem strange since there is only a single monoid
+that MathicGB can currently use, but the idea is that the Monoid type
+would turn into a template parameter and at that point the change for
+becoming a template should be much easier since the code is already
+written in terms of that template parameter/typedef. That is why the
+code is written like that.
+
+Note that there is no problem with using both virtual interfaces and
+templates. The virtual interfaces allows selection of a type at
+runtime, so the user does not have to recompile MathicGB just to
+choose a different reducer implementation. The templates allow a
+choice of types at compile time. These features combine
+beautifully. For example, the virtual Reducer interface could be a
+template on a polynomial ring. By putting the code that instantiates
+that interface into .cpp files, this allows the templated higher-level
+algorithms to use the Reducer interface without ever directly
+observing the code that implements the reducers, even though all the
+code consists of templates - including the high-level algorithm, the
+reducer interface and the reducer implementation. This way a change to
+the reducer implementation does not require recompilation of the
+high-level algorithm.
+
+There is an unfortunate pattern with highly templated programs where
+there ends up being a single file that instantiates most of the entire
+program. This single file can then take a long time to compile and it
+is not possible to compile in parallel since there is only a single
+translation unit that takes most of the time. Even if this pattern is
+avoided, it is often the case that all of the .cpp files include and
+instantiate the same temlates over and over again, leading to slow
+compilation. Hiding the templates behind templated virtual interfaces
+reduces this problem. For example, if the implementations of the
+templated virtual Reducer interface are hidden from the code that uses
+Reducers (that is, they only see the template Reducer interface), then
+that code never sees the Reducer implementations and therefore does
+not need to create its own instantiation of the Reducer
+implementations.
+
+So templates can step in when virtual interfaces are too expensive and
+then virtual interfaces at a higher level of the program can reduce
+the costs of using templates. That's the end goal I had for many of
+the changes in MathicGB.
 
-ClassicGBAlg also implements F4, which is achived by having a reducer
-that does matrix-based reduction.
 
 ***** Installation for unix systems and Cygwin
 
@@ -80,17 +163,59 @@ mathic.
 
 Project (medium-effort, low-difficulty): Set up a trac for MathicGB.
 
-***** Installation for Visual Studio
 
-There are Visual Studio 2013 project files for each project in
-mathicgb/build/vs12. I have only tested these on the machine in my
-office. tbb must already be installed in some place where Mathic can
-find them.
+***** Installation for Visual Studio
 
-Project (medium-to-high-effort, medium-difficulty): Get the Visual
-Studio project files in git to work in Visual Studio Express and
-document for other people how to do that. Improve the project files so
-that they are as easy as possible to get running.
+There are Visual Studio 2012 project files for each project in
+mathicgb/build/vs12. I have gotten these to work on both Visual Studio
+Pro 2012 Pro and Visual Studio Express 2012. Getting these files to
+work is more involved than just typing "make", though I found it to be
+worth it because Visual Studio is a first-rate development environment.
+
+You must download gtest (source release), tbb (binary release),
+memtailor (source), mathic (source) and mathicgb (source) and put them
+all in the same directory so that it has directories named:
+
+  gtest\
+  tbb\
+  memtailor\
+  mathic\
+  mathicgb\
+
+Now open mathicgb\build\vs12\mathicgb.sln. Select the configuration
+and platform that you want from the drop-down menues at the middle-top
+of the screen. You probably want the Release configuration and the x64
+platform. Now compile everything by pressing F7. As of the time of
+this writing (October 3, 2013) the code compiles in MSVC and you
+should get an error and warning-free build. If other developers have
+picked up the project since then and they are not using MSVC, then
+likely you will need to make changes to the code to get it to compile
+on MSVC.
+
+Right click the mathicgb-test project in the Solution Explorer and
+left click "Set as StartUp Project". Now press F5 to run the unit
+tests. If you have installed tbb globally this might work (is that
+possible?), but otherwise you're going to get an error that the tbb
+dll could not be found. There should be a better solution to this, but
+what I found the easiest to do is to go into tbb\bin\intel64\cv11\ and
+copy all the files there into
+mathicgb\build\vs12\output\x64\Release\. That's for an x64 Release
+build. For a Win32 build, take the files from tbb\bin\ia32\cv11\ and
+copy them into mathicgb\build\vs12\output\Win32\Release\. For a
+different configuration than Release, replace Release with the name of
+the configuration. All these directories will already exist if you try
+building a file with that configuration and platform, which is what
+I'd recommend. After doing this, you should be able to press F5 in
+Visual Studio and get all the tests to run and pass.
+
+Project (Medium-effort, medium-difficulty): Find a better way of
+linking up with tbb that is easy to do and does not involve copying
+files around manually. Also make a .bat file that downloads all the
+necessary source and binary releases and links everything up - serving
+the same purpose as the Makefile written out by make-Makefile.sh. It
+is important that MathicGB isn't too hard to set up on MSVC because
+otherwise developers won't use it and then the code will stop working
+on MSVC.
 
 
 ***** C++ concepts and miscellaneous MathicGB C++ stuff
diff --git a/src/mathicgb/F4MatrixBuilder.cpp b/src/mathicgb/F4MatrixBuilder.cpp
index b970be8..5763dcb 100755
--- a/src/mathicgb/F4MatrixBuilder.cpp
+++ b/src/mathicgb/F4MatrixBuilder.cpp
@@ -321,7 +321,7 @@ void F4MatrixBuilder::appendRowTop(
     const auto col = findOrCreateColumn
       (it.mono(), multiple, reader, feeder);
 	MATHICGB_ASSERT(it.coef() < std::numeric_limits<Scalar>::max());
-    MATHICGB_ASSERT(it.coef());
+    MATHICGB_ASSERT(!field().isZero(it.coef()));
     builder.appendEntryTop
       (col.first, static_cast<Scalar>(it.coef()));
     ++it;
diff --git a/src/mathicgb/MonoArena.hpp b/src/mathicgb/MonoArena.hpp
new file mode 100755
index 0000000..d860d64
--- /dev/null
+++ b/src/mathicgb/MonoArena.hpp
@@ -0,0 +1,253 @@
+// MathicGB copyright 2012 all rights reserved. MathicGB comes with ABSOLUTELY
+// NO WARRANTY and is licensed as GPL v2.0 or later - see LICENSE.txt.
+#ifndef MATHICGB_MONO_ARENA_GUARD
+#define MATHICGB_MONO_ARENA_GUARD
+
+#include "Range.hpp"
+#include <algorithm>
+#include <vector>
+
+MATHICGB_NAMESPACE_BEGIN
+
+/// Like a Monoid::MonoVector, except that references are not
+/// invalidated when additional memory must be allocated.
+///
+/// Todo: Think of a better name. We can't deallocate at the end, so
+/// MonoArena is not really an Arena.
+template<class Monoid>
+class MonoArena;
+
+template<class M>
+class MonoArena {
+public:
+  typedef M Monoid;
+  typedef typename Monoid::Mono Mono;
+  typedef typename Monoid::MonoRef MonoRef;
+  typedef typename Monoid::ConstMonoRef ConstMonoRef;
+  typedef typename Monoid::MonoPtr MonoPtr;
+  typedef typename Monoid::ConstMonoPtr ConstMonoPtr;
+  typedef typename Monoid::MonoVector MonoVector;
+
+  typedef Flatten<typename std::vector<MonoVector>::const_iterator> const_iterator;
+
+  // *** Constructors and assignment
+
+  MonoArena(const Monoid& monoid) {
+    mVectors.emplace_back(monoid);
+  }
+
+  MonoArena(const MonoArena& a): mVectors(a.mVectors) {}
+  MonoArena(MonoArena&& a): mVectors(std::move(a.mVectors)) {}
+
+  MonoArena& operator=(const MonoArena& a) {
+    MATHICGB_ASSERT(monoid() == a.monoid());
+    mVectors = a.mVectors;
+    return *this;
+  }
+
+  MonoArena& operator=(MonoArena&& a) {
+    MATHICGB_ASSERT(monoid() == a.monoid());
+    mVectors = std::move(a.mVectors);
+    return *this;      
+  }
+
+
+  // *** Iterators
+
+  const_iterator begin() const {
+    return makeFlatten(std::begin(mVectors), std::end(mVectors));
+  }
+
+  const_iterator end() const {
+    return makeFlatten(std::end(mVectors), std::end(mVectors));
+  }
+
+  const_iterator cbegin() const {return begin();}
+  const_iterator cend() const {return end();}
+
+
+  // *** Size and capacity
+
+  size_t size() const {
+    auto count = size_t(0);
+    for (const auto& v : mVectors)
+      count += v.size();
+    return count;
+  }
+
+  bool empty() const {
+    MATHICGB_ASSERT(!mVectors.empty());
+    return mVectors.front().empty();
+  }
+
+
+  // *** Element access
+
+  ConstMonoRef front() const {
+    MATHICGB_ASSERT(!empty());
+    MATHICGB_ASSERT(!mVectors.front().empty());
+    return mVectors.front().front();
+  }
+
+  MonoRef back() {
+    MATHICGB_ASSERT(!empty());
+    MATHICGB_ASSERT(!backVector().empty());
+    return backVector().back();
+  }
+
+  ConstMonoRef back() const {
+    MATHICGB_ASSERT(!empty());
+    MATHICGB_ASSERT(!backVector().empty());
+    return backVector().back();
+  }
+
+
+  // *** Modifiers
+
+  /// Appends the identity.
+  void push_back() {
+    MATHICGB_ASSERT(debugAssertValid());
+
+    ensureSpace();
+    return;
+    backVector().push_back();
+
+    MATHICGB_ASSERT(debugAssertValid());
+    MATHICGB_ASSERT(monoid().isIdentity(back()));
+  }
+
+  void push_back(ConstMonoRef mono) {
+    MATHICGB_ASSERT(debugAssertValid());
+    MATHICGB_ASSERT(monoid().debugValid(mono));
+
+    ensureSpace();
+    backVector().push_back(mono);
+
+    MATHICGB_ASSERT(debugAssertValid());
+    MATHICGB_ASSERT(monoid().equal(back(), mono));
+  }
+
+  template<class Monoid>
+  void push_back(
+    const Monoid& monoidMono,
+    typename Monoid::ConstMonoRef mono
+  ) {
+    MATHICGB_ASSERT(monoidMono.debugValid(mono));
+    MATHICGB_ASSERT(debugAssertValid());
+
+    ensureSpace();
+    backVector().push_back(monoidMono, mono);
+
+    MATHICGB_ASSERT(debugAssertValid());
+    MATHICGB_ASSERT(monoid().equal(monoidMono, mono, back()));
+  }
+
+  void swap(MonoArena& a) {
+    MATHICGB_ASSERT(monoid() == a.monoid());
+    MATHICGB_ASSERT(debugAssertValid());
+    MATHICGB_ASSERT(a.debugAssertValid());
+
+    mVectors.swap(a.mVectors);
+
+    MATHICGB_ASSERT(debugAssertValid());
+    MATHICGB_ASSERT(a.debugAssertValid());
+  }
+
+  void clear() {
+    MATHICGB_ASSERT(debugAssertValid());
+
+    auto last = std::end(mVectors);
+    --last;
+    last->clear();
+    mVectors.erase(mVectors.begin(), last);
+
+    MATHICGB_ASSERT(debugAssertValid());
+  }
+
+
+  // *** Other
+
+  size_t memoryBytesUsed() const {
+    auto sum = size_t(0);
+    for (const auto& v : mVectors)
+      sum += v.memoryBytesUsed();
+    return sum;
+  }
+
+  const Monoid& monoid() const {return mVectors.back().monoid();}
+
+  bool debugAssertValid() const {
+#ifdef MATHICGB_DEBUG
+    MATHICGB_ASSERT(!mVectors.empty());
+    for (const auto& p : adjPairRange(mVectors)) {
+      MATHICGB_ASSERT(p.first.monoid() == p.second.monoid());
+      MATHICGB_ASSERT(p.first.capacity() <= p.second.capacity());
+    }
+#endif
+    return true;
+  }
+
+private:
+  /// Ensures that there is space for at least one more monomial.
+  ///
+  /// @todo: if monomials ever become variable-size, then this might
+  /// allocate far more than double the memory of the previous
+  /// vector. The problem is that they might actually take up, say, 128 bytes
+  /// but the worst case is 1024k. Then if 1000 monomials fit in the previous
+  /// vector, the next vector will allocate 2 * 1000 * 1024k bytes, which
+  /// is far more than double what the previous vector did. Make it actually
+  /// double the bytes.
+  void ensureSpace() {
+    MATHICGB_ASSERT(debugAssertValid());
+
+    if (!backVector().atCapacity())
+      return;
+
+    const auto oldSize = backVector().size();
+    if (oldSize > std::numeric_limits<decltype(oldSize)>::max() / 2)
+      throw std::bad_alloc();
+    const auto newSize = 2 * oldSize;
+
+    mVectors.emplace_back(monoid());
+    backVector().reserve(newSize);
+
+    MATHICGB_ASSERT(debugAssertValid());
+  }
+
+  MonoVector& backVector() {
+    MATHICGB_ASSERT(!mVectors.empty());
+    return mVectors.back();
+  }
+
+  const MonoVector& backVector() const {
+    MATHICGB_ASSERT(!mVectors.empty());
+    return mVectors.back();
+  }
+
+  std::vector<MonoVector> mVectors;
+};
+
+/// Returns true if a and b contain the same monomials in the same order.
+template<class Monoid>
+bool operator==(const MonoArena<Monoid>& a, const MonoArena<Monoid>& b) {
+  MATHICGB_ASSERT(a.monoid() == b.monoid());
+  MATHICGB_ASSERT(a.debugAssertValid());
+  MATHICGB_ASSERT(b.debugAssertValid());
+  typedef typename Monoid::ConstMonoRef ConstMonoRef;
+
+  const auto& monoid = a.monoid();
+  auto cmpEqual = [&monoid](ConstMonoRef monoA, ConstMonoRef monoB) {
+    return monoid.equal(monoA, monoB);
+  };
+  return std::equal(std::begin(a), std::end(a), std::begin(b), cmpEqual);
+}
+
+/// As !(*this == v).
+template<class Monoid>
+bool operator!=(const MonoArena<Monoid>& a, const MonoArena<Monoid>& b) {
+  MATHICGB_ASSERT(a.monoid() == b.monoid());
+  return !(a == b);
+}
+
+MATHICGB_NAMESPACE_END
+#endif
diff --git a/src/mathicgb/MonoMonoid.hpp b/src/mathicgb/MonoMonoid.hpp
index 4052597..def5533 100755
--- a/src/mathicgb/MonoMonoid.hpp
+++ b/src/mathicgb/MonoMonoid.hpp
@@ -1579,6 +1579,8 @@ public:
 
     size_t size() const {return mMonos.size() / monoid().entryCount();}
     bool empty() const {return mMonos.empty();}
+    size_t capacity() const {return mMonos.capacity() / monoid().entryCount();}
+    bool atCapacity() const {return size() == capacity();}
 
 
     // *** Element access
@@ -1658,6 +1660,11 @@ public:
     const MonoMonoid& mMonoid;
   };
 
+  bool debugValid(ConstMonoRef mono) const {
+    MATHICGB_ASSERT(debugOrderValid(mono));
+    MATHICGB_ASSERT(debugHashValid(mono));
+    return true;
+  }
 
 private:
   void operator=(MonoMonoid&); // not available
@@ -1718,12 +1725,6 @@ private:
     return true;
   }
 
-  bool debugValid(ConstMonoRef mono) const {
-    MATHICGB_ASSERT(debugOrderValid(mono));
-    MATHICGB_ASSERT(debugHashValid(mono));
-    return true;
-  }
-
   template<class MonoidA, class MonoidB>
   bool debugLcmCheck(
     const MonoidA& monoidA,
@@ -1847,13 +1848,13 @@ private:
     Exponent degree = 0;
     if (orderIsTotalDegreeRevLex()) {
       MATHICGB_ASSERT(grading == 0);
-      for (auto var = 0; var < varCount(); ++var)
+      for (auto var = size_t(0); var < varCount(); ++var)
         degree -= exponent(mono, var);
     } else if (HasComponent && componentGradingIndex() == grading)
       return component(mono);
     else {
       MATHICGB_ASSERT(gradings().size() == gradingCount() * varCount());
-      for (auto var = 0; var < varCount(); ++var) {
+      for (auto var = size_t(0); var < varCount(); ++var) {
         const auto index = gradingsIndex(grading, var);
         degree += exponent(mono, var) * gradings()[index];
       }
diff --git a/src/mathicgb/Range.hpp b/src/mathicgb/Range.hpp
index d598532..836c59f 100755
--- a/src/mathicgb/Range.hpp
+++ b/src/mathicgb/Range.hpp
@@ -7,6 +7,7 @@
 #include <vector>
 #include <utility>
 #include <type_traits>
+#include <iterator>
 
 MATHICGB_NAMESPACE_BEGIN
 
@@ -389,6 +390,13 @@ auto adjPairRange(
 
 // *** Flatten range of ranges into a single range
 
+namespace FlattenNamespace {
+  template<class OuterIterator>
+  struct InnerIteratorType {
+    typedef typename std::decay<decltype(std::begin(*OuterIterator()))>::type type;
+  };
+}
+
 /// Flatten is an iterator that iterates through each range in a range
 /// of ranges. The point is to enable the flatten() function defined
 /// further down in this header. This iterator is invalidated whenever
@@ -397,9 +405,13 @@ auto adjPairRange(
 template<class OuterIterator>
 class Flatten {
 public:
-  typedef decltype(std::begin(*std::declval<OuterIterator>())) InnerIteratorRaw;
-  typedef typename std::decay<InnerIteratorRaw>::type InnerIterator;
-
+  // Yes, it would inded make more sense to inline what InnerIteratorType<>
+  // does here. That worked fine on gcc 4.7.3. It did not compile on
+  // MSVC 2012. I spent a lot of time trying to track down the problem
+  // and as far as I can tell, it is a compiler bug. The work-around
+  // with InnerIteratorType works and I'm going to leave it at that.
+  typedef typename FlattenNamespace::InnerIteratorType<OuterIterator>::type
+    InnerIterator;
   typedef typename std::iterator_traits<InnerIterator>::difference_type
     difference_type;
   typedef typename std::iterator_traits<InnerIterator>::value_type value_type;
@@ -446,6 +458,8 @@ public:
 
     if (atEnd())
       return f.atEnd();
+    else if (f.atEnd())
+      return false;
     else
       return mInner == f.mInner;
   }
@@ -498,7 +512,7 @@ Flatten<OuterIterator> makeFlatten(
 
 /// As flatten(range(begin, end)).
 template<class OuterIterator>
-Range<Flatten<OuterIterator>> flattenRange(
+Range<Flatten<OuterIterator>> flatten(
   OuterIterator outerBegin,
   OuterIterator outerEnd
 ) {
@@ -515,15 +529,15 @@ Range<Flatten<OuterIterator>> flattenRange(
 ///   v[0].push_back(1);
 ///   v[2].push_back(2);
 ///   v[2].push_back(3);
-///   for (const auto& i : flattenRange(v))
+///   for (const auto& i : flatten(v))
 ///     std::cout << i << ' ';
 ///
 /// The output is "1 2 3 ";
 template<class OuterRange>
-auto flattenRange(
+auto flatten(
   OuterRange&& outerRange
-) -> decltype(flattenRange(std::begin(outerRange), std::end(outerRange))) {
-  return flattenRange(std::begin(outerRange), std::end(outerRange));
+) -> decltype(flatten(std::begin(outerRange), std::end(outerRange))) {
+  return flatten(std::begin(outerRange), std::end(outerRange));
 }
 
 MATHICGB_NAMESPACE_END
diff --git a/src/mathicgb/ReducerDedup.cpp b/src/mathicgb/ReducerDedup.cpp
index 475d7db..42841e1 100644
--- a/src/mathicgb/ReducerDedup.cpp
+++ b/src/mathicgb/ReducerDedup.cpp
@@ -1,3 +1,6 @@
+#include <memtailor.h>
+#include "memtailor.h"
+
 // MathicGB copyright 2012 all rights reserved. MathicGB comes with ABSOLUTELY
 // NO WARRANTY and is licensed as GPL v2.0 or later - see LICENSE.txt.
 #include "stdinc.h"
diff --git a/src/mathicgb/Scanner.cpp b/src/mathicgb/Scanner.cpp
index 0649c81..1c939a5 100755
--- a/src/mathicgb/Scanner.cpp
+++ b/src/mathicgb/Scanner.cpp
@@ -179,7 +179,11 @@ bool Scanner::readBuffer(size_t minRead) {
     didReadCount = fread(readInto, 1, readCount, mFile);
   } else if (mStream != 0) {
     mStream->read(readInto, readCount);
-    didReadCount = mStream->gcount();
+    const std::streamsize maxSizeT =
+      std::numeric_limits<std::make_signed<size_t>::type>::max();
+    if (mStream->gcount() > maxSizeT)
+      throw std::bad_alloc();
+    didReadCount = static_cast<size_t>(mStream->gcount());
   }
   mBuffer.resize(saveCount + didReadCount);
   mBufferPos = mBuffer.begin();
diff --git a/src/mathicgb/SparseMatrix.cpp b/src/mathicgb/SparseMatrix.cpp
index fe4afce..7d41d47 100755
--- a/src/mathicgb/SparseMatrix.cpp
+++ b/src/mathicgb/SparseMatrix.cpp
@@ -499,7 +499,10 @@ SparseMatrix::Scalar SparseMatrix::read(FILE* file) {
   const auto rowCount = readOne<uint32>(file);
   const auto colCount = readOne<uint32>(file);
   const auto modulus = readOne<uint32>(file);
-  const auto entryCount = readOne<uint64>(file);
+  const auto entryCount64 = readOne<uint64>(file);
+  if (entryCount64 > std::numeric_limits<size_t>::max())
+    throw std::bad_alloc();
+  const auto entryCount = static_cast<size_t>(entryCount64);
 
   // Allocate memory to hold the matrix in one block.
   clear();
diff --git a/src/mathicgb/stdinc.h b/src/mathicgb/stdinc.h
index e2fae03..2040b3e 100755
--- a/src/mathicgb/stdinc.h
+++ b/src/mathicgb/stdinc.h
@@ -47,7 +47,7 @@
 /// does not alias any other pointer that is used in the current scope.
 #define MATHICGB_RESTRICT __restrict
 
-#pragma warning (disable: 4996) // std::copy on pointers is flagged as dangerous
+#pragma warning (disable: 4996) // don't warn about e.g. std::fill on pointers
 #pragma warning (disable: 4290) // VC++ ignores throw () specification.
 #pragma warning (disable: 4127) // Warns about using "while (true)".
 #pragma warning (disable: 4100) // Warns about unused parameters.
diff --git a/src/test/MonoMonoid.cpp b/src/test/MonoMonoid.cpp
index b261570..0e084b2 100755
--- a/src/test/MonoMonoid.cpp
+++ b/src/test/MonoMonoid.cpp
@@ -3,6 +3,7 @@
 #include "mathicgb/stdinc.h"
 #include "mathicgb/MonoMonoid.hpp"
 
+#include "mathicgb/MonoArena.hpp"
 #include "mathicgb/MathicIO.hpp"
 #include <gtest/gtest.h>
 #include <sstream>
@@ -91,10 +92,9 @@ TYPED_TEST(Monoids, VarCount) {
   ASSERT_EQ(12, Monoid(12).varCount());
 }
 
-TYPED_TEST(Monoids, MonoVector) {
-  typedef TypeParam Monoid;
+template<class Monoid, class MonoVector>
+void testMonoVector() {
   typedef typename Monoid::VarIndex VarIndex;
-  typedef typename Monoid::MonoVector MonoVector;
 
   Monoid monoid(13);
   MonoVector v(monoid);
@@ -113,7 +113,7 @@ TYPED_TEST(Monoids, MonoVector) {
   for (size_t i = 0; i < count; ++i) {
     ASSERT_EQ(i, v.size());
     v.push_back(); // push_back, no param
-    ASSERT_GT(v.memoryBytesUsed(), 0);
+    ASSERT_GT(v.memoryBytesUsed(), 0u);
     ASSERT_FALSE(v.empty()); // empty
     ASSERT_EQ(i + 1, v.size()); // size
 
@@ -195,6 +195,25 @@ TYPED_TEST(Monoids, MonoVector) {
   ASSERT_TRUE(v.empty());
 }
 
+TYPED_TEST(Monoids, MonoVector) {
+  typedef TypeParam Monoid;
+  typedef typename Monoid::MonoVector MonoVector;
+
+  testMonoVector<Monoid, MonoVector>(); 
+}
+
+TYPED_TEST(Monoids, MonoArena) {
+  typedef TypeParam Monoid;
+  typedef MonoArena<Monoid> Arena;
+
+  Monoid monoid(15);
+  Arena a(monoid);
+  a.push_back();
+  return;
+
+  testMonoVector<Monoid, MonoArena<Monoid>>();
+}
+
 TYPED_TEST(Monoids, ReadWriteMonoid) {
   typedef TypeParam Monoid;
   typedef typename Monoid::VarIndex VarIndex;
diff --git a/src/test/Range.cpp b/src/test/Range.cpp
index 593368b..474db10 100755
--- a/src/test/Range.cpp
+++ b/src/test/Range.cpp
@@ -173,7 +173,7 @@ TEST(Range, flatten) {
   v[2].push_back(3);
 
   std::ostringstream out;
-  for (const auto& i : flattenRange(v))
+  for (const auto& i : flatten(v))
     out << i << ' ';
   ASSERT_EQ("1 2 3 ", out.str());
 }
@@ -203,7 +203,7 @@ TEST(Range, flattenRecursive) {
   outer.back().emplace_back();
 
   std::ostringstream out;
-  for (const auto& i : flattenRange(flattenRange(outer)))
+  for (const auto& i : flatten(flatten(outer)))
     out << i << ' ';
   ASSERT_EQ("1 2 3 4 5 6 7 ", out.str());
 }
diff --git a/src/test/mathicgb.cpp b/src/test/mathicgb.cpp
index 9a811ef..4ace516 100755
--- a/src/test/mathicgb.cpp
+++ b/src/test/mathicgb.cpp
@@ -514,7 +514,7 @@ TEST(MathicGBLib, EarlyExit) {
     size_t minSize = check(useClassic, 1, Action::StopWithPartialOutputAction);
     size_t midSize = check(useClassic, 4, Action::StopWithPartialOutputAction);
     size_t maxSize = check(useClassic, 1, Action::ContinueAction);
-    ASSERT_LT(none, 35); // the stream writes a header even for no output
+    ASSERT_LT(none, 35u); // the stream writes a header even for no output
     ASSERT_LT(none, minSize);
     ASSERT_LT(minSize, midSize);
     ASSERT_LT(midSize, maxSize);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/mathicgb.git



More information about the debian-science-commits mailing list