Highlight: Added the workspace check, all cpp files are created via CMake and an implementation file and a macro
- Each operator now has a workspace function which returns the size of the workspace(s) needed. This function allows other operators (Helmholtz) to obtain the maximum workspace size for all operators used.
Note the implementation is based on passing the shape type, there are operators for each dimension. Previously I used the workspace function as a way to check the preconditions. That is now commented out but could still be used.
I created a macro for the instantiation of each operator and shape type. This makes it much easy for future maintenance.
Because of the long compile times cpp files were being created for each operator and shape type. To reduce the code maintenance I created an implementation file, OperatorImp.cpp.in which via CMakeList.txt now creates these files automatically using the macro above.